Files
ai-agent/frontend/openapi.json
Gabriel Vidal 0a0b8f1757 feat(hooks): express hook delay in seconds, default 10s
The conversation-hooks delay field was minute-granular (delayMinutes,
default 1) — too coarse for a fast follow-up loop. Renamed to
delaySeconds (default 10) across the store, API and UI, with an
on-load migration that converts any pre-existing delayMinutes value
(×60) so a configured hook's delay survives the rename.
2026-08-09 19:12:07 +02:00

11921 lines
286 KiB
JSON

{
"openapi": "3.1.0",
"info": {
"title": "ai-agent",
"version": "0.1.0"
},
"paths": {
"/api/bundle": {
"get": {
"summary": "Bundle",
"description": "The whole file catalog \u2014 metadata only, served from the index DB.\n\nThis used to read every context file's content per request (a 16 MB,\n12-second response the app shell fetched on every load). File *content* now\nloads lazily through ``GET /api/file`` when a file is opened; the words /\nchars / token stats come from the ``files`` table, which the indexer keeps\nfresh (recomputed only when a file's content actually changes).",
"operationId": "bundle_api_bundle_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Bundle"
}
}
}
}
}
}
},
"/api/file": {
"get": {
"summary": "Get File",
"operationId": "get_file_api_file_get",
"parameters": [
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FileEntry"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"put": {
"summary": "Put File",
"operationId": "put_file_api_file_put",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SaveBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FileEntry"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/ui-state/{key}": {
"get": {
"summary": "Get Ui State",
"operationId": "get_ui_state_api_ui_state__key__get",
"parameters": [
{
"name": "key",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Key"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UiStateValue"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"put": {
"summary": "Put Ui State",
"operationId": "put_ui_state_api_ui_state__key__put",
"parameters": [
{
"name": "key",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Key"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UiStateBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OkResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"delete": {
"summary": "Delete Ui State",
"operationId": "delete_ui_state_api_ui_state__key__delete",
"parameters": [
{
"name": "key",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Key"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OkResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/dashboard": {
"get": {
"summary": "Dashboard",
"description": "Skill-usage analytics + cost rollups for the homepage.",
"operationId": "dashboard_api_dashboard_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Dashboard"
}
}
}
}
}
}
},
"/api/skills": {
"get": {
"summary": "Skills List",
"description": "Card metadata + usage/cost stats for every skill, last-used first.\n\nThe list is the **union** of the skills on disk and the ones the transcripts\nsaw invoked: a built-in or plugin skill (``code-review``, ``artifact-design``)\nhas no ``SKILL.md`` in this repo but still earned its calls, so it appears\nwith ``sourceKind: \"builtin\"`` and no editor link.",
"operationId": "skills_list_api_skills_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SkillsResponse"
}
}
}
}
}
}
},
"/api/conversations": {
"get": {
"summary": "Conversations List",
"description": "List parsed transcripts (newest first) for the conversation viewer.\n\nPaginated: ``limit`` caps the page (0 = everything), ``before`` is the\n``endedAt`` cursor of the previous page's last card, and ``archived``\nfilters hidden conversations server-side (``false`` \u2014 the default view \u2014\nexcludes them; ``all`` includes them). ``full=1`` adds the per-card\n``usage``/``byToolSub`` blocks the analytics dashboard aggregates.",
"operationId": "conversations_list_api_conversations_get",
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"default": 50,
"title": "Limit"
}
},
{
"name": "before",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Before"
}
},
{
"name": "archived",
"in": "query",
"required": false,
"schema": {
"type": "string",
"default": "false",
"title": "Archived"
}
},
{
"name": "full",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": false,
"title": "Full"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConversationsResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/subagents": {
"get": {
"summary": "Subagents List",
"description": "Every subagent (sidechain) transcript as a flat lite ref carrying its\nparent conversation id. The top-level conversation list hides sidechains;\nthis is the one place they're enumerated \u2014 the graph view's node source.\nAll from the in-process summaries cache (+ cached meta.json reads).",
"operationId": "subagents_list_api_subagents_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubagentsResponse"
}
}
}
}
}
}
},
"/api/conversation-summary": {
"get": {
"summary": "Conversation Summary",
"description": "One conversation's list card \u2014 what an SSE `transcript` ping patches\ninto the cached list, so a live turn costs a few KB instead of a full\nlist refetch.",
"operationId": "conversation_summary_api_conversation_summary_get",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConversationSummary"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/notifications": {
"get": {
"summary": "Notifications Feed",
"description": "Feed source for the notification history: every conversation that\nrecorded a push, with just the fields the feed needs. Replaces walking the\nwhole conversation list client-side.",
"operationId": "notifications_feed_api_notifications_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotificationsResponse"
}
}
}
}
}
}
},
"/api/notifications/unread": {
"get": {
"summary": "Notifications Unread",
"description": "Unread notifications (not yet opened in the UI), newest first.\n\nPure read: fetching this NEVER marks anything read \u2014 the phone can list and\nread these aloud without \"consuming\" them; only the UI (or an explicit\n``POST /api/notifications/seen``) advances the read ledger. This is the\nendpoint the desk phone hits with its read-only API key.",
"operationId": "notifications_unread_api_notifications_unread_get",
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"default": 20,
"title": "Limit"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnreadNotificationsResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/notifications/seen": {
"post": {
"summary": "Notifications Mark Seen",
"description": "Mark notification ids as read (opened/dismissed in the UI). Mutating \u2014\nrefused to a read-only API-key caller by the gate, so the phone can't use\nit. Passing no ids with ``all=true`` marks the whole current feed read.",
"operationId": "notifications_mark_seen_api_notifications_seen_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifSeenBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OkResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/notifications/seed": {
"post": {
"summary": "Notifications Seed",
"description": "Adopt the given ids (or the whole current feed) as the read baseline \u2014\nthe first-sync op so history isn't reported as unread.",
"operationId": "notifications_seed_api_notifications_seed_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifSeenBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OkResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/search-index": {
"get": {
"summary": "Search Index",
"description": "Full-text search corpus: every conversation's user/assistant text blocks.\n\nShipped once to the client, which runs a fuzzy search (Fuse.js) over it. Each\nmessage carries its ordinal `i`, which matches the `mi` on the detail thread's\ntext items, so a hit can deep-link to `/conversation/<id>?m=<i>` and scroll to\nthe exact message.",
"operationId": "search_index_api_search_index_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchIndexResponse"
}
}
}
}
}
}
},
"/api/conversation": {
"get": {
"summary": "Conversation Detail",
"description": "Full parsed thread (tools collapsible client-side) + per-turn usage.",
"operationId": "conversation_detail_api_conversation_get",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConversationDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/conversation-commits": {
"get": {
"summary": "Conversation Commits",
"description": "The commits a conversation produced (cached), tagged with their repo.",
"operationId": "conversation_commits_api_conversation_commits_get",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConversationCommits"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/commit-diff": {
"get": {
"summary": "Commit Diff",
"description": "Structured per-file hunk diff of a single commit within a repo token.",
"operationId": "commit_diff_api_commit_diff_get",
"parameters": [
{
"name": "repo",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Repo"
}
},
{
"name": "sha",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Sha"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DiffResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/diff-blob": {
"get": {
"summary": "Diff Blob",
"description": "Raw bytes of a file inside a diff \u2014 the image side rendered in the viewer.\n\n``repo`` is a diff repo token (``project:`` / ``service:`` / ``super:_``),\n``path`` is repo-relative. With ``sha`` the file is read at that rev (e.g. the\ncommit's tip for an added image, or ``<sha>^`` for a deleted one); without it\nthe current working-tree copy is served (conversation / uncommitted diffs).",
"operationId": "diff_blob_api_diff_blob_get",
"parameters": [
{
"name": "repo",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Repo"
}
},
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
},
{
"name": "sha",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sha"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/conversation-uncommitted-diff": {
"get": {
"summary": "Conversation Uncommitted Diff",
"description": "The conversation's current not-yet-committed changes, replayed from the\ntranscript's accumulated edits/creates/deletes (see editsdiff). ``stats``\nstrips the hunks \u2014 the detail panel only needs paths and +/\u2212 counts.",
"operationId": "conversation_uncommitted_diff_api_conversation_uncommitted_diff_get",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
},
{
"name": "stats",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": false,
"title": "Stats"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DiffResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/conversation-diff": {
"get": {
"summary": "Conversation Diff",
"description": "Aggregated net diff across all of a conversation's commits.",
"operationId": "conversation_diff_api_conversation_diff_get",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DiffResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/conversation-meta": {
"get": {
"summary": "Conversation Meta",
"description": "The raw action-metadata sidecar (keyed by session id).",
"operationId": "conversation_meta_api_conversation_meta_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConversationMetaResponse"
}
}
}
}
}
},
"post": {
"summary": "Update Conversation Meta",
"operationId": "update_conversation_meta_api_conversation_meta_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MetaPatch"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MetaUpdateResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/conversations/archive-old": {
"post": {
"summary": "Archive Old Conversations",
"description": "Archive (hide) every conversation that ended before the start of yesterday.\n\nBulk cleanup for the drawer: keeps today's and yesterday's transcripts\nvisible and folds everything older behind the \"show archived\" toggle.",
"operationId": "archive_old_conversations_api_conversations_archive_old_post",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArchiveOldResult"
}
}
}
}
}
}
},
"/api/models": {
"get": {
"summary": "List Models",
"description": "The models a session can be spawned/resumed on (a tag each in the composer).\n\nFetched from the Anthropic API and cached in-process (see models.py), so the\npicker follows new releases without a redeploy. `default` is what a run uses\nwhen no model tag is picked.",
"operationId": "list_models_api_models_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ModelsResponse"
}
}
}
}
}
}
},
"/api/spawn": {
"post": {
"summary": "Spawn Conversation",
"description": "Kick off a new headless agent session on the host (see _send_message).",
"operationId": "spawn_conversation_api_spawn_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/resume": {
"post": {
"summary": "Resume Conversation",
"description": "Continue an existing conversation with a new user turn (see _send_message).\n\nRuns ``claude -p <prompt> --resume <sessionId>`` in the session's original\ncwd; resume reuses the session id, so Claude appends the new turns to the\nsame transcript the viewer is already watching and the open conversation\nstreams the continuation live. A still-running session is stopped first \u2014\nsending a message always wins.",
"operationId": "resume_conversation_api_resume_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResumeBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/fork": {
"post": {
"summary": "Fork Conversation",
"description": "Branch a new conversation off an existing one at a user message.\n\nThe new session's history is the source transcript up to (excluding) user\nmessage ``mi``; ``prompt`` (the edited message) is then sent as its next\nturn. Neither CLI can truncate at a message (`claude --fork-session` only\nclones whole sessions), so the host sidecar does transcript surgery: it\ncopies the first ``cutLine`` lines of the source session file under a\nfresh session id and resumes that \u2014 see sidecar ``/fork``. ``cutText`` and\n``cutUserOrd`` let the sidecar/runner verify they're slicing the same\nmessage this viewer showed (the archive is an append-only copy of the\nlive file, so the line indices match; the canary catches drift).",
"operationId": "fork_conversation_api_fork_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ForkBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/interrupt": {
"post": {
"summary": "Interrupt Conversation",
"description": "Stop a running Claude session this viewer spawned.\n\nProxies to the host sidecar, which sends the run's process group a SIGINT \u2014\nexactly like pressing Esc in a terminal. Claude aborts the turn and records a\n``[Request interrupted by user]`` marker in the transcript, which the parser\nthen surfaces as the ``interrupted`` state. We also stamp the metadata\nimmediately so the UI flips before that marker has synced.",
"operationId": "interrupt_conversation_api_interrupt_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InterruptBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InterruptResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/cron": {
"get": {
"summary": "Cron Jobs",
"description": "Every cron job, with its computed next fire time and run history.",
"operationId": "cron_jobs_api_cron_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJobsResponse"
}
}
}
}
}
},
"post": {
"summary": "Cron Create",
"description": "Create a job. The prompt file is created (a stub carrying the default\nrun-config frontmatter) if it doesn't exist yet, so the editor always opens\non something and the harness/model/effort keys are there to edit.",
"operationId": "cron_create_api_cron_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronCreateBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJob"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/cron/{job_id}": {
"put": {
"summary": "Cron Update",
"operationId": "cron_update_api_cron__job_id__put",
"parameters": [
{
"name": "job_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Job Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronPatchBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJob"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"delete": {
"summary": "Cron Delete",
"description": "Remove a job. Its prompt file is left in place (it's repo content).",
"operationId": "cron_delete_api_cron__job_id__delete",
"parameters": [
{
"name": "job_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Job Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OkResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/cron/{job_id}/run": {
"post": {
"summary": "Cron Run Now",
"description": "Fire a job immediately (manual run \u2014 works even when disabled).",
"operationId": "cron_run_now_api_cron__job_id__run_post",
"parameters": [
{
"name": "job_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Job Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/cron/{job_id}/prompt": {
"get": {
"summary": "Cron Prompt",
"description": "The job's prompt file content (the editable text in Settings \u2192 Cron).",
"operationId": "cron_prompt_api_cron__job_id__prompt_get",
"parameters": [
{
"name": "job_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Job Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronPromptFile"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"put": {
"summary": "Cron Prompt Save",
"operationId": "cron_prompt_save_api_cron__job_id__prompt_put",
"parameters": [
{
"name": "job_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Job Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronPromptBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronPromptFile"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/hooks": {
"get": {
"summary": "Hooks List",
"description": "Every conversation hook, with its queued firings and run history.",
"operationId": "hooks_list_api_hooks_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HooksResponse"
}
}
}
}
}
},
"post": {
"summary": "Hooks Create",
"description": "Create a hook. Its prompt file is created (carrying an agent-style\nfrontmatter stub) if absent, so the editor always opens on something.",
"operationId": "hooks_create_api_hooks_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HookCreateBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Hook"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/hooks/{hook_id}": {
"put": {
"summary": "Hooks Update",
"operationId": "hooks_update_api_hooks__hook_id__put",
"parameters": [
{
"name": "hook_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Hook Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HookPatchBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Hook"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"delete": {
"summary": "Hooks Delete",
"description": "Remove a hook (and anything it had queued). Its prompt file stays.",
"operationId": "hooks_delete_api_hooks__hook_id__delete",
"parameters": [
{
"name": "hook_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Hook Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OkResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/hooks/{hook_id}/run": {
"post": {
"summary": "Hooks Run Now",
"description": "Fire a hook immediately against one conversation (manual run \u2014 works\neven when the hook is disabled, and bypasses the delay). The preconditions\nstill apply, except the once-per-session ledger: a manual run is a\ndeliberate re-fire.",
"operationId": "hooks_run_now_api_hooks__hook_id__run_post",
"parameters": [
{
"name": "hook_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Hook Id"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/HookRunBody"
},
{
"type": "null"
}
],
"title": "Body"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/hooks/{hook_id}/prompt": {
"get": {
"summary": "Hooks Prompt",
"description": "The hook's prompt file content (the editable text in Settings \u2192 Hooks).",
"operationId": "hooks_prompt_api_hooks__hook_id__prompt_get",
"parameters": [
{
"name": "hook_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Hook Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HookPromptFile"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"put": {
"summary": "Hooks Prompt Save",
"operationId": "hooks_prompt_save_api_hooks__hook_id__prompt_put",
"parameters": [
{
"name": "hook_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Hook Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HookPromptBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HookPromptFile"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/claude-hooks": {
"get": {
"summary": "Claude Hooks",
"description": "The native Claude Code hooks registered in the workspace repo, flattened\nto one entry per (event, matcher, command). A missing or unparseable\nsettings file is an empty list, not an error (standalone has no repo).",
"operationId": "claude_hooks_api_claude_hooks_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeHooksResponse"
}
}
}
}
}
}
},
"/api/webhooks": {
"get": {
"summary": "Webhooks Get",
"operationId": "webhooks_get_api_webhooks_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WebhooksResponse"
}
}
}
}
}
},
"put": {
"summary": "Webhooks Put",
"operationId": "webhooks_put_api_webhooks_put",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WebhooksBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WebhooksResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/webhooks/{webhook_id}/test": {
"post": {
"summary": "Webhook Test",
"description": "Send a test push through one webhook (regardless of enabled/events).",
"operationId": "webhook_test_api_webhooks__webhook_id__test_post",
"parameters": [
{
"name": "webhook_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Webhook Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifyResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/notify": {
"post": {
"summary": "Notify Push",
"description": "Record a push notification and forward it to the subscribed webhooks.",
"operationId": "notify_push_api_notify_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifyBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifyResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/ask": {
"post": {
"summary": "Ask Push",
"description": "Create an ask (choice question), forward it to the webhooks, return its\nid. The HA integration renders the tappable notification and POSTs the\nanswer back to /api/ask/{id}/answer; callers long-poll GET /api/ask/{id}.",
"operationId": "ask_push_api_ask_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AskBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifyResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/ask/{ask_id}": {
"get": {
"summary": "Ask Get",
"description": "The ask's current state; ``waitSecs`` long-polls for the answer.",
"operationId": "ask_get_api_ask__ask_id__get",
"parameters": [
{
"name": "ask_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Ask Id"
}
},
{
"name": "waitSecs",
"in": "query",
"required": false,
"schema": {
"type": "number",
"default": 0,
"title": "Waitsecs"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AskRecord"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/ask/{ask_id}/answer": {
"post": {
"summary": "Ask Answer",
"description": "Callback for the HA integration: record which button was tapped.",
"operationId": "ask_answer_api_ask__ask_id__answer_post",
"parameters": [
{
"name": "ask_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Ask Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AskAnswerBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AskRecord"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/notify-log": {
"get": {
"summary": "Notify Log",
"description": "The first-class notification/ask log, newest first.",
"operationId": "notify_log_api_notify_log_get",
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"default": 200,
"title": "Limit"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifyLogResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/forms": {
"post": {
"summary": "Form Create",
"description": "Create a form (the ask-form skill's entry point) and return it.\n\nThe caller then sends its own push notification linking to the\nconversation with ``?form=<id>`` and long-polls GET /api/forms/{id}.",
"operationId": "form_create_api_forms_post",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormCreateBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormRecord"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"get": {
"summary": "Forms List",
"description": "Forms, newest first; ``session`` filters to one conversation.",
"operationId": "forms_list_api_forms_get",
"parameters": [
{
"name": "session",
"in": "query",
"required": false,
"schema": {
"type": "string",
"default": "",
"title": "Session"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"default": 100,
"title": "Limit"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormsResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/forms/{form_id}": {
"get": {
"summary": "Form Get",
"description": "The form's current state; ``waitSecs`` long-polls for a submit.",
"operationId": "form_get_api_forms__form_id__get",
"parameters": [
{
"name": "form_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Form Id"
}
},
{
"name": "waitSecs",
"in": "query",
"required": false,
"schema": {
"type": "number",
"default": 0,
"title": "Waitsecs"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormRecord"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/forms/{form_id}/submit": {
"post": {
"summary": "Form Submit",
"description": "Record the user's answers (from the PWA's form card / modal).",
"operationId": "form_submit_api_forms__form_id__submit_post",
"parameters": [
{
"name": "form_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Form Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormSubmitBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormRecord"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/forms/{form_id}/cancel": {
"post": {
"summary": "Form Cancel",
"description": "Dismiss a form unanswered (the card's Cancel button, or the agent\ngiving up on the wait).",
"operationId": "form_cancel_api_forms__form_id__cancel_post",
"parameters": [
{
"name": "form_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Form Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormRecord"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/projects": {
"get": {
"summary": "Projects List",
"description": "Card metadata for every directory under projects/ (newest commit first).\n\nEach card carries a compact ``costs`` rollup (total $/tokens + conversation\ncount) aggregated from every conversation attributed to the project.",
"operationId": "projects_list_api_projects_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectsResponse"
}
}
}
}
}
}
},
"/api/project": {
"get": {
"summary": "Project Detail",
"description": "Full metadata + key-file contents (README/CLAUDE.md/index meta/og) for one project.\n\nAlso attaches a ``costs`` block: total/mean/median spend across the project's\nconversations, a per-token-type breakdown, and mean cost per line of code.",
"operationId": "project_detail_api_project_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/project-env": {
"get": {
"summary": "Project Env",
"description": "Key/value view of a project's `.env`. Vars below a `# --- secrets ---`\ncomment are secrets: their keys are listed but values never leave disk.",
"operationId": "project_env_api_project_env_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEnvResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"put": {
"summary": "Project Env Save",
"description": "Apply key/value edits to a project's `.env`, preserving comments, order\nand the secrets section. Unsets run first, then sets.",
"operationId": "project_env_save_api_project_env_put",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EnvSaveBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectEnvResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/project-asset": {
"get": {
"summary": "Project Asset",
"description": "Serve a whitelisted image asset (e.g. og-image) from a project dir.",
"operationId": "project_asset_api_project_asset_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
},
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/artefact": {
"get": {
"summary": "Artefact Asset",
"description": "Serve one generated artefact from a project/service's `.ai/artefacts/`\ntree (``path`` is ``<date>/<sessionId>/<file>``, relative to that tree).",
"operationId": "artefact_asset_api_artefact_get",
"parameters": [
{
"name": "kind",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Kind"
}
},
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
},
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/screenshot": {
"get": {
"summary": "Screenshot Asset",
"description": "Serve a captured screenshot image from docs/screenshots/ (read-only).\n\n``path`` is the image's location relative to the screenshots root\n(``<project>/<name>_<ts>.jpeg``). A leading ``docs/screenshots/`` prefix,\nif present, is stripped so the raw path printed by the skill also works.",
"operationId": "screenshot_asset_api_screenshot_get",
"parameters": [
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/data-asset": {
"get": {
"summary": "Data Asset",
"description": "Serve an image or video artifact from the repo's root `data/` tree (read-only).\n\n``path`` is the file's location relative to ``data/`` (a leading ``data/``\nprefix, if present, is stripped so the raw repo-relative path also works).\nUsed to preview media the agent ``Read`` from under ``data/`` inline in the\nconversation viewer \u2014 see the CLAUDE.md convention to write artifacts there.",
"operationId": "data_asset_api_data_asset_get",
"parameters": [
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/scratchpad-asset": {
"get": {
"summary": "Scratchpad Asset",
"description": "Serve an image or video from Claude Code's session scratchpad tree.\n\n``path`` is relative to the scratchpad root \u2014 ``<encoded-cwd>/<sessionId>/\nscratchpad/<file>`` \u2014 so a run's throwaway media previews inline in the\nthread without having to be copied into a project's ``.ai/artefacts/``.\nThe mount is read-only and only media extensions are served.",
"operationId": "scratchpad_asset_api_scratchpad_asset_get",
"parameters": [
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/upload": {
"post": {
"summary": "Upload Files",
"description": "Store one or more composer attachments and describe where they landed.\n\nEach upload is written to ``UPLOADS_DIR/<batch>/<safe-name>``. The returned\n``repoPath`` is what the composer injects into the prompt (the session reads\nit from the repo working dir); ``url`` is the backend serve route the thread\nviewer renders the file from.",
"operationId": "upload_files_api_upload_post",
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"$ref": "#/components/schemas/Body_upload_files_api_upload_post"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UploadResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/upload-file": {
"get": {
"summary": "Upload File Asset",
"description": "Serve a previously uploaded composer attachment (raw bytes, inline).",
"operationId": "upload_file_asset_api_upload_file_get",
"parameters": [
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/avatar/manifest": {
"get": {
"summary": "Avatar Manifest",
"description": "The imported custom avatar set's manifest (empty {} if none), with each\nclip src pointing at /api/avatar-asset so the frontend can render it.",
"operationId": "avatar_manifest_api_avatar_manifest_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
},
"/api/avatar-asset": {
"get": {
"summary": "Avatar Asset",
"description": "Serve one strip from the imported custom avatar set (inline image).",
"operationId": "avatar_asset_api_avatar_asset_get",
"parameters": [
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/avatar/import": {
"post": {
"summary": "Avatar Import",
"description": "Import a custom avatar set from a sprite-editor \"Export set\" zip.\n\nValidates the zip has a manifest.json plus one strip per referenced clip,\nthen unpacks a clean copy into CUSTOM_AVATAR_DIR (replacing any previous\nset) and returns the served manifest. Rejects anything that isn't a small\nzip of a manifest + raster strips \u2014 no path traversal, no oversized members,\nnothing executable ever written.",
"operationId": "avatar_import_api_avatar_import_post",
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"$ref": "#/components/schemas/Body_avatar_import_api_avatar_import_post"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/avatar/custom": {
"delete": {
"summary": "Avatar Clear",
"description": "Remove the imported custom avatar set.",
"operationId": "avatar_clear_api_avatar_custom_delete",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
},
"/api/services": {
"get": {
"summary": "Services List",
"description": "Card metadata for every service dir (containers/urls/auth, newest first).",
"operationId": "services_list_api_services_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServicesResponse"
}
}
}
}
}
}
},
"/api/service": {
"get": {
"summary": "Service Detail",
"description": "Full parse of one service: containers, Traefik routers, env keys, tree.",
"operationId": "service_detail_api_service_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/service-file": {
"get": {
"summary": "Service File",
"description": "A single whitelisted text file's contents from a service dir (512 KB cap).",
"operationId": "service_file_api_service_file_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
},
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/goals": {
"get": {
"summary": "Goals List",
"description": "Every project/service that keeps a GOAL.md, as a board.\n\nOne card per goal-bearing unit: its checklist progress, the version\nmilestones off its ``## Horizons``, the themed wishlist groups, the\ngoal-keeper's in-flight ``## Being worked on`` claims, and how many agent\nsessions are running on it right now.\n\nSorted by most-recent conversation (the unit you last touched is the one\nyou most likely want to push), with never-worked-on goals last.",
"operationId": "goals_list_api_goals_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GoalsResponse"
}
}
}
}
}
}
},
"/api/goal-work": {
"post": {
"summary": "Goal Work",
"description": "Spawn a goal-keeper session pointed at one unit's GOAL.md.\n\nThe \"Work\" button on the Goals page (no ``item``) and the per-item Work\nbutton on a detail page's checklist (``item`` set). Same machinery as any\nother spawn (`_send_message` \u2192 host sidecar), the difference being the\nprompt: it invokes the `goal-keeper` agent scoped to a single directory\ninstead of letting it choose among every GOAL.md in the repo, and it tells\nthe agent to claim its item in ``## Being worked on`` first \u2014 which is what\nstops two agents launched from this page landing on the same checkbox. When\n``item`` is given the agent is told to work *that* item rather than pick one.",
"operationId": "goal_work_api_goal_work_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GoalWorkBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SpawnResult"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/memories": {
"get": {
"summary": "Memories List",
"description": "All memory summaries (projects + links derived), newest-updated first.",
"operationId": "memories_list_api_memories_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoriesResponse"
}
}
}
}
}
}
},
"/api/memory": {
"get": {
"summary": "Memory Detail",
"description": "One memory + its body, with the conversations that created / read it.",
"operationId": "memory_detail_api_memory_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoryDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/plans": {
"get": {
"summary": "Plans List",
"description": "All plan summaries (data/plans/*.md), newest-updated first.",
"operationId": "plans_list_api_plans_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlansResponse"
}
}
}
}
}
}
},
"/api/plan": {
"get": {
"summary": "Plan Detail",
"description": "One plan + body, with the ACTUAL cost/time/tokens joined from the linked\nconversation transcripts (shown next to the plan's own estimate).",
"operationId": "plan_detail_api_plan_get",
"parameters": [
{
"name": "slug",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Slug"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlanDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/templates": {
"get": {
"summary": "Templates List",
"description": "List every scaffold under projects/templates/ with stack tags + stats.",
"operationId": "templates_list_api_templates_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplatesResponse"
}
}
}
}
}
}
},
"/api/template": {
"get": {
"summary": "Template Detail",
"description": "One template: README, npm scripts, deps and a nested file tree.",
"operationId": "template_detail_api_template_get",
"parameters": [
{
"name": "name",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Name"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplateDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/template-file": {
"get": {
"summary": "Template File",
"description": "A single text file's contents from within a template (512 KB cap).",
"operationId": "template_file_api_template_file_get",
"parameters": [
{
"name": "name",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Name"
}
},
{
"name": "path",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/events": {
"get": {
"summary": "Events",
"description": "Server-Sent Events: ``meta`` / ``transcript`` change pings for the UI.",
"operationId": "events_api_events_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
},
"/api/deploy-status": {
"get": {
"summary": "Deploy Status",
"description": "Current blue-green deploy snapshot (or ``null`` when none is in flight).\n\nWritten by ``services/ai-agent/deploy.sh`` into the data dir; polled by the\n:class:`DeployWatcher`, which pings a ``deploy`` SSE event on any change.",
"operationId": "deploy_status_api_deploy_status_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeployStatus"
}
}
}
}
}
}
},
"/api/health": {
"get": {
"summary": "Health",
"operationId": "health_api_health_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
},
"/{full_path}": {
"get": {
"summary": "Spa",
"operationId": "spa__full_path__get",
"parameters": [
{
"name": "full_path",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Full Path"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"ArchiveOldResult": {
"properties": {
"archived": {
"type": "integer",
"title": "Archived"
},
"cutoff": {
"type": "string",
"title": "Cutoff"
}
},
"type": "object",
"required": [
"archived",
"cutoff"
],
"title": "ArchiveOldResult"
},
"ArtefactItem": {
"properties": {
"kind": {
"type": "string",
"title": "Kind"
},
"slug": {
"type": "string",
"title": "Slug"
},
"name": {
"type": "string",
"title": "Name"
},
"date": {
"type": "string",
"title": "Date"
},
"path": {
"type": "string",
"title": "Path"
},
"url": {
"type": "string",
"title": "Url"
},
"bytes": {
"type": "integer",
"title": "Bytes"
},
"mtime": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mtime"
},
"video": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Video"
}
},
"type": "object",
"required": [
"kind",
"slug",
"name",
"date",
"path",
"url",
"bytes"
],
"title": "ArtefactItem",
"description": "One generated artefact (screenshot, render, export) found under a\nproject/service's ``.ai/artefacts/<date>/<sessionId>/`` folder."
},
"AskAnswerBody": {
"properties": {
"index": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Index"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label"
}
},
"type": "object",
"title": "AskAnswerBody"
},
"AskBody": {
"properties": {
"question": {
"type": "string",
"title": "Question"
},
"options": {
"items": {
"type": "string"
},
"type": "array",
"title": "Options"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Image"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Color"
},
"timeoutSecs": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Timeoutsecs"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
}
},
"type": "object",
"required": [
"question",
"options"
],
"title": "AskBody"
},
"AskRecord": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"kind": {
"type": "string",
"const": "ask",
"title": "Kind"
},
"title": {
"type": "string",
"title": "Title"
},
"body": {
"type": "string",
"title": "Body"
},
"type": {
"type": "string",
"title": "Type"
},
"url": {
"type": "string",
"title": "Url"
},
"at": {
"type": "string",
"title": "At"
},
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"delivered": {
"items": {
"$ref": "#/components/schemas/DeliveryStatus"
},
"type": "array",
"title": "Delivered"
},
"options": {
"items": {
"type": "string"
},
"type": "array",
"title": "Options"
},
"status": {
"type": "string",
"enum": [
"pending",
"answered",
"expired"
],
"title": "Status"
},
"answer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Answer"
},
"answerIndex": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Answerindex"
},
"answeredAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Answeredat"
},
"expiresAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expiresat"
}
},
"type": "object",
"required": [
"id",
"kind",
"title",
"body",
"type",
"url",
"at",
"sessionId",
"delivered",
"options",
"status"
],
"title": "AskRecord",
"description": "An ask (choice question) with its lifecycle state."
},
"Body_avatar_import_api_avatar_import_post": {
"properties": {
"file": {
"type": "string",
"format": "binary",
"title": "File"
}
},
"type": "object",
"required": [
"file"
],
"title": "Body_avatar_import_api_avatar_import_post"
},
"Body_upload_files_api_upload_post": {
"properties": {
"files": {
"items": {
"type": "string",
"format": "binary"
},
"type": "array",
"title": "Files"
}
},
"type": "object",
"required": [
"files"
],
"title": "Body_upload_files_api_upload_post"
},
"Bundle": {
"properties": {
"workspace": {
"type": "string",
"title": "Workspace"
},
"totals": {
"$ref": "#/components/schemas/Totals"
},
"files": {
"items": {
"$ref": "#/components/schemas/FileEntry"
},
"type": "array",
"title": "Files"
},
"pricing": {
"$ref": "#/components/schemas/Pricing"
}
},
"type": "object",
"required": [
"workspace",
"totals",
"files",
"pricing"
],
"title": "Bundle"
},
"ClaudeHookEntry": {
"properties": {
"event": {
"type": "string",
"title": "Event"
},
"matcher": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Matcher"
},
"type": {
"type": "string",
"title": "Type",
"default": "command"
},
"command": {
"type": "string",
"title": "Command"
}
},
"type": "object",
"required": [
"event",
"command"
],
"title": "ClaudeHookEntry",
"description": "One native Claude Code hook from the workspace's .claude/settings.json,\nflattened to a single command."
},
"ClaudeHooksResponse": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"exists": {
"type": "boolean",
"title": "Exists"
},
"entries": {
"items": {
"$ref": "#/components/schemas/ClaudeHookEntry"
},
"type": "array",
"title": "Entries"
}
},
"type": "object",
"required": [
"path",
"exists",
"entries"
],
"title": "ClaudeHooksResponse",
"description": "The repo's native hooks \u2014 read-only: editing .claude/settings.json from\nthe container would be host-level code execution."
},
"CommitRef": {
"properties": {
"sha": {
"type": "string",
"title": "Sha"
},
"short": {
"type": "string",
"title": "Short"
},
"date": {
"type": "string",
"title": "Date"
},
"author": {
"type": "string",
"title": "Author"
},
"subject": {
"type": "string",
"title": "Subject"
},
"additions": {
"type": "integer",
"title": "Additions"
},
"deletions": {
"type": "integer",
"title": "Deletions"
},
"files": {
"type": "integer",
"title": "Files"
},
"repo": {
"type": "string",
"title": "Repo"
}
},
"type": "object",
"required": [
"sha",
"short",
"date",
"author",
"subject",
"additions",
"deletions",
"files",
"repo"
],
"title": "CommitRef"
},
"ConvMeta": {
"properties": {
"state": {
"type": "string",
"title": "State"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"worktrees": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/WorktreeInfo"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Worktrees"
},
"committed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Committed"
},
"pushed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Pushed"
},
"merged": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Merged"
},
"deployed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Deployed"
},
"notified": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notified"
},
"notifications": {
"items": {
"$ref": "#/components/schemas/ConvNotification"
},
"type": "array",
"title": "Notifications"
},
"archived": {
"type": "boolean",
"title": "Archived",
"default": false
},
"harness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Harness"
},
"thinking": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Thinking"
},
"effort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effort"
},
"forkedFrom": {
"anyOf": [
{
"$ref": "#/components/schemas/ForkedFrom"
},
{
"type": "null"
}
]
},
"cron": {
"anyOf": [
{
"$ref": "#/components/schemas/CronRef"
},
{
"type": "null"
}
]
},
"hooks": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Hooks"
}
},
"type": "object",
"required": [
"state",
"projects",
"services",
"notifications"
],
"title": "ConvMeta"
},
"ConvNotification": {
"properties": {
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Body"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "At"
}
},
"type": "object",
"title": "ConvNotification"
},
"ConversationCommits": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"commits": {
"items": {
"$ref": "#/components/schemas/CommitRef"
},
"type": "array",
"title": "Commits"
},
"repos": {
"items": {
"type": "string"
},
"type": "array",
"title": "Repos"
},
"filesChanged": {
"type": "integer",
"title": "Fileschanged"
},
"additions": {
"type": "integer",
"title": "Additions"
},
"deletions": {
"type": "integer",
"title": "Deletions"
}
},
"type": "object",
"required": [
"id",
"commits",
"repos",
"filesChanged",
"additions",
"deletions"
],
"title": "ConversationCommits"
},
"ConversationDetail": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"project": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Project"
},
"cwd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cwd"
},
"gitBranch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Gitbranch"
},
"model": {
"type": "string",
"title": "Model"
},
"models": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Models"
},
"efforts": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Efforts"
},
"title": {
"type": "string",
"title": "Title"
},
"userTurns": {
"type": "integer",
"title": "Userturns"
},
"assistantTurns": {
"type": "integer",
"title": "Assistantturns"
},
"messages": {
"type": "integer",
"title": "Messages"
},
"startedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Startedat"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"usage": {
"$ref": "#/components/schemas/Usage"
},
"byTool": {
"anyOf": [
{
"additionalProperties": {
"$ref": "#/components/schemas/ToolUsage"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Bytool"
},
"byToolSub": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": {
"$ref": "#/components/schemas/ToolUsage"
},
"type": "object"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Bytoolsub"
},
"subagentCount": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Subagentcount"
},
"subagentTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Subagenttokens"
},
"subagentCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Subagentcost"
},
"runningAgents": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/RunningAgent"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Runningagents"
},
"contextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Contexttokens"
},
"contextModel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Contextmodel"
},
"firstContextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Firstcontexttokens"
},
"firstMessageTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Firstmessagetokens"
},
"tasks": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/Task"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Tasks"
},
"meta": {
"anyOf": [
{
"$ref": "#/components/schemas/ConvMeta"
},
{
"type": "null"
}
]
},
"thread": {
"items": {
"$ref": "#/components/schemas/ThreadItem"
},
"type": "array",
"title": "Thread"
},
"turns": {
"items": {
"$ref": "#/components/schemas/TurnUsage"
},
"type": "array",
"title": "Turns"
},
"memoriesRead": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/MemorySummary"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Memoriesread"
},
"memoriesCreated": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/MemorySummary"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Memoriescreated"
},
"subagents": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/SubagentRef"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Subagents"
},
"parentConversation": {
"anyOf": [
{
"$ref": "#/components/schemas/ParentConvRef"
},
{
"type": "null"
}
]
},
"plans": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/PlanSummary"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Plans"
},
"artefacts": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/ArtefactItem"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Artefacts"
}
},
"type": "object",
"required": [
"id",
"model",
"title",
"userTurns",
"assistantTurns",
"messages",
"tokens",
"cost",
"usage",
"thread",
"turns"
],
"title": "ConversationDetail"
},
"ConversationMetaResponse": {
"properties": {
"meta": {
"additionalProperties": {
"$ref": "#/components/schemas/ConvMeta"
},
"type": "object",
"title": "Meta"
}
},
"type": "object",
"required": [
"meta"
],
"title": "ConversationMetaResponse"
},
"ConversationSummary": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"project": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Project"
},
"cwd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cwd"
},
"gitBranch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Gitbranch"
},
"model": {
"type": "string",
"title": "Model"
},
"models": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Models"
},
"efforts": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Efforts"
},
"title": {
"type": "string",
"title": "Title"
},
"userTurns": {
"type": "integer",
"title": "Userturns"
},
"assistantTurns": {
"type": "integer",
"title": "Assistantturns"
},
"messages": {
"type": "integer",
"title": "Messages"
},
"startedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Startedat"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"usage": {
"anyOf": [
{
"$ref": "#/components/schemas/Usage"
},
{
"type": "null"
}
]
},
"byTool": {
"anyOf": [
{
"additionalProperties": {
"$ref": "#/components/schemas/ToolUsage"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Bytool"
},
"byToolSub": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": {
"$ref": "#/components/schemas/ToolUsage"
},
"type": "object"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Bytoolsub"
},
"subagentCount": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Subagentcount"
},
"subagentTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Subagenttokens"
},
"subagentCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Subagentcost"
},
"runningAgents": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/RunningAgent"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Runningagents"
},
"contextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Contexttokens"
},
"contextModel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Contextmodel"
},
"firstContextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Firstcontexttokens"
},
"firstMessageTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Firstmessagetokens"
},
"tasks": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/Task"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Tasks"
},
"meta": {
"anyOf": [
{
"$ref": "#/components/schemas/ConvMeta"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"id",
"model",
"title",
"userTurns",
"assistantTurns",
"messages",
"tokens",
"cost"
],
"title": "ConversationSummary"
},
"ConversationsResponse": {
"properties": {
"conversations": {
"items": {
"$ref": "#/components/schemas/ConversationSummary"
},
"type": "array",
"title": "Conversations"
},
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Count"
},
"nextBefore": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Nextbefore"
},
"pricing": {
"$ref": "#/components/schemas/Pricing"
}
},
"type": "object",
"required": [
"conversations",
"pricing"
],
"title": "ConversationsResponse"
},
"CronCreateBody": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"schedule": {
"type": "string",
"title": "Schedule"
},
"promptFile": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Promptfile"
},
"enabled": {
"type": "boolean",
"title": "Enabled",
"default": true
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
}
},
"type": "object",
"required": [
"name",
"schedule"
],
"title": "CronCreateBody"
},
"CronJob": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"name": {
"type": "string",
"title": "Name"
},
"schedule": {
"type": "string",
"title": "Schedule"
},
"promptFile": {
"type": "string",
"title": "Promptfile"
},
"enabled": {
"type": "boolean",
"title": "Enabled"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"runConfig": {
"anyOf": [
{
"$ref": "#/components/schemas/CronRunConfig"
},
{
"type": "null"
}
]
},
"createdAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Createdat"
},
"lastStatus": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Laststatus"
},
"nextRun": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Nextrun"
},
"history": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"title": "History"
},
"runs": {
"items": {
"$ref": "#/components/schemas/CronRun"
},
"type": "array",
"title": "Runs"
}
},
"type": "object",
"required": [
"id",
"name",
"schedule",
"promptFile",
"enabled",
"history",
"runs"
],
"title": "CronJob"
},
"CronJobsResponse": {
"properties": {
"jobs": {
"items": {
"$ref": "#/components/schemas/CronJob"
},
"type": "array",
"title": "Jobs"
}
},
"type": "object",
"required": [
"jobs"
],
"title": "CronJobsResponse"
},
"CronPatchBody": {
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"schedule": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Schedule"
},
"promptFile": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Promptfile"
},
"enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Enabled"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
}
},
"type": "object",
"title": "CronPatchBody"
},
"CronPromptBody": {
"properties": {
"content": {
"type": "string",
"title": "Content"
}
},
"type": "object",
"required": [
"content"
],
"title": "CronPromptBody"
},
"CronPromptFile": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"content": {
"type": "string",
"title": "Content"
},
"exists": {
"type": "boolean",
"title": "Exists"
}
},
"type": "object",
"required": [
"path",
"content",
"exists"
],
"title": "CronPromptFile"
},
"CronRef": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
}
},
"type": "object",
"required": [
"id"
],
"title": "CronRef",
"description": "The cron job that spawned a conversation (see cron.py) \u2014 rendered as a\ntag on the card/detail linking back to Settings \u2192 Cron."
},
"CronRun": {
"properties": {
"at": {
"type": "string",
"title": "At"
},
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"conversationId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Conversationid"
}
},
"type": "object",
"required": [
"at",
"sessionId"
],
"title": "CronRun",
"description": "One recorded firing of a cron job \u2014 the history mapping's entry enriched\nwith the conversation id the session landed on (once its transcript\nsynced), so the UI can link straight to it."
},
"CronRunConfig": {
"properties": {
"harness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Harness"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"effort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effort"
},
"thinking": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Thinking"
}
},
"type": "object",
"title": "CronRunConfig",
"description": "How a job's firings are launched, read out of the prompt file's YAML\nfrontmatter (``cron.run_config``). Every field is optional: None means the\nkey isn't set and the spawn path's own default applies."
},
"Dashboard": {
"properties": {
"pricing": {
"$ref": "#/components/schemas/Pricing"
},
"totals": {
"$ref": "#/components/schemas/DashboardTotals"
},
"skills": {
"items": {
"$ref": "#/components/schemas/SkillStat"
},
"type": "array",
"title": "Skills"
},
"topFiles": {
"items": {
"$ref": "#/components/schemas/TopFile"
},
"type": "array",
"title": "Topfiles"
}
},
"type": "object",
"required": [
"pricing",
"totals",
"skills",
"topFiles"
],
"title": "Dashboard"
},
"DashboardTotals": {
"properties": {
"files": {
"type": "integer",
"title": "Files"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"estimated": {
"type": "integer",
"title": "Estimated"
},
"skills": {
"type": "integer",
"title": "Skills"
},
"invocations": {
"type": "integer",
"title": "Invocations"
},
"skillSpend": {
"type": "number",
"title": "Skillspend"
}
},
"type": "object",
"required": [
"files",
"tokens",
"cost",
"estimated",
"skills",
"invocations",
"skillSpend"
],
"title": "DashboardTotals"
},
"DeliveryStatus": {
"properties": {
"webhook": {
"type": "string",
"title": "Webhook"
},
"ok": {
"type": "boolean",
"title": "Ok"
},
"status": {
"type": "integer",
"title": "Status"
}
},
"type": "object",
"required": [
"webhook",
"ok",
"status"
],
"title": "DeliveryStatus",
"description": "One webhook's delivery outcome for a forwarded notification."
},
"DeployStatus": {
"properties": {
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label"
},
"status": {
"type": "string",
"enum": [
"running",
"done",
"failed"
],
"title": "Status"
},
"phaseNum": {
"type": "integer",
"title": "Phasenum"
},
"totalPhases": {
"type": "integer",
"title": "Totalphases"
},
"phase": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Phase"
},
"steps": {
"items": {
"$ref": "#/components/schemas/DeployStep"
},
"type": "array",
"title": "Steps"
},
"startedAt": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Startedat"
},
"updatedAt": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"convUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Convurl"
},
"convTitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Convtitle"
}
},
"type": "object",
"required": [
"status",
"phaseNum",
"totalPhases",
"steps"
],
"title": "DeployStatus",
"description": "Snapshot of the in-flight ai-agent deploy (``deploy.sh``), or ``null``.\n\nWritten by the host-side deploy script into the data dir and polled by the\nbackend, which pings a ``deploy`` SSE event on change. Drives the sticky\nin-app deploy banner (worktree label + a dot-per-phase timeline)."
},
"DeployStep": {
"properties": {
"n": {
"type": "integer",
"title": "N"
},
"label": {
"type": "string",
"title": "Label"
},
"state": {
"type": "string",
"enum": [
"pending",
"active",
"done",
"failed"
],
"title": "State"
}
},
"type": "object",
"required": [
"n",
"label",
"state"
],
"title": "DeployStep",
"description": "One phase of the blue-green deploy, with its rendered dot state."
},
"DiffHunk": {
"properties": {
"header": {
"type": "string",
"title": "Header"
},
"oldStart": {
"type": "integer",
"title": "Oldstart"
},
"oldLines": {
"type": "integer",
"title": "Oldlines"
},
"newStart": {
"type": "integer",
"title": "Newstart"
},
"newLines": {
"type": "integer",
"title": "Newlines"
},
"lines": {
"items": {
"$ref": "#/components/schemas/DiffLine"
},
"type": "array",
"title": "Lines"
}
},
"type": "object",
"required": [
"header",
"oldStart",
"oldLines",
"newStart",
"newLines",
"lines"
],
"title": "DiffHunk"
},
"DiffLine": {
"properties": {
"type": {
"type": "string",
"enum": [
"add",
"del",
"ctx"
],
"title": "Type"
},
"oldNo": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Oldno"
},
"newNo": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Newno"
},
"text": {
"type": "string",
"title": "Text"
}
},
"type": "object",
"required": [
"type",
"text"
],
"title": "DiffLine"
},
"DiffResult": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subtitle"
},
"files": {
"items": {
"$ref": "#/components/schemas/FileDiff"
},
"type": "array",
"title": "Files"
},
"additions": {
"type": "integer",
"title": "Additions"
},
"deletions": {
"type": "integer",
"title": "Deletions"
},
"commits": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/CommitRef"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Commits"
},
"approx": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Approx"
}
},
"type": "object",
"required": [
"title",
"files",
"additions",
"deletions"
],
"title": "DiffResult"
},
"EnvSaveBody": {
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"set": {
"items": {
"$ref": "#/components/schemas/EnvSetItem"
},
"type": "array",
"title": "Set",
"default": []
},
"unset": {
"items": {
"type": "string"
},
"type": "array",
"title": "Unset",
"default": []
}
},
"type": "object",
"required": [
"slug"
],
"title": "EnvSaveBody"
},
"EnvSetItem": {
"properties": {
"key": {
"type": "string",
"title": "Key"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Value"
},
"secret": {
"type": "boolean",
"title": "Secret",
"default": false
}
},
"type": "object",
"required": [
"key"
],
"title": "EnvSetItem"
},
"FeedNotification": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"convId": {
"type": "string",
"title": "Convid"
},
"convTitle": {
"type": "string",
"title": "Convtitle"
},
"title": {
"type": "string",
"title": "Title"
},
"body": {
"type": "string",
"title": "Body"
},
"type": {
"type": "string",
"title": "Type"
},
"url": {
"type": "string",
"title": "Url"
},
"at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "At"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Kind"
}
},
"type": "object",
"required": [
"id",
"convId",
"convTitle",
"title",
"body",
"type",
"url",
"projects",
"services"
],
"title": "FeedNotification",
"description": "A flat notification feed item (the server-side mirror of the frontend's\nFeedNotif), as returned by ``/api/notifications/unread``."
},
"FileDiff": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"oldPath": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Oldpath"
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified",
"renamed"
],
"title": "Status"
},
"additions": {
"type": "integer",
"title": "Additions"
},
"deletions": {
"type": "integer",
"title": "Deletions"
},
"binary": {
"type": "boolean",
"title": "Binary"
},
"truncated": {
"type": "boolean",
"title": "Truncated"
},
"hunks": {
"items": {
"$ref": "#/components/schemas/DiffHunk"
},
"type": "array",
"title": "Hunks"
},
"repo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Repo"
}
},
"type": "object",
"required": [
"path",
"status",
"additions",
"deletions",
"binary",
"truncated",
"hunks"
],
"title": "FileDiff"
},
"FileEntry": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"name": {
"type": "string",
"title": "Name"
},
"ext": {
"type": "string",
"title": "Ext"
},
"kind": {
"type": "string",
"enum": [
"claude-md",
"skill-md",
"markdown",
"script",
"config",
"other"
],
"title": "Kind"
},
"isMarkdown": {
"type": "boolean",
"title": "Ismarkdown"
},
"bytes": {
"type": "integer",
"title": "Bytes"
},
"words": {
"type": "integer",
"title": "Words"
},
"chars": {
"type": "integer",
"title": "Chars"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"estimated": {
"type": "boolean",
"title": "Estimated"
},
"editable": {
"type": "boolean",
"title": "Editable"
},
"content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Content"
}
},
"type": "object",
"required": [
"path",
"name",
"ext",
"kind",
"isMarkdown",
"bytes",
"words",
"chars",
"tokens",
"cost",
"estimated",
"editable"
],
"title": "FileEntry"
},
"ForkBody": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"mi": {
"type": "integer",
"title": "Mi"
},
"prompt": {
"type": "string",
"title": "Prompt"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"harness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Harness"
}
},
"type": "object",
"required": [
"id",
"mi",
"prompt"
],
"title": "ForkBody"
},
"ForkedFrom": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"mi": {
"type": "integer",
"title": "Mi"
}
},
"type": "object",
"required": [
"id",
"mi"
],
"title": "ForkedFrom",
"description": "Where a forked conversation branched off: the source conversation and\nthe user-message ordinal (``mi``) whose edit created the fork."
},
"FormCreateBody": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"fields": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array",
"title": "Fields"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
}
},
"type": "object",
"required": [
"title",
"fields"
],
"title": "FormCreateBody"
},
"FormField": {
"properties": {
"key": {
"type": "string",
"title": "Key"
},
"label": {
"type": "string",
"title": "Label"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"number",
"select",
"multiselect",
"radio",
"checkbox",
"slider",
"file",
"date"
],
"title": "Type"
},
"required": {
"type": "boolean",
"title": "Required"
},
"placeholder": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Placeholder"
},
"help": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Help"
},
"accept": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Accept"
},
"options": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/FormFieldOption"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Options"
},
"min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min"
},
"max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max"
},
"step": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Step"
},
"multiple": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Multiple"
},
"default": {
"anyOf": [
{},
{
"type": "null"
}
],
"title": "Default"
}
},
"type": "object",
"required": [
"key",
"label",
"type",
"required"
],
"title": "FormField",
"description": "One field of a form spec (see forms.FIELD_TYPES)."
},
"FormFieldOption": {
"properties": {
"value": {
"type": "string",
"title": "Value"
},
"label": {
"type": "string",
"title": "Label"
}
},
"type": "object",
"required": [
"value",
"label"
],
"title": "FormFieldOption"
},
"FormRecord": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"title": {
"type": "string",
"title": "Title"
},
"description": {
"type": "string",
"title": "Description"
},
"type": {
"type": "string",
"title": "Type"
},
"url": {
"type": "string",
"title": "Url"
},
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"at": {
"type": "string",
"title": "At"
},
"fields": {
"items": {
"$ref": "#/components/schemas/FormField"
},
"type": "array",
"title": "Fields"
},
"status": {
"type": "string",
"enum": [
"pending",
"submitted",
"cancelled"
],
"title": "Status"
},
"answers": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Answers"
},
"submittedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Submittedat"
},
"cancelledAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cancelledat"
}
},
"type": "object",
"required": [
"id",
"title",
"description",
"type",
"url",
"sessionId",
"at",
"fields",
"status"
],
"title": "FormRecord",
"description": "A form with its lifecycle state; ``answers`` keyed by field key."
},
"FormSubmitBody": {
"properties": {
"answers": {
"additionalProperties": true,
"type": "object",
"title": "Answers"
}
},
"type": "object",
"required": [
"answers"
],
"title": "FormSubmitBody"
},
"FormsResponse": {
"properties": {
"forms": {
"items": {
"$ref": "#/components/schemas/FormRecord"
},
"type": "array",
"title": "Forms"
},
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Count"
}
},
"type": "object",
"required": [
"forms"
],
"title": "FormsResponse"
},
"GoalBoardEntry": {
"properties": {
"done": {
"type": "integer",
"title": "Done"
},
"total": {
"type": "integer",
"title": "Total"
},
"kind": {
"type": "string",
"enum": [
"project",
"service"
],
"title": "Kind"
},
"dir": {
"type": "string",
"title": "Dir"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"milestones": {
"items": {
"$ref": "#/components/schemas/GoalMilestone"
},
"type": "array",
"title": "Milestones"
},
"themes": {
"items": {
"$ref": "#/components/schemas/GoalTheme"
},
"type": "array",
"title": "Themes"
},
"claims": {
"items": {
"$ref": "#/components/schemas/GoalClaim"
},
"type": "array",
"title": "Claims"
},
"items": {
"items": {
"$ref": "#/components/schemas/GoalChecklistItem"
},
"type": "array",
"title": "Items"
},
"itemsTruncated": {
"type": "integer",
"title": "Itemstruncated"
},
"agents": {
"type": "integer",
"title": "Agents"
},
"runningConversations": {
"items": {
"$ref": "#/components/schemas/RunningConversation"
},
"type": "array",
"title": "Runningconversations"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"lastConversationAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lastconversationat"
}
},
"type": "object",
"required": [
"done",
"total",
"kind",
"dir",
"name",
"description",
"milestones",
"themes",
"claims",
"items",
"itemsTruncated",
"agents",
"runningConversations",
"conversations"
],
"title": "GoalBoardEntry"
},
"GoalChecklistItem": {
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"plain": {
"type": "string",
"title": "Plain"
},
"checked": {
"type": "boolean",
"title": "Checked"
}
},
"type": "object",
"required": [
"text",
"plain",
"checked"
],
"title": "GoalChecklistItem"
},
"GoalClaim": {
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"since": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Since"
},
"stale": {
"type": "boolean",
"title": "Stale"
}
},
"type": "object",
"required": [
"text",
"stale"
],
"title": "GoalClaim"
},
"GoalDetail": {
"properties": {
"done": {
"type": "integer",
"title": "Done"
},
"total": {
"type": "integer",
"title": "Total"
},
"content": {
"type": "string",
"title": "Content"
},
"items": {
"items": {
"$ref": "#/components/schemas/GoalChecklistItem"
},
"type": "array",
"title": "Items"
},
"claims": {
"items": {
"$ref": "#/components/schemas/GoalClaim"
},
"type": "array",
"title": "Claims"
}
},
"type": "object",
"required": [
"done",
"total",
"content",
"items",
"claims"
],
"title": "GoalDetail"
},
"GoalMilestone": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Version"
},
"current": {
"type": "boolean",
"title": "Current"
},
"done": {
"type": "integer",
"title": "Done"
},
"total": {
"type": "integer",
"title": "Total"
},
"hasTasks": {
"type": "boolean",
"title": "Hastasks"
}
},
"type": "object",
"required": [
"title",
"current",
"done",
"total",
"hasTasks"
],
"title": "GoalMilestone"
},
"GoalSummary": {
"properties": {
"done": {
"type": "integer",
"title": "Done"
},
"total": {
"type": "integer",
"title": "Total"
}
},
"type": "object",
"required": [
"done",
"total"
],
"title": "GoalSummary"
},
"GoalTheme": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"done": {
"type": "integer",
"title": "Done"
},
"total": {
"type": "integer",
"title": "Total"
}
},
"type": "object",
"required": [
"title",
"done",
"total"
],
"title": "GoalTheme"
},
"GoalWorkBody": {
"properties": {
"kind": {
"type": "string",
"title": "Kind"
},
"dir": {
"type": "string",
"title": "Dir"
},
"item": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Item"
}
},
"type": "object",
"required": [
"kind",
"dir"
],
"title": "GoalWorkBody"
},
"GoalsResponse": {
"properties": {
"goals": {
"items": {
"$ref": "#/components/schemas/GoalBoardEntry"
},
"type": "array",
"title": "Goals"
}
},
"type": "object",
"required": [
"goals"
],
"title": "GoalsResponse"
},
"HTTPValidationError": {
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
},
"HomepageMeta": {
"properties": {
"label": {
"type": "string",
"title": "Label"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"href": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Href"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Group"
}
},
"type": "object",
"required": [
"label"
],
"title": "HomepageMeta"
},
"Hook": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"name": {
"type": "string",
"title": "Name"
},
"event": {
"type": "string",
"title": "Event"
},
"delaySeconds": {
"type": "integer",
"title": "Delayseconds"
},
"promptFile": {
"type": "string",
"title": "Promptfile"
},
"enabled": {
"type": "boolean",
"title": "Enabled"
},
"skipCron": {
"type": "boolean",
"title": "Skipcron",
"default": true
},
"skipSubagents": {
"type": "boolean",
"title": "Skipsubagents",
"default": true
},
"maxContextK": {
"type": "integer",
"title": "Maxcontextk",
"default": 0
},
"runConfig": {
"anyOf": [
{
"$ref": "#/components/schemas/CronRunConfig"
},
{
"type": "null"
}
]
},
"createdAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Createdat"
},
"lastStatus": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Laststatus"
},
"history": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"title": "History"
},
"runs": {
"items": {
"$ref": "#/components/schemas/HookRun"
},
"type": "array",
"title": "Runs"
},
"pending": {
"items": {
"$ref": "#/components/schemas/HookPending"
},
"type": "array",
"title": "Pending"
}
},
"type": "object",
"required": [
"id",
"name",
"event",
"delaySeconds",
"promptFile",
"enabled",
"history",
"runs",
"pending"
],
"title": "Hook",
"description": "A conversation hook: a follow-up prompt resumed into the conversation\nthat just finished, ``delaySeconds`` after it does (see hooks.py)."
},
"HookCreateBody": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Event"
},
"delaySeconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Delayseconds"
},
"promptFile": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Promptfile"
},
"enabled": {
"type": "boolean",
"title": "Enabled",
"default": true
},
"skipCron": {
"type": "boolean",
"title": "Skipcron",
"default": true
},
"skipSubagents": {
"type": "boolean",
"title": "Skipsubagents",
"default": true
},
"maxContextK": {
"type": "integer",
"title": "Maxcontextk",
"default": 0
}
},
"type": "object",
"required": [
"name"
],
"title": "HookCreateBody"
},
"HookPatchBody": {
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Event"
},
"delaySeconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Delayseconds"
},
"promptFile": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Promptfile"
},
"enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Enabled"
},
"skipCron": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Skipcron"
},
"skipSubagents": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Skipsubagents"
},
"maxContextK": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Maxcontextk"
}
},
"type": "object",
"title": "HookPatchBody"
},
"HookPending": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"conversationId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Conversationid"
},
"dueAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dueat"
},
"retries": {
"type": "integer",
"title": "Retries",
"default": 0
}
},
"type": "object",
"required": [
"sessionId"
],
"title": "HookPending",
"description": "A queued firing: the conversation is waiting out the hook's delay (or a\nprecondition that hasn't come true yet \u2014 see ``retries``)."
},
"HookPromptBody": {
"properties": {
"content": {
"type": "string",
"title": "Content"
}
},
"type": "object",
"required": [
"content"
],
"title": "HookPromptBody"
},
"HookPromptFile": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"content": {
"type": "string",
"title": "Content"
},
"exists": {
"type": "boolean",
"title": "Exists"
}
},
"type": "object",
"required": [
"path",
"content",
"exists"
],
"title": "HookPromptFile"
},
"HookRun": {
"properties": {
"at": {
"type": "string",
"title": "At"
},
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"conversationId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Conversationid"
}
},
"type": "object",
"required": [
"at",
"sessionId"
],
"title": "HookRun",
"description": "One recorded firing of a hook \u2014 when it fired, the session it resumed,\nand that session's conversation id once its transcript synced."
},
"HookRunBody": {
"properties": {
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
}
},
"type": "object",
"title": "HookRunBody"
},
"HooksResponse": {
"properties": {
"hooks": {
"items": {
"$ref": "#/components/schemas/Hook"
},
"type": "array",
"title": "Hooks"
}
},
"type": "object",
"required": [
"hooks"
],
"title": "HooksResponse"
},
"IndexMeta": {
"properties": {
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"ogImage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ogimage"
},
"ogUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ogurl"
},
"themeColor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Themecolor"
}
},
"type": "object",
"title": "IndexMeta"
},
"InterruptBody": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
}
},
"type": "object",
"required": [
"sessionId"
],
"title": "InterruptBody"
},
"InterruptResult": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"ok": {
"type": "boolean",
"title": "Ok"
}
},
"type": "object",
"required": [
"sessionId",
"ok"
],
"title": "InterruptResult"
},
"KeyFile": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"bytes": {
"type": "integer",
"title": "Bytes"
}
},
"type": "object",
"required": [
"name",
"bytes"
],
"title": "KeyFile"
},
"MemoriesResponse": {
"properties": {
"memories": {
"items": {
"$ref": "#/components/schemas/MemorySummary"
},
"type": "array",
"title": "Memories"
}
},
"type": "object",
"required": [
"memories"
],
"title": "MemoriesResponse"
},
"MemoryConvRef": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
},
"cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Cost"
},
"tokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tokens"
},
"meta": {
"anyOf": [
{
"$ref": "#/components/schemas/ConvMeta"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"id"
],
"title": "MemoryConvRef"
},
"MemoryDetail": {
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"originSessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Originsessionid"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"links": {
"items": {
"type": "string"
},
"type": "array",
"title": "Links"
},
"words": {
"type": "integer",
"title": "Words"
},
"bytes": {
"type": "integer",
"title": "Bytes"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"content": {
"type": "string",
"title": "Content"
},
"createdIn": {
"items": {
"$ref": "#/components/schemas/MemoryConvRef"
},
"type": "array",
"title": "Createdin"
},
"readIn": {
"items": {
"$ref": "#/components/schemas/MemoryConvRef"
},
"type": "array",
"title": "Readin"
}
},
"type": "object",
"required": [
"slug",
"name",
"description",
"projects",
"services",
"links",
"words",
"bytes",
"content",
"createdIn",
"readIn"
],
"title": "MemoryDetail"
},
"MemorySummary": {
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"originSessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Originsessionid"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"links": {
"items": {
"type": "string"
},
"type": "array",
"title": "Links"
},
"words": {
"type": "integer",
"title": "Words"
},
"bytes": {
"type": "integer",
"title": "Bytes"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
}
},
"type": "object",
"required": [
"slug",
"name",
"description",
"projects",
"services",
"links",
"words",
"bytes"
],
"title": "MemorySummary"
},
"MetaPatch": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"projects": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Projects"
},
"services": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Services"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "State"
},
"committed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Committed"
},
"pushed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Pushed"
},
"merged": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Merged"
},
"deployed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Deployed"
},
"notified": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notified"
},
"notification": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Notification"
},
"worktree": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Worktree"
},
"archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Archived"
}
},
"type": "object",
"required": [
"id"
],
"title": "MetaPatch"
},
"MetaUpdateResult": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"meta": {
"$ref": "#/components/schemas/ConvMeta"
}
},
"type": "object",
"required": [
"id",
"meta"
],
"title": "MetaUpdateResult"
},
"ModelInfo": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"displayName": {
"type": "string",
"title": "Displayname"
},
"family": {
"type": "string",
"title": "Family"
},
"version": {
"type": "string",
"title": "Version"
},
"alias": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Alias"
},
"latest": {
"type": "boolean",
"title": "Latest",
"default": false
},
"harness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Harness"
},
"provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Provider"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label"
},
"contextWindow": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Contextwindow"
}
},
"type": "object",
"required": [
"id",
"displayName",
"family",
"version"
],
"title": "ModelInfo",
"description": "One pickable model (a model tag in the composer)."
},
"ModelsResponse": {
"properties": {
"models": {
"items": {
"$ref": "#/components/schemas/ModelInfo"
},
"type": "array",
"title": "Models"
},
"default": {
"type": "string",
"title": "Default"
}
},
"type": "object",
"required": [
"models",
"default"
],
"title": "ModelsResponse"
},
"NotifConversation": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"title": {
"type": "string",
"title": "Title"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"notifications": {
"items": {
"$ref": "#/components/schemas/ConvNotification"
},
"type": "array",
"title": "Notifications"
}
},
"type": "object",
"required": [
"id",
"title",
"projects",
"services",
"notifications"
],
"title": "NotifConversation",
"description": "A conversation that recorded notify-done pushes, feed-relevant bits only."
},
"NotifSeenBody": {
"properties": {
"ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Ids"
},
"all": {
"type": "boolean",
"title": "All",
"default": false
}
},
"type": "object",
"title": "NotifSeenBody"
},
"NotificationsResponse": {
"properties": {
"conversations": {
"items": {
"$ref": "#/components/schemas/NotifConversation"
},
"type": "array",
"title": "Conversations"
},
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Count"
}
},
"type": "object",
"required": [
"conversations"
],
"title": "NotificationsResponse"
},
"NotifyBody": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"message": {
"type": "string",
"title": "Message"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Image"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Color"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Channel"
},
"importance": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Importance"
},
"vibrationPattern": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Vibrationpattern"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tag"
},
"persistent": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Persistent"
},
"actions": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Actions"
},
"spoken": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Spoken"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
}
},
"type": "object",
"required": [
"title",
"message"
],
"title": "NotifyBody"
},
"NotifyLogEntry": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"kind": {
"type": "string",
"enum": [
"notify",
"ask"
],
"title": "Kind"
},
"title": {
"type": "string",
"title": "Title"
},
"body": {
"type": "string",
"title": "Body"
},
"type": {
"type": "string",
"title": "Type"
},
"url": {
"type": "string",
"title": "Url"
},
"at": {
"type": "string",
"title": "At"
},
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"delivered": {
"items": {
"$ref": "#/components/schemas/DeliveryStatus"
},
"type": "array",
"title": "Delivered"
},
"options": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Options"
},
"status": {
"anyOf": [
{
"type": "string",
"enum": [
"pending",
"answered",
"expired"
]
},
{
"type": "null"
}
],
"title": "Status"
},
"answer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Answer"
},
"answerIndex": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Answerindex"
},
"answeredAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Answeredat"
},
"expiresAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expiresat"
}
},
"type": "object",
"required": [
"id",
"kind",
"title",
"body",
"type",
"url",
"at",
"sessionId",
"delivered"
],
"title": "NotifyLogEntry",
"description": "One recorded notification (kind \"notify\") or ask (kind \"ask\")."
},
"NotifyLogResponse": {
"properties": {
"notifications": {
"items": {
"$ref": "#/components/schemas/NotifyLogEntry"
},
"type": "array",
"title": "Notifications"
},
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Count"
}
},
"type": "object",
"required": [
"notifications"
],
"title": "NotifyLogResponse"
},
"NotifyResult": {
"properties": {
"ok": {
"type": "boolean",
"title": "Ok"
},
"id": {
"type": "string",
"title": "Id"
},
"delivered": {
"items": {
"$ref": "#/components/schemas/DeliveryStatus"
},
"type": "array",
"title": "Delivered"
}
},
"type": "object",
"required": [
"ok",
"id",
"delivered"
],
"title": "NotifyResult"
},
"OgImage": {
"properties": {
"kind": {
"type": "string",
"enum": [
"url",
"asset"
],
"title": "Kind"
},
"src": {
"type": "string",
"title": "Src"
}
},
"type": "object",
"required": [
"kind",
"src"
],
"title": "OgImage"
},
"OkResponse": {
"properties": {
"ok": {
"type": "boolean",
"title": "Ok"
}
},
"type": "object",
"required": [
"ok"
],
"title": "OkResponse"
},
"ParentConvRef": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"toolUseId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tooluseid"
},
"agentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agenttype"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
}
},
"type": "object",
"required": [
"id"
],
"title": "ParentConvRef"
},
"PlanActual": {
"properties": {
"cost": {
"type": "number",
"title": "Cost"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"durationMs": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Durationms"
}
},
"type": "object",
"required": [
"cost",
"tokens"
],
"title": "PlanActual"
},
"PlanConvRef": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"startedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Startedat"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
},
"cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Cost"
},
"tokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tokens"
},
"durationMs": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Durationms"
},
"meta": {
"anyOf": [
{
"$ref": "#/components/schemas/ConvMeta"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"id"
],
"title": "PlanConvRef"
},
"PlanDetail": {
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"title": {
"type": "string",
"title": "Title"
},
"status": {
"type": "string",
"title": "Status"
},
"created": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Created"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"conversationIds": {
"items": {
"type": "string"
},
"type": "array",
"title": "Conversationids"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"estCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estcost"
},
"estTimeMinutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Esttimeminutes"
},
"estTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Esttokens"
},
"files": {
"type": "integer",
"title": "Files"
},
"steps": {
"type": "integer",
"title": "Steps"
},
"questions": {
"type": "integer",
"title": "Questions",
"default": 0
},
"content": {
"type": "string",
"title": "Content"
},
"fileList": {
"items": {
"$ref": "#/components/schemas/PlanFile"
},
"type": "array",
"title": "Filelist"
},
"stepList": {
"items": {
"$ref": "#/components/schemas/PlanStep"
},
"type": "array",
"title": "Steplist"
},
"conversations": {
"items": {
"$ref": "#/components/schemas/PlanConvRef"
},
"type": "array",
"title": "Conversations"
},
"actual": {
"anyOf": [
{
"$ref": "#/components/schemas/PlanActual"
},
{
"type": "null"
}
]
},
"questionForm": {
"anyOf": [
{
"$ref": "#/components/schemas/PlanQuestionForm"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"slug",
"title",
"status",
"conversationIds",
"projects",
"services",
"files",
"steps",
"content",
"fileList",
"stepList",
"conversations"
],
"title": "PlanDetail"
},
"PlanFile": {
"properties": {
"file": {
"type": "string",
"title": "File"
},
"change": {
"type": "string",
"title": "Change"
}
},
"type": "object",
"required": [
"file",
"change"
],
"title": "PlanFile"
},
"PlanQuestionForm": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"description": {
"type": "string",
"title": "Description"
},
"fields": {
"items": {
"$ref": "#/components/schemas/FormField"
},
"type": "array",
"title": "Fields"
}
},
"type": "object",
"required": [
"title",
"description",
"fields"
],
"title": "PlanQuestionForm",
"description": "The plan's open questions, as an ask-form field spec (the ``## Questions``\nsection's fenced JSON). Answered client-side on the plan page \u2014 answers live\nin the browser and feed the \"implement this plan\" prompt."
},
"PlanStep": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"detail": {
"type": "string",
"title": "Detail"
}
},
"type": "object",
"required": [
"title",
"detail"
],
"title": "PlanStep"
},
"PlanSummary": {
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"title": {
"type": "string",
"title": "Title"
},
"status": {
"type": "string",
"title": "Status"
},
"created": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Created"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"sessionId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sessionid"
},
"conversationIds": {
"items": {
"type": "string"
},
"type": "array",
"title": "Conversationids"
},
"projects": {
"items": {
"type": "string"
},
"type": "array",
"title": "Projects"
},
"services": {
"items": {
"type": "string"
},
"type": "array",
"title": "Services"
},
"estCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estcost"
},
"estTimeMinutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Esttimeminutes"
},
"estTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Esttokens"
},
"files": {
"type": "integer",
"title": "Files"
},
"steps": {
"type": "integer",
"title": "Steps"
},
"questions": {
"type": "integer",
"title": "Questions",
"default": 0
}
},
"type": "object",
"required": [
"slug",
"title",
"status",
"conversationIds",
"projects",
"services",
"files",
"steps"
],
"title": "PlanSummary"
},
"PlansResponse": {
"properties": {
"plans": {
"items": {
"$ref": "#/components/schemas/PlanSummary"
},
"type": "array",
"title": "Plans"
}
},
"type": "object",
"required": [
"plans"
],
"title": "PlansResponse"
},
"Pricing": {
"properties": {
"model": {
"type": "string",
"title": "Model"
},
"inputPerMTok": {
"type": "number",
"title": "Inputpermtok"
}
},
"type": "object",
"required": [
"model",
"inputPerMTok"
],
"title": "Pricing"
},
"ProjectByType": {
"properties": {
"input": {
"$ref": "#/components/schemas/TokenTypeSpend"
},
"output": {
"$ref": "#/components/schemas/TokenTypeSpend"
},
"cacheRead": {
"$ref": "#/components/schemas/TokenTypeSpend"
},
"cacheWrite": {
"$ref": "#/components/schemas/TokenTypeSpend"
}
},
"type": "object",
"required": [
"input",
"output",
"cacheRead",
"cacheWrite"
],
"title": "ProjectByType"
},
"ProjectCommit": {
"properties": {
"hash": {
"type": "string",
"title": "Hash"
},
"date": {
"type": "string",
"title": "Date"
},
"subject": {
"type": "string",
"title": "Subject"
}
},
"type": "object",
"required": [
"hash",
"date",
"subject"
],
"title": "ProjectCommit"
},
"ProjectCostDetail": {
"properties": {
"cost": {
"type": "number",
"title": "Cost"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"meanCost": {
"type": "number",
"title": "Meancost"
},
"medianCost": {
"type": "number",
"title": "Mediancost"
},
"meanTokens": {
"type": "number",
"title": "Meantokens"
},
"medianTokens": {
"type": "number",
"title": "Mediantokens"
},
"byType": {
"$ref": "#/components/schemas/ProjectByType"
},
"loc": {
"type": "integer",
"title": "Loc"
},
"meanCostPerLoc": {
"type": "number",
"title": "Meancostperloc"
}
},
"type": "object",
"required": [
"cost",
"tokens",
"conversations",
"meanCost",
"medianCost",
"meanTokens",
"medianTokens",
"byType",
"loc",
"meanCostPerLoc"
],
"title": "ProjectCostDetail"
},
"ProjectCostSummary": {
"properties": {
"cost": {
"type": "number",
"title": "Cost"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"conversations": {
"type": "integer",
"title": "Conversations"
}
},
"type": "object",
"required": [
"cost",
"tokens",
"conversations"
],
"title": "ProjectCostSummary"
},
"ProjectDetail": {
"properties": {
"dir": {
"type": "string",
"title": "Dir"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Version"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"stack": {
"items": {
"type": "string"
},
"type": "array",
"title": "Stack"
},
"keywords": {
"items": {
"type": "string"
},
"type": "array",
"title": "Keywords"
},
"hasPackageJson": {
"type": "boolean",
"title": "Haspackagejson"
},
"goal": {
"anyOf": [
{
"$ref": "#/components/schemas/GoalDetail"
},
{
"type": "null"
}
]
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"costs": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCostDetail"
},
{
"type": "null"
}
]
},
"readme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Readme"
},
"claudeMd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Claudemd"
},
"indexMeta": {
"anyOf": [
{
"$ref": "#/components/schemas/IndexMeta"
},
{
"type": "null"
}
]
},
"ogImage": {
"anyOf": [
{
"$ref": "#/components/schemas/OgImage"
},
{
"type": "null"
}
]
},
"scripts": {
"items": {
"type": "string"
},
"type": "array",
"title": "Scripts"
},
"keyFiles": {
"items": {
"$ref": "#/components/schemas/KeyFile"
},
"type": "array",
"title": "Keyfiles"
},
"commits": {
"items": {
"$ref": "#/components/schemas/ProjectCommit"
},
"type": "array",
"title": "Commits"
}
},
"type": "object",
"required": [
"dir",
"name",
"description",
"stack",
"keywords",
"hasPackageJson",
"scripts",
"keyFiles",
"commits"
],
"title": "ProjectDetail"
},
"ProjectEnvResponse": {
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"exists": {
"type": "boolean",
"title": "Exists"
},
"vars": {
"items": {
"$ref": "#/components/schemas/ProjectEnvVar"
},
"type": "array",
"title": "Vars"
}
},
"type": "object",
"required": [
"slug",
"exists",
"vars"
],
"title": "ProjectEnvResponse"
},
"ProjectEnvVar": {
"properties": {
"key": {
"type": "string",
"title": "Key"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Value"
},
"secret": {
"type": "boolean",
"title": "Secret"
},
"hasValue": {
"type": "boolean",
"title": "Hasvalue"
}
},
"type": "object",
"required": [
"key",
"secret",
"hasValue"
],
"title": "ProjectEnvVar"
},
"ProjectSummary": {
"properties": {
"dir": {
"type": "string",
"title": "Dir"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Version"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"stack": {
"items": {
"type": "string"
},
"type": "array",
"title": "Stack"
},
"keywords": {
"items": {
"type": "string"
},
"type": "array",
"title": "Keywords"
},
"hasPackageJson": {
"type": "boolean",
"title": "Haspackagejson"
},
"goal": {
"anyOf": [
{
"$ref": "#/components/schemas/GoalSummary"
},
{
"type": "null"
}
]
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"costs": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCostSummary"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"dir",
"name",
"description",
"stack",
"keywords",
"hasPackageJson"
],
"title": "ProjectSummary"
},
"ProjectsResponse": {
"properties": {
"projects": {
"items": {
"$ref": "#/components/schemas/ProjectSummary"
},
"type": "array",
"title": "Projects"
}
},
"type": "object",
"required": [
"projects"
],
"title": "ProjectsResponse"
},
"ResumeBody": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"prompt": {
"type": "string",
"title": "Prompt"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"cwd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cwd"
},
"harness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Harness"
},
"thinking": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Thinking"
},
"effort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effort"
}
},
"type": "object",
"required": [
"sessionId",
"prompt"
],
"title": "ResumeBody"
},
"RunningAgent": {
"properties": {
"toolUseId": {
"type": "string",
"title": "Tooluseid"
},
"agentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agenttype"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"startedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Startedat"
}
},
"type": "object",
"required": [
"toolUseId"
],
"title": "RunningAgent",
"description": "A Task/Agent call that hasn't returned \u2014 i.e. a subagent still running."
},
"RunningConversation": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"title": {
"type": "string",
"title": "Title"
},
"startedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Startedat"
}
},
"type": "object",
"required": [
"id",
"title"
],
"title": "RunningConversation"
},
"SaveBody": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"content": {
"type": "string",
"title": "Content"
}
},
"type": "object",
"required": [
"path",
"content"
],
"title": "SaveBody"
},
"SearchConv": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"title": {
"type": "string",
"title": "Title"
},
"project": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Project"
},
"model": {
"type": "string",
"title": "Model"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
},
"msgs": {
"items": {
"$ref": "#/components/schemas/SearchMsg"
},
"type": "array",
"title": "Msgs"
}
},
"type": "object",
"required": [
"id",
"title",
"model",
"msgs"
],
"title": "SearchConv"
},
"SearchIndexResponse": {
"properties": {
"conversations": {
"items": {
"$ref": "#/components/schemas/SearchConv"
},
"type": "array",
"title": "Conversations"
},
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Count"
}
},
"type": "object",
"required": [
"conversations"
],
"title": "SearchIndexResponse"
},
"SearchMsg": {
"properties": {
"i": {
"type": "integer",
"title": "I"
},
"role": {
"type": "string",
"enum": [
"user",
"assistant"
],
"title": "Role"
},
"text": {
"type": "string",
"title": "Text"
}
},
"type": "object",
"required": [
"i",
"role",
"text"
],
"title": "SearchMsg"
},
"ServiceContainer": {
"properties": {
"key": {
"type": "string",
"title": "Key"
},
"containerName": {
"type": "string",
"title": "Containername"
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Image"
},
"build": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Build"
},
"profiles": {
"items": {
"type": "string"
},
"type": "array",
"title": "Profiles"
},
"restart": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Restart"
},
"networkMode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Networkmode"
},
"networks": {
"items": {
"type": "string"
},
"type": "array",
"title": "Networks"
},
"ports": {
"items": {
"type": "string"
},
"type": "array",
"title": "Ports"
},
"dependsOn": {
"items": {
"type": "string"
},
"type": "array",
"title": "Dependson"
},
"envKeys": {
"items": {
"type": "string"
},
"type": "array",
"title": "Envkeys"
},
"envFiles": {
"items": {
"type": "string"
},
"type": "array",
"title": "Envfiles"
},
"volumes": {
"items": {
"$ref": "#/components/schemas/ServiceVolume"
},
"type": "array",
"title": "Volumes"
},
"hasHealthcheck": {
"type": "boolean",
"title": "Hashealthcheck"
},
"composeFile": {
"type": "string",
"title": "Composefile"
}
},
"type": "object",
"required": [
"key",
"containerName",
"profiles",
"networks",
"ports",
"dependsOn",
"envKeys",
"envFiles",
"volumes",
"hasHealthcheck",
"composeFile"
],
"title": "ServiceContainer"
},
"ServiceDetail": {
"properties": {
"dir": {
"type": "string",
"title": "Dir"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Group"
},
"urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Urls"
},
"containers": {
"items": {
"type": "string"
},
"type": "array",
"title": "Containers"
},
"containerCount": {
"type": "integer",
"title": "Containercount"
},
"images": {
"items": {
"type": "string"
},
"type": "array",
"title": "Images"
},
"profiles": {
"items": {
"type": "string"
},
"type": "array",
"title": "Profiles"
},
"auth": {
"anyOf": [
{
"type": "string",
"enum": [
"auth",
"public",
"api",
"mixed"
]
},
{
"type": "null"
}
],
"title": "Auth"
},
"hasCompose": {
"type": "boolean",
"title": "Hascompose"
},
"hasTraefik": {
"type": "boolean",
"title": "Hastraefik"
},
"goal": {
"anyOf": [
{
"$ref": "#/components/schemas/GoalDetail"
},
{
"type": "null"
}
]
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"containersDetail": {
"items": {
"$ref": "#/components/schemas/ServiceContainer"
},
"type": "array",
"title": "Containersdetail"
},
"composeFiles": {
"items": {
"type": "string"
},
"type": "array",
"title": "Composefiles"
},
"topNetworks": {
"items": {
"type": "string"
},
"type": "array",
"title": "Topnetworks"
},
"routers": {
"items": {
"$ref": "#/components/schemas/ServiceRouter"
},
"type": "array",
"title": "Routers"
},
"traefikServices": {
"items": {
"$ref": "#/components/schemas/TraefikService"
},
"type": "array",
"title": "Traefikservices"
},
"middlewares": {
"items": {
"type": "string"
},
"type": "array",
"title": "Middlewares"
},
"envKeys": {
"items": {
"type": "string"
},
"type": "array",
"title": "Envkeys"
},
"homepage": {
"anyOf": [
{
"$ref": "#/components/schemas/HomepageMeta"
},
{
"type": "null"
}
]
},
"readme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Readme"
},
"claudeMd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Claudemd"
},
"keyFiles": {
"items": {
"$ref": "#/components/schemas/KeyFile"
},
"type": "array",
"title": "Keyfiles"
},
"commits": {
"items": {
"$ref": "#/components/schemas/ProjectCommit"
},
"type": "array",
"title": "Commits"
},
"tree": {
"items": {
"$ref": "#/components/schemas/ServiceTreeNode"
},
"type": "array",
"title": "Tree"
}
},
"type": "object",
"required": [
"dir",
"name",
"description",
"urls",
"containers",
"containerCount",
"images",
"profiles",
"hasCompose",
"hasTraefik",
"containersDetail",
"composeFiles",
"topNetworks",
"routers",
"traefikServices",
"middlewares",
"envKeys",
"keyFiles",
"commits",
"tree"
],
"title": "ServiceDetail"
},
"ServiceRouter": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"kind": {
"type": "string",
"enum": [
"http",
"tcp"
],
"title": "Kind"
},
"rule": {
"type": "string",
"title": "Rule"
},
"hosts": {
"items": {
"type": "string"
},
"type": "array",
"title": "Hosts"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"entryPoints": {
"items": {
"type": "string"
},
"type": "array",
"title": "Entrypoints"
},
"service": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Service"
},
"middlewares": {
"items": {
"type": "string"
},
"type": "array",
"title": "Middlewares"
},
"tls": {
"type": "boolean",
"title": "Tls"
},
"priority": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Priority"
}
},
"type": "object",
"required": [
"name",
"kind",
"rule",
"hosts",
"entryPoints",
"middlewares",
"tls"
],
"title": "ServiceRouter"
},
"ServiceSummary": {
"properties": {
"dir": {
"type": "string",
"title": "Dir"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Group"
},
"urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Urls"
},
"containers": {
"items": {
"type": "string"
},
"type": "array",
"title": "Containers"
},
"containerCount": {
"type": "integer",
"title": "Containercount"
},
"images": {
"items": {
"type": "string"
},
"type": "array",
"title": "Images"
},
"profiles": {
"items": {
"type": "string"
},
"type": "array",
"title": "Profiles"
},
"auth": {
"anyOf": [
{
"type": "string",
"enum": [
"auth",
"public",
"api",
"mixed"
]
},
{
"type": "null"
}
],
"title": "Auth"
},
"hasCompose": {
"type": "boolean",
"title": "Hascompose"
},
"hasTraefik": {
"type": "boolean",
"title": "Hastraefik"
},
"goal": {
"anyOf": [
{
"$ref": "#/components/schemas/GoalSummary"
},
{
"type": "null"
}
]
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
}
},
"type": "object",
"required": [
"dir",
"name",
"description",
"urls",
"containers",
"containerCount",
"images",
"profiles",
"hasCompose",
"hasTraefik"
],
"title": "ServiceSummary"
},
"ServiceTreeNode": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"path": {
"type": "string",
"title": "Path"
},
"type": {
"type": "string",
"enum": [
"dir",
"file"
],
"title": "Type"
},
"size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Size"
},
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text"
},
"secret": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Secret"
},
"children": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/ServiceTreeNode"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Children"
}
},
"type": "object",
"required": [
"name",
"path",
"type"
],
"title": "ServiceTreeNode"
},
"ServiceVolume": {
"properties": {
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source"
},
"target": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Target"
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mode"
},
"readOnly": {
"type": "boolean",
"title": "Readonly"
}
},
"type": "object",
"required": [
"readOnly"
],
"title": "ServiceVolume"
},
"ServicesResponse": {
"properties": {
"services": {
"items": {
"$ref": "#/components/schemas/ServiceSummary"
},
"type": "array",
"title": "Services"
}
},
"type": "object",
"required": [
"services"
],
"title": "ServicesResponse"
},
"SkillStat": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"count": {
"type": "integer",
"title": "Count"
},
"lastUsed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lastused"
},
"contextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Contexttokens"
},
"contextCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Contextcost"
},
"estSpend": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estspend"
}
},
"type": "object",
"required": [
"name",
"count"
],
"title": "SkillStat"
},
"SkillSummary": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"title": {
"type": "string",
"title": "Title"
},
"description": {
"type": "string",
"title": "Description"
},
"dir": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dir"
},
"path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Path"
},
"source": {
"type": "string",
"title": "Source"
},
"sourceKind": {
"type": "string",
"title": "Sourcekind"
},
"files": {
"type": "integer",
"title": "Files"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"count": {
"type": "integer",
"title": "Count"
},
"lastUsed": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lastused"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"contextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Contexttokens"
},
"contextCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Contextcost"
},
"estSpend": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estspend"
},
"sessionCost": {
"type": "number",
"title": "Sessioncost"
},
"sessionTokens": {
"type": "integer",
"title": "Sessiontokens"
}
},
"type": "object",
"required": [
"name",
"title",
"description",
"source",
"sourceKind",
"files",
"count",
"conversations",
"sessionCost",
"sessionTokens"
],
"title": "SkillSummary",
"description": "One skill card: what it is on disk + what its use has cost."
},
"SkillsResponse": {
"properties": {
"skills": {
"items": {
"$ref": "#/components/schemas/SkillSummary"
},
"type": "array",
"title": "Skills"
},
"totals": {
"$ref": "#/components/schemas/SkillsTotals"
}
},
"type": "object",
"required": [
"skills",
"totals"
],
"title": "SkillsResponse"
},
"SkillsTotals": {
"properties": {
"skills": {
"type": "integer",
"title": "Skills"
},
"used": {
"type": "integer",
"title": "Used"
},
"invocations": {
"type": "integer",
"title": "Invocations"
},
"contextCost": {
"type": "number",
"title": "Contextcost"
},
"estSpend": {
"type": "number",
"title": "Estspend"
}
},
"type": "object",
"required": [
"skills",
"used",
"invocations",
"contextCost",
"estSpend"
],
"title": "SkillsTotals"
},
"SpawnBody": {
"properties": {
"prompt": {
"type": "string",
"title": "Prompt"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"harness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Harness"
},
"thinking": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Thinking"
},
"effort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effort"
}
},
"type": "object",
"required": [
"prompt"
],
"title": "SpawnBody"
},
"SpawnResult": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"pid": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Pid"
}
},
"type": "object",
"required": [
"sessionId"
],
"title": "SpawnResult"
},
"SubagentListItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"parentId": {
"type": "string",
"title": "Parentid"
},
"agentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agenttype"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"tokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tokens"
},
"cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Cost"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "State"
}
},
"type": "object",
"required": [
"id",
"parentId"
],
"title": "SubagentListItem",
"description": "A flat subagent (sidechain) ref with its parent conversation id \u2014 the\ngraph view's node source (the top-level conversation list hides these)."
},
"SubagentRef": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"agentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agenttype"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"tokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tokens"
},
"cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Cost"
},
"messages": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Messages"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "State"
},
"startedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Startedat"
},
"endedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Endedat"
}
},
"type": "object",
"required": [
"id"
],
"title": "SubagentRef"
},
"SubagentsResponse": {
"properties": {
"subagents": {
"items": {
"$ref": "#/components/schemas/SubagentListItem"
},
"type": "array",
"title": "Subagents"
}
},
"type": "object",
"required": [
"subagents"
],
"title": "SubagentsResponse"
},
"Task": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"subject": {
"type": "string",
"title": "Subject"
},
"status": {
"type": "string",
"title": "Status"
}
},
"type": "object",
"required": [
"id",
"subject",
"status"
],
"title": "Task",
"description": "One task from the conversation's task list (TaskCreate/TaskUpdate, or the\nolder TodoWrite). ``status`` is one of pending / in_progress / completed /\ncancelled."
},
"TemplateDetail": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"stack": {
"items": {
"type": "string"
},
"type": "array",
"title": "Stack"
},
"fileCount": {
"type": "integer",
"title": "Filecount"
},
"sizeBytes": {
"type": "integer",
"title": "Sizebytes"
},
"readme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Readme"
},
"scripts": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"title": "Scripts"
},
"dependencies": {
"items": {
"type": "string"
},
"type": "array",
"title": "Dependencies"
},
"tree": {
"items": {
"$ref": "#/components/schemas/TemplateTreeNode"
},
"type": "array",
"title": "Tree"
}
},
"type": "object",
"required": [
"name",
"description",
"stack",
"fileCount",
"sizeBytes",
"scripts",
"dependencies",
"tree"
],
"title": "TemplateDetail"
},
"TemplateSummary": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"stack": {
"items": {
"type": "string"
},
"type": "array",
"title": "Stack"
},
"fileCount": {
"type": "integer",
"title": "Filecount"
},
"sizeBytes": {
"type": "integer",
"title": "Sizebytes"
},
"hasReadme": {
"type": "boolean",
"title": "Hasreadme"
}
},
"type": "object",
"required": [
"name",
"description",
"stack",
"fileCount",
"sizeBytes",
"hasReadme"
],
"title": "TemplateSummary"
},
"TemplateTreeNode": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"path": {
"type": "string",
"title": "Path"
},
"type": {
"type": "string",
"enum": [
"dir",
"file"
],
"title": "Type"
},
"size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Size"
},
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text"
},
"children": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/TemplateTreeNode"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Children"
}
},
"type": "object",
"required": [
"name",
"path",
"type"
],
"title": "TemplateTreeNode"
},
"TemplatesResponse": {
"properties": {
"templates": {
"items": {
"$ref": "#/components/schemas/TemplateSummary"
},
"type": "array",
"title": "Templates"
}
},
"type": "object",
"required": [
"templates"
],
"title": "TemplatesResponse"
},
"ThreadItem": {
"properties": {
"role": {
"type": "string",
"enum": [
"user",
"assistant",
"tool"
],
"title": "Role"
},
"kind": {
"type": "string",
"enum": [
"text",
"thinking",
"tool_use",
"tool_result",
"interrupted",
"paused",
"turn"
],
"title": "Kind"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"input": {
"anyOf": [
{},
{
"type": "null"
}
],
"title": "Input"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Text"
},
"isError": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Iserror"
},
"result": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Result"
},
"out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Out"
},
"turnTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Turntokens"
},
"turnCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Turncost"
},
"turnCacheTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Turncachetokens"
},
"turnCacheCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Turncachecost"
},
"turnBucket": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Turnbucket"
},
"turnContextCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Turncontextcost"
},
"turnContextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Turncontexttokens"
},
"firstContextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Firstcontexttokens"
},
"firstMessageTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Firstmessagetokens"
},
"mi": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Mi"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts"
},
"toolUseId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tooluseid"
},
"subagent": {
"anyOf": [
{
"$ref": "#/components/schemas/SubagentRef"
},
{
"type": "null"
}
]
},
"agentRunning": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Agentrunning"
},
"durationMs": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Durationms"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"resultChars": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Resultchars"
},
"resultLines": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Resultlines"
},
"skillBody": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Skillbody"
},
"skillPath": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Skillpath"
},
"deployedUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Deployedurl"
}
},
"type": "object",
"required": [
"role",
"kind"
],
"title": "ThreadItem"
},
"TokenTypeSpend": {
"properties": {
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
}
},
"type": "object",
"required": [
"tokens",
"cost"
],
"title": "TokenTypeSpend"
},
"ToolUsage": {
"properties": {
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"output": {
"type": "integer",
"title": "Output"
}
},
"type": "object",
"required": [
"tokens",
"cost",
"output"
],
"title": "ToolUsage"
},
"TopFile": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"estimated": {
"type": "boolean",
"title": "Estimated"
}
},
"type": "object",
"required": [
"path",
"tokens",
"cost",
"estimated"
],
"title": "TopFile"
},
"Totals": {
"properties": {
"files": {
"type": "integer",
"title": "Files"
},
"mdFiles": {
"type": "integer",
"title": "Mdfiles"
},
"words": {
"type": "integer",
"title": "Words"
},
"chars": {
"type": "integer",
"title": "Chars"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"estimated": {
"type": "integer",
"title": "Estimated"
}
},
"type": "object",
"required": [
"files",
"mdFiles",
"words",
"chars",
"tokens",
"cost",
"estimated"
],
"title": "Totals"
},
"TraefikService": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"servers": {
"items": {
"type": "string"
},
"type": "array",
"title": "Servers"
}
},
"type": "object",
"required": [
"name",
"servers"
],
"title": "TraefikService"
},
"TurnUsage": {
"properties": {
"input": {
"type": "integer",
"title": "Input"
},
"output": {
"type": "integer",
"title": "Output"
},
"cacheRead": {
"type": "integer",
"title": "Cacheread"
},
"cacheWriteTokens": {
"type": "integer",
"title": "Cachewritetokens"
},
"cacheWriteUnits": {
"type": "integer",
"title": "Cachewriteunits"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
}
},
"type": "object",
"required": [
"input",
"output",
"cacheRead",
"cacheWriteTokens",
"cacheWriteUnits"
],
"title": "TurnUsage"
},
"UiStateBody": {
"properties": {
"value": {
"type": "string",
"title": "Value"
}
},
"type": "object",
"required": [
"value"
],
"title": "UiStateBody"
},
"UiStateValue": {
"properties": {
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Value"
}
},
"type": "object",
"title": "UiStateValue"
},
"UnreadNotificationsResponse": {
"properties": {
"notifications": {
"items": {
"$ref": "#/components/schemas/FeedNotification"
},
"type": "array",
"title": "Notifications"
},
"count": {
"type": "integer",
"title": "Count"
},
"total": {
"type": "integer",
"title": "Total"
}
},
"type": "object",
"required": [
"notifications",
"count",
"total"
],
"title": "UnreadNotificationsResponse"
},
"UploadResult": {
"properties": {
"files": {
"items": {
"$ref": "#/components/schemas/UploadedFile"
},
"type": "array",
"title": "Files"
}
},
"type": "object",
"required": [
"files"
],
"title": "UploadResult"
},
"UploadedFile": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"size": {
"type": "integer",
"title": "Size"
},
"contentType": {
"type": "string",
"title": "Contenttype"
},
"repoPath": {
"type": "string",
"title": "Repopath"
},
"url": {
"type": "string",
"title": "Url"
}
},
"type": "object",
"required": [
"name",
"size",
"contentType",
"repoPath",
"url"
],
"title": "UploadedFile"
},
"Usage": {
"properties": {
"input": {
"type": "integer",
"title": "Input"
},
"output": {
"type": "integer",
"title": "Output"
},
"cacheRead": {
"type": "integer",
"title": "Cacheread"
},
"cacheWriteTokens": {
"type": "integer",
"title": "Cachewritetokens"
},
"cacheWriteUnits": {
"type": "integer",
"title": "Cachewriteunits"
}
},
"type": "object",
"required": [
"input",
"output",
"cacheRead",
"cacheWriteTokens",
"cacheWriteUnits"
],
"title": "Usage"
},
"ValidationError": {
"properties": {
"loc": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"type": "array",
"title": "Location"
},
"msg": {
"type": "string",
"title": "Message"
},
"type": {
"type": "string",
"title": "Error Type"
}
},
"type": "object",
"required": [
"loc",
"msg",
"type"
],
"title": "ValidationError"
},
"Webhook": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"name": {
"type": "string",
"title": "Name"
},
"url": {
"type": "string",
"title": "Url"
},
"events": {
"items": {
"type": "string",
"enum": [
"notify",
"ask"
]
},
"type": "array",
"title": "Events"
},
"enabled": {
"type": "boolean",
"title": "Enabled"
}
},
"type": "object",
"required": [
"id",
"name",
"url",
"events",
"enabled"
],
"title": "Webhook"
},
"WebhooksBody": {
"properties": {
"webhooks": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array",
"title": "Webhooks"
}
},
"type": "object",
"required": [
"webhooks"
],
"title": "WebhooksBody"
},
"WebhooksResponse": {
"properties": {
"webhooks": {
"items": {
"$ref": "#/components/schemas/Webhook"
},
"type": "array",
"title": "Webhooks"
}
},
"type": "object",
"required": [
"webhooks"
],
"title": "WebhooksResponse"
},
"WorktreeInfo": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"dir": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dir"
},
"createdAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Createdat"
},
"removedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Removedat"
}
},
"type": "object",
"required": [
"name"
],
"title": "WorktreeInfo"
}
}
}
}