mirror of
https://github.com/turnstonelabs/turnstone.git
synced 2026-08-12 23:12:23 -06:00
98e96ab5f3
* feat(models): add per-alias concurrency admission Add registry-backed FIFO admission limits with queue-aware deadlines and full-stream leases. Expose max_concurrency through storage, admin configuration, OpenAPI, documentation, and diagrams, with role and live backend count coverage. * fix(api): omit null concurrency schema default Keep max_concurrency optional for presence-keyed updates without advertising a null default for its non-null integer OpenAPI shape.
15204 lines
404 KiB
JSON
15204 lines
404 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "turnstone Console API",
|
|
"version": "1.8.0a6",
|
|
"description": "Cluster-wide visibility and control across all turnstone nodes."
|
|
},
|
|
"paths": {
|
|
"/v1/api/cluster/overview": {
|
|
"get": {
|
|
"summary": "Cluster state summary",
|
|
"operationId": "v1_api_cluster_overview_get",
|
|
"tags": [
|
|
"Cluster"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ClusterOverviewResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/nodes": {
|
|
"get": {
|
|
"summary": "Paginated node list",
|
|
"operationId": "v1_api_cluster_nodes_get",
|
|
"tags": [
|
|
"Cluster"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "sort",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"default": "activity",
|
|
"enum": [
|
|
"activity",
|
|
"tokens",
|
|
"name"
|
|
]
|
|
},
|
|
"description": "Sort field"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 100
|
|
},
|
|
"description": "Page size"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Pagination offset"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ClusterNodesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/workstreams": {
|
|
"get": {
|
|
"summary": "Filtered workstream list",
|
|
"operationId": "v1_api_cluster_workstreams_get",
|
|
"tags": [
|
|
"Cluster"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "state",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": [
|
|
"running",
|
|
"thinking",
|
|
"attention",
|
|
"idle",
|
|
"error"
|
|
]
|
|
},
|
|
"description": "Filter by state"
|
|
},
|
|
{
|
|
"name": "node",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by node_id"
|
|
},
|
|
{
|
|
"name": "search",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search in name/title/node"
|
|
},
|
|
{
|
|
"name": "sort",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"default": "state",
|
|
"enum": [
|
|
"state",
|
|
"tokens",
|
|
"name"
|
|
]
|
|
},
|
|
"description": "Sort field"
|
|
},
|
|
{
|
|
"name": "page",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 1
|
|
},
|
|
"description": "Page number"
|
|
},
|
|
{
|
|
"name": "per_page",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50
|
|
},
|
|
"description": "Items per page (max 200)"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ClusterWorkstreamsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/node/{node_id}": {
|
|
"get": {
|
|
"summary": "Single node detail",
|
|
"operationId": "v1_api_cluster_node_{node_id}_get",
|
|
"tags": [
|
|
"Cluster"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "node_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/NodeDetailResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/workstreams/new": {
|
|
"post": {
|
|
"summary": "Create workstream via HTTP dispatch",
|
|
"operationId": "v1_api_cluster_workstreams_new_post",
|
|
"tags": [
|
|
"Cluster"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ConsoleCreateWsRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ConsoleCreateWsResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/snapshot": {
|
|
"get": {
|
|
"summary": "Full cluster state snapshot",
|
|
"operationId": "v1_api_cluster_snapshot_get",
|
|
"tags": [
|
|
"Cluster"
|
|
],
|
|
"description": "Returns the complete cluster state: all nodes with their workstreams and overview aggregates. Used for initial load and reconnection.",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ClusterSnapshotResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/events": {
|
|
"get": {
|
|
"summary": "Cluster SSE event stream",
|
|
"operationId": "v1_api_cluster_events_get",
|
|
"tags": [
|
|
"Streaming"
|
|
],
|
|
"description": "Server-Sent Events stream for real-time cluster updates. First event is a 'snapshot' with full cluster state, followed by node_joined, node_lost, cluster_state, ws_created, ws_closed, ws_rename events.",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/login": {
|
|
"post": {
|
|
"summary": "Authenticate with a token",
|
|
"operationId": "v1_api_auth_login_post",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthLoginRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthLoginResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Error 401",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/setup": {
|
|
"post": {
|
|
"summary": "Create first admin user",
|
|
"operationId": "v1_api_auth_setup_post",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthSetupRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthSetupResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/status": {
|
|
"get": {
|
|
"summary": "Return auth state",
|
|
"operationId": "v1_api_auth_status_get",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthStatusResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/logout": {
|
|
"post": {
|
|
"summary": "Clear auth cookie",
|
|
"operationId": "v1_api_auth_logout_post",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/oidc/authorize": {
|
|
"get": {
|
|
"summary": "Redirect to OIDC provider for SSO login",
|
|
"operationId": "v1_api_auth_oidc_authorize_get",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"responses": {
|
|
"302": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/oidc/callback": {
|
|
"get": {
|
|
"summary": "OIDC callback \u2014 validates code, provisions user, sets JWT cookie, redirects to app",
|
|
"operationId": "v1_api_auth_oidc_callback_get",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"responses": {
|
|
"302": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/auth/whoami": {
|
|
"get": {
|
|
"summary": "Return authenticated user info and permissions",
|
|
"operationId": "v1_api_auth_whoami_get",
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthWhoamiResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Error 401",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users": {
|
|
"get": {
|
|
"summary": "List all users",
|
|
"operationId": "v1_api_admin_users_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListUsersResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a user",
|
|
"operationId": "v1_api_admin_users_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateUserRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserInfo"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users/{user_id}": {
|
|
"delete": {
|
|
"summary": "Delete a user and their tokens",
|
|
"operationId": "v1_api_admin_users_{user_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users/{user_id}/tokens": {
|
|
"get": {
|
|
"summary": "List tokens for a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_tokens_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListTokensResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create an API token (raw token shown once)",
|
|
"operationId": "v1_api_admin_users_{user_id}_tokens_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateTokenRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateTokenResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/tokens/{token_id}": {
|
|
"delete": {
|
|
"summary": "Revoke an API token",
|
|
"operationId": "v1_api_admin_tokens_{token_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "token_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users/{user_id}/channels": {
|
|
"get": {
|
|
"summary": "List channel links for a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_channels_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListChannelUsersResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Link a channel account to a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_channels_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateChannelUserRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ChannelUserInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/channels/{channel_type}/{channel_user_id}": {
|
|
"delete": {
|
|
"summary": "Unlink a channel account",
|
|
"operationId": "v1_api_admin_channels_{channel_type}_{channel_user_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "channel_type",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "channel_user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users/{user_id}/oidc-identities": {
|
|
"get": {
|
|
"summary": "List OIDC identities linked to a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_oidc-identities_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/oidc-identities": {
|
|
"delete": {
|
|
"summary": "Unlink an OIDC identity (issuer + subject as query params)",
|
|
"operationId": "v1_api_admin_oidc-identities_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/schedules": {
|
|
"get": {
|
|
"summary": "List all scheduled tasks",
|
|
"operationId": "v1_api_admin_schedules_get",
|
|
"tags": [
|
|
"Schedules"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSchedulesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a scheduled task",
|
|
"operationId": "v1_api_admin_schedules_post",
|
|
"tags": [
|
|
"Schedules"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateScheduleRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ScheduleInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/schedules/{task_id}": {
|
|
"get": {
|
|
"summary": "Get a scheduled task",
|
|
"operationId": "v1_api_admin_schedules_{task_id}_get",
|
|
"tags": [
|
|
"Schedules"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "task_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ScheduleInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update a scheduled task",
|
|
"operationId": "v1_api_admin_schedules_{task_id}_put",
|
|
"tags": [
|
|
"Schedules"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "task_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateScheduleRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ScheduleInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a scheduled task",
|
|
"operationId": "v1_api_admin_schedules_{task_id}_delete",
|
|
"tags": [
|
|
"Schedules"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "task_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/schedules/{task_id}/runs": {
|
|
"get": {
|
|
"summary": "List run history for a scheduled task",
|
|
"operationId": "v1_api_admin_schedules_{task_id}_runs_get",
|
|
"tags": [
|
|
"Schedules"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "task_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50
|
|
},
|
|
"description": "Max results (default 50, max 200)"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListScheduleRunsResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/roles": {
|
|
"get": {
|
|
"summary": "List all roles",
|
|
"operationId": "v1_api_admin_roles_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListRolesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a custom role",
|
|
"operationId": "v1_api_admin_roles_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateRoleRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/roles/{role_id}": {
|
|
"put": {
|
|
"summary": "Update a role",
|
|
"operationId": "v1_api_admin_roles_{role_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "role_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateRoleRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a custom role",
|
|
"operationId": "v1_api_admin_roles_{role_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "role_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/roles/{role_id}/effective": {
|
|
"get": {
|
|
"summary": "Get effective permissions for a role (baseline + overrides)",
|
|
"operationId": "v1_api_admin_roles_{role_id}_effective_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "role_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleEffectiveResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/roles/{role_id}/overrides": {
|
|
"put": {
|
|
"summary": "Replace the grant/revoke override set for a builtin role",
|
|
"operationId": "v1_api_admin_roles_{role_id}_overrides_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "role_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleOverridesRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleEffectiveResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users/{user_id}/roles": {
|
|
"get": {
|
|
"summary": "List roles assigned to a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_roles_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListUserRolesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Assign a role to a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_roles_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AssignRoleRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/users/{user_id}/roles/{role_id}": {
|
|
"delete": {
|
|
"summary": "Unassign a role from a user",
|
|
"operationId": "v1_api_admin_users_{user_id}_roles_{role_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "user_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "role_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/orgs": {
|
|
"get": {
|
|
"summary": "List organizations",
|
|
"operationId": "v1_api_admin_orgs_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListOrgsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/orgs/{org_id}": {
|
|
"get": {
|
|
"summary": "Get organization details",
|
|
"operationId": "v1_api_admin_orgs_{org_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OrgInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update organization settings",
|
|
"operationId": "v1_api_admin_orgs_{org_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateOrgRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OrgInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/policies": {
|
|
"get": {
|
|
"summary": "List tool policies",
|
|
"operationId": "v1_api_admin_policies_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListToolPoliciesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a tool policy",
|
|
"operationId": "v1_api_admin_policies_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateToolPolicyRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ToolPolicyInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/policies/{policy_id}": {
|
|
"put": {
|
|
"summary": "Update a tool policy",
|
|
"operationId": "v1_api_admin_policies_{policy_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateToolPolicyRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ToolPolicyInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a tool policy",
|
|
"operationId": "v1_api_admin_policies_{policy_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/discover": {
|
|
"get": {
|
|
"summary": "Search external skill registries for available skills",
|
|
"operationId": "v1_api_admin_skills_discover_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "q",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Max results (default 20, max 100)"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillDiscoverResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/install": {
|
|
"post": {
|
|
"summary": "Install skill(s) from an external source",
|
|
"operationId": "v1_api_admin_skills_install_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillInstallRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillInstallResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/parse": {
|
|
"post": {
|
|
"summary": "Parse a SKILL.md document and return its frontmatter fields and body",
|
|
"operationId": "v1_api_admin_skills_parse_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ParseSkillRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ParseSkillResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"413": {
|
|
"description": "Error 413",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills": {
|
|
"get": {
|
|
"summary": "List skills",
|
|
"operationId": "v1_api_admin_skills_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSkillsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a skill",
|
|
"operationId": "v1_api_admin_skills_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSkillRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/{skill_id}": {
|
|
"get": {
|
|
"summary": "Get a skill by ID",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update a skill",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateSkillRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a skill",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/{skill_id}/versions": {
|
|
"get": {
|
|
"summary": "List version history for a skill",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_versions_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSkillVersionsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/models": {
|
|
"get": {
|
|
"summary": "List enabled model aliases for workstream creation",
|
|
"operationId": "v1_api_models_get",
|
|
"tags": [
|
|
"Models"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListAvailableModelsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/skills": {
|
|
"get": {
|
|
"summary": "List available skills (summary)",
|
|
"operationId": "v1_api_skills_get",
|
|
"tags": [
|
|
"Skills"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSkillSummaryResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/usage": {
|
|
"get": {
|
|
"summary": "Aggregated usage data",
|
|
"operationId": "v1_api_admin_usage_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "since",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Start timestamp (ISO8601, defaults to last 7 days)"
|
|
},
|
|
{
|
|
"name": "until",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "End timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "user_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by user"
|
|
},
|
|
{
|
|
"name": "model",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by model"
|
|
},
|
|
{
|
|
"name": "group_by",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": [
|
|
"day",
|
|
"hour",
|
|
"model",
|
|
"user"
|
|
]
|
|
},
|
|
"description": "Group results"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UsageResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/audit": {
|
|
"get": {
|
|
"summary": "Paginated audit events",
|
|
"operationId": "v1_api_admin_audit_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "action",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by action type"
|
|
},
|
|
{
|
|
"name": "user_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by user"
|
|
},
|
|
{
|
|
"name": "since",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Start timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "until",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "End timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50
|
|
},
|
|
"description": "Page size"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Pagination offset"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListAuditEventsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/verdicts": {
|
|
"get": {
|
|
"summary": "Paginated intent verdicts",
|
|
"operationId": "v1_api_admin_verdicts_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by workstream"
|
|
},
|
|
{
|
|
"name": "since",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Start timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "until",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "End timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "risk_level",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": [
|
|
"low",
|
|
"medium",
|
|
"high",
|
|
"critical"
|
|
]
|
|
},
|
|
"description": "Filter by risk level"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 100
|
|
},
|
|
"description": "Page size (max 500)"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Pagination offset"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListVerdictsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/output-assessments": {
|
|
"get": {
|
|
"summary": "Paginated output guard assessments",
|
|
"operationId": "v1_api_admin_output-assessments_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by workstream"
|
|
},
|
|
{
|
|
"name": "risk_level",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": [
|
|
"low",
|
|
"medium",
|
|
"high"
|
|
]
|
|
},
|
|
"description": "Filter by risk level"
|
|
},
|
|
{
|
|
"name": "since",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Start timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "until",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "End timestamp (ISO8601)"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 100
|
|
},
|
|
"description": "Page size (max 500)"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Pagination offset"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListOutputAssessmentsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/{skill_id}/rescan": {
|
|
"post": {
|
|
"summary": "Re-scan a skill for security signals",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_rescan_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/{skill_id}/unlock": {
|
|
"post": {
|
|
"summary": "Unlock a readonly (installed) skill so spec fields and resources can be edited",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_unlock_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/{skill_id}/resources": {
|
|
"get": {
|
|
"summary": "List resource files for a skill",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_resources_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSkillResourcesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Upload a resource file to a skill",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_resources_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSkillResourceRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillResourceInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/skills/{skill_id}/resources/{path}": {
|
|
"get": {
|
|
"summary": "Get a single skill resource by path",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_resources_{path}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "path",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkillResourceInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a skill resource by path",
|
|
"operationId": "v1_api_admin_skills_{skill_id}_resources_{path}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "skill_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "path",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/memories": {
|
|
"get": {
|
|
"summary": "List structured memories",
|
|
"operationId": "v1_api_admin_memories_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "type",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by memory type"
|
|
},
|
|
{
|
|
"name": "scope",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by scope"
|
|
},
|
|
{
|
|
"name": "scope_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by scope identifier"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 100
|
|
},
|
|
"description": "Page size (max 200)"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListAdminMemoriesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/memories/search": {
|
|
"get": {
|
|
"summary": "Search memories by query",
|
|
"operationId": "v1_api_admin_memories_search_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "q",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "type",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by memory type"
|
|
},
|
|
{
|
|
"name": "scope",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by scope"
|
|
},
|
|
{
|
|
"name": "scope_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Filter by scope identifier"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 20
|
|
},
|
|
"description": "Max results"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListAdminMemoriesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/memories/{memory_id}": {
|
|
"get": {
|
|
"summary": "Get a single memory by ID",
|
|
"operationId": "v1_api_admin_memories_{memory_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "memory_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AdminMemoryInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a memory by ID",
|
|
"operationId": "v1_api_admin_memories_{memory_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "memory_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/settings": {
|
|
"get": {
|
|
"summary": "List all settings with effective values",
|
|
"operationId": "v1_api_admin_settings_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "reveal",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean"
|
|
},
|
|
"description": "Show secret values in plaintext"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSettingsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/settings/schema": {
|
|
"get": {
|
|
"summary": "Return the full settings registry schema",
|
|
"operationId": "v1_api_admin_settings_schema_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListSettingSchemaResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/settings/{key}": {
|
|
"put": {
|
|
"summary": "Set a configuration setting value",
|
|
"operationId": "v1_api_admin_settings_{key}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "key",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateSettingRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SettingInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Reset a setting to its default value",
|
|
"operationId": "v1_api_admin_settings_{key}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "key",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "node_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Node ID for node-scoped settings"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteSettingResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/mcp-registry/search": {
|
|
"get": {
|
|
"summary": "Search the MCP Registry for available servers",
|
|
"operationId": "v1_api_admin_mcp-registry_search_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "search",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Max results (default 20, max 100)"
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Pagination cursor for next page"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RegistrySearchResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/mcp-registry/install": {
|
|
"post": {
|
|
"summary": "Install an MCP server from the registry",
|
|
"operationId": "v1_api_admin_mcp-registry_install_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RegistryInstallRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/McpServerDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/mcp-servers": {
|
|
"get": {
|
|
"summary": "List MCP server definitions with live status",
|
|
"operationId": "v1_api_admin_mcp-servers_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "reveal",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean"
|
|
},
|
|
"description": "Show secret env/header values"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListMcpServersResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create an MCP server definition",
|
|
"operationId": "v1_api_admin_mcp-servers_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateMcpServerRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/McpServerDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/mcp-servers/{server_id}": {
|
|
"get": {
|
|
"summary": "Get a single MCP server with status",
|
|
"operationId": "v1_api_admin_mcp-servers_{server_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "server_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/McpServerDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update an MCP server definition",
|
|
"operationId": "v1_api_admin_mcp-servers_{server_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "server_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateMcpServerRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/McpServerDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete an MCP server definition",
|
|
"operationId": "v1_api_admin_mcp-servers_{server_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "server_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/mcp-servers/reload": {
|
|
"post": {
|
|
"summary": "Tell all nodes to re-read MCP server config from DB and reconcile",
|
|
"operationId": "v1_api_admin_mcp-servers_reload_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/McpReloadResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/mcp-servers/import": {
|
|
"post": {
|
|
"summary": "Import MCP servers from a JSON config file",
|
|
"operationId": "v1_api_admin_mcp-servers_import_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ImportMcpConfigRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ImportMcpConfigResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-definitions": {
|
|
"get": {
|
|
"summary": "List model definitions with live status from cluster nodes",
|
|
"operationId": "v1_api_admin_model-definitions_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListModelDefinitionsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a model definition",
|
|
"operationId": "v1_api_admin_model-definitions_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateModelDefinitionRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModelDefinitionWriteResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-definitions/auth-constraints": {
|
|
"get": {
|
|
"summary": "Dynamic-auth affordance data for the model editor (requires admin.mcp)",
|
|
"operationId": "v1_api_admin_model-definitions_auth-constraints_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModelAuthConstraintsResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-definitions/reload": {
|
|
"post": {
|
|
"summary": "Tell all nodes to re-read model definitions from DB and rebuild registry",
|
|
"operationId": "v1_api_admin_model-definitions_reload_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModelReloadResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-definitions/{definition_id}": {
|
|
"get": {
|
|
"summary": "Get a single model definition",
|
|
"operationId": "v1_api_admin_model-definitions_{definition_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "definition_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModelDefinitionInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update a model definition",
|
|
"operationId": "v1_api_admin_model-definitions_{definition_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "definition_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateModelDefinitionRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModelDefinitionWriteResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a model definition",
|
|
"operationId": "v1_api_admin_model-definitions_{definition_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "definition_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteModelDefinitionResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-definitions/detect": {
|
|
"post": {
|
|
"summary": "Probe a model endpoint: verify reachability, list models, detect context window and server type",
|
|
"operationId": "v1_api_admin_model-definitions_detect_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DetectModelRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DetectModelResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-definitions/{definition_id}/calibrate": {
|
|
"post": {
|
|
"summary": "Calibrate a reranker model definition and persist its per-model floor",
|
|
"operationId": "v1_api_admin_model-definitions_{definition_id}_calibrate_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "definition_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CalibrateModelResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-capabilities": {
|
|
"get": {
|
|
"summary": "Look up static capabilities for a known model",
|
|
"operationId": "v1_api_admin_model-capabilities_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "provider",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Provider name"
|
|
},
|
|
{
|
|
"name": "model",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Model ID to look up"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModelCapabilitiesResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/model-capabilities/known": {
|
|
"get": {
|
|
"summary": "List known model name prefixes for a provider",
|
|
"operationId": "v1_api_admin_model-capabilities_known_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "provider",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Provider name"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/KnownModelsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/prompt-policies": {
|
|
"get": {
|
|
"summary": "List all prompt policies for system message composition",
|
|
"operationId": "v1_api_admin_prompt-policies_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a prompt policy",
|
|
"operationId": "v1_api_admin_prompt-policies_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/prompt-policies/{policy_id}": {
|
|
"get": {
|
|
"summary": "Get a single prompt policy",
|
|
"operationId": "v1_api_admin_prompt-policies_{policy_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update a prompt policy",
|
|
"operationId": "v1_api_admin_prompt-policies_{policy_id}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a prompt policy",
|
|
"operationId": "v1_api_admin_prompt-policies_{policy_id}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/personas": {
|
|
"get": {
|
|
"summary": "List all personas, archived included",
|
|
"operationId": "v1_api_admin_personas_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListPersonasResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create a persona",
|
|
"operationId": "v1_api_admin_personas_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreatePersonaRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PersonaInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/personas/{persona_id}": {
|
|
"get": {
|
|
"summary": "Get a single persona",
|
|
"operationId": "v1_api_admin_personas_{persona_id}_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "persona_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PersonaInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"summary": "Update a persona (edit levers, archive/unarchive, flip default)",
|
|
"operationId": "v1_api_admin_personas_{persona_id}_patch",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "persona_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdatePersonaRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PersonaInfo"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/node-metadata": {
|
|
"get": {
|
|
"summary": "Get metadata for all nodes (bulk)",
|
|
"operationId": "v1_api_admin_node-metadata_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/nodes/{node_id}/metadata": {
|
|
"get": {
|
|
"summary": "Get all metadata for a node",
|
|
"operationId": "v1_api_admin_nodes_{node_id}_metadata_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "node_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/NodeMetadataResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Bulk set user metadata for a node",
|
|
"operationId": "v1_api_admin_nodes_{node_id}_metadata_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "node_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BulkSetNodeMetadataRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/nodes/{node_id}/metadata/{key}": {
|
|
"put": {
|
|
"summary": "Set a single metadata key for a node",
|
|
"operationId": "v1_api_admin_nodes_{node_id}_metadata_{key}_put",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "node_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "key",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetNodeMetadataValueRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a single metadata key for a node",
|
|
"operationId": "v1_api_admin_nodes_{node_id}_metadata_{key}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "node_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "key",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/tls/ca": {
|
|
"get": {
|
|
"summary": "CA status: initialization state, CN, cert count, cert inventory",
|
|
"operationId": "v1_api_admin_tls_ca_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/tls/ca.pem": {
|
|
"get": {
|
|
"summary": "Download CA root certificate (PEM format)",
|
|
"operationId": "v1_api_admin_tls_ca.pem_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/tls/certs": {
|
|
"get": {
|
|
"summary": "List all issued TLS certificates",
|
|
"operationId": "v1_api_admin_tls_certs_get",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/tls/certs/{domain}/renew": {
|
|
"post": {
|
|
"summary": "Force-renew a certificate by domain",
|
|
"operationId": "v1_api_admin_tls_certs_{domain}_renew_post",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "domain",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/admin/tls/certs/{domain}": {
|
|
"delete": {
|
|
"summary": "Delete a certificate by domain",
|
|
"operationId": "v1_api_admin_tls_certs_{domain}_delete",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "domain",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/new": {
|
|
"post": {
|
|
"summary": "Create workstream via rendezvous routing proxy",
|
|
"operationId": "v1_api_route_workstreams_new_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"description": "The documented JSON form accepts RouteCreateRequest. The endpoint also accepts multipart/form-data with a JSON `meta` field and file parts; multipart callers must supply `ws_id` as a query parameter; the console requires the cached `meta.ws_id` to match before forwarding the original body. A JSON body may instead carry an explicit `ws_id`; the console preserves it and uses it as the rendezvous placement key. `resume_ws` accepts an id or saved alias and is resolved to the canonical source id before an atomic fork is routed.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "32-hex rendezvous key required for multipart creates. JSON callers put an optional destination ws_id in the request body."
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RouteCreateRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RouteCreateResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"413": {
|
|
"description": "Error 413",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Error 429",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/live": {
|
|
"get": {
|
|
"summary": "Probe whether a routed workstream is loaded without rehydrating it",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_live_get",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"description": "Routes to the workstream's rendezvous owner and checks its manager-authoritative active list. The response does not expose workstream metadata; missing, unloaded, creating, and caller-invisible rows all report ``live=false``. Routing and upstream uncertainty fail with an error rather than reporting a false miss.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RouteLiveResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/send": {
|
|
"post": {
|
|
"summary": "Proxy send to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_send_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SendRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SendResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Proxy queued-message cancellation to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_send_delete",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DequeueRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/approve": {
|
|
"post": {
|
|
"summary": "Proxy approve to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_approve_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ApproveRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ApproveResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/cancel": {
|
|
"post": {
|
|
"summary": "Proxy cancel to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_cancel_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CancelRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CancelResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/command": {
|
|
"post": {
|
|
"summary": "Proxy command to routed node",
|
|
"operationId": "v1_api_route_command_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/close": {
|
|
"post": {
|
|
"summary": "Proxy workstream close to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_close_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CloseWorkstreamRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/rewind": {
|
|
"post": {
|
|
"summary": "Proxy conversation rewind to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_rewind_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RewindRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route/workstreams/{ws_id}/retry": {
|
|
"post": {
|
|
"summary": "Proxy last-turn retry to routed node",
|
|
"operationId": "v1_api_route_workstreams_{ws_id}_retry_post",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"502": {
|
|
"description": "Error 502",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/route": {
|
|
"get": {
|
|
"summary": "Look up which node owns a workstream",
|
|
"operationId": "v1_api_route_get",
|
|
"tags": [
|
|
"Routing"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Workstream ID to look up"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RouteResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/new": {
|
|
"post": {
|
|
"summary": "Create a new coordinator workstream",
|
|
"operationId": "v1_api_workstreams_new_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Allocates a console-hosted ``kind=\"coordinator\"`` ChatSession. 200 on create; 429 when the ``coordinator.max_active`` cap is reached and no idle coordinator can be evicted. Pre-1.5.0 this returned 201; the lifted ``create`` factory (Stage 2 verb lift) converges on 200 across both kinds.",
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorCreateRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorCreateResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Error 401",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Error 429",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams": {
|
|
"get": {
|
|
"summary": "List coordinator workstreams visible to the caller",
|
|
"operationId": "v1_api_workstreams_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Returns coordinators owned by the caller. Callers with ``admin.system`` see every coordinator across tenants.",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListWorkstreamsResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}": {
|
|
"get": {
|
|
"summary": "Get coordinator detail (rehydrates lazily on miss)",
|
|
"operationId": "v1_api_workstreams_{ws_id}_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Returns the persisted coordinator's display fields. If the session isn't currently in memory the manager rehydrates it before responding; ``500`` on rehydrate failure carries a correlation id matching the server log line.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/WorkstreamDetailResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/open": {
|
|
"post": {
|
|
"summary": "Open (rehydrate) a coordinator workstream by ws_id",
|
|
"operationId": "v1_api_workstreams_{ws_id}_open_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Parity with ``POST /v1/api/workstreams/{ws_id}/open`` \u2014 gives SDK callers and operators a way to warm a coordinator without browsing to it. Idempotent: ``already_loaded=true`` when the session was already in memory.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorOpenResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/send": {
|
|
"delete": {
|
|
"summary": "Cancel a queued coordinator message",
|
|
"operationId": "v1_api_workstreams_{ws_id}_send_delete",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Removes a previously-queued message identified by ``msg_id`` from the coordinator session's pending queue. Returns ``status: removed`` when the queue had the entry, ``status: not_found`` otherwise. Reservations attached to the dequeued message are released so the attachments can be reused \u2014 parity with the interactive surface.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DequeueRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Queue a user message onto the coordinator session",
|
|
"operationId": "v1_api_workstreams_{ws_id}_send_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Worker thread picks up the message via the session's queue. Optional ``attachment_ids`` select staged uploads to attach to the message (parity with the interactive surface). Response carries ``attached_ids`` / ``dropped_attachment_ids`` so callers can detect partial attaches and ``priority`` / ``msg_id`` on the queued path. ``status: queue_full`` when the worker queue is full \u2014 caller should back off.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorSendRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorSendResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/attachments": {
|
|
"post": {
|
|
"summary": "Upload a file attachment to a coordinator workstream",
|
|
"operationId": "v1_api_workstreams_{ws_id}_attachments_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Multipart upload (field ``file``). Same validation rules as the interactive surface: magic-byte image sniff, UTF-8 text decode, per-kind size cap, per-(ws,user) pending cap. Attachments stay pending until a subsequent ``/send`` attaches them to a message.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UploadAttachmentResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"413": {
|
|
"description": "Error 413",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"summary": "List the caller's pending coordinator attachments",
|
|
"operationId": "v1_api_workstreams_{ws_id}_attachments_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ListAttachmentsResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/attachments/{attachment_id}/content": {
|
|
"get": {
|
|
"summary": "Return raw bytes of a coordinator attachment",
|
|
"operationId": "v1_api_workstreams_{ws_id}_attachments_{attachment_id}_content_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Same byte-stream + headers as the interactive surface. Text kinds are forced to ``text/plain`` so an HTML-shaped text upload can't render same-origin.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "attachment_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/attachments/{attachment_id}": {
|
|
"delete": {
|
|
"summary": "Remove a pending coordinator attachment",
|
|
"operationId": "v1_api_workstreams_{ws_id}_attachments_{attachment_id}_delete",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Consumed attachments return 404.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "attachment_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/approve": {
|
|
"post": {
|
|
"summary": "Resolve a pending tool approval on the coordinator session",
|
|
"operationId": "v1_api_workstreams_{ws_id}_approve_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Approves or denies the pending tool call(s). Set ``always`` to True to also add the pending tool name(s) to the session's auto-approve set so subsequent calls of the same tool skip the prompt.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorApproveRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ApproveResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/cancel": {
|
|
"post": {
|
|
"summary": "Cancel in-flight generation on the coordinator session",
|
|
"operationId": "v1_api_workstreams_{ws_id}_cancel_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Cooperatively stops the active generation and resolves every pending approval cycle. Set ``force=true`` to retire a stuck worker immediately. The response includes a redacted snapshot of work dropped by the cancellation.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CancelRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CancelResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/rewind": {
|
|
"post": {
|
|
"summary": "Drop the last N conversation turns on the coordinator (emits clear_ui)",
|
|
"operationId": "v1_api_workstreams_{ws_id}_rewind_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Truncates the coordinator conversation by N turns via the shared rewind handler and emits ``clear_ui`` so the dashboard re-fetches the truncated history. Gated on ``admin.coordinator``.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RewindRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/retry": {
|
|
"post": {
|
|
"summary": "Re-send the last user message on the coordinator for a fresh response",
|
|
"operationId": "v1_api_workstreams_{ws_id}_retry_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Drops the last response and re-sends the last user message via the shared worker dispatch, emitting ``clear_ui``. Gated on ``admin.coordinator``.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/close": {
|
|
"post": {
|
|
"summary": "Soft-close the coordinator (unload from memory; storage preserved)",
|
|
"operationId": "v1_api_workstreams_{ws_id}_close_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Releases the worker thread + UI listeners and marks the row ``state=closed`` in storage. The row remains queryable (audit / history) but cannot be reopened \u2014 a closed coordinator is terminal from the manager's perspective.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/events": {
|
|
"get": {
|
|
"summary": "Subscribe to the coordinator's SSE event stream",
|
|
"operationId": "v1_api_workstreams_{ws_id}_events_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Server-Sent Events stream carrying ``status``, ``message``, ``tool_call``, ``tool_result``, ``approval``, ``error``, and the phase-3 ``child_ws_*`` fan-out events. Pings every 5s. Body is text/event-stream \u2014 the response schema is omitted from the catalog because OpenAPI 3.1 has no first-class SSE type.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Error 409",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/history": {
|
|
"get": {
|
|
"summary": "Read the coordinator's reconstructed message history",
|
|
"operationId": "v1_api_workstreams_{ws_id}_history_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Returns the tail of the conversation in OpenAI-like message format. Used by the page-load handshake; SSE handles updates after that. Bounded by the ``limit`` query parameter.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 100
|
|
},
|
|
"description": "Max conversation rows to fetch from storage (default 100, max 500)."
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/WorkstreamHistoryResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/export": {
|
|
"get": {
|
|
"summary": "Export the coordinator's conversation as OpenAI messages JSON",
|
|
"operationId": "v1_api_workstreams_{ws_id}_export_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Returns the coordinator's own conversation as an ``{\"messages\": [...]}`` OpenAI Chat Completions envelope, served as a ``<ws_id>.json`` file download. Conversation-only (children are not bundled over HTTP). Gated on ``admin.coordinator``.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success"
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/children": {
|
|
"get": {
|
|
"summary": "List the coordinator's spawned child workstreams",
|
|
"operationId": "v1_api_workstreams_{ws_id}_children_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Returns interactive child workstreams whose ``parent_ws_id`` is this coordinator. Same row shape as the model-facing ``list_workstreams`` tool so the tree UI and the tool agree.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorChildrenResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Error 500",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/tasks": {
|
|
"get": {
|
|
"summary": "Read the coordinator's task list envelope",
|
|
"operationId": "v1_api_workstreams_{ws_id}_tasks_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Returns the ``{version, tasks}`` envelope persisted via the ``tasks`` model tool. Corrupt envelopes return an empty list (the tool itself surfaces corruption errors on mutation).",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorTasksResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/trust": {
|
|
"post": {
|
|
"summary": "Toggle trusted-session mode for send_to_workstream",
|
|
"operationId": "v1_api_workstreams_{ws_id}_trust_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "When enabled, ``send_to_workstream`` calls that target a ws_id in the coordinator's own subtree skip the approval prompt. Foreign ws_ids continue to require approval \u2014 trust only relaxes the guard for work the orchestrator itself spawned. Every auto-approved send still emits a ``coordinator.send.auto_approved`` audit row so the trail isn't lost. Gated on both ``admin.coordinator`` AND ``coordinator.trust.send`` so the trust feature is an explicit opt-in capability separate from ordinary coordinator administration.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorTrustRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorTrustResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/restrict": {
|
|
"post": {
|
|
"summary": "Revoke tool access on a live coordinator session",
|
|
"operationId": "v1_api_workstreams_{ws_id}_restrict_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Adds the named tools to the coordinator session's revoked set without closing the session. The model can keep working on whatever is already in flight but cannot invoke the revoked tools again. Idempotent and additive \u2014 calling twice with disjoint lists unions them. Revocations do not survive a session close / reopen; operators opt in per session. Writes ``coordinator.restricted`` with the revocation delta and the full post-state.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorRestrictRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorRestrictResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/workstreams/{ws_id}/close_all_children": {
|
|
"post": {
|
|
"summary": "Soft-close every direct child of the coordinator",
|
|
"operationId": "v1_api_workstreams_{ws_id}_close_all_children_post",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Reads the in-memory child registry and dispatches ``close_workstream`` via the routing proxy for every direct child under a bounded (16-concurrency) semaphore. Soft-close only \u2014 it does not touch grandchildren (the model-facing tool asks for a bounded teardown of its own direct fan-out). Returns ``{closed, failed, skipped}`` where ``skipped`` distinguishes already-gone (404) from dispatch-broken (``failed``). The optional ``reason`` propagates to every closed child's audit + workstream_config. Writes ``coordinator.closed_all_children`` at the coord level.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorCloseAllChildrenRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CoordinatorCloseAllChildrenResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/v1/api/cluster/ws/{ws_id}/detail": {
|
|
"get": {
|
|
"summary": "Cluster-wide live workstream detail (storage + live block + tail)",
|
|
"operationId": "v1_api_cluster_ws_{ws_id}_detail_get",
|
|
"tags": [
|
|
"Coordinator"
|
|
],
|
|
"description": "Aggregates the persisted row, a best-effort live block from the owning node (or the in-process coordinator manager for ``kind=\"coordinator\"`` rows), and the tail of the message history. Gated on the ``admin.cluster.inspect`` permission (granted to ``builtin-admin`` via migration 040; revoke or reassign to a custom role for tighter control). A workstream attached to a *private* project stays confidential to its members: a permitted caller who isn't its owner / creator / project member gets a 404 (same masking as an unknown id). ``live`` is null on node unreachability / 5xx so callers can degrade gracefully.",
|
|
"parameters": [
|
|
{
|
|
"name": "ws_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "message_limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 20
|
|
},
|
|
"description": "Max conversation rows in the tail (default 20, clamped to 200)."
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ClusterWsDetailResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Error 400",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Error 403",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Error 404",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Error 503",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health": {
|
|
"get": {
|
|
"summary": "Console health check",
|
|
"operationId": "health_get",
|
|
"tags": [
|
|
"Observability"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ConsoleHealthResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"ErrorResponse": {
|
|
"description": "Standard error response body.",
|
|
"properties": {
|
|
"error": {
|
|
"description": "Error message",
|
|
"title": "Error",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"error"
|
|
],
|
|
"title": "ErrorResponse",
|
|
"type": "object"
|
|
},
|
|
"StatusResponse": {
|
|
"description": "Generic success response.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"examples": [
|
|
"ok"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "StatusResponse",
|
|
"type": "object"
|
|
},
|
|
"DeleteSettingResponse": {
|
|
"description": "DELETE /v1/api/admin/settings/{key} response.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"examples": [
|
|
"ok"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"key": {
|
|
"description": "Dotted setting key that was reset",
|
|
"title": "Key",
|
|
"type": "string"
|
|
},
|
|
"default": {
|
|
"description": "Registry default value the setting reverted to",
|
|
"title": "Default"
|
|
}
|
|
},
|
|
"required": [
|
|
"key",
|
|
"default"
|
|
],
|
|
"title": "DeleteSettingResponse",
|
|
"type": "object"
|
|
},
|
|
"AuthLoginRequest": {
|
|
"description": "POST /v1/api/auth/login request body.\n\nEither username+password or token must be provided.",
|
|
"properties": {
|
|
"username": {
|
|
"default": "",
|
|
"description": "Login username",
|
|
"title": "Username",
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"default": "",
|
|
"description": "Login password",
|
|
"title": "Password",
|
|
"type": "string"
|
|
},
|
|
"token": {
|
|
"default": "",
|
|
"description": "Legacy: bearer token to authenticate",
|
|
"title": "Token",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "AuthLoginRequest",
|
|
"type": "object"
|
|
},
|
|
"AuthLoginResponse": {
|
|
"description": "POST /v1/api/auth/login success response.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"user_id": {
|
|
"default": "",
|
|
"description": "Authenticated user ID",
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"description": "Legacy role",
|
|
"examples": [
|
|
"full",
|
|
"read"
|
|
],
|
|
"title": "Role",
|
|
"type": "string"
|
|
},
|
|
"scopes": {
|
|
"default": "",
|
|
"description": "Comma-separated scopes",
|
|
"examples": [
|
|
"read,write,approve"
|
|
],
|
|
"title": "Scopes",
|
|
"type": "string"
|
|
},
|
|
"jwt": {
|
|
"default": "",
|
|
"description": "JWT session token (if JWT auth is configured)",
|
|
"title": "Jwt",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"role"
|
|
],
|
|
"title": "AuthLoginResponse",
|
|
"type": "object"
|
|
},
|
|
"AuthSetupRequest": {
|
|
"description": "POST /v1/api/auth/setup request body.",
|
|
"properties": {
|
|
"username": {
|
|
"description": "Login username (1-64 ASCII characters)",
|
|
"title": "Username",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"description": "Display name",
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"description": "Password (minimum 8 characters)",
|
|
"title": "Password",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"display_name",
|
|
"password"
|
|
],
|
|
"title": "AuthSetupRequest",
|
|
"type": "object"
|
|
},
|
|
"AuthSetupResponse": {
|
|
"description": "POST /v1/api/auth/setup success response.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"user_id": {
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"title": "Username",
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"default": "full",
|
|
"title": "Role",
|
|
"type": "string"
|
|
},
|
|
"scopes": {
|
|
"default": "approve,read,write",
|
|
"title": "Scopes",
|
|
"type": "string"
|
|
},
|
|
"jwt": {
|
|
"default": "",
|
|
"description": "JWT session token",
|
|
"title": "Jwt",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"user_id",
|
|
"username"
|
|
],
|
|
"title": "AuthSetupResponse",
|
|
"type": "object"
|
|
},
|
|
"AuthStatusResponse": {
|
|
"description": "GET /v1/api/auth/status response.",
|
|
"properties": {
|
|
"auth_enabled": {
|
|
"title": "Auth Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"has_users": {
|
|
"title": "Has Users",
|
|
"type": "boolean"
|
|
},
|
|
"setup_required": {
|
|
"title": "Setup Required",
|
|
"type": "boolean"
|
|
},
|
|
"oidc_enabled": {
|
|
"default": false,
|
|
"title": "Oidc Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"oidc_provider_name": {
|
|
"default": "",
|
|
"title": "Oidc Provider Name",
|
|
"type": "string"
|
|
},
|
|
"password_enabled": {
|
|
"default": true,
|
|
"title": "Password Enabled",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"auth_enabled",
|
|
"has_users",
|
|
"setup_required"
|
|
],
|
|
"title": "AuthStatusResponse",
|
|
"type": "object"
|
|
},
|
|
"CreateUserRequest": {
|
|
"description": "POST /v1/api/admin/users request body.",
|
|
"properties": {
|
|
"username": {
|
|
"description": "Login username (unique)",
|
|
"title": "Username",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"description": "Human-readable display name",
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"description": "Initial password",
|
|
"title": "Password",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"display_name",
|
|
"password"
|
|
],
|
|
"title": "CreateUserRequest",
|
|
"type": "object"
|
|
},
|
|
"UserInfo": {
|
|
"description": "User record (no password_hash).",
|
|
"properties": {
|
|
"user_id": {
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"title": "Username",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"user_id",
|
|
"username",
|
|
"display_name",
|
|
"created"
|
|
],
|
|
"title": "UserInfo",
|
|
"type": "object"
|
|
},
|
|
"ListUsersResponse": {
|
|
"description": "GET /v1/api/admin/users response.",
|
|
"properties": {
|
|
"users": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserInfo"
|
|
},
|
|
"title": "Users",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"users"
|
|
],
|
|
"title": "ListUsersResponse",
|
|
"type": "object"
|
|
},
|
|
"CreateTokenRequest": {
|
|
"description": "POST /v1/api/admin/users/{user_id}/tokens request body.",
|
|
"properties": {
|
|
"name": {
|
|
"default": "",
|
|
"description": "Human label for the token",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"scopes": {
|
|
"default": "read,write,approve",
|
|
"description": "Comma-separated scopes: read, write, approve",
|
|
"title": "Scopes",
|
|
"type": "string"
|
|
},
|
|
"expires_days": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Days until expiry (null = no expiry)",
|
|
"title": "Expires Days"
|
|
}
|
|
},
|
|
"title": "CreateTokenRequest",
|
|
"type": "object"
|
|
},
|
|
"CreateTokenResponse": {
|
|
"description": "POST /v1/api/admin/users/{user_id}/tokens response (raw token shown once).",
|
|
"properties": {
|
|
"token": {
|
|
"description": "Raw API token \u2014 save this, it cannot be retrieved again",
|
|
"title": "Token",
|
|
"type": "string"
|
|
},
|
|
"token_id": {
|
|
"title": "Token Id",
|
|
"type": "string"
|
|
},
|
|
"token_prefix": {
|
|
"title": "Token Prefix",
|
|
"type": "string"
|
|
},
|
|
"scopes": {
|
|
"title": "Scopes",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"token",
|
|
"token_id",
|
|
"token_prefix",
|
|
"scopes"
|
|
],
|
|
"title": "CreateTokenResponse",
|
|
"type": "object"
|
|
},
|
|
"ListTokensResponse": {
|
|
"description": "GET /v1/api/admin/users/{user_id}/tokens response.",
|
|
"properties": {
|
|
"tokens": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"title": "Tokens",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"tokens"
|
|
],
|
|
"title": "ListTokensResponse",
|
|
"type": "object"
|
|
},
|
|
"TokenInfo": {
|
|
"description": "Token metadata (never includes the hash or raw token).",
|
|
"properties": {
|
|
"token_id": {
|
|
"title": "Token Id",
|
|
"type": "string"
|
|
},
|
|
"token_prefix": {
|
|
"title": "Token Prefix",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"scopes": {
|
|
"title": "Scopes",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"expires": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expires"
|
|
}
|
|
},
|
|
"required": [
|
|
"token_id",
|
|
"token_prefix",
|
|
"name",
|
|
"scopes",
|
|
"created"
|
|
],
|
|
"title": "TokenInfo",
|
|
"type": "object"
|
|
},
|
|
"ChannelUserInfo": {
|
|
"properties": {
|
|
"channel_type": {
|
|
"title": "Channel Type",
|
|
"type": "string"
|
|
},
|
|
"channel_user_id": {
|
|
"title": "Channel User Id",
|
|
"type": "string"
|
|
},
|
|
"user_id": {
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"channel_type",
|
|
"channel_user_id",
|
|
"user_id",
|
|
"created"
|
|
],
|
|
"title": "ChannelUserInfo",
|
|
"type": "object"
|
|
},
|
|
"CreateChannelUserRequest": {
|
|
"properties": {
|
|
"channel_type": {
|
|
"description": "Channel type (e.g. discord, slack)",
|
|
"title": "Channel Type",
|
|
"type": "string"
|
|
},
|
|
"channel_user_id": {
|
|
"description": "External channel user identifier",
|
|
"title": "Channel User Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"channel_type",
|
|
"channel_user_id"
|
|
],
|
|
"title": "CreateChannelUserRequest",
|
|
"type": "object"
|
|
},
|
|
"ListChannelUsersResponse": {
|
|
"properties": {
|
|
"channels": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ChannelUserInfo"
|
|
},
|
|
"title": "Channels",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"channels"
|
|
],
|
|
"title": "ListChannelUsersResponse",
|
|
"type": "object"
|
|
},
|
|
"ClusterOverviewResponse": {
|
|
"properties": {
|
|
"nodes": {
|
|
"default": 0,
|
|
"title": "Nodes",
|
|
"type": "integer"
|
|
},
|
|
"workstreams": {
|
|
"default": 0,
|
|
"title": "Workstreams",
|
|
"type": "integer"
|
|
},
|
|
"states": {
|
|
"$ref": "#/components/schemas/StateCounts",
|
|
"default": {
|
|
"running": 0,
|
|
"thinking": 0,
|
|
"attention": 0,
|
|
"idle": 0,
|
|
"error": 0
|
|
}
|
|
},
|
|
"aggregate": {
|
|
"$ref": "#/components/schemas/ClusterAggregate",
|
|
"default": {
|
|
"total_tokens": 0,
|
|
"total_tool_calls": 0
|
|
}
|
|
},
|
|
"version_drift": {
|
|
"default": false,
|
|
"title": "Version Drift",
|
|
"type": "boolean"
|
|
},
|
|
"versions": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Versions",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "ClusterOverviewResponse",
|
|
"type": "object"
|
|
},
|
|
"ClusterAggregate": {
|
|
"properties": {
|
|
"total_tokens": {
|
|
"default": 0,
|
|
"title": "Total Tokens",
|
|
"type": "integer"
|
|
},
|
|
"total_tool_calls": {
|
|
"default": 0,
|
|
"title": "Total Tool Calls",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"title": "ClusterAggregate",
|
|
"type": "object"
|
|
},
|
|
"StateCounts": {
|
|
"properties": {
|
|
"running": {
|
|
"default": 0,
|
|
"title": "Running",
|
|
"type": "integer"
|
|
},
|
|
"thinking": {
|
|
"default": 0,
|
|
"title": "Thinking",
|
|
"type": "integer"
|
|
},
|
|
"attention": {
|
|
"default": 0,
|
|
"title": "Attention",
|
|
"type": "integer"
|
|
},
|
|
"idle": {
|
|
"default": 0,
|
|
"title": "Idle",
|
|
"type": "integer"
|
|
},
|
|
"error": {
|
|
"default": 0,
|
|
"title": "Error",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"title": "StateCounts",
|
|
"type": "object"
|
|
},
|
|
"ClusterNodesResponse": {
|
|
"properties": {
|
|
"nodes": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ClusterNodeInfo"
|
|
},
|
|
"title": "Nodes",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"default": 0,
|
|
"title": "Total",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"nodes"
|
|
],
|
|
"title": "ClusterNodesResponse",
|
|
"type": "object"
|
|
},
|
|
"ClusterNodeInfo": {
|
|
"properties": {
|
|
"node_id": {
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"server_url": {
|
|
"default": "",
|
|
"title": "Server Url",
|
|
"type": "string"
|
|
},
|
|
"ws_total": {
|
|
"default": 0,
|
|
"title": "Ws Total",
|
|
"type": "integer"
|
|
},
|
|
"ws_running": {
|
|
"default": 0,
|
|
"title": "Ws Running",
|
|
"type": "integer"
|
|
},
|
|
"ws_thinking": {
|
|
"default": 0,
|
|
"title": "Ws Thinking",
|
|
"type": "integer"
|
|
},
|
|
"ws_attention": {
|
|
"default": 0,
|
|
"title": "Ws Attention",
|
|
"type": "integer"
|
|
},
|
|
"ws_idle": {
|
|
"default": 0,
|
|
"title": "Ws Idle",
|
|
"type": "integer"
|
|
},
|
|
"ws_error": {
|
|
"default": 0,
|
|
"title": "Ws Error",
|
|
"type": "integer"
|
|
},
|
|
"total_tokens": {
|
|
"default": 0,
|
|
"title": "Total Tokens",
|
|
"type": "integer"
|
|
},
|
|
"started": {
|
|
"default": 0.0,
|
|
"title": "Started",
|
|
"type": "number"
|
|
},
|
|
"reachable": {
|
|
"default": true,
|
|
"title": "Reachable",
|
|
"type": "boolean"
|
|
},
|
|
"health": {
|
|
"additionalProperties": true,
|
|
"title": "Health",
|
|
"type": "object"
|
|
},
|
|
"version": {
|
|
"default": "",
|
|
"title": "Version",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"node_id"
|
|
],
|
|
"title": "ClusterNodeInfo",
|
|
"type": "object"
|
|
},
|
|
"ClusterWorkstreamsResponse": {
|
|
"properties": {
|
|
"workstreams": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ClusterWorkstreamInfo"
|
|
},
|
|
"title": "Workstreams",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"default": 0,
|
|
"title": "Total",
|
|
"type": "integer"
|
|
},
|
|
"page": {
|
|
"default": 1,
|
|
"title": "Page",
|
|
"type": "integer"
|
|
},
|
|
"per_page": {
|
|
"default": 50,
|
|
"title": "Per Page",
|
|
"type": "integer"
|
|
},
|
|
"pages": {
|
|
"default": 1,
|
|
"title": "Pages",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"workstreams"
|
|
],
|
|
"title": "ClusterWorkstreamsResponse",
|
|
"type": "object"
|
|
},
|
|
"ClusterWorkstreamInfo": {
|
|
"properties": {
|
|
"id": {
|
|
"title": "Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"default": "",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"state": {
|
|
"default": "",
|
|
"title": "State",
|
|
"type": "string"
|
|
},
|
|
"node": {
|
|
"default": "",
|
|
"title": "Node",
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"default": "",
|
|
"title": "Title",
|
|
"type": "string"
|
|
},
|
|
"tokens": {
|
|
"default": 0,
|
|
"title": "Tokens",
|
|
"type": "integer"
|
|
},
|
|
"context_ratio": {
|
|
"default": 0.0,
|
|
"title": "Context Ratio",
|
|
"type": "number"
|
|
},
|
|
"activity": {
|
|
"default": "",
|
|
"title": "Activity",
|
|
"type": "string"
|
|
},
|
|
"activity_state": {
|
|
"default": "",
|
|
"title": "Activity State",
|
|
"type": "string"
|
|
},
|
|
"tool_calls": {
|
|
"default": 0,
|
|
"title": "Tool Calls",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"id"
|
|
],
|
|
"title": "ClusterWorkstreamInfo",
|
|
"type": "object"
|
|
},
|
|
"NodeDetailResponse": {
|
|
"properties": {
|
|
"node_id": {
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"server_url": {
|
|
"default": "",
|
|
"title": "Server Url",
|
|
"type": "string"
|
|
},
|
|
"health": {
|
|
"additionalProperties": true,
|
|
"title": "Health",
|
|
"type": "object"
|
|
},
|
|
"workstreams": {
|
|
"default": [],
|
|
"items": {
|
|
"$ref": "#/components/schemas/ClusterWorkstreamInfo"
|
|
},
|
|
"title": "Workstreams",
|
|
"type": "array"
|
|
},
|
|
"aggregate": {
|
|
"additionalProperties": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Aggregate",
|
|
"type": "object"
|
|
},
|
|
"reachable": {
|
|
"default": true,
|
|
"title": "Reachable",
|
|
"type": "boolean"
|
|
},
|
|
"metadata": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/NodeMetadataEntry"
|
|
},
|
|
"title": "Metadata",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"node_id"
|
|
],
|
|
"title": "NodeDetailResponse",
|
|
"type": "object"
|
|
},
|
|
"NodeMetadataEntry": {
|
|
"properties": {
|
|
"key": {
|
|
"title": "Key",
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"title": "Value"
|
|
},
|
|
"source": {
|
|
"default": "user",
|
|
"title": "Source",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"key",
|
|
"value"
|
|
],
|
|
"title": "NodeMetadataEntry",
|
|
"type": "object"
|
|
},
|
|
"ClusterSnapshotResponse": {
|
|
"properties": {
|
|
"nodes": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ClusterSnapshotNode"
|
|
},
|
|
"title": "Nodes",
|
|
"type": "array"
|
|
},
|
|
"overview": {
|
|
"$ref": "#/components/schemas/ClusterOverviewResponse"
|
|
},
|
|
"timestamp": {
|
|
"default": 0.0,
|
|
"title": "Timestamp",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"nodes",
|
|
"overview"
|
|
],
|
|
"title": "ClusterSnapshotResponse",
|
|
"type": "object"
|
|
},
|
|
"ClusterSnapshotNode": {
|
|
"properties": {
|
|
"node_id": {
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"server_url": {
|
|
"default": "",
|
|
"title": "Server Url",
|
|
"type": "string"
|
|
},
|
|
"max_ws": {
|
|
"default": 10,
|
|
"title": "Max Ws",
|
|
"type": "integer"
|
|
},
|
|
"reachable": {
|
|
"default": true,
|
|
"title": "Reachable",
|
|
"type": "boolean"
|
|
},
|
|
"version": {
|
|
"default": "",
|
|
"title": "Version",
|
|
"type": "string"
|
|
},
|
|
"health": {
|
|
"additionalProperties": true,
|
|
"title": "Health",
|
|
"type": "object"
|
|
},
|
|
"aggregate": {
|
|
"additionalProperties": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Aggregate",
|
|
"type": "object"
|
|
},
|
|
"workstreams": {
|
|
"default": [],
|
|
"items": {
|
|
"$ref": "#/components/schemas/ClusterWorkstreamInfo"
|
|
},
|
|
"title": "Workstreams",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"node_id"
|
|
],
|
|
"title": "ClusterSnapshotNode",
|
|
"type": "object"
|
|
},
|
|
"ClusterWsDetailResponse": {
|
|
"description": "Response body for GET /v1/api/cluster/ws/{ws_id}/detail.\n\nAggregates the persisted workstream row with a best-effort live block\nfetched from the owning node (or the in-process coordinator manager\nfor ``kind=\"coordinator\"`` rows). ``live`` is ``null`` when the\nowning node is unreachable, returns 5xx, or doesn't have the row in\nits in-memory dashboard cache \u2014 callers degrade gracefully without\ntreating it as an error.",
|
|
"properties": {
|
|
"persisted": {
|
|
"additionalProperties": true,
|
|
"description": "Full storage row for the workstream (state, kind, parent_ws_id, etc.).",
|
|
"title": "Persisted",
|
|
"type": "object"
|
|
},
|
|
"live": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Live in-flight counters (state, tokens, activity, pending_approval) when the owning node returns them; null on degrade.",
|
|
"title": "Live"
|
|
},
|
|
"messages": {
|
|
"description": "Tail of the workstream's reconstructed message history.",
|
|
"items": {
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
"title": "Messages",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"persisted"
|
|
],
|
|
"title": "ClusterWsDetailResponse",
|
|
"type": "object"
|
|
},
|
|
"ConsoleCreateWsRequest": {
|
|
"properties": {
|
|
"node_id": {
|
|
"default": "",
|
|
"description": "Target node: specific ID, 'auto', 'pool', or empty for auto",
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"default": "",
|
|
"description": "Workstream name (auto-generated if empty)",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"description": "Model alias from node registry",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"initial_message": {
|
|
"default": "",
|
|
"description": "Optional first message sent after creation",
|
|
"title": "Initial Message",
|
|
"type": "string"
|
|
},
|
|
"skill": {
|
|
"default": "",
|
|
"description": "Skill name (replaces default skills)",
|
|
"title": "Skill",
|
|
"type": "string"
|
|
},
|
|
"persona": {
|
|
"default": "",
|
|
"description": "Persona slug; resolved and snapshotted at creation, empty = kind default",
|
|
"title": "Persona",
|
|
"type": "string"
|
|
},
|
|
"project_id": {
|
|
"default": "",
|
|
"description": "Project to attach the workstream to (validated against membership, empty = none)",
|
|
"title": "Project Id",
|
|
"type": "string"
|
|
},
|
|
"resume_ws": {
|
|
"default": "",
|
|
"description": "Source workstream ID or alias to fork atomically into the new workstream",
|
|
"title": "Resume Ws",
|
|
"type": "string"
|
|
},
|
|
"judge_model": {
|
|
"default": "",
|
|
"description": "Override judge model alias for this workstream",
|
|
"title": "Judge Model",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "ConsoleCreateWsRequest",
|
|
"type": "object"
|
|
},
|
|
"ConsoleCreateWsResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"correlation_id": {
|
|
"default": "",
|
|
"title": "Correlation Id",
|
|
"type": "string"
|
|
},
|
|
"target_node": {
|
|
"default": "",
|
|
"title": "Target Node",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "ConsoleCreateWsResponse",
|
|
"type": "object"
|
|
},
|
|
"ConsoleHealthResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"examples": [
|
|
"ok"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"service": {
|
|
"default": "turnstone-console",
|
|
"title": "Service",
|
|
"type": "string"
|
|
},
|
|
"nodes": {
|
|
"default": 0,
|
|
"title": "Nodes",
|
|
"type": "integer"
|
|
},
|
|
"workstreams": {
|
|
"default": 0,
|
|
"title": "Workstreams",
|
|
"type": "integer"
|
|
},
|
|
"version_drift": {
|
|
"default": false,
|
|
"title": "Version Drift",
|
|
"type": "boolean"
|
|
},
|
|
"versions": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Versions",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "ConsoleHealthResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorApproveRequest": {
|
|
"description": "Body for POST /v1/api/workstreams/{ws_id}/approve.",
|
|
"properties": {
|
|
"approved": {
|
|
"description": "True approves the pending tool call(s); False denies.",
|
|
"title": "Approved",
|
|
"type": "boolean"
|
|
},
|
|
"feedback": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional human feedback string forwarded to the model.",
|
|
"title": "Feedback"
|
|
},
|
|
"always": {
|
|
"default": false,
|
|
"description": "When approved=True, also adds the pending tool name(s) to the session's auto-approve set so subsequent calls of the same tool skip the prompt.",
|
|
"title": "Always",
|
|
"type": "boolean"
|
|
},
|
|
"cycle_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Resolve this exact approval cycle",
|
|
"title": "Cycle Id"
|
|
},
|
|
"call_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Resolve the approval cycle containing this tool call",
|
|
"title": "Call Id"
|
|
}
|
|
},
|
|
"required": [
|
|
"approved"
|
|
],
|
|
"title": "CoordinatorApproveRequest",
|
|
"type": "object"
|
|
},
|
|
"ApproveRequest": {
|
|
"properties": {
|
|
"approved": {
|
|
"description": "True to approve, false to deny",
|
|
"title": "Approved",
|
|
"type": "boolean"
|
|
},
|
|
"feedback": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional denial reason",
|
|
"title": "Feedback"
|
|
},
|
|
"always": {
|
|
"default": false,
|
|
"description": "Auto-approve the tools in this batch going forward",
|
|
"title": "Always",
|
|
"type": "boolean"
|
|
},
|
|
"cycle_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Resolve this exact approval cycle",
|
|
"title": "Cycle Id"
|
|
},
|
|
"call_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Resolve the approval cycle containing this tool call",
|
|
"title": "Call Id"
|
|
}
|
|
},
|
|
"required": [
|
|
"approved"
|
|
],
|
|
"title": "ApproveRequest",
|
|
"type": "object"
|
|
},
|
|
"ApproveResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"description": "Request outcome",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"cycle_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Approval cycle that was resolved, or null when none was pending",
|
|
"title": "Cycle Id"
|
|
}
|
|
},
|
|
"title": "ApproveResponse",
|
|
"type": "object"
|
|
},
|
|
"CancelRequest": {
|
|
"properties": {
|
|
"force": {
|
|
"default": false,
|
|
"description": "Force cancel: abandon the stuck worker thread immediately. Use when cooperative cancel has not resolved within a few seconds.",
|
|
"title": "Force",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "CancelRequest",
|
|
"type": "object"
|
|
},
|
|
"CancelResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"description": "Request outcome",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"dropped": {
|
|
"additionalProperties": true,
|
|
"description": "Best-effort, credential-redacted snapshot of pending work affected by cancellation; keys are omitted when not observable",
|
|
"title": "Dropped",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"title": "CancelResponse",
|
|
"type": "object"
|
|
},
|
|
"CloseWorkstreamRequest": {
|
|
"description": "Body for ``POST /v1/api/workstreams/{ws_id}/close``.\n\nThe body must be valid JSON; send ``{}`` when omitting all\nfields. Pre-1.5 the model also carried a body-keyed ``ws_id``;\n1.5 moved that to the path so the body shrinks to the optional\n``reason``. Coord ignores the body entirely (its close handler\nis wired ``supports_close_reason=False``).",
|
|
"properties": {
|
|
"reason": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional close reason persisted to ``workstream_config`` for postmortem. Capped at 512 UTF-8 bytes server-side; credential-redaction is applied via the output guard.",
|
|
"title": "Reason"
|
|
}
|
|
},
|
|
"title": "CloseWorkstreamRequest",
|
|
"type": "object"
|
|
},
|
|
"CommandRequest": {
|
|
"properties": {
|
|
"command": {
|
|
"description": "Workstream-local slash command (for example /clear or /instructions). Lifecycle commands such as /new and /resume are local-CLI-only; remote clients use the dedicated workstream endpoints.",
|
|
"title": "Command",
|
|
"type": "string"
|
|
},
|
|
"ws_id": {
|
|
"description": "Target workstream ID",
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"command",
|
|
"ws_id"
|
|
],
|
|
"title": "CommandRequest",
|
|
"type": "object"
|
|
},
|
|
"DequeueRequest": {
|
|
"description": "Body for ``DELETE /v1/api/workstreams/{ws_id}/send``.\n\nRemoves a previously-queued message from the workstream's pending\nqueue. ``msg_id`` is the id returned in a prior ``send`` response\nwhen the workstream was busy and the message was queued.",
|
|
"properties": {
|
|
"msg_id": {
|
|
"description": "Id of the queued message to remove",
|
|
"title": "Msg Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"msg_id"
|
|
],
|
|
"title": "DequeueRequest",
|
|
"type": "object"
|
|
},
|
|
"SendRequest": {
|
|
"properties": {
|
|
"message": {
|
|
"description": "User message text",
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"attachment_ids": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Explicit list of attachment ids to inject into this turn. When omitted, any pending attachments for the caller on this workstream are auto-consumed. An empty list disables auto-consumption for this send.",
|
|
"title": "Attachment Ids"
|
|
}
|
|
},
|
|
"required": [
|
|
"message"
|
|
],
|
|
"title": "SendRequest",
|
|
"type": "object"
|
|
},
|
|
"SendResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"description": "'ok' (fresh turn dispatched), 'queued' (folded into the live turn's interjection queue, or \u2014 when `deferred` is true \u2014 parked for dispatch after the current command window), 'queue_full', 'attachments_busy' (attachments can't ride a queued turn; retry when idle), or 'cross_user_interjection' (another participant's turn is in flight; carried on the 409 body).",
|
|
"examples": [
|
|
"ok",
|
|
"queued",
|
|
"queue_full",
|
|
"attachments_busy",
|
|
"cross_user_interjection"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"deferred": {
|
|
"default": false,
|
|
"description": "Set on `queued` responses: the message is parked on the workstream's deferred-send list (a slash-command window holds the worker slot, or earlier deferred sends are still pending) and dispatches as an ordinary full-fidelity send afterwards \u2014 it is NOT in a live turn's interjection queue. `DELETE .../send` retracts it until dispatch. Node-local and in-memory: a node restart before dispatch drops it (at-most-once intake).",
|
|
"title": "Deferred",
|
|
"type": "boolean"
|
|
},
|
|
"attached_ids": {
|
|
"description": "Attachment ids actually attached to this turn. Subset of the request's `attachment_ids` (or the auto-consumed pending set). Empty when the send carries no attachments.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Attached Ids",
|
|
"type": "array"
|
|
},
|
|
"dropped_attachment_ids": {
|
|
"description": "Attachment ids the caller requested that the server could not reserve (lost a race, already consumed, or cross-scope). The request still proceeds with whatever was reserved; the client can retry uploads or surface a partial-attach warning.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Dropped Attachment Ids",
|
|
"type": "array"
|
|
},
|
|
"priority": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Set on `queued` responses: relative priority of the queued message.",
|
|
"title": "Priority"
|
|
},
|
|
"msg_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Set on `queued` responses: id used to dequeue the message.",
|
|
"title": "Msg Id"
|
|
}
|
|
},
|
|
"required": [
|
|
"status"
|
|
],
|
|
"title": "SendResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorChildInfo": {
|
|
"description": "Per-row shape in the coordinator children listing.",
|
|
"properties": {
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"node_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Node Id"
|
|
},
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Name"
|
|
},
|
|
"state": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "State"
|
|
},
|
|
"created": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Created"
|
|
},
|
|
"updated": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Updated"
|
|
},
|
|
"kind": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Kind"
|
|
},
|
|
"parent_ws_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Parent Ws Id"
|
|
},
|
|
"skill_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Skill Id"
|
|
},
|
|
"skill_version": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Skill Version"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id"
|
|
],
|
|
"title": "CoordinatorChildInfo",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorChildrenResponse": {
|
|
"description": "Response body for GET /v1/api/workstreams/{ws_id}/children.",
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/CoordinatorChildInfo"
|
|
},
|
|
"title": "Items",
|
|
"type": "array"
|
|
},
|
|
"truncated": {
|
|
"default": false,
|
|
"description": "True when the storage page filled the cap; more rows may exist.",
|
|
"title": "Truncated",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "CoordinatorChildrenResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorCloseAllChildrenRequest": {
|
|
"description": "Body for POST /v1/api/workstreams/{ws_id}/close_all_children.",
|
|
"properties": {
|
|
"reason": {
|
|
"default": "",
|
|
"description": "Optional human-readable reason \u2014 propagated to every closed child's audit + workstream_config for postmortem. Capped at 512 chars; the handler returns 400 on overflow.",
|
|
"maxLength": 512,
|
|
"title": "Reason",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "CoordinatorCloseAllChildrenRequest",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorCloseAllChildrenResponse": {
|
|
"description": "Response body for POST /v1/api/workstreams/{ws_id}/close_all_children.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"closed": {
|
|
"description": "Child ws_ids that accepted the close dispatch.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Closed",
|
|
"type": "array"
|
|
},
|
|
"failed": {
|
|
"description": "Child ws_ids whose close dispatch returned an error other than an already-gone 404 \u2014 the cascade continues on per-child failure so a single unreachable node doesn't abort the whole batch.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Failed",
|
|
"type": "array"
|
|
},
|
|
"skipped": {
|
|
"description": "Child ws_ids that returned 404 on close (already gone). Reported separately from ``failed`` so operators can distinguish already-done from dispatch-broken.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Skipped",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "CoordinatorCloseAllChildrenResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorCreateRequest": {
|
|
"description": "Body for POST /v1/api/workstreams/new.",
|
|
"properties": {
|
|
"name": {
|
|
"default": "",
|
|
"description": "Optional display name; auto-generated when empty.",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"skill": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional skill name to apply to the coordinator session.",
|
|
"title": "Skill"
|
|
},
|
|
"persona": {
|
|
"default": "",
|
|
"description": "Persona slug; resolved and snapshotted at creation, empty = kind default",
|
|
"title": "Persona",
|
|
"type": "string"
|
|
},
|
|
"initial_message": {
|
|
"default": "",
|
|
"description": "Optional first user message dispatched to the new coordinator session.",
|
|
"title": "Initial Message",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "CoordinatorCreateRequest",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorCreateResponse": {
|
|
"description": "Response body for POST /v1/api/workstreams/new (200).",
|
|
"properties": {
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"resumed": {
|
|
"default": false,
|
|
"title": "Resumed",
|
|
"type": "boolean"
|
|
},
|
|
"message_count": {
|
|
"default": 0,
|
|
"title": "Message Count",
|
|
"type": "integer"
|
|
},
|
|
"attachment_ids": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Attachment Ids",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id",
|
|
"name"
|
|
],
|
|
"title": "CoordinatorCreateResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorOpenResponse": {
|
|
"description": "Response body for POST /v1/api/workstreams/{ws_id}/open.",
|
|
"properties": {
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"already_loaded": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "True when the coordinator was already in memory; absent after a fresh rehydrate.",
|
|
"title": "Already Loaded"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id",
|
|
"name"
|
|
],
|
|
"title": "CoordinatorOpenResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorRestrictRequest": {
|
|
"description": "Body for POST /v1/api/workstreams/{ws_id}/restrict.",
|
|
"properties": {
|
|
"revoke": {
|
|
"description": "Tool names to add to the session's revoked set. Once revoked the coordinator cannot invoke the named tools on subsequent turns without closing and re-opening the session.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Revoke",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"revoke"
|
|
],
|
|
"title": "CoordinatorRestrictRequest",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorRestrictResponse": {
|
|
"description": "Response body for POST /v1/api/workstreams/{ws_id}/restrict.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"revoked_tools": {
|
|
"description": "Full post-revocation set of revoked tool names.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Revoked Tools",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"revoked_tools"
|
|
],
|
|
"title": "CoordinatorRestrictResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorSendRequest": {
|
|
"description": "Body for POST /v1/api/workstreams/{ws_id}/send.",
|
|
"properties": {
|
|
"message": {
|
|
"description": "User message to queue onto the coordinator's worker.",
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"attachment_ids": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Explicit list of attachment ids to inject into this turn. When omitted, any pending attachments for the caller on this coordinator are auto-consumed. An empty list disables auto-consumption for this send.",
|
|
"title": "Attachment Ids"
|
|
}
|
|
},
|
|
"required": [
|
|
"message"
|
|
],
|
|
"title": "CoordinatorSendRequest",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorSendResponse": {
|
|
"description": "Response shape for POST /v1/api/workstreams/{ws_id}/send (coord).",
|
|
"properties": {
|
|
"status": {
|
|
"description": "'ok' (fresh worker spawned), 'queued' (live worker reuse), or 'queue_full'.",
|
|
"examples": [
|
|
"ok",
|
|
"queued",
|
|
"queue_full"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"attached_ids": {
|
|
"description": "Attachment ids actually attached to this turn. Subset of the request's `attachment_ids` (or the auto-consumed pending set). Empty when the send carries no attachments.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Attached Ids",
|
|
"type": "array"
|
|
},
|
|
"dropped_attachment_ids": {
|
|
"description": "Attachment ids the caller requested that the server could not reserve (lost a race, already consumed, or cross-scope). The request still proceeds with whatever was reserved.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Dropped Attachment Ids",
|
|
"type": "array"
|
|
},
|
|
"priority": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Set on `queued` responses: relative priority of the queued message.",
|
|
"title": "Priority"
|
|
},
|
|
"msg_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Set on `queued` responses: id used to dequeue the message.",
|
|
"title": "Msg Id"
|
|
}
|
|
},
|
|
"required": [
|
|
"status"
|
|
],
|
|
"title": "CoordinatorSendResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorTaskInfo": {
|
|
"description": "Per-task row in the coordinator's task envelope.",
|
|
"properties": {
|
|
"id": {
|
|
"title": "Id",
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"title": "Title",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"description": "One of: pending / in_progress / done / blocked / needs_user. ``blocked`` is waiting on a dependency the coordinator may clear itself; ``needs_user`` is waiting on a decision only the operator can make.",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"child_ws_id": {
|
|
"default": "",
|
|
"title": "Child Ws Id",
|
|
"type": "string"
|
|
},
|
|
"note": {
|
|
"default": "",
|
|
"description": "Optional one-sentence note, typically what the coordinator needs from the operator on a ``needs_user`` task. Absent from the stored record when unset (there is no backfill for rows written before the field existed), so it defaults to the empty string here.",
|
|
"title": "Note",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"title",
|
|
"status",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "CoordinatorTaskInfo",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorTasksResponse": {
|
|
"description": "Response body for GET /v1/api/workstreams/{ws_id}/tasks.\n\nMirrors the envelope the ``tasks(action='list')`` model tool returns.",
|
|
"properties": {
|
|
"version": {
|
|
"default": 1,
|
|
"title": "Version",
|
|
"type": "integer"
|
|
},
|
|
"tasks": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/CoordinatorTaskInfo"
|
|
},
|
|
"title": "Tasks",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "CoordinatorTasksResponse",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorTrustRequest": {
|
|
"description": "Body for POST /v1/api/workstreams/{ws_id}/trust.",
|
|
"properties": {
|
|
"send": {
|
|
"description": "When true, ``send_to_workstream`` calls that target a ws_id in the coordinator's own subtree skip the approval prompt. Foreign ws_ids continue to require approval \u2014 trust only relaxes the guard for work the orchestrator itself spawned.",
|
|
"title": "Send",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"send"
|
|
],
|
|
"title": "CoordinatorTrustRequest",
|
|
"type": "object"
|
|
},
|
|
"CoordinatorTrustResponse": {
|
|
"description": "Response body for POST /v1/api/workstreams/{ws_id}/trust.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"trust_send": {
|
|
"description": "Post-toggle value of the flag.",
|
|
"title": "Trust Send",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"trust_send"
|
|
],
|
|
"title": "CoordinatorTrustResponse",
|
|
"type": "object"
|
|
},
|
|
"CreateScheduleRequest": {
|
|
"description": "POST /v1/api/admin/schedules request body.",
|
|
"properties": {
|
|
"name": {
|
|
"description": "Human-readable schedule name",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"description": "Optional description",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"schedule_type": {
|
|
"description": "'cron' or 'at'",
|
|
"title": "Schedule Type",
|
|
"type": "string"
|
|
},
|
|
"cron_expr": {
|
|
"default": "",
|
|
"description": "Cron expression (when schedule_type='cron')",
|
|
"title": "Cron Expr",
|
|
"type": "string"
|
|
},
|
|
"at_time": {
|
|
"default": "",
|
|
"description": "ISO8601 timestamp (when schedule_type='at')",
|
|
"title": "At Time",
|
|
"type": "string"
|
|
},
|
|
"target_mode": {
|
|
"default": "auto",
|
|
"description": "auto, pool, all, or specific node_id",
|
|
"title": "Target Mode",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"description": "Model alias for the workstream",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"initial_message": {
|
|
"description": "Message sent to the new workstream",
|
|
"title": "Initial Message",
|
|
"type": "string"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"auto_approve_tools": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Auto Approve Tools",
|
|
"type": "array"
|
|
},
|
|
"skill": {
|
|
"default": "",
|
|
"description": "Skill name (replaces default skills)",
|
|
"title": "Skill",
|
|
"type": "string"
|
|
},
|
|
"persona": {
|
|
"default": "",
|
|
"description": "Persona slug (empty = kind default)",
|
|
"title": "Persona",
|
|
"type": "string"
|
|
},
|
|
"project_id": {
|
|
"default": "",
|
|
"description": "Project to attach the workstream to",
|
|
"title": "Project Id",
|
|
"type": "string"
|
|
},
|
|
"notify_targets": {
|
|
"description": "Notification targets on completion (channel_type + channel_id/user_id)",
|
|
"items": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
"title": "Notify Targets",
|
|
"type": "array"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"schedule_type",
|
|
"initial_message"
|
|
],
|
|
"title": "CreateScheduleRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdateScheduleRequest": {
|
|
"description": "PUT /v1/api/admin/schedules/{task_id} request body (partial update).",
|
|
"properties": {
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Name"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Description"
|
|
},
|
|
"schedule_type": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Schedule Type"
|
|
},
|
|
"cron_expr": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Cron Expr"
|
|
},
|
|
"at_time": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "At Time"
|
|
},
|
|
"target_mode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Target Mode"
|
|
},
|
|
"model": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Model"
|
|
},
|
|
"initial_message": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Initial Message"
|
|
},
|
|
"auto_approve": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Auto Approve"
|
|
},
|
|
"auto_approve_tools": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Auto Approve Tools"
|
|
},
|
|
"skill": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Skill"
|
|
},
|
|
"persona": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Persona"
|
|
},
|
|
"project_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Project Id"
|
|
},
|
|
"notify_targets": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Notify Targets"
|
|
},
|
|
"enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Enabled"
|
|
}
|
|
},
|
|
"title": "UpdateScheduleRequest",
|
|
"type": "object"
|
|
},
|
|
"ScheduleInfo": {
|
|
"description": "Scheduled task details.",
|
|
"properties": {
|
|
"task_id": {
|
|
"title": "Task Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"schedule_type": {
|
|
"title": "Schedule Type",
|
|
"type": "string"
|
|
},
|
|
"cron_expr": {
|
|
"default": "",
|
|
"title": "Cron Expr",
|
|
"type": "string"
|
|
},
|
|
"at_time": {
|
|
"default": "",
|
|
"title": "At Time",
|
|
"type": "string"
|
|
},
|
|
"target_mode": {
|
|
"default": "auto",
|
|
"title": "Target Mode",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"initial_message": {
|
|
"title": "Initial Message",
|
|
"type": "string"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"auto_approve_tools": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Auto Approve Tools",
|
|
"type": "array"
|
|
},
|
|
"skill": {
|
|
"default": "",
|
|
"title": "Skill",
|
|
"type": "string"
|
|
},
|
|
"persona": {
|
|
"default": "",
|
|
"title": "Persona",
|
|
"type": "string"
|
|
},
|
|
"project_id": {
|
|
"default": "",
|
|
"title": "Project Id",
|
|
"type": "string"
|
|
},
|
|
"notify_targets": {
|
|
"items": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
"title": "Notify Targets",
|
|
"type": "array"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"created_by": {
|
|
"default": "",
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"last_run": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Last Run"
|
|
},
|
|
"next_run": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Next Run"
|
|
},
|
|
"created": {
|
|
"default": "",
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"default": "",
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"task_id",
|
|
"name",
|
|
"schedule_type",
|
|
"initial_message"
|
|
],
|
|
"title": "ScheduleInfo",
|
|
"type": "object"
|
|
},
|
|
"ListSchedulesResponse": {
|
|
"description": "GET /v1/api/admin/schedules response.",
|
|
"properties": {
|
|
"schedules": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ScheduleInfo"
|
|
},
|
|
"title": "Schedules",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"schedules"
|
|
],
|
|
"title": "ListSchedulesResponse",
|
|
"type": "object"
|
|
},
|
|
"ListScheduleRunsResponse": {
|
|
"description": "GET /v1/api/admin/schedules/{task_id}/runs response.",
|
|
"properties": {
|
|
"runs": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ScheduleRunInfo"
|
|
},
|
|
"title": "Runs",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"runs"
|
|
],
|
|
"title": "ListScheduleRunsResponse",
|
|
"type": "object"
|
|
},
|
|
"ScheduleRunInfo": {
|
|
"description": "Single execution record for a scheduled task.",
|
|
"properties": {
|
|
"run_id": {
|
|
"title": "Run Id",
|
|
"type": "string"
|
|
},
|
|
"task_id": {
|
|
"title": "Task Id",
|
|
"type": "string"
|
|
},
|
|
"node_id": {
|
|
"default": "",
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"ws_id": {
|
|
"default": "",
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"correlation_id": {
|
|
"default": "",
|
|
"title": "Correlation Id",
|
|
"type": "string"
|
|
},
|
|
"started": {
|
|
"title": "Started",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"default": "dispatched",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"error": {
|
|
"default": "",
|
|
"title": "Error",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"run_id",
|
|
"task_id",
|
|
"started"
|
|
],
|
|
"title": "ScheduleRunInfo",
|
|
"type": "object"
|
|
},
|
|
"RoleInfo": {
|
|
"properties": {
|
|
"role_id": {
|
|
"title": "Role Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"permissions": {
|
|
"title": "Permissions",
|
|
"type": "string"
|
|
},
|
|
"builtin": {
|
|
"title": "Builtin",
|
|
"type": "boolean"
|
|
},
|
|
"org_id": {
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
},
|
|
"effective": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Effective",
|
|
"type": "array"
|
|
},
|
|
"grants": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Grants",
|
|
"type": "array"
|
|
},
|
|
"revokes": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Revokes",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"role_id",
|
|
"name",
|
|
"display_name",
|
|
"permissions",
|
|
"builtin",
|
|
"org_id",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "RoleInfo",
|
|
"type": "object"
|
|
},
|
|
"CreateRoleRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"default": "",
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"permissions": {
|
|
"default": "read",
|
|
"title": "Permissions",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
],
|
|
"title": "CreateRoleRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdateRoleRequest": {
|
|
"properties": {
|
|
"display_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Display Name"
|
|
},
|
|
"permissions": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Permissions"
|
|
}
|
|
},
|
|
"title": "UpdateRoleRequest",
|
|
"type": "object"
|
|
},
|
|
"ListRolesResponse": {
|
|
"properties": {
|
|
"roles": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoleInfo"
|
|
},
|
|
"title": "Roles",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"roles"
|
|
],
|
|
"title": "ListRolesResponse",
|
|
"type": "object"
|
|
},
|
|
"AssignRoleRequest": {
|
|
"properties": {
|
|
"role_id": {
|
|
"title": "Role Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"role_id"
|
|
],
|
|
"title": "AssignRoleRequest",
|
|
"type": "object"
|
|
},
|
|
"UserRoleInfo": {
|
|
"properties": {
|
|
"role_id": {
|
|
"title": "Role Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"permissions": {
|
|
"title": "Permissions",
|
|
"type": "string"
|
|
},
|
|
"builtin": {
|
|
"title": "Builtin",
|
|
"type": "boolean"
|
|
},
|
|
"org_id": {
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
},
|
|
"assigned_by": {
|
|
"title": "Assigned By",
|
|
"type": "string"
|
|
},
|
|
"assignment_created": {
|
|
"title": "Assignment Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"role_id",
|
|
"name",
|
|
"display_name",
|
|
"permissions",
|
|
"builtin",
|
|
"org_id",
|
|
"created",
|
|
"updated",
|
|
"assigned_by",
|
|
"assignment_created"
|
|
],
|
|
"title": "UserRoleInfo",
|
|
"type": "object"
|
|
},
|
|
"ListUserRolesResponse": {
|
|
"properties": {
|
|
"roles": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserRoleInfo"
|
|
},
|
|
"title": "Roles",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"roles"
|
|
],
|
|
"title": "ListUserRolesResponse",
|
|
"type": "object"
|
|
},
|
|
"OrgInfo": {
|
|
"properties": {
|
|
"org_id": {
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"settings": {
|
|
"title": "Settings",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"org_id",
|
|
"name",
|
|
"display_name",
|
|
"settings",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "OrgInfo",
|
|
"type": "object"
|
|
},
|
|
"UpdateOrgRequest": {
|
|
"properties": {
|
|
"display_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Display Name"
|
|
},
|
|
"settings": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Settings"
|
|
}
|
|
},
|
|
"title": "UpdateOrgRequest",
|
|
"type": "object"
|
|
},
|
|
"ListOrgsResponse": {
|
|
"properties": {
|
|
"orgs": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/OrgInfo"
|
|
},
|
|
"title": "Orgs",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"orgs"
|
|
],
|
|
"title": "ListOrgsResponse",
|
|
"type": "object"
|
|
},
|
|
"ToolPolicyInfo": {
|
|
"properties": {
|
|
"policy_id": {
|
|
"title": "Policy Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"tool_pattern": {
|
|
"title": "Tool Pattern",
|
|
"type": "string"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"priority": {
|
|
"title": "Priority",
|
|
"type": "integer"
|
|
},
|
|
"org_id": {
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"created_by": {
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"policy_id",
|
|
"name",
|
|
"tool_pattern",
|
|
"action",
|
|
"priority",
|
|
"org_id",
|
|
"enabled",
|
|
"created_by",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "ToolPolicyInfo",
|
|
"type": "object"
|
|
},
|
|
"CreateToolPolicyRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"tool_pattern": {
|
|
"title": "Tool Pattern",
|
|
"type": "string"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"priority": {
|
|
"default": 0,
|
|
"title": "Priority",
|
|
"type": "integer"
|
|
},
|
|
"org_id": {
|
|
"default": "",
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"tool_pattern",
|
|
"action"
|
|
],
|
|
"title": "CreateToolPolicyRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdateToolPolicyRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Name"
|
|
},
|
|
"tool_pattern": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Tool Pattern"
|
|
},
|
|
"action": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Action"
|
|
},
|
|
"priority": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Priority"
|
|
},
|
|
"enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Enabled"
|
|
}
|
|
},
|
|
"title": "UpdateToolPolicyRequest",
|
|
"type": "object"
|
|
},
|
|
"ListToolPoliciesResponse": {
|
|
"properties": {
|
|
"policies": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ToolPolicyInfo"
|
|
},
|
|
"title": "Policies",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"policies"
|
|
],
|
|
"title": "ListToolPoliciesResponse",
|
|
"type": "object"
|
|
},
|
|
"UsageBreakdownItem": {
|
|
"properties": {
|
|
"key": {
|
|
"default": "",
|
|
"title": "Key",
|
|
"type": "string"
|
|
},
|
|
"prompt_tokens": {
|
|
"default": 0,
|
|
"title": "Prompt Tokens",
|
|
"type": "integer"
|
|
},
|
|
"completion_tokens": {
|
|
"default": 0,
|
|
"title": "Completion Tokens",
|
|
"type": "integer"
|
|
},
|
|
"tool_calls_count": {
|
|
"default": 0,
|
|
"title": "Tool Calls Count",
|
|
"type": "integer"
|
|
},
|
|
"cache_creation_tokens": {
|
|
"default": 0,
|
|
"title": "Cache Creation Tokens",
|
|
"type": "integer"
|
|
},
|
|
"cache_read_tokens": {
|
|
"default": 0,
|
|
"title": "Cache Read Tokens",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"title": "UsageBreakdownItem",
|
|
"type": "object"
|
|
},
|
|
"UsageResponse": {
|
|
"properties": {
|
|
"summary": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/UsageBreakdownItem"
|
|
},
|
|
"title": "Summary",
|
|
"type": "array"
|
|
},
|
|
"breakdown": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/UsageBreakdownItem"
|
|
},
|
|
"title": "Breakdown",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"summary",
|
|
"breakdown"
|
|
],
|
|
"title": "UsageResponse",
|
|
"type": "object"
|
|
},
|
|
"AuditEventInfo": {
|
|
"properties": {
|
|
"event_id": {
|
|
"title": "Event Id",
|
|
"type": "string"
|
|
},
|
|
"timestamp": {
|
|
"title": "Timestamp",
|
|
"type": "string"
|
|
},
|
|
"user_id": {
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"resource_type": {
|
|
"title": "Resource Type",
|
|
"type": "string"
|
|
},
|
|
"resource_id": {
|
|
"title": "Resource Id",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"title": "Detail",
|
|
"type": "string"
|
|
},
|
|
"ip_address": {
|
|
"title": "Ip Address",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event_id",
|
|
"timestamp",
|
|
"user_id",
|
|
"action",
|
|
"resource_type",
|
|
"resource_id",
|
|
"detail",
|
|
"ip_address",
|
|
"created"
|
|
],
|
|
"title": "AuditEventInfo",
|
|
"type": "object"
|
|
},
|
|
"ListAuditEventsResponse": {
|
|
"properties": {
|
|
"events": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/AuditEventInfo"
|
|
},
|
|
"title": "Events",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"events"
|
|
],
|
|
"title": "ListAuditEventsResponse",
|
|
"type": "object"
|
|
},
|
|
"VerdictInfo": {
|
|
"description": "Intent validation verdict.",
|
|
"properties": {
|
|
"verdict_id": {
|
|
"title": "Verdict Id",
|
|
"type": "string"
|
|
},
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"call_id": {
|
|
"title": "Call Id",
|
|
"type": "string"
|
|
},
|
|
"func_name": {
|
|
"title": "Func Name",
|
|
"type": "string"
|
|
},
|
|
"func_args": {
|
|
"default": "",
|
|
"title": "Func Args",
|
|
"type": "string"
|
|
},
|
|
"intent_summary": {
|
|
"title": "Intent Summary",
|
|
"type": "string"
|
|
},
|
|
"risk_level": {
|
|
"title": "Risk Level",
|
|
"type": "string"
|
|
},
|
|
"confidence": {
|
|
"title": "Confidence",
|
|
"type": "number"
|
|
},
|
|
"recommendation": {
|
|
"title": "Recommendation",
|
|
"type": "string"
|
|
},
|
|
"reasoning": {
|
|
"title": "Reasoning",
|
|
"type": "string"
|
|
},
|
|
"evidence": {
|
|
"default": "[]",
|
|
"title": "Evidence",
|
|
"type": "string"
|
|
},
|
|
"tier": {
|
|
"title": "Tier",
|
|
"type": "string"
|
|
},
|
|
"judge_model": {
|
|
"default": "",
|
|
"title": "Judge Model",
|
|
"type": "string"
|
|
},
|
|
"user_decision": {
|
|
"default": "",
|
|
"title": "User Decision",
|
|
"type": "string"
|
|
},
|
|
"latency_ms": {
|
|
"default": 0,
|
|
"title": "Latency Ms",
|
|
"type": "integer"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"verdict_id",
|
|
"ws_id",
|
|
"call_id",
|
|
"func_name",
|
|
"intent_summary",
|
|
"risk_level",
|
|
"confidence",
|
|
"recommendation",
|
|
"reasoning",
|
|
"tier",
|
|
"created"
|
|
],
|
|
"title": "VerdictInfo",
|
|
"type": "object"
|
|
},
|
|
"ListVerdictsResponse": {
|
|
"description": "Response for verdict listing.",
|
|
"properties": {
|
|
"verdicts": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/VerdictInfo"
|
|
},
|
|
"title": "Verdicts",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"title": "Total",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"verdicts",
|
|
"total"
|
|
],
|
|
"title": "ListVerdictsResponse",
|
|
"type": "object"
|
|
},
|
|
"OutputAssessmentInfo": {
|
|
"description": "Output guard assessment (one row per ``(call_id, tier)``).\n\n``tier`` is one of ``\"heuristic\"`` (regex stage), ``\"llm\"`` (the judge's\nown successful verdict), or ``\"llm_error\"`` (the judge ran but failed \u2014\naudit-only; ``reasoning`` carries the error). ``reasoning`` /\n``judge_model`` / ``latency_ms`` / ``confidence`` are populated on the\nLLM tiers (migration 057) and carry their defaults on heuristic rows.\nThe inline UI chip MERGES the heuristic + ``llm`` rows; this list\nendpoint exposes the raw rows for audit/calibration.",
|
|
"properties": {
|
|
"assessment_id": {
|
|
"title": "Assessment Id",
|
|
"type": "string"
|
|
},
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"call_id": {
|
|
"title": "Call Id",
|
|
"type": "string"
|
|
},
|
|
"func_name": {
|
|
"title": "Func Name",
|
|
"type": "string"
|
|
},
|
|
"flags": {
|
|
"default": "[]",
|
|
"title": "Flags",
|
|
"type": "string"
|
|
},
|
|
"risk_level": {
|
|
"default": "none",
|
|
"title": "Risk Level",
|
|
"type": "string"
|
|
},
|
|
"annotations": {
|
|
"default": "[]",
|
|
"title": "Annotations",
|
|
"type": "string"
|
|
},
|
|
"output_length": {
|
|
"default": 0,
|
|
"title": "Output Length",
|
|
"type": "integer"
|
|
},
|
|
"redacted": {
|
|
"default": 0,
|
|
"title": "Redacted",
|
|
"type": "integer"
|
|
},
|
|
"tier": {
|
|
"default": "heuristic",
|
|
"title": "Tier",
|
|
"type": "string"
|
|
},
|
|
"reasoning": {
|
|
"default": "",
|
|
"title": "Reasoning",
|
|
"type": "string"
|
|
},
|
|
"judge_model": {
|
|
"default": "",
|
|
"title": "Judge Model",
|
|
"type": "string"
|
|
},
|
|
"latency_ms": {
|
|
"default": 0,
|
|
"title": "Latency Ms",
|
|
"type": "integer"
|
|
},
|
|
"confidence": {
|
|
"default": 0.0,
|
|
"title": "Confidence",
|
|
"type": "number"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"assessment_id",
|
|
"ws_id",
|
|
"call_id",
|
|
"func_name",
|
|
"created"
|
|
],
|
|
"title": "OutputAssessmentInfo",
|
|
"type": "object"
|
|
},
|
|
"ListOutputAssessmentsResponse": {
|
|
"description": "Response for output assessment listing.",
|
|
"properties": {
|
|
"assessments": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/OutputAssessmentInfo"
|
|
},
|
|
"title": "Assessments",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"title": "Total",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"assessments",
|
|
"total"
|
|
],
|
|
"title": "ListOutputAssessmentsResponse",
|
|
"type": "object"
|
|
},
|
|
"AdminMemoryInfo": {
|
|
"properties": {
|
|
"memory_id": {
|
|
"title": "Memory Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"title": "Type",
|
|
"type": "string"
|
|
},
|
|
"scope": {
|
|
"title": "Scope",
|
|
"type": "string"
|
|
},
|
|
"scope_id": {
|
|
"default": "",
|
|
"title": "Scope Id",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"title": "Content",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
},
|
|
"last_accessed": {
|
|
"default": "",
|
|
"title": "Last Accessed",
|
|
"type": "string"
|
|
},
|
|
"access_count": {
|
|
"default": 0,
|
|
"title": "Access Count",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"memory_id",
|
|
"name",
|
|
"type",
|
|
"scope",
|
|
"content",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "AdminMemoryInfo",
|
|
"type": "object"
|
|
},
|
|
"ListAdminMemoriesResponse": {
|
|
"properties": {
|
|
"memories": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/AdminMemoryInfo"
|
|
},
|
|
"title": "Memories",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"default": 0,
|
|
"title": "Total",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"memories"
|
|
],
|
|
"title": "ListAdminMemoriesResponse",
|
|
"type": "object"
|
|
},
|
|
"SettingInfo": {
|
|
"properties": {
|
|
"key": {
|
|
"title": "Key",
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"default": null,
|
|
"title": "Value"
|
|
},
|
|
"source": {
|
|
"default": "default",
|
|
"title": "Source",
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"default": "str",
|
|
"title": "Type",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"section": {
|
|
"default": "",
|
|
"title": "Section",
|
|
"type": "string"
|
|
},
|
|
"is_secret": {
|
|
"default": false,
|
|
"title": "Is Secret",
|
|
"type": "boolean"
|
|
},
|
|
"node_id": {
|
|
"default": "",
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"changed_by": {
|
|
"default": "",
|
|
"title": "Changed By",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"default": "",
|
|
"title": "Updated",
|
|
"type": "string"
|
|
},
|
|
"restart_required": {
|
|
"default": false,
|
|
"title": "Restart Required",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"key"
|
|
],
|
|
"title": "SettingInfo",
|
|
"type": "object"
|
|
},
|
|
"ListSettingsResponse": {
|
|
"properties": {
|
|
"settings": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SettingInfo"
|
|
},
|
|
"title": "Settings",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"settings"
|
|
],
|
|
"title": "ListSettingsResponse",
|
|
"type": "object"
|
|
},
|
|
"SettingSchemaInfo": {
|
|
"properties": {
|
|
"key": {
|
|
"title": "Key",
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"title": "Type",
|
|
"type": "string"
|
|
},
|
|
"default": {
|
|
"default": null,
|
|
"title": "Default"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"section": {
|
|
"default": "",
|
|
"title": "Section",
|
|
"type": "string"
|
|
},
|
|
"is_secret": {
|
|
"default": false,
|
|
"title": "Is Secret",
|
|
"type": "boolean"
|
|
},
|
|
"min_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Min Value"
|
|
},
|
|
"max_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Value"
|
|
},
|
|
"choices": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Choices"
|
|
},
|
|
"restart_required": {
|
|
"default": false,
|
|
"title": "Restart Required",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"key",
|
|
"type"
|
|
],
|
|
"title": "SettingSchemaInfo",
|
|
"type": "object"
|
|
},
|
|
"ListSettingSchemaResponse": {
|
|
"properties": {
|
|
"schema": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SettingSchemaInfo"
|
|
},
|
|
"title": "Schema",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"schema"
|
|
],
|
|
"title": "ListSettingSchemaResponse",
|
|
"type": "object"
|
|
},
|
|
"UpdateSettingRequest": {
|
|
"properties": {
|
|
"value": {
|
|
"title": "Value"
|
|
},
|
|
"node_id": {
|
|
"default": "",
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"value"
|
|
],
|
|
"title": "UpdateSettingRequest",
|
|
"type": "object"
|
|
},
|
|
"McpServerDetail": {
|
|
"properties": {
|
|
"server_id": {
|
|
"title": "Server Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"transport": {
|
|
"title": "Transport",
|
|
"type": "string"
|
|
},
|
|
"command": {
|
|
"default": "",
|
|
"title": "Command",
|
|
"type": "string"
|
|
},
|
|
"args": {
|
|
"default": "[]",
|
|
"title": "Args",
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"default": "",
|
|
"title": "Url",
|
|
"type": "string"
|
|
},
|
|
"headers": {
|
|
"default": "{}",
|
|
"title": "Headers",
|
|
"type": "string"
|
|
},
|
|
"env": {
|
|
"default": "{}",
|
|
"title": "Env",
|
|
"type": "string"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"created_by": {
|
|
"default": "",
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"registry_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Registry Name"
|
|
},
|
|
"registry_version": {
|
|
"default": "",
|
|
"title": "Registry Version",
|
|
"type": "string"
|
|
},
|
|
"registry_meta": {
|
|
"default": "{}",
|
|
"title": "Registry Meta",
|
|
"type": "string"
|
|
},
|
|
"auth_type": {
|
|
"default": "static",
|
|
"title": "Auth Type",
|
|
"type": "string"
|
|
},
|
|
"oauth_client_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Client Id"
|
|
},
|
|
"oauth_scopes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Scopes"
|
|
},
|
|
"oauth_audience": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Audience"
|
|
},
|
|
"oauth_registration_mode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Registration Mode"
|
|
},
|
|
"oauth_authorization_server_url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Authorization Server Url"
|
|
},
|
|
"oauth_as_issuer_cached": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth As Issuer Cached"
|
|
},
|
|
"oauth_client_secret_ct": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Client Secret Ct"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/McpServerStatus"
|
|
},
|
|
"title": "Status",
|
|
"type": "object"
|
|
},
|
|
"source": {
|
|
"default": "",
|
|
"title": "Source",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"server_id",
|
|
"name",
|
|
"transport",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "McpServerDetail",
|
|
"type": "object"
|
|
},
|
|
"McpServerStatus": {
|
|
"properties": {
|
|
"connected": {
|
|
"default": false,
|
|
"title": "Connected",
|
|
"type": "boolean"
|
|
},
|
|
"tools": {
|
|
"default": 0,
|
|
"title": "Tools",
|
|
"type": "integer"
|
|
},
|
|
"resources": {
|
|
"default": 0,
|
|
"title": "Resources",
|
|
"type": "integer"
|
|
},
|
|
"prompts": {
|
|
"default": 0,
|
|
"title": "Prompts",
|
|
"type": "integer"
|
|
},
|
|
"error": {
|
|
"default": "",
|
|
"title": "Error",
|
|
"type": "string"
|
|
},
|
|
"transport": {
|
|
"default": "",
|
|
"title": "Transport",
|
|
"type": "string"
|
|
},
|
|
"command": {
|
|
"default": "",
|
|
"title": "Command",
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"default": "",
|
|
"title": "Url",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "McpServerStatus",
|
|
"type": "object"
|
|
},
|
|
"CreateMcpServerRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"transport": {
|
|
"title": "Transport",
|
|
"type": "string"
|
|
},
|
|
"command": {
|
|
"default": "",
|
|
"title": "Command",
|
|
"type": "string"
|
|
},
|
|
"args": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Args",
|
|
"type": "array"
|
|
},
|
|
"url": {
|
|
"default": "",
|
|
"title": "Url",
|
|
"type": "string"
|
|
},
|
|
"headers": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"title": "Headers",
|
|
"type": "object"
|
|
},
|
|
"env": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"title": "Env",
|
|
"type": "object"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"auth_type": {
|
|
"default": "static",
|
|
"title": "Auth Type",
|
|
"type": "string"
|
|
},
|
|
"oauth_client_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Client Id"
|
|
},
|
|
"oauth_client_secret": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Client Secret"
|
|
},
|
|
"oauth_scopes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Scopes"
|
|
},
|
|
"oauth_audience": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Audience"
|
|
},
|
|
"oauth_registration_mode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Registration Mode"
|
|
},
|
|
"oauth_authorization_server_url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Authorization Server Url"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"transport"
|
|
],
|
|
"title": "CreateMcpServerRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdateMcpServerRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Name"
|
|
},
|
|
"transport": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Transport"
|
|
},
|
|
"command": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Command"
|
|
},
|
|
"args": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Args"
|
|
},
|
|
"url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Url"
|
|
},
|
|
"headers": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Headers"
|
|
},
|
|
"env": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Env"
|
|
},
|
|
"auto_approve": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Auto Approve"
|
|
},
|
|
"enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Enabled"
|
|
},
|
|
"auth_type": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Auth Type"
|
|
},
|
|
"oauth_client_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Client Id"
|
|
},
|
|
"oauth_client_secret": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Client Secret"
|
|
},
|
|
"oauth_scopes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Scopes"
|
|
},
|
|
"oauth_audience": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Audience"
|
|
},
|
|
"oauth_registration_mode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Registration Mode"
|
|
},
|
|
"oauth_authorization_server_url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Oauth Authorization Server Url"
|
|
}
|
|
},
|
|
"title": "UpdateMcpServerRequest",
|
|
"type": "object"
|
|
},
|
|
"ListMcpServersResponse": {
|
|
"properties": {
|
|
"servers": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/McpServerDetail"
|
|
},
|
|
"title": "Servers",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"servers"
|
|
],
|
|
"title": "ListMcpServersResponse",
|
|
"type": "object"
|
|
},
|
|
"ImportMcpConfigRequest": {
|
|
"properties": {
|
|
"config": {
|
|
"additionalProperties": true,
|
|
"description": "JSON config object with mcpServers key",
|
|
"title": "Config",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"config"
|
|
],
|
|
"title": "ImportMcpConfigRequest",
|
|
"type": "object"
|
|
},
|
|
"ImportMcpConfigResponse": {
|
|
"properties": {
|
|
"imported": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Imported",
|
|
"type": "array"
|
|
},
|
|
"skipped": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Skipped",
|
|
"type": "array"
|
|
},
|
|
"errors": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Errors",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "ImportMcpConfigResponse",
|
|
"type": "object"
|
|
},
|
|
"McpReloadResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"results": {
|
|
"additionalProperties": true,
|
|
"title": "Results",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"title": "McpReloadResponse",
|
|
"type": "object"
|
|
},
|
|
"ModelDefinitionInfo": {
|
|
"properties": {
|
|
"definition_id": {
|
|
"title": "Definition Id",
|
|
"type": "string"
|
|
},
|
|
"alias": {
|
|
"title": "Alias",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"default": "openai",
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"base_url": {
|
|
"default": "",
|
|
"title": "Base Url",
|
|
"type": "string"
|
|
},
|
|
"api_key": {
|
|
"default": "",
|
|
"title": "Api Key",
|
|
"type": "string"
|
|
},
|
|
"context_window": {
|
|
"default": 32768,
|
|
"title": "Context Window",
|
|
"type": "integer"
|
|
},
|
|
"max_concurrency": {
|
|
"default": 0,
|
|
"description": "Maximum concurrent model generations for this alias in one process; zero means unlimited.",
|
|
"maximum": 2147483647,
|
|
"minimum": 0,
|
|
"title": "Max Concurrency",
|
|
"type": "integer"
|
|
},
|
|
"capabilities": {
|
|
"default": "{}",
|
|
"title": "Capabilities",
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"reasoning_effort": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Reasoning Effort"
|
|
},
|
|
"surface_persisted_reasoning": {
|
|
"default": true,
|
|
"title": "Surface Persisted Reasoning",
|
|
"type": "boolean"
|
|
},
|
|
"replay_reasoning_to_model": {
|
|
"default": false,
|
|
"title": "Replay Reasoning To Model",
|
|
"type": "boolean"
|
|
},
|
|
"auth_mode": {
|
|
"default": "static",
|
|
"title": "Auth Mode",
|
|
"type": "string"
|
|
},
|
|
"obo_audience": {
|
|
"default": "",
|
|
"title": "Obo Audience",
|
|
"type": "string"
|
|
},
|
|
"obo_scopes": {
|
|
"default": "",
|
|
"title": "Obo Scopes",
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"default": "",
|
|
"title": "Source",
|
|
"type": "string"
|
|
},
|
|
"created_by": {
|
|
"default": "",
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"default": "",
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"default": "",
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"definition_id",
|
|
"alias",
|
|
"model"
|
|
],
|
|
"title": "ModelDefinitionInfo",
|
|
"type": "object"
|
|
},
|
|
"ModelDefinitionWriteResponse": {
|
|
"description": "Create/update response: the stored row plus an optional caveat.\n\n``registry_warning`` is present only when the DB write succeeded but\nTHIS console's live coordinator registry refused to adopt it (keyless\nhost with dynamic-auth rows): the row is saved, yet running sessions\nkeep the previous config until the deployment fault is remedied.\nClients should surface it as a warning beside the success, never as a\nfailure. Absent on a clean save (SkipJsonSchema: the server omits the\nkey rather than sending null).",
|
|
"properties": {
|
|
"definition_id": {
|
|
"title": "Definition Id",
|
|
"type": "string"
|
|
},
|
|
"alias": {
|
|
"title": "Alias",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"default": "openai",
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"base_url": {
|
|
"default": "",
|
|
"title": "Base Url",
|
|
"type": "string"
|
|
},
|
|
"api_key": {
|
|
"default": "",
|
|
"title": "Api Key",
|
|
"type": "string"
|
|
},
|
|
"context_window": {
|
|
"default": 32768,
|
|
"title": "Context Window",
|
|
"type": "integer"
|
|
},
|
|
"max_concurrency": {
|
|
"default": 0,
|
|
"description": "Maximum concurrent model generations for this alias in one process; zero means unlimited.",
|
|
"maximum": 2147483647,
|
|
"minimum": 0,
|
|
"title": "Max Concurrency",
|
|
"type": "integer"
|
|
},
|
|
"capabilities": {
|
|
"default": "{}",
|
|
"title": "Capabilities",
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"reasoning_effort": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Reasoning Effort"
|
|
},
|
|
"surface_persisted_reasoning": {
|
|
"default": true,
|
|
"title": "Surface Persisted Reasoning",
|
|
"type": "boolean"
|
|
},
|
|
"replay_reasoning_to_model": {
|
|
"default": false,
|
|
"title": "Replay Reasoning To Model",
|
|
"type": "boolean"
|
|
},
|
|
"auth_mode": {
|
|
"default": "static",
|
|
"title": "Auth Mode",
|
|
"type": "string"
|
|
},
|
|
"obo_audience": {
|
|
"default": "",
|
|
"title": "Obo Audience",
|
|
"type": "string"
|
|
},
|
|
"obo_scopes": {
|
|
"default": "",
|
|
"title": "Obo Scopes",
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"default": "",
|
|
"title": "Source",
|
|
"type": "string"
|
|
},
|
|
"created_by": {
|
|
"default": "",
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"default": "",
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"default": "",
|
|
"title": "Updated",
|
|
"type": "string"
|
|
},
|
|
"registry_warning": {
|
|
"default": null,
|
|
"description": "Set when the save landed but this console's live registry refused the swap (e.g. dynamic auth configured without the startup encryption key); carries the operator-facing remediation text.",
|
|
"title": "Registry Warning",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"definition_id",
|
|
"alias",
|
|
"model"
|
|
],
|
|
"title": "ModelDefinitionWriteResponse",
|
|
"type": "object"
|
|
},
|
|
"CreateModelDefinitionRequest": {
|
|
"properties": {
|
|
"alias": {
|
|
"title": "Alias",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"default": "openai",
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"base_url": {
|
|
"default": "",
|
|
"title": "Base Url",
|
|
"type": "string"
|
|
},
|
|
"api_key": {
|
|
"default": "",
|
|
"title": "Api Key",
|
|
"type": "string"
|
|
},
|
|
"context_window": {
|
|
"default": 32768,
|
|
"title": "Context Window",
|
|
"type": "integer"
|
|
},
|
|
"max_concurrency": {
|
|
"default": 0,
|
|
"description": "Maximum concurrent model generations for this alias in one process; zero means unlimited.",
|
|
"maximum": 2147483647,
|
|
"minimum": 0,
|
|
"title": "Max Concurrency",
|
|
"type": "integer"
|
|
},
|
|
"capabilities": {
|
|
"additionalProperties": true,
|
|
"title": "Capabilities",
|
|
"type": "object"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"reasoning_effort": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Reasoning Effort"
|
|
},
|
|
"surface_persisted_reasoning": {
|
|
"default": true,
|
|
"title": "Surface Persisted Reasoning",
|
|
"type": "boolean"
|
|
},
|
|
"replay_reasoning_to_model": {
|
|
"default": false,
|
|
"title": "Replay Reasoning To Model",
|
|
"type": "boolean"
|
|
},
|
|
"auth_mode": {
|
|
"default": "static",
|
|
"title": "Auth Mode",
|
|
"type": "string"
|
|
},
|
|
"obo_audience": {
|
|
"default": "",
|
|
"title": "Obo Audience",
|
|
"type": "string"
|
|
},
|
|
"obo_scopes": {
|
|
"default": "",
|
|
"title": "Obo Scopes",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"alias",
|
|
"model"
|
|
],
|
|
"title": "CreateModelDefinitionRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdateModelDefinitionRequest": {
|
|
"properties": {
|
|
"alias": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Alias"
|
|
},
|
|
"model": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Model"
|
|
},
|
|
"provider": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Provider"
|
|
},
|
|
"base_url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Base Url"
|
|
},
|
|
"api_key": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Api Key"
|
|
},
|
|
"context_window": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Context Window"
|
|
},
|
|
"max_concurrency": {
|
|
"description": "Maximum concurrent model generations for this alias in one process; zero means unlimited.",
|
|
"maximum": 2147483647,
|
|
"minimum": 0,
|
|
"title": "Max Concurrency",
|
|
"type": "integer"
|
|
},
|
|
"capabilities": {
|
|
"additionalProperties": true,
|
|
"default": null,
|
|
"description": "Full replacement capabilities object. Omit to leave the stored value unchanged; JSON null is refused (400).",
|
|
"title": "Capabilities",
|
|
"type": "object"
|
|
},
|
|
"enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Enabled"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"reasoning_effort": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Reasoning Effort"
|
|
},
|
|
"surface_persisted_reasoning": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Surface Persisted Reasoning"
|
|
},
|
|
"replay_reasoning_to_model": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Replay Reasoning To Model"
|
|
},
|
|
"auth_mode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Auth Mode"
|
|
},
|
|
"obo_audience": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Obo Audience"
|
|
},
|
|
"obo_scopes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Obo Scopes"
|
|
}
|
|
},
|
|
"title": "UpdateModelDefinitionRequest",
|
|
"type": "object"
|
|
},
|
|
"ListModelDefinitionsResponse": {
|
|
"properties": {
|
|
"models": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ModelDefinitionInfo"
|
|
},
|
|
"title": "Models",
|
|
"type": "array"
|
|
},
|
|
"default_alias": {
|
|
"description": "Effective default alias after the config/enabled-list fallbacks",
|
|
"title": "Default Alias",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"models",
|
|
"default_alias"
|
|
],
|
|
"title": "ListModelDefinitionsResponse",
|
|
"type": "object"
|
|
},
|
|
"ModelAuthConstraintsResponse": {
|
|
"description": "Affordance data for the model shelf's Backend-auth section.\n\nSuggestions and labels only \u2014 never a gate. The write validator is the\nauthority; a client that fails to fetch this must degrade to free-text\ninput with server-side validation, not to a refusal.",
|
|
"properties": {
|
|
"auth_audience_allowlist": {
|
|
"description": "Exact gateway audiences a definition may use with entra_obo / entra_app, rendered as input suggestions. Empty means none are registered yet; writes are refused until an operator populates model.auth_audience_allowlist.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Auth Audience Allowlist",
|
|
"type": "array"
|
|
},
|
|
"auth_grant_profile": {
|
|
"description": "Deployment [oidc] obo_grant_profile, or empty when single sign-on is not configured. Each dynamic auth_mode pairs with exactly one profile (see auth_mode_profiles); the write validator refuses a new pairing that contradicts it. A transient discovery outage reports the configured profile, not empty.",
|
|
"title": "Auth Grant Profile",
|
|
"type": "string"
|
|
},
|
|
"dynamic_auth_modes": {
|
|
"description": "auth_mode values that mint per-call backend credentials, derived server-side from the registry's mode classification so the shelf's affordances (audience enable/require, section visibility) track it by data. Clients keep a hand-listed fallback only for a missing or failed constraints fetch.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Dynamic Auth Modes",
|
|
"type": "array"
|
|
},
|
|
"scopes_auth_modes": {
|
|
"description": "auth_mode values whose mint reads obo_scopes (the token-exchange scope request), same server-derived contract as dynamic_auth_modes; drives the scopes input's visibility.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Scopes Auth Modes",
|
|
"type": "array"
|
|
},
|
|
"app_identity_auth_modes": {
|
|
"description": "auth_mode values that mint a shared app/deployment identity rather than a per-user one, same server-derived contract as dynamic_auth_modes; drives the model list's auth badge wording.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "App Identity Auth Modes",
|
|
"type": "array"
|
|
},
|
|
"auth_mode_profiles": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "Required [oidc] obo_grant_profile per dynamic auth_mode. Affordance for greying options that cannot validate under this deployment's profile; the write validator remains the authority.",
|
|
"title": "Auth Mode Profiles",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"auth_audience_allowlist",
|
|
"auth_grant_profile",
|
|
"dynamic_auth_modes",
|
|
"scopes_auth_modes",
|
|
"app_identity_auth_modes",
|
|
"auth_mode_profiles"
|
|
],
|
|
"title": "ModelAuthConstraintsResponse",
|
|
"type": "object"
|
|
},
|
|
"PersonaInfo": {
|
|
"description": "Full persona row \u2014 the authoring shape (contrast PersonaChoice, the\npicker's display-only projection on the server surface).",
|
|
"properties": {
|
|
"persona_id": {
|
|
"title": "Persona Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"default": "",
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"base_prompt": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "BASE-module override; null = the kind's stock base",
|
|
"title": "Base Prompt"
|
|
},
|
|
"tool_allowlist": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Tool visibility set: null = unrestricted, [] = no tools, [names] = exact set (include 'tool_search' to keep the set soft/expandable)",
|
|
"title": "Tool Allowlist"
|
|
},
|
|
"mcp_enabled": {
|
|
"default": true,
|
|
"title": "Mcp Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"memory_enabled": {
|
|
"default": true,
|
|
"title": "Memory Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"applies_to_kinds": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Applies To Kinds",
|
|
"type": "array"
|
|
},
|
|
"is_default": {
|
|
"default": false,
|
|
"title": "Is Default",
|
|
"type": "boolean"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"description": "false = archived",
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"org_id": {
|
|
"default": "",
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"created_by": {
|
|
"default": "",
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"default": "",
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"default": "",
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"persona_id",
|
|
"name"
|
|
],
|
|
"title": "PersonaInfo",
|
|
"type": "object"
|
|
},
|
|
"CreatePersonaRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"description": "Immutable slug (lowercase: a-z, 0-9, '-', '_')",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"display_name": {
|
|
"default": "",
|
|
"title": "Display Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"base_prompt": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Inline BASE override \u2014 required. Every persona must name a prompt source; built-in file-backed personas are seeded by migration, not created here, so an operator-created persona must supply base_prompt.",
|
|
"title": "Base Prompt"
|
|
},
|
|
"tool_allowlist": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Tool Allowlist"
|
|
},
|
|
"mcp_enabled": {
|
|
"default": true,
|
|
"title": "Mcp Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"memory_enabled": {
|
|
"default": true,
|
|
"title": "Memory Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"applies_to_kinds": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Applies To Kinds",
|
|
"type": "array"
|
|
},
|
|
"is_default": {
|
|
"default": false,
|
|
"title": "Is Default",
|
|
"type": "boolean"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"org_id": {
|
|
"default": "",
|
|
"description": "Owning org (informational; capped at 64)",
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
],
|
|
"title": "CreatePersonaRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdatePersonaRequest": {
|
|
"description": "PATCH body \u2014 absent fields are left unchanged.\n\nExplicit ``null`` resets ``tool_allowlist`` to unrestricted, and \u2014 on a\nBUILT-IN persona only \u2014 clears ``base_prompt`` (the operator override),\nreverting to that persona's file-backed prompt. An OPERATOR persona has no\nfallback source, so ``base_prompt: null`` on one is rejected: every persona\nmust name a prompt source. ``null`` on the boolean flags or\n``applies_to_kinds`` is ignored (treated as absent), so a client serializing\nunset optionals as null cannot archive a persona or flip levers by accident.\n\nArchive = ``{\"enabled\": false}``; default flip = ``{\"is_default\": true}``\non the successor (storage demotes the incumbent atomically). ``name``\nis immutable; existing workstreams are never affected by edits.",
|
|
"properties": {
|
|
"display_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Display Name"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Description"
|
|
},
|
|
"base_prompt": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Base Prompt"
|
|
},
|
|
"tool_allowlist": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Tool Allowlist"
|
|
},
|
|
"mcp_enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Mcp Enabled"
|
|
},
|
|
"memory_enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Memory Enabled"
|
|
},
|
|
"applies_to_kinds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Applies To Kinds"
|
|
},
|
|
"is_default": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Is Default"
|
|
},
|
|
"enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Enabled"
|
|
}
|
|
},
|
|
"title": "UpdatePersonaRequest",
|
|
"type": "object"
|
|
},
|
|
"ListPersonasResponse": {
|
|
"properties": {
|
|
"personas": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/PersonaInfo"
|
|
},
|
|
"title": "Personas",
|
|
"type": "array"
|
|
},
|
|
"tool_inventory": {
|
|
"additionalProperties": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"description": "Per-kind builtin tool names (plus the synthetic 'tool_search') for the visibility checklist \u2014 derived server-side so clients never hand-mirror the inventory",
|
|
"title": "Tool Inventory",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"personas"
|
|
],
|
|
"title": "ListPersonasResponse",
|
|
"type": "object"
|
|
},
|
|
"ModelReloadResponse": {
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"results": {
|
|
"additionalProperties": true,
|
|
"title": "Results",
|
|
"type": "object"
|
|
},
|
|
"registry_warning": {
|
|
"default": null,
|
|
"description": "Set when the node fan-out ran but THIS console's live registry refused the swap (e.g. dynamic auth configured without the startup encryption key); carries the operator-facing remediation text.",
|
|
"title": "Registry Warning",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "ModelReloadResponse",
|
|
"type": "object"
|
|
},
|
|
"DeleteModelDefinitionResponse": {
|
|
"description": "Delete response: the removed row id plus an optional caveat.\n\n``registry_warning`` mirrors ModelDefinitionWriteResponse: the DB row\nis gone, but a keyless console's live registry refused the swap and\nkeeps SERVING the deleted alias to running and new coordinator\nsessions until the deployment fault is remedied.",
|
|
"properties": {
|
|
"status": {
|
|
"default": "ok",
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"definition_id": {
|
|
"title": "Definition Id",
|
|
"type": "string"
|
|
},
|
|
"registry_warning": {
|
|
"default": null,
|
|
"description": "Set when the delete landed but this console's live registry refused the swap and keeps serving the deleted alias; carries the operator-facing remediation text.",
|
|
"title": "Registry Warning",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"definition_id"
|
|
],
|
|
"title": "DeleteModelDefinitionResponse",
|
|
"type": "object"
|
|
},
|
|
"DetectModelRequest": {
|
|
"properties": {
|
|
"provider": {
|
|
"default": "openai",
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"base_url": {
|
|
"default": "",
|
|
"title": "Base Url",
|
|
"type": "string"
|
|
},
|
|
"api_key": {
|
|
"default": "",
|
|
"title": "Api Key",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"definition_id": {
|
|
"default": "",
|
|
"title": "Definition Id",
|
|
"type": "string"
|
|
},
|
|
"supports_rerank": {
|
|
"default": false,
|
|
"title": "Supports Rerank",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "DetectModelRequest",
|
|
"type": "object"
|
|
},
|
|
"DetectModelResponse": {
|
|
"properties": {
|
|
"reachable": {
|
|
"default": false,
|
|
"title": "Reachable",
|
|
"type": "boolean"
|
|
},
|
|
"model_found": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Model Found"
|
|
},
|
|
"available_models": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Available Models",
|
|
"type": "array"
|
|
},
|
|
"context_window": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Context Window"
|
|
},
|
|
"server_type": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Server Type"
|
|
},
|
|
"error": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Error"
|
|
},
|
|
"capabilities": {
|
|
"additionalProperties": true,
|
|
"title": "Capabilities",
|
|
"type": "object"
|
|
},
|
|
"rerank_calibration_note": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Rerank Calibration Note"
|
|
}
|
|
},
|
|
"title": "DetectModelResponse",
|
|
"type": "object"
|
|
},
|
|
"CalibrateModelResponse": {
|
|
"properties": {
|
|
"separated": {
|
|
"default": false,
|
|
"title": "Separated",
|
|
"type": "boolean"
|
|
},
|
|
"suggested_threshold": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Suggested Threshold"
|
|
},
|
|
"raw_scale": {
|
|
"default": "",
|
|
"title": "Raw Scale",
|
|
"type": "string"
|
|
},
|
|
"relevant": {
|
|
"items": {
|
|
"type": "number"
|
|
},
|
|
"title": "Relevant",
|
|
"type": "array"
|
|
},
|
|
"irrelevant": {
|
|
"items": {
|
|
"type": "number"
|
|
},
|
|
"title": "Irrelevant",
|
|
"type": "array"
|
|
},
|
|
"applied": {
|
|
"default": false,
|
|
"title": "Applied",
|
|
"type": "boolean"
|
|
},
|
|
"error": {
|
|
"default": "",
|
|
"title": "Error",
|
|
"type": "string"
|
|
},
|
|
"registry_warning": {
|
|
"default": null,
|
|
"description": "Set when the calibration was stored but this console's live registry refused the swap; carries the operator-facing remediation text.",
|
|
"title": "Registry Warning",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "CalibrateModelResponse",
|
|
"type": "object"
|
|
},
|
|
"ModelCapabilitiesResponse": {
|
|
"properties": {
|
|
"model": {
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"known": {
|
|
"default": false,
|
|
"title": "Known",
|
|
"type": "boolean"
|
|
},
|
|
"capabilities": {
|
|
"additionalProperties": true,
|
|
"title": "Capabilities",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"model",
|
|
"provider"
|
|
],
|
|
"title": "ModelCapabilitiesResponse",
|
|
"type": "object"
|
|
},
|
|
"KnownModelsResponse": {
|
|
"properties": {
|
|
"provider": {
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"models": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Models",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"provider"
|
|
],
|
|
"title": "KnownModelsResponse",
|
|
"type": "object"
|
|
},
|
|
"AvailableModelInfo": {
|
|
"properties": {
|
|
"alias": {
|
|
"title": "Alias",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"title": "Provider",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"alias",
|
|
"model",
|
|
"provider"
|
|
],
|
|
"title": "AvailableModelInfo",
|
|
"type": "object"
|
|
},
|
|
"ListAvailableModelsResponse": {
|
|
"properties": {
|
|
"models": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/AvailableModelInfo"
|
|
},
|
|
"title": "Models",
|
|
"type": "array"
|
|
},
|
|
"default_alias": {
|
|
"default": "",
|
|
"title": "Default Alias",
|
|
"type": "string"
|
|
},
|
|
"channel_default_alias": {
|
|
"default": "",
|
|
"title": "Channel Default Alias",
|
|
"type": "string"
|
|
},
|
|
"coordinator_default_alias": {
|
|
"default": "",
|
|
"title": "Coordinator Default Alias",
|
|
"type": "string"
|
|
},
|
|
"judge_default_alias": {
|
|
"default": "",
|
|
"title": "Judge Default Alias",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "ListAvailableModelsResponse",
|
|
"type": "object"
|
|
},
|
|
"RegistrySearchResponse": {
|
|
"properties": {
|
|
"servers": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RegistryServerInfo"
|
|
},
|
|
"title": "Servers",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"default": 0,
|
|
"title": "Total",
|
|
"type": "integer"
|
|
},
|
|
"next_cursor": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Next Cursor"
|
|
}
|
|
},
|
|
"required": [
|
|
"servers"
|
|
],
|
|
"title": "RegistrySearchResponse",
|
|
"type": "object"
|
|
},
|
|
"RegistryPackageInfo": {
|
|
"properties": {
|
|
"registry_type": {
|
|
"default": "",
|
|
"title": "Registry Type",
|
|
"type": "string"
|
|
},
|
|
"identifier": {
|
|
"default": "",
|
|
"title": "Identifier",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"default": "",
|
|
"title": "Version",
|
|
"type": "string"
|
|
},
|
|
"transport_type": {
|
|
"default": "stdio",
|
|
"title": "Transport Type",
|
|
"type": "string"
|
|
},
|
|
"environment_variables": {
|
|
"items": {
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
"title": "Environment Variables",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "RegistryPackageInfo",
|
|
"type": "object"
|
|
},
|
|
"RegistryRemoteInfo": {
|
|
"properties": {
|
|
"type": {
|
|
"default": "streamable-http",
|
|
"title": "Type",
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"default": "",
|
|
"title": "Url",
|
|
"type": "string"
|
|
},
|
|
"headers": {
|
|
"items": {
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
"title": "Headers",
|
|
"type": "array"
|
|
},
|
|
"variables": {
|
|
"additionalProperties": {
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
"title": "Variables",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"title": "RegistryRemoteInfo",
|
|
"type": "object"
|
|
},
|
|
"RegistryServerInfo": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"default": "",
|
|
"title": "Title",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"default": "",
|
|
"title": "Version",
|
|
"type": "string"
|
|
},
|
|
"website_url": {
|
|
"default": "",
|
|
"title": "Website Url",
|
|
"type": "string"
|
|
},
|
|
"repository": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"title": "Repository",
|
|
"type": "object"
|
|
},
|
|
"icons": {
|
|
"items": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
"title": "Icons",
|
|
"type": "array"
|
|
},
|
|
"remotes": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RegistryRemoteInfo"
|
|
},
|
|
"title": "Remotes",
|
|
"type": "array"
|
|
},
|
|
"packages": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RegistryPackageInfo"
|
|
},
|
|
"title": "Packages",
|
|
"type": "array"
|
|
},
|
|
"meta": {
|
|
"additionalProperties": true,
|
|
"title": "Meta",
|
|
"type": "object"
|
|
},
|
|
"installed": {
|
|
"default": false,
|
|
"title": "Installed",
|
|
"type": "boolean"
|
|
},
|
|
"installed_server_id": {
|
|
"default": "",
|
|
"title": "Installed Server Id",
|
|
"type": "string"
|
|
},
|
|
"installed_version": {
|
|
"default": "",
|
|
"title": "Installed Version",
|
|
"type": "string"
|
|
},
|
|
"update_available": {
|
|
"default": false,
|
|
"title": "Update Available",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
],
|
|
"title": "RegistryServerInfo",
|
|
"type": "object"
|
|
},
|
|
"RegistryInstallRequest": {
|
|
"properties": {
|
|
"registry_name": {
|
|
"title": "Registry Name",
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"title": "Source",
|
|
"type": "string"
|
|
},
|
|
"index": {
|
|
"default": 0,
|
|
"title": "Index",
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"default": "",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"variables": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"title": "Variables",
|
|
"type": "object"
|
|
},
|
|
"env": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"title": "Env",
|
|
"type": "object"
|
|
},
|
|
"headers": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"title": "Headers",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"registry_name",
|
|
"source"
|
|
],
|
|
"title": "RegistryInstallRequest",
|
|
"type": "object"
|
|
},
|
|
"SkillDiscoverResponse": {
|
|
"properties": {
|
|
"skills": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillDiscoverListing"
|
|
},
|
|
"title": "Skills",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"skills"
|
|
],
|
|
"title": "SkillDiscoverResponse",
|
|
"type": "object"
|
|
},
|
|
"SkillDiscoverListing": {
|
|
"properties": {
|
|
"id": {
|
|
"title": "Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"author": {
|
|
"default": "",
|
|
"title": "Author",
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"default": "",
|
|
"title": "Source",
|
|
"type": "string"
|
|
},
|
|
"source_url": {
|
|
"default": "",
|
|
"title": "Source Url",
|
|
"type": "string"
|
|
},
|
|
"install_count": {
|
|
"default": 0,
|
|
"title": "Install Count",
|
|
"type": "integer"
|
|
},
|
|
"tags": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Tags",
|
|
"type": "array"
|
|
},
|
|
"installed": {
|
|
"default": false,
|
|
"title": "Installed",
|
|
"type": "boolean"
|
|
},
|
|
"risk_level": {
|
|
"default": "",
|
|
"title": "Risk Level",
|
|
"type": "string"
|
|
},
|
|
"template_id": {
|
|
"default": "",
|
|
"title": "Template Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name"
|
|
],
|
|
"title": "SkillDiscoverListing",
|
|
"type": "object"
|
|
},
|
|
"SkillInstallRequest": {
|
|
"properties": {
|
|
"source": {
|
|
"title": "Source",
|
|
"type": "string"
|
|
},
|
|
"skill_id": {
|
|
"default": "",
|
|
"title": "Skill Id",
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"default": "",
|
|
"title": "Url",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"source"
|
|
],
|
|
"title": "SkillInstallRequest",
|
|
"type": "object"
|
|
},
|
|
"SkillInstallResponse": {
|
|
"properties": {
|
|
"installed": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillInfo"
|
|
},
|
|
"title": "Installed",
|
|
"type": "array"
|
|
},
|
|
"skipped": {
|
|
"default": [],
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillInstallSkipped"
|
|
},
|
|
"title": "Skipped",
|
|
"type": "array"
|
|
},
|
|
"total": {
|
|
"default": 0,
|
|
"title": "Total",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"installed"
|
|
],
|
|
"title": "SkillInstallResponse",
|
|
"type": "object"
|
|
},
|
|
"SkillInfo": {
|
|
"properties": {
|
|
"template_id": {
|
|
"description": "Skill ID",
|
|
"title": "Template Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"category": {
|
|
"title": "Category",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"title": "Content",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"tags": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Tags",
|
|
"type": "array"
|
|
},
|
|
"variables": {
|
|
"default": "[]",
|
|
"title": "Variables",
|
|
"type": "string"
|
|
},
|
|
"is_default": {
|
|
"title": "Is Default",
|
|
"type": "boolean"
|
|
},
|
|
"activation": {
|
|
"default": "named",
|
|
"title": "Activation",
|
|
"type": "string"
|
|
},
|
|
"org_id": {
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"created_by": {
|
|
"title": "Created By",
|
|
"type": "string"
|
|
},
|
|
"origin": {
|
|
"default": "manual",
|
|
"title": "Origin",
|
|
"type": "string"
|
|
},
|
|
"mcp_server": {
|
|
"default": "",
|
|
"title": "Mcp Server",
|
|
"type": "string"
|
|
},
|
|
"readonly": {
|
|
"default": false,
|
|
"title": "Readonly",
|
|
"type": "boolean"
|
|
},
|
|
"source_url": {
|
|
"default": "",
|
|
"title": "Source Url",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"default": "1.0.0",
|
|
"title": "Version",
|
|
"type": "string"
|
|
},
|
|
"author": {
|
|
"default": "",
|
|
"title": "Author",
|
|
"type": "string"
|
|
},
|
|
"token_estimate": {
|
|
"default": 0,
|
|
"title": "Token Estimate",
|
|
"type": "integer"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"reasoning_effort": {
|
|
"default": "",
|
|
"title": "Reasoning Effort",
|
|
"type": "string"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"token_budget": {
|
|
"default": 0,
|
|
"title": "Token Budget",
|
|
"type": "integer"
|
|
},
|
|
"agent_max_turns": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Agent Max Turns"
|
|
},
|
|
"notify_on_complete": {
|
|
"default": "[]",
|
|
"title": "Notify On Complete",
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"priority": {
|
|
"default": 0,
|
|
"title": "Priority",
|
|
"type": "integer"
|
|
},
|
|
"allowed_tools": {
|
|
"default": "[]",
|
|
"title": "Allowed Tools",
|
|
"type": "string"
|
|
},
|
|
"license": {
|
|
"default": "",
|
|
"title": "License",
|
|
"type": "string"
|
|
},
|
|
"compatibility": {
|
|
"default": "",
|
|
"title": "Compatibility",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"$ref": "#/components/schemas/SkillKind",
|
|
"default": "any"
|
|
},
|
|
"risk_level": {
|
|
"default": "",
|
|
"title": "Risk Level",
|
|
"type": "string"
|
|
},
|
|
"scan_report": {
|
|
"default": "{}",
|
|
"title": "Scan Report",
|
|
"type": "string"
|
|
},
|
|
"scan_version": {
|
|
"default": "",
|
|
"title": "Scan Version",
|
|
"type": "string"
|
|
},
|
|
"paths": {
|
|
"default": "[]",
|
|
"title": "Paths",
|
|
"type": "string"
|
|
},
|
|
"hidden_from_menu": {
|
|
"default": false,
|
|
"title": "Hidden From Menu",
|
|
"type": "boolean"
|
|
},
|
|
"arguments": {
|
|
"default": "[]",
|
|
"title": "Arguments",
|
|
"type": "string"
|
|
},
|
|
"argument_hint": {
|
|
"default": "",
|
|
"title": "Argument Hint",
|
|
"type": "string"
|
|
},
|
|
"resource_count": {
|
|
"default": 0,
|
|
"title": "Resource Count",
|
|
"type": "integer"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
},
|
|
"updated": {
|
|
"title": "Updated",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"template_id",
|
|
"name",
|
|
"category",
|
|
"content",
|
|
"is_default",
|
|
"org_id",
|
|
"created_by",
|
|
"created",
|
|
"updated"
|
|
],
|
|
"title": "SkillInfo",
|
|
"type": "object"
|
|
},
|
|
"SkillInstallSkipped": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"reason": {
|
|
"title": "Reason",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"reason"
|
|
],
|
|
"title": "SkillInstallSkipped",
|
|
"type": "object"
|
|
},
|
|
"SkillKind": {
|
|
"description": "Which ``list_skills`` surface a skill row is visible on.\n\n``INTERACTIVE`` \u2014 only the interactive-session activation path sees\nthis row. ``COORDINATOR`` \u2014 only the coordinator's ``list_skills``\ntool sees this row. ``ANY`` \u2014 both sides (default for legacy rows\npredating the classifier).",
|
|
"enum": [
|
|
"interactive",
|
|
"coordinator",
|
|
"any"
|
|
],
|
|
"title": "SkillKind",
|
|
"type": "string"
|
|
},
|
|
"SkillVersionInfo": {
|
|
"properties": {
|
|
"id": {
|
|
"title": "Id",
|
|
"type": "integer"
|
|
},
|
|
"skill_id": {
|
|
"title": "Skill Id",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"title": "Version",
|
|
"type": "integer"
|
|
},
|
|
"snapshot": {
|
|
"title": "Snapshot",
|
|
"type": "string"
|
|
},
|
|
"changed_by": {
|
|
"title": "Changed By",
|
|
"type": "string"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"skill_id",
|
|
"version",
|
|
"snapshot",
|
|
"changed_by",
|
|
"created"
|
|
],
|
|
"title": "SkillVersionInfo",
|
|
"type": "object"
|
|
},
|
|
"ParseSkillRequest": {
|
|
"properties": {
|
|
"raw": {
|
|
"description": "Raw SKILL.md text \u2014 YAML frontmatter delimited by ``---`` followed by the markdown body. Capped at 32 KiB to match ``admin_create_skill``'s ``content`` ceiling and to bound the synchronous YAML parser's worst-case CPU cost. The handler reuses the Python parser at ``turnstone.core.skill_parser`` so admin UIs and external import paths agree on field extraction.",
|
|
"maxLength": 32768,
|
|
"minLength": 1,
|
|
"title": "Raw",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"raw"
|
|
],
|
|
"title": "ParseSkillRequest",
|
|
"type": "object"
|
|
},
|
|
"ParseSkillResponse": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"title": "Content",
|
|
"type": "string"
|
|
},
|
|
"tags": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Tags",
|
|
"type": "array"
|
|
},
|
|
"author": {
|
|
"default": "",
|
|
"title": "Author",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"default": "1.0.0",
|
|
"title": "Version",
|
|
"type": "string"
|
|
},
|
|
"allowed_tools": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Allowed Tools",
|
|
"type": "array"
|
|
},
|
|
"license": {
|
|
"default": "",
|
|
"title": "License",
|
|
"type": "string"
|
|
},
|
|
"compatibility": {
|
|
"default": "",
|
|
"title": "Compatibility",
|
|
"type": "string"
|
|
},
|
|
"paths": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Paths",
|
|
"type": "array"
|
|
},
|
|
"when_to_use": {
|
|
"default": "",
|
|
"title": "When To Use",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"effort": {
|
|
"default": "",
|
|
"title": "Effort",
|
|
"type": "string"
|
|
},
|
|
"disable_model_invocation": {
|
|
"default": false,
|
|
"title": "Disable Model Invocation",
|
|
"type": "boolean"
|
|
},
|
|
"user_invocable": {
|
|
"default": true,
|
|
"title": "User Invocable",
|
|
"type": "boolean"
|
|
},
|
|
"arguments": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Arguments",
|
|
"type": "array"
|
|
},
|
|
"argument_hint": {
|
|
"default": "",
|
|
"title": "Argument Hint",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"description",
|
|
"content"
|
|
],
|
|
"title": "ParseSkillResponse",
|
|
"type": "object"
|
|
},
|
|
"CreateSkillRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"title": "Content",
|
|
"type": "string"
|
|
},
|
|
"category": {
|
|
"default": "general",
|
|
"title": "Category",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"description": "Human-readable description surfaced by the ``skills`` find/get tool and the admin UI. Must be non-empty \u2014 catches skills registered without thinking about discoverability before they reach a model's tool-selection prompt.",
|
|
"maxLength": 1536,
|
|
"minLength": 1,
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"tags": {
|
|
"default": "[]",
|
|
"title": "Tags",
|
|
"type": "string"
|
|
},
|
|
"variables": {
|
|
"default": "[]",
|
|
"title": "Variables",
|
|
"type": "string"
|
|
},
|
|
"is_default": {
|
|
"default": false,
|
|
"title": "Is Default",
|
|
"type": "boolean"
|
|
},
|
|
"activation": {
|
|
"default": "named",
|
|
"title": "Activation",
|
|
"type": "string"
|
|
},
|
|
"org_id": {
|
|
"default": "",
|
|
"title": "Org Id",
|
|
"type": "string"
|
|
},
|
|
"author": {
|
|
"default": "",
|
|
"title": "Author",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"default": "1.0.0",
|
|
"title": "Version",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"reasoning_effort": {
|
|
"default": "",
|
|
"title": "Reasoning Effort",
|
|
"type": "string"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"token_budget": {
|
|
"default": 0,
|
|
"title": "Token Budget",
|
|
"type": "integer"
|
|
},
|
|
"agent_max_turns": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Agent Max Turns"
|
|
},
|
|
"notify_on_complete": {
|
|
"default": "[]",
|
|
"title": "Notify On Complete",
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"default": true,
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"priority": {
|
|
"default": 0,
|
|
"title": "Priority",
|
|
"type": "integer"
|
|
},
|
|
"allowed_tools": {
|
|
"default": "[]",
|
|
"title": "Allowed Tools",
|
|
"type": "string"
|
|
},
|
|
"license": {
|
|
"default": "",
|
|
"title": "License",
|
|
"type": "string"
|
|
},
|
|
"compatibility": {
|
|
"default": "",
|
|
"title": "Compatibility",
|
|
"type": "string"
|
|
},
|
|
"paths": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
],
|
|
"default": "[]",
|
|
"title": "Paths"
|
|
},
|
|
"hidden_from_menu": {
|
|
"default": false,
|
|
"title": "Hidden From Menu",
|
|
"type": "boolean"
|
|
},
|
|
"arguments": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
],
|
|
"default": "[]",
|
|
"title": "Arguments"
|
|
},
|
|
"argument_hint": {
|
|
"default": "",
|
|
"title": "Argument Hint",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"$ref": "#/components/schemas/SkillKind",
|
|
"default": "any",
|
|
"description": "Authored audience metadata \u2014 passive marker for sorting/grouping and discoverability narrowing. ``interactive`` marks the skill as authored for interactive sessions; ``coordinator`` marks it for coordinator delegation; ``any`` (default) signals no preferred audience. Not a runtime visibility gate after the SkillKind enforcement flatten (#557) \u2014 every session kind can find, get, and load every skill regardless of this field; real access control remains ``allowed_tools`` + ``auto_approve``."
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"content",
|
|
"description"
|
|
],
|
|
"title": "CreateSkillRequest",
|
|
"type": "object"
|
|
},
|
|
"UpdateSkillRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Name"
|
|
},
|
|
"content": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content"
|
|
},
|
|
"category": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Category"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 1536,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "When present, replaces the skill description. Must be non-empty \u2014 the admin endpoint rejects a blanking update.",
|
|
"title": "Description"
|
|
},
|
|
"tags": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Tags"
|
|
},
|
|
"variables": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Variables"
|
|
},
|
|
"is_default": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Is Default"
|
|
},
|
|
"activation": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Activation"
|
|
},
|
|
"author": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Author"
|
|
},
|
|
"version": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Version"
|
|
},
|
|
"model": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Model"
|
|
},
|
|
"auto_approve": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Auto Approve"
|
|
},
|
|
"temperature": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Temperature"
|
|
},
|
|
"reasoning_effort": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Reasoning Effort"
|
|
},
|
|
"max_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Max Tokens"
|
|
},
|
|
"token_budget": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Token Budget"
|
|
},
|
|
"agent_max_turns": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Agent Max Turns"
|
|
},
|
|
"notify_on_complete": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Notify On Complete"
|
|
},
|
|
"enabled": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Enabled"
|
|
},
|
|
"priority": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Priority"
|
|
},
|
|
"allowed_tools": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Allowed Tools"
|
|
},
|
|
"license": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "License"
|
|
},
|
|
"compatibility": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Compatibility"
|
|
},
|
|
"paths": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Paths"
|
|
},
|
|
"hidden_from_menu": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Hidden From Menu"
|
|
},
|
|
"arguments": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Arguments"
|
|
},
|
|
"argument_hint": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Argument Hint"
|
|
},
|
|
"kind": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkillKind"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "When present, updates the skill's classifier. Same accepted values as ``CreateSkillRequest.kind``."
|
|
}
|
|
},
|
|
"title": "UpdateSkillRequest",
|
|
"type": "object"
|
|
},
|
|
"ListSkillsResponse": {
|
|
"properties": {
|
|
"skills": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillInfo"
|
|
},
|
|
"title": "Skills",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"skills"
|
|
],
|
|
"title": "ListSkillsResponse",
|
|
"type": "object"
|
|
},
|
|
"ListSkillVersionsResponse": {
|
|
"properties": {
|
|
"versions": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillVersionInfo"
|
|
},
|
|
"title": "Versions",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"versions"
|
|
],
|
|
"title": "ListSkillVersionsResponse",
|
|
"type": "object"
|
|
},
|
|
"SkillResourceInfo": {
|
|
"properties": {
|
|
"resource_id": {
|
|
"title": "Resource Id",
|
|
"type": "string"
|
|
},
|
|
"skill_id": {
|
|
"title": "Skill Id",
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"title": "Path",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"default": "",
|
|
"title": "Content",
|
|
"type": "string"
|
|
},
|
|
"content_type": {
|
|
"default": "text/plain",
|
|
"title": "Content Type",
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"default": 0,
|
|
"title": "Size",
|
|
"type": "integer"
|
|
},
|
|
"created": {
|
|
"title": "Created",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"resource_id",
|
|
"skill_id",
|
|
"path",
|
|
"created"
|
|
],
|
|
"title": "SkillResourceInfo",
|
|
"type": "object"
|
|
},
|
|
"CreateSkillResourceRequest": {
|
|
"properties": {
|
|
"path": {
|
|
"title": "Path",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"title": "Content",
|
|
"type": "string"
|
|
},
|
|
"content_type": {
|
|
"default": "text/plain",
|
|
"title": "Content Type",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"path",
|
|
"content"
|
|
],
|
|
"title": "CreateSkillResourceRequest",
|
|
"type": "object"
|
|
},
|
|
"ListSkillResourcesResponse": {
|
|
"properties": {
|
|
"resources": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillResourceInfo"
|
|
},
|
|
"title": "Resources",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"resources"
|
|
],
|
|
"title": "ListSkillResourcesResponse",
|
|
"type": "object"
|
|
},
|
|
"RouteResponse": {
|
|
"description": "Route lookup result \u2014 which node owns a workstream.",
|
|
"properties": {
|
|
"node_url": {
|
|
"title": "Node Url",
|
|
"type": "string"
|
|
},
|
|
"node_id": {
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"node_url",
|
|
"node_id"
|
|
],
|
|
"title": "RouteResponse",
|
|
"type": "object"
|
|
},
|
|
"RouteLiveResponse": {
|
|
"description": "Non-mutating live-session probe for one routed workstream.",
|
|
"properties": {
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"live": {
|
|
"title": "Live",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id",
|
|
"live"
|
|
],
|
|
"title": "RouteLiveResponse",
|
|
"type": "object"
|
|
},
|
|
"RouteCreateRequest": {
|
|
"description": "JSON workstream creation through the routing proxy.",
|
|
"properties": {
|
|
"name": {
|
|
"default": "",
|
|
"description": "Workstream display name (auto-generated if empty)",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"default": "",
|
|
"description": "Model alias from registry",
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"judge_model": {
|
|
"default": "",
|
|
"description": "Optional judge model alias for this workstream. Empty uses the server's configured judge model.",
|
|
"title": "Judge Model",
|
|
"type": "string"
|
|
},
|
|
"auto_approve": {
|
|
"default": false,
|
|
"description": "Auto-approve all tool calls",
|
|
"title": "Auto Approve",
|
|
"type": "boolean"
|
|
},
|
|
"auto_approve_tools": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "Tool names to auto-approve even when auto_approve is false, accepted as either a comma-separated string or an array of strings.",
|
|
"title": "Auto Approve Tools"
|
|
},
|
|
"user_id": {
|
|
"default": "",
|
|
"description": "Optional workstream owner override. Honored only for trusted service identities (currently the console); ordinary callers remain bound to their authenticated user id.",
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"resume_ws": {
|
|
"default": "",
|
|
"description": "Source workstream ID or alias to fork atomically into the new workstream (empty = fresh start)",
|
|
"title": "Resume Ws",
|
|
"type": "string"
|
|
},
|
|
"skill": {
|
|
"default": "",
|
|
"description": "Skill name (replaces default skills)",
|
|
"title": "Skill",
|
|
"type": "string"
|
|
},
|
|
"persona": {
|
|
"default": "",
|
|
"description": "Persona name (slug) to create the workstream with. Resolved and snapshotted at creation \u2014 later persona edits never affect this workstream. Empty selects the kind's default persona; on a database with no personas seeded the workstream is created with legacy (unrestricted) behavior.",
|
|
"title": "Persona",
|
|
"type": "string"
|
|
},
|
|
"notify_targets": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"items": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"type": "object"
|
|
},
|
|
"type": "array"
|
|
}
|
|
],
|
|
"default": "[]",
|
|
"description": "Notification targets, accepted as either a JSON string or a structured array of objects containing channel_type + channel_id/user_id",
|
|
"title": "Notify Targets"
|
|
},
|
|
"client_type": {
|
|
"default": "",
|
|
"description": "Client surface type (web, cli, chat, scheduled). Defaults to web for server-created sessions.",
|
|
"title": "Client Type",
|
|
"type": "string"
|
|
},
|
|
"initial_message": {
|
|
"default": "",
|
|
"description": "Optional first user message dispatched as a background turn after the workstream is created. When attachments are also provided (via the multipart variant), they are attached to this turn.",
|
|
"title": "Initial Message",
|
|
"type": "string"
|
|
},
|
|
"ws_id": {
|
|
"default": "",
|
|
"description": "Optional caller-supplied workstream id (32-hex). Required when creating with attachments via the cluster routing layer so the console can hash to the owning node before the multipart body lands. Auto-generated when omitted.",
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"$ref": "#/components/schemas/WorkstreamKind",
|
|
"default": "interactive",
|
|
"description": "Workstream kind \u2014 'interactive' (default) or 'coordinator'. Coordinator workstreams are created by the console's own /v1/api/workstreams/new endpoint; clients hitting /v1/api/workstreams/new should leave this at the default."
|
|
},
|
|
"parent_ws_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional parent workstream id. Populated on children spawned by a coordinator so the parent/child relationship survives restart and appears in audit / list views.",
|
|
"title": "Parent Ws Id"
|
|
},
|
|
"project_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional project to attach this workstream to. Drives the shared 'project' memory scope; coordinator children inherit the parent's project.",
|
|
"title": "Project Id"
|
|
},
|
|
"target_node": {
|
|
"default": "",
|
|
"description": "Optional node id to pin placement to. The console generates a workstream id whose rendezvous owner is that node.",
|
|
"title": "Target Node",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "RouteCreateRequest",
|
|
"type": "object"
|
|
},
|
|
"WorkstreamKind": {
|
|
"description": "Classifier for which manager hosts a workstream.\n\nStrEnum so members are drop-in ``str`` replacements for the DB column,\nJSON payloads, and existing ``==`` comparisons against raw strings.\nNarrow internal annotations to this type; wide boundaries (HTTP body,\nDB row) stay ``str`` and parse via ``WorkstreamKind(raw)`` / ``from_raw``\nat the edge.",
|
|
"enum": [
|
|
"interactive",
|
|
"coordinator"
|
|
],
|
|
"title": "WorkstreamKind",
|
|
"type": "string"
|
|
},
|
|
"RouteCreateResponse": {
|
|
"description": "Workstream creation via the routing proxy.",
|
|
"properties": {
|
|
"ws_id": {
|
|
"description": "Unique ID of the new workstream",
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "Assigned workstream name",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"resumed": {
|
|
"default": false,
|
|
"description": "Whether the requested source was successfully forked",
|
|
"title": "Resumed",
|
|
"type": "boolean"
|
|
},
|
|
"message_count": {
|
|
"default": 0,
|
|
"description": "Number of messages cloned into the new workstream",
|
|
"title": "Message Count",
|
|
"type": "integer"
|
|
},
|
|
"attachment_ids": {
|
|
"description": "Ids of attachments saved by this request (multipart variant only). Already attached to the initial_message turn when one was provided; otherwise left pending for a follow-up POST /v1/api/workstreams/{ws_id}/send.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Attachment Ids",
|
|
"type": "array"
|
|
},
|
|
"initial_message_status": {
|
|
"description": "Present ONLY when the workstream was created but its initial_message could not be delivered: 'queue_full' (a raced live worker's interjection queue was at capacity \u2014 resend via /send; any uploads stay staged) or 'refused_closed' (the workstream was closed mid-create). Absent whenever the message was dispatched.",
|
|
"enum": [
|
|
"queue_full",
|
|
"refused_closed"
|
|
],
|
|
"title": "Initial Message Status",
|
|
"type": "string"
|
|
},
|
|
"node_url": {
|
|
"title": "Node Url",
|
|
"type": "string"
|
|
},
|
|
"node_id": {
|
|
"title": "Node Id",
|
|
"type": "string"
|
|
},
|
|
"routing_strategy": {
|
|
"description": "Placement reason: rendezvous for a destination id, target_node for a generated pinned id, or resume when an atomic fork is routed by its canonical source id",
|
|
"enum": [
|
|
"rendezvous",
|
|
"target_node",
|
|
"resume"
|
|
],
|
|
"title": "Routing Strategy",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id",
|
|
"name",
|
|
"node_url",
|
|
"node_id",
|
|
"routing_strategy"
|
|
],
|
|
"title": "RouteCreateResponse",
|
|
"type": "object"
|
|
},
|
|
"SkillSummary": {
|
|
"properties": {
|
|
"name": {
|
|
"description": "Skill name",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"category": {
|
|
"default": "",
|
|
"description": "Skill category",
|
|
"title": "Category",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"default": "",
|
|
"description": "Skill description for discovery",
|
|
"title": "Description",
|
|
"type": "string"
|
|
},
|
|
"tags": {
|
|
"description": "Semantic tags",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Tags",
|
|
"type": "array"
|
|
},
|
|
"is_default": {
|
|
"default": false,
|
|
"description": "Whether auto-applied to all sessions",
|
|
"title": "Is Default",
|
|
"type": "boolean"
|
|
},
|
|
"activation": {
|
|
"default": "named",
|
|
"description": "Activation mode: default, named, search",
|
|
"title": "Activation",
|
|
"type": "string"
|
|
},
|
|
"origin": {
|
|
"default": "manual",
|
|
"description": "Source: manual, mcp, skills.sh, github",
|
|
"title": "Origin",
|
|
"type": "string"
|
|
},
|
|
"author": {
|
|
"default": "",
|
|
"description": "Skill author",
|
|
"title": "Author",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"default": "1.0.0",
|
|
"description": "Skill version",
|
|
"title": "Version",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
],
|
|
"title": "SkillSummary",
|
|
"type": "object"
|
|
},
|
|
"ListSkillSummaryResponse": {
|
|
"properties": {
|
|
"skills": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkillSummary"
|
|
},
|
|
"title": "Skills",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"skills"
|
|
],
|
|
"title": "ListSkillSummaryResponse",
|
|
"type": "object"
|
|
},
|
|
"WorkstreamDetailResponse": {
|
|
"description": "Response body for ``GET /v1/api/workstreams/{ws_id}``.\n\nRenamed and relocated from ``CoordinatorDetailResponse`` in the\nStage 2 history/detail verb lift. Both kinds populate every field;\nSDK consumers don't branch on kind to read them. The lift adds the\nendpoint to interactive as a feature gain (pre-lift only coord\nexposed it).",
|
|
"properties": {
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"state": {
|
|
"title": "State",
|
|
"type": "string"
|
|
},
|
|
"user_id": {
|
|
"title": "User Id",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"$ref": "#/components/schemas/WorkstreamKind",
|
|
"default": "interactive"
|
|
},
|
|
"pending_approval": {
|
|
"default": false,
|
|
"description": "True when at least one approval cycle is live (a gate thread parked awaiting an operator approve/deny). Mirrors the same field on ``DashboardWorkstream`` / cluster live projections so a freshly-loaded chat tab can render the inline approval gate from the detail snapshot before SSE replay arrives.",
|
|
"title": "Pending Approval",
|
|
"type": "boolean"
|
|
},
|
|
"pending_approval_details": {
|
|
"description": "Inline approval payloads, one per live cycle, oldest first \u2014 same shape as ``DashboardWorkstream.pending_approval_details``. Empty when no approval is pending. Lets a reload paint every action row + judge verdicts immediately instead of relying on the SSE approve_request replay timing window. Replaces 1.6's ``pending_approval_detail`` single-object field (breaking, 1.7).",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PendingApprovalDetail"
|
|
},
|
|
"title": "Pending Approval Details",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id",
|
|
"name",
|
|
"state",
|
|
"user_id"
|
|
],
|
|
"title": "WorkstreamDetailResponse",
|
|
"type": "object"
|
|
},
|
|
"PendingApprovalDetail": {
|
|
"description": "Inline approval payload merged into ``DashboardWorkstream``.\n\nOne entry per live approval CYCLE \u2014 a gate thread parked in\n``approve_tools`` awaiting the operator. Parallel task agents run\nconcurrent gates, so a workstream can have several of these at\nonce (``pending_approval_details``, oldest first). Cross-tenant\nexposure here follows the same trusted-team posture as\n``activity`` / ``tokens`` \u2014 see ``server.py``'s ``dashboard``\nhandler comment.",
|
|
"properties": {
|
|
"cycle_id": {
|
|
"default": "",
|
|
"description": "Identity of this approval cycle. Echo it back on ``POST /v1/api/workstreams/{ws_id}/approve`` to resolve exactly this round \u2014 required for correctness when several cycles are live (parallel task agents).",
|
|
"title": "Cycle Id",
|
|
"type": "string"
|
|
},
|
|
"call_id": {
|
|
"default": "",
|
|
"description": "Primary call_id \u2014 first non-empty call_id in items list order. Matches the 409 ``current_call_id`` response from ``POST /v1/api/workstreams/{ws_id}/approve`` so the UI can render the same identifier the server reports as current.",
|
|
"title": "Call Id",
|
|
"type": "string"
|
|
},
|
|
"judge_pending": {
|
|
"default": false,
|
|
"description": "LLM judge tier still running; heuristic verdicts may already be present on items.",
|
|
"title": "Judge Pending",
|
|
"type": "boolean"
|
|
},
|
|
"items": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/PendingApprovalItem"
|
|
},
|
|
"title": "Items",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"title": "PendingApprovalDetail",
|
|
"type": "object"
|
|
},
|
|
"PendingApprovalItem": {
|
|
"description": "One pending tool-call inside a ``PendingApprovalDetail`` envelope.\n\nMirrors the dict ``SessionUIBase.serialize_pending_approval_details``\nemits per item inside each cycle entry. ``heuristic_verdict`` / ``judge_verdict`` are kept\nloosely-typed because the underlying verdict shape varies by tier;\nconsumers that want the full structure can decode against\n:class:`turnstone.sdk.events.IntentVerdictEvent`.",
|
|
"properties": {
|
|
"call_id": {
|
|
"default": "",
|
|
"title": "Call Id",
|
|
"type": "string"
|
|
},
|
|
"header": {
|
|
"default": "",
|
|
"title": "Header",
|
|
"type": "string"
|
|
},
|
|
"preview": {
|
|
"default": "",
|
|
"title": "Preview",
|
|
"type": "string"
|
|
},
|
|
"func_name": {
|
|
"default": "",
|
|
"title": "Func Name",
|
|
"type": "string"
|
|
},
|
|
"approval_label": {
|
|
"default": "",
|
|
"title": "Approval Label",
|
|
"type": "string"
|
|
},
|
|
"needs_approval": {
|
|
"default": false,
|
|
"title": "Needs Approval",
|
|
"type": "boolean"
|
|
},
|
|
"error": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Error"
|
|
},
|
|
"heuristic_verdict": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Heuristic Verdict"
|
|
},
|
|
"judge_verdict": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Judge Verdict"
|
|
}
|
|
},
|
|
"title": "PendingApprovalItem",
|
|
"type": "object"
|
|
},
|
|
"WorkstreamHistoryResponse": {
|
|
"description": "Response body for ``GET /v1/api/workstreams/{ws_id}/history``.\n\nRenamed and relocated from ``CoordinatorHistoryResponse`` in the\nStage 2 history/detail verb lift. Same projected render shape on\nboth kinds; the lift adds the endpoint to interactive as a feature\ngain (pre-lift interactive only exposed history through the SSE\nreplay on ``/events``).",
|
|
"properties": {
|
|
"ws_id": {
|
|
"title": "Ws Id",
|
|
"type": "string"
|
|
},
|
|
"messages": {
|
|
"description": "Tail of the workstream's message history, projected to the canonical render shape (``role`` may be ``system`` for operator-context turns; flat tool_calls with verdict / output_assessment; top-level source / attachments / reasoning; derived denied / is_error / pending). Bounded by the ``limit`` query parameter (default 100, max 500).",
|
|
"items": {
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
"title": "Messages",
|
|
"type": "array"
|
|
},
|
|
"cursor": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "SSE resume cursor (a ``Last-Event-ID`` value). Non-null only when the trailing turn is an executing in-flight tool batch that the live ring buffer can replay: ``messages`` then omits that turn and the client opens its initial SSE with this cursor so the existing delta replay fast-forwards the in-flight turn (tool calls, results, prompts) instead of the lossy synthetic snapshot. Null on every other read \u2014 the client connects fresh.",
|
|
"title": "Cursor"
|
|
}
|
|
},
|
|
"required": [
|
|
"ws_id"
|
|
],
|
|
"title": "WorkstreamHistoryResponse",
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|