feat(llm): mask API keys in UI responses and prevent masked-key leakage in fetch/test/save payloads

- Add mask_api_key() and is_masked_or_placeholder() to llm_provider service
- Return masked keys in all provider CRUD endpoints
- Reject masked/placeholder keys in fetch_models and test_provider_config
- Show masked key with Change button in ProviderConfig.svelte edit form
- Exclude masked keys from fetch-models, test, and submit payloads on frontend
- Update semantics-core skill with clarified complexity tier rules
- Switch agent modes from subagent to all
This commit is contained in:
2026-05-15 23:34:09 +03:00
parent b3572ce443
commit 30ba70933d
203 changed files with 158083 additions and 28396 deletions

View File

@@ -0,0 +1,188 @@
{
"/v2/team/list": {
"get": {
"tags": [
"team management"
],
"summary": "List Team V2",
"description": "Get a paginated list of teams with filtering and sorting options.\n\nParameters:\n user_id: Optional[str]\n Only return teams which this user belongs to\n organization_id: Optional[str]\n Only return teams which belong to this organization\n team_id: Optional[str]\n Filter teams by exact team_id match\n team_alias: Optional[str]\n Filter teams by partial team_alias match\n page: int\n The page number to return\n page_size: int\n The number of items per page\n sort_by: Optional[str]\n Column to sort by (e.g. 'team_id', 'team_alias', 'created_at')\n sort_order: str\n Sort order ('asc' or 'desc')\n status: Optional[str]\n Filter by status. Currently supports \"deleted\" to query deleted teams.",
"operationId": "list_team_v2_v2_team_list_get",
"security": [
{
"APIKeyHeader": []
}
],
"parameters": [
{
"name": "user_id",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Only return teams which this 'user_id' belongs to",
"title": "User Id"
},
"description": "Only return teams which this 'user_id' belongs to"
},
{
"name": "organization_id",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Only return teams which this 'organization_id' belongs to",
"title": "Organization Id"
},
"description": "Only return teams which this 'organization_id' belongs to"
},
{
"name": "team_id",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Only return teams which this 'team_id' belongs to",
"title": "Team Id"
},
"description": "Only return teams which this 'team_id' belongs to"
},
{
"name": "team_alias",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Only return teams which this 'team_alias' belongs to. Supports partial matching.",
"title": "Team Alias"
},
"description": "Only return teams which this 'team_alias' belongs to. Supports partial matching."
},
{
"name": "page",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"description": "Page number for pagination",
"default": 1,
"title": "Page"
},
"description": "Page number for pagination"
},
{
"name": "page_size",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of teams per page",
"default": 10,
"title": "Page Size"
},
"description": "Number of teams per page"
},
{
"name": "sort_by",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Column to sort by (e.g. 'team_id', 'team_alias', 'created_at')",
"title": "Sort By"
},
"description": "Column to sort by (e.g. 'team_id', 'team_alias', 'created_at')"
},
{
"name": "sort_order",
"in": "query",
"required": false,
"schema": {
"type": "string",
"description": "Sort order ('asc' or 'desc')",
"default": "asc",
"title": "Sort Order"
},
"description": "Sort order ('asc' or 'desc')"
},
{
"name": "status",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Filter by status (e.g. 'deleted')",
"title": "Status"
},
"description": "Filter by status (e.g. 'deleted')"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TeamListResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
}
}