mirror of
https://github.com/turnstonelabs/turnstone.git
synced 2026-08-12 23:12:23 -06:00
chore(sdk): regenerate OpenAPI snapshots from current specs
openapi-server.json / openapi-console.json had drifted well behind build_server_spec() / build_console_spec() — the committed snapshots are regenerated periodically (via sdk/typescript/scripts/generate-types.py) rather than on every schema-changing PR, so accumulated additions (skill parsing, pending-approval items, model-definition CRUD, etc.) had not been captured. This resyncs both with no code changes.
This commit is contained in:
+1160
-10
File diff suppressed because it is too large
Load Diff
+249
-104
@@ -2,7 +2,7 @@
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "turnstone Server API",
|
||||
"version": "1.5.0a4",
|
||||
"version": "1.6.0a6",
|
||||
"description": "Single-node workstream management, chat interaction, and real-time streaming."
|
||||
},
|
||||
"paths": {
|
||||
@@ -496,6 +496,118 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/v1/api/workstreams/{ws_id}/rewind": {
|
||||
"post": {
|
||||
"summary": "Drop the last N conversation turns (emits clear_ui)",
|
||||
"operationId": "v1_api_workstreams_{ws_id}_rewind_post",
|
||||
"tags": [
|
||||
"Chat"
|
||||
],
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/v1/api/workstreams/{ws_id}/retry": {
|
||||
"post": {
|
||||
"summary": "Drop the last response and re-send the last user message",
|
||||
"operationId": "v1_api_workstreams_{ws_id}_retry_post",
|
||||
"tags": [
|
||||
"Chat"
|
||||
],
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/v1/api/workstreams/{ws_id}/events": {
|
||||
"get": {
|
||||
"summary": "Per-workstream SSE event stream",
|
||||
@@ -2117,6 +2229,21 @@
|
||||
"title": "CancelRequest",
|
||||
"type": "object"
|
||||
},
|
||||
"RewindRequest": {
|
||||
"properties": {
|
||||
"turns": {
|
||||
"description": "Number of conversation turns (user message + its responses) to drop from the end. Clamped to the available turn count.",
|
||||
"minimum": 1,
|
||||
"title": "Turns",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"turns"
|
||||
],
|
||||
"title": "RewindRequest",
|
||||
"type": "object"
|
||||
},
|
||||
"CreateWorkstreamRequest": {
|
||||
"properties": {
|
||||
"name": {
|
||||
@@ -2361,6 +2488,24 @@
|
||||
"kind": {
|
||||
"$ref": "#/components/schemas/WorkstreamKind",
|
||||
"default": "interactive"
|
||||
},
|
||||
"pending_approval": {
|
||||
"default": false,
|
||||
"description": "True when the workstream is parked on ``_approval_event`` 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_detail": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/PendingApprovalDetail"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"description": "Inline approval payload \u2014 same shape as ``DashboardWorkstream.pending_approval_detail``. ``None`` when no approval is pending. Lets a reload paint the action row + judge verdicts immediately instead of relying on the SSE approve_request replay timing window."
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
@@ -2372,15 +2517,116 @@
|
||||
"title": "WorkstreamDetailResponse",
|
||||
"type": "object"
|
||||
},
|
||||
"PendingApprovalDetail": {
|
||||
"description": "Inline approval payload merged into ``DashboardWorkstream``.\n\nSet when a workstream's ``approve_tools`` is parked on\n``_approval_event``; ``None`` (omitted) otherwise. Cross-tenant\nexposure here follows the same trusted-team posture as\n``activity`` / ``tokens`` \u2014 see ``server.py``'s ``dashboard``\nhandler comment.",
|
||||
"properties": {
|
||||
"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_detail``\nemits per item. ``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 OpenAI-like message-row\nshape on both kinds; the lift adds the endpoint to interactive as\na feature gain (pre-lift interactive only exposed history through\nthe SSE replay on ``/events``).",
|
||||
"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 reconstructed message history (provider-fidelity OpenAI-like shape). Bounded by the ``limit`` query parameter (default 100, max 500).",
|
||||
"description": "Tail of the workstream's message history, projected to the canonical render shape (flat tool_calls with verdict / output_assessment, top-level source / reminders / attachments, derived denied / is_error / pending). Bounded by the ``limit`` query parameter (default 100, max 500).",
|
||||
"items": {
|
||||
"additionalProperties": true,
|
||||
"type": "object"
|
||||
@@ -2561,107 +2807,6 @@
|
||||
"title": "DashboardWorkstream",
|
||||
"type": "object"
|
||||
},
|
||||
"PendingApprovalDetail": {
|
||||
"description": "Inline approval payload merged into ``DashboardWorkstream``.\n\nSet when a workstream's ``approve_tools`` is parked on\n``_approval_event``; ``None`` (omitted) otherwise. Cross-tenant\nexposure here follows the same trusted-team posture as\n``activity`` / ``tokens`` \u2014 see ``server.py``'s ``dashboard``\nhandler comment.",
|
||||
"properties": {
|
||||
"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_detail``\nemits per item. ``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"
|
||||
},
|
||||
"RecentAutoApproval": {
|
||||
"description": "One ring-buffer entry for ``DashboardWorkstream.recent_auto_approvals``.\n\nRecords a tool call that bypassed the operator approval gate\n(admin tool policy / skill ``allowed_tools`` allowlist / blanket\n``auto_approve`` / \"Approve + Always\" memory). The coord-tree\npill reads this list to surface \"auto-approved by skill X\" so\nthe operator can see WHICH calls bypassed and WHY.",
|
||||
"properties": {
|
||||
|
||||
Reference in New Issue
Block a user