Add a public subscription plan list endpoint that can be accessed without authentication. Enhance the returned subscription plan information fields, including multi-language support and default free plan fallback logic. Additionally, implement automatic model binding for the knowledge base service.
When deleting an API Key, check if the associated model configuration has other active keys; if not, automatically set it to inactive.
Also optimize the model configuration query method to support multi-type queries and add sorting conditions.
* release/v0.3.0: (44 commits)
Revert "fix(web): prompt editor"
fix(web): prompt editor
fix(prompt-optimizer): handle escaped quotes in JSON parsing
fix(custom-tools): remove parameter coercion in custom tool base class
fix(core): conditionally apply thinking parameters based on model support
refactor(custom-tools): coerce query and request body parameters to schema types
fix(prompt-optimizer): support list content type in prompt optimizer
refactor(memory): unify user placeholder names and harden alias sync logic
fix(rag): replace semicolon separators with newlines in Excel parser output
fix(web): Compatible with Windows whitespace
fix(memory): make PgSQL the single source of truth for user entity aliases
refactor(rag): simplify Excel parsing logic and remove redundant chunk_token_num assignment
fix(web): Hide error message when workflow node error message equals empty string
ci(wechat-notify): add Sourcery summary extraction with Qwen fallback
fix(http-request,embedding,naive): tighten form-data validation, reduce truncation length to 8000, and disable chunking for Excel
fix(web): adjust the value of End User Name
fix(http-request): support array and file variables in form-data files upload
fix(web): change http body key name
fix(web): header user name
fix(web): calculate using the filtered breadcrumbs length
...
# Conflicts:
# web/src/views/UserMemoryDetail/Neo4j.tsx
# web/src/views/UserMemoryDetail/components/EndUserProfile.tsx
# web/src/views/UserMemoryDetail/types.ts
- Add `default_free_plan.py` to define the configuration for the Community Free Plan.
- Refactor `quota_stub.py` as a unified entry point, delegating checks to `core/quota_manager`.
- Implement core logic in `quota_manager.py` to support retrieving quotas from the premium module or configuration files.
- Update `tenant_subscription_controller` to return Community Free Plan information.
- Replace hardcoded user placeholder name lists in write_tools and
user_memory_service with shared _USER_PLACEHOLDER_NAMES constant
- Filter user placeholder names during alias merging in _merge_attribute
to prevent cross-role alias contamination on non-user entities
- Use toLower() in Cypher query for case-insensitive name matching
- Change PgSQL->Neo4j alias sync condition from 'if pg_aliases' to
'if info is not None' so empty aliases correctly clear stale data
- Skip alias merging for user entities during dedup (_merge_attribute and
_merge_entities_with_aliases) to prevent dirty data from overwriting
PgSQL authoritative aliases
- Add PgSQL→Neo4j alias sync after Neo4j write in write_tools to
ensure Neo4j user entities always reflect the PgSQL source
- Remove deduped_aliases (Neo4j history) from alias sync in
extraction_orchestrator, only append newly extracted aliases to PgSQL
- Guard Neo4j MERGE cypher to preserve existing aliases for user
entities (name IN ['用户','我','User','I'])
- Fix emotion_analytics_service query to use ExtractedEntity label
and entity_type property