Files
ai-agent/frontend/openapi.json
Gabriel Vidal f52a7d41b9 feat(diff): real git diff of a conversation's live worktree
The conversation viewer's 'uncommitted changes' widget only ever saw work done
in a main checkout: the transcript-replay path (editsdiff) rejected every path
under ~/worktrees/<dir> and ~/projects/<slug>, so a conversation working in a
worktree — the normal case — showed nothing until its branch merged.

- backend/worktreediff.py: diff the worktree for real. A worktree's .git file
  points at a host path, so it maps the host repo root onto the mounted one
  (PROJECTS_DIR/<slug> or REPO_DIR) and drives git with an explicit
  --git-dir/--work-tree pair; returns 'git diff HEAD' plus untracked files,
  with a 1.5s TTL cache so an SSE ping costs one round of git calls.
- /api/conversation-uncommitted-diff prefers it, keeping only the replayed
  files that fall outside the worktree's repo; the replay stays the fallback
  once a worktree is torn down.
- editsdiff: normalise ~/worktrees/<dir>/… and ~/projects/<slug>/… onto the
  repo-relative paths each repo token's git commands use, and drop __pycache__
  and unexpanded-tilde noise.
- UI: the Changes row shows the branch, DiffView a branch chip; diff-blob
  serves image blobs from the worktree copy.
2026-08-09 23:11:24 +02:00

13056 lines
315 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/activity": {
"get": {
"summary": "Activity Rollup",
"description": "When the agents ran: per day, per 5-minute bin per model, per model.\n\n``tzOffset`` is the caller's minutes east of UTC (the browser's\n``-new Date().getTimezoneOffset()``); days and histogram slots are bucketed\nin that local time. Clamped to \u00b116 h \u2014 a nonsense offset would otherwise\nshift every day silently.",
"operationId": "activity_rollup_api_activity_get",
"parameters": [
{
"name": "tzOffset",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"default": 0,
"title": "Tzoffset"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActivityResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/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.\n\n``sessions`` (comma-separated session ids) resolves a specific handful of\nconversations instead of a page \u2014 what the home page's \"waiting for\nfeedback\" cards use to join a pending form/ask back to the session that\nposted it, without pulling the whole (~MB) list for one title. An explicit\nid lookup ignores the archived filter and the cursor.",
"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"
}
},
{
"name": "sessions",
"in": "query",
"required": false,
"schema": {
"type": "string",
"default": "",
"title": "Sessions"
}
}
],
"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/audio": {
"post": {
"summary": "Notification Audio",
"description": "Render a notification's sound as a WAV so the UI can replay it.\n\nThe desk phone plays a per-type jazz jingle and then reads the French\n`spoken` line; the notification card's play button asks for those same\nbytes. Rendering happens in the phone service (one synthesizer, one voice \u2014\nsee notify_audio.py). A push with no spoken line still gets a voice: its own\ntitle + message, minus the bits written only for a screen.",
"operationId": "notification_audio_api_notifications_audio_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotifAudioBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
},
"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).\n``wt`` names a worktree directory \u2014 the file is then read from that worktree\ninstead of the canonical checkout (see worktreediff).",
"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"
}
},
{
"name": "wt",
"in": "query",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Wt"
}
}
],
"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.\n\nWhen it worked in a git worktree that still exists, this is a **real**\n``git diff HEAD`` (+ untracked files) read from that worktree \u2014 see\nworktreediff. Otherwise (or for edits made outside it) the changes are\nreplayed from the transcript's accumulated edits/creates/deletes (editsdiff).\n``stats`` strips 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/conversations/{id}/scaffold": {
"get": {
"summary": "Conversation Scaffold",
"description": "The completion scaffold for one conversation, as markdown.",
"operationId": "conversation_scaffold_api_conversations__id__scaffold_get",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/conversations/{id}/summary": {
"put": {
"summary": "Conversation Summary Put",
"description": "Publish a filled-in scaffold as the conversation's summary. Rejects an\nuntouched one \u2014 an unedited scaffold is a report of nothing.",
"operationId": "conversation_summary_put_api_conversations__id__summary_put",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SummaryBody"
}
}
}
},
"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/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/agents": {
"get": {
"summary": "Agents List",
"description": "Card metadata + run/cost stats for every agent, last-run first.\n\nThe **union** of the agent definitions on disk and the types the transcripts\nsaw run \u2014 same shape as `/api/skills`, but the money here is real spend.",
"operationId": "agents_list_api_agents_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AgentsResponse"
}
}
}
}
}
}
},
"/api/agents/{name}": {
"get": {
"summary": "Agent Detail",
"description": "One agent: its definition, its stats, its recent runs and its schedule.\n\n404s only when the name is neither on disk nor in any transcript \u2014 an agent\nthat exists but has never run is a perfectly good (empty) page.",
"operationId": "agent_detail_api_agents__name__get",
"parameters": [
{
"name": "name",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Name"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AgentDetail"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/agents/{name}/run": {
"post": {
"summary": "Agent Run",
"description": "Run an agent now, as a top-level session \u2014 the agent page's CTA.\n\nSame machinery as a cron firing (`_fire_cron_job`): the definition's body is\nthe prompt and its frontmatter picks the harness/model/effort, so a \"Run\nnow\" and a scheduled run are the same run. The session is stamped\n`agentRun` in the metadata sidecar, which is both what puts it in this\nagent's history and what makes the conversation card say where it came from.",
"operationId": "agent_run_api_agents__name__run_post",
"parameters": [
{
"name": "name",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Name"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AgentRunBody"
}
}
}
},
"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/ctas": {
"get": {
"summary": "Ctas List",
"description": "Every CTA, in button order, each with its prompt text and run history.",
"operationId": "ctas_list_api_ctas_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtasResponse"
}
}
}
}
}
},
"post": {
"summary": "Ctas Create",
"description": "Create a CTA. Its prompt file is created (carrying an agent-style\nfrontmatter stub) if absent, so the editor always opens on something.",
"operationId": "ctas_create_api_ctas_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaCreateBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Cta"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/ctas/{cta_id}": {
"put": {
"summary": "Ctas Update",
"operationId": "ctas_update_api_ctas__cta_id__put",
"parameters": [
{
"name": "cta_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Cta Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaPatchBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Cta"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"delete": {
"summary": "Ctas Delete",
"description": "Remove a CTA. Its prompt file stays \u2014 it is repo content.",
"operationId": "ctas_delete_api_ctas__cta_id__delete",
"parameters": [
{
"name": "cta_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Cta 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/ctas/reorder": {
"post": {
"summary": "Ctas Reorder",
"description": "Set the button order (the settings list is drag-reorderable).",
"operationId": "ctas_reorder_api_ctas_reorder_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaReorderBody"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtasResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/ctas/{cta_id}/run": {
"post": {
"summary": "Ctas Run",
"description": "Fire a CTA at one conversation in the background (the long-press).",
"operationId": "ctas_run_api_ctas__cta_id__run_post",
"parameters": [
{
"name": "cta_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Cta Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaRunBody"
}
}
}
},
"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/ctas/{cta_id}/prompt": {
"get": {
"summary": "Ctas Prompt",
"description": "The CTA's prompt file content (the editable text in Settings \u2192 CTAs).",
"operationId": "ctas_prompt_api_ctas__cta_id__prompt_get",
"parameters": [
{
"name": "cta_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Cta Id"
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaPromptFile"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
},
"put": {
"summary": "Ctas Prompt Save",
"operationId": "ctas_prompt_save_api_ctas__cta_id__prompt_put",
"parameters": [
{
"name": "cta_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Cta Id"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaPromptBody"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CtaPromptFile"
}
}
}
},
"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": {
"ActivityDay": {
"properties": {
"date": {
"type": "string",
"title": "Date"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"subagents": {
"type": "integer",
"title": "Subagents"
},
"agents": {
"type": "integer",
"title": "Agents"
},
"activeBins": {
"type": "integer",
"title": "Activebins"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
}
},
"type": "object",
"required": [
"date",
"conversations",
"subagents",
"agents",
"activeBins",
"tokens",
"cost"
],
"title": "ActivityDay",
"description": "One local calendar day of agent activity (the heatmap's cell)."
},
"ActivityModel": {
"properties": {
"model": {
"type": "string",
"title": "Model"
},
"runs": {
"type": "integer",
"title": "Runs"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"subagents": {
"type": "integer",
"title": "Subagents"
},
"activeBins": {
"type": "integer",
"title": "Activebins"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
}
},
"type": "object",
"required": [
"model",
"runs",
"conversations",
"subagents",
"activeBins",
"tokens",
"cost"
],
"title": "ActivityModel",
"description": "Everything one model did, across the whole archive."
},
"ActivityResponse": {
"properties": {
"binMinutes": {
"type": "integer",
"title": "Binminutes"
},
"binsPerDay": {
"type": "integer",
"title": "Binsperday"
},
"tzOffset": {
"type": "integer",
"title": "Tzoffset"
},
"days": {
"items": {
"$ref": "#/components/schemas/ActivityDay"
},
"type": "array",
"title": "Days"
},
"models": {
"items": {
"$ref": "#/components/schemas/ActivityModel"
},
"type": "array",
"title": "Models"
},
"binsByDay": {
"additionalProperties": {
"items": {
"items": {
"type": "integer"
},
"type": "array"
},
"type": "array"
},
"type": "object",
"title": "Binsbyday"
},
"totals": {
"$ref": "#/components/schemas/ActivityTotals"
}
},
"type": "object",
"required": [
"binMinutes",
"binsPerDay",
"tzOffset",
"days",
"models",
"binsByDay",
"totals"
],
"title": "ActivityResponse",
"description": "The activity dashboard's whole payload \u2014 see ``backend/activity.py``.\n\n``binsByDay`` maps a local ``YYYY-MM-DD`` to that day's occupied histogram\ncells as positional ``[slot, modelIndex, agents]`` triples: ``slot`` is the\n5-minute slot of the local day (0\u2026``binsPerDay``-1) and ``modelIndex``\nindexes ``models``. Empty slots are simply absent."
},
"ActivityTotals": {
"properties": {
"agents": {
"type": "integer",
"title": "Agents"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"subagents": {
"type": "integer",
"title": "Subagents"
},
"activeBins": {
"type": "integer",
"title": "Activebins"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"cost": {
"type": "number",
"title": "Cost"
},
"days": {
"type": "integer",
"title": "Days"
},
"firstDay": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Firstday"
},
"lastDay": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lastday"
}
},
"type": "object",
"required": [
"agents",
"conversations",
"subagents",
"activeBins",
"tokens",
"cost",
"days"
],
"title": "ActivityTotals"
},
"AgentDay": {
"properties": {
"date": {
"type": "string",
"title": "Date"
},
"runs": {
"type": "integer",
"title": "Runs"
},
"cost": {
"type": "number",
"title": "Cost"
}
},
"type": "object",
"required": [
"date",
"runs",
"cost"
],
"title": "AgentDay",
"description": "One day of the detail page's run sparkline."
},
"AgentDetail": {
"properties": {
"agent": {
"$ref": "#/components/schemas/AgentSummary"
},
"content": {
"type": "string",
"title": "Content"
},
"runs": {
"items": {
"$ref": "#/components/schemas/AgentRun"
},
"type": "array",
"title": "Runs"
},
"daily": {
"items": {
"$ref": "#/components/schemas/AgentDay"
},
"type": "array",
"title": "Daily"
},
"cron": {
"anyOf": [
{
"$ref": "#/components/schemas/CronJob"
},
{
"type": "null"
}
]
},
"canSchedule": {
"type": "boolean",
"title": "Canschedule"
}
},
"type": "object",
"required": [
"agent",
"content",
"runs",
"daily",
"canSchedule"
],
"title": "AgentDetail"
},
"AgentRun": {
"properties": {
"agent": {
"type": "string",
"title": "Agent"
},
"origin": {
"type": "string",
"title": "Origin"
},
"at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "At"
},
"cost": {
"type": "number",
"title": "Cost"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Model"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"conversationId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Conversationid"
},
"subConversationId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subconversationid"
}
},
"type": "object",
"required": [
"agent",
"origin",
"cost",
"tokens"
],
"title": "AgentRun",
"description": "One recorded run of an agent."
},
"AgentRunBody": {
"properties": {
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Prompt"
}
},
"type": "object",
"title": "AgentRunBody"
},
"AgentRunRef": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "At"
}
},
"type": "object",
"required": [
"name"
],
"title": "AgentRunRef",
"description": "The agent definition a conversation was launched from by the agent\npage's \"Run now\" \u2014 the manual sibling of :class:`CronRef`, rendered as a\ntag linking back to ``/agents/<name>``."
},
"AgentSummary": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"title": {
"type": "string",
"title": "Title"
},
"description": {
"type": "string",
"title": "Description"
},
"path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Path"
},
"dir": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dir"
},
"source": {
"type": "string",
"title": "Source"
},
"sourceKind": {
"type": "string",
"title": "Sourcekind"
},
"tools": {
"items": {
"type": "string"
},
"type": "array",
"title": "Tools"
},
"bytes": {
"type": "integer",
"title": "Bytes"
},
"updatedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updatedat"
},
"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": "string"
},
{
"type": "null"
}
],
"title": "Thinking"
},
"runs": {
"type": "integer",
"title": "Runs"
},
"taskRuns": {
"type": "integer",
"title": "Taskruns"
},
"sessionRuns": {
"type": "integer",
"title": "Sessionruns"
},
"lastRun": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lastrun"
},
"conversations": {
"type": "integer",
"title": "Conversations"
},
"cost": {
"type": "number",
"title": "Cost"
},
"tokens": {
"type": "integer",
"title": "Tokens"
},
"avgCost": {
"type": "number",
"title": "Avgcost"
},
"contextTokens": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Contexttokens"
},
"contextCost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Contextcost"
}
},
"type": "object",
"required": [
"name",
"title",
"description",
"source",
"sourceKind",
"tools",
"bytes",
"runs",
"taskRuns",
"sessionRuns",
"conversations",
"cost",
"tokens",
"avgCost"
],
"title": "AgentSummary",
"description": "One agent card: the definition on disk + what its runs actually cost.\n\nThe skills catalog can only *estimate* spend (context size \u00d7 invocations);\nan agent run is a whole conversation, so `cost`/`tokens` here are measured."
},
"AgentsResponse": {
"properties": {
"agents": {
"items": {
"$ref": "#/components/schemas/AgentSummary"
},
"type": "array",
"title": "Agents"
},
"totals": {
"$ref": "#/components/schemas/AgentsTotals"
}
},
"type": "object",
"required": [
"agents",
"totals"
],
"title": "AgentsResponse"
},
"AgentsTotals": {
"properties": {
"agents": {
"type": "integer",
"title": "Agents"
},
"used": {
"type": "integer",
"title": "Used"
},
"runs": {
"type": "integer",
"title": "Runs"
},
"cost": {
"type": "number",
"title": "Cost"
},
"tokens": {
"type": "integer",
"title": "Tokens"
}
},
"type": "object",
"required": [
"agents",
"used",
"runs",
"cost",
"tokens"
],
"title": "AgentsTotals"
},
"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"
}
]
},
"agentRun": {
"anyOf": [
{
"$ref": "#/components/schemas/AgentRunRef"
},
{
"type": "null"
}
]
},
"ctas": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Ctas"
},
"summary": {
"anyOf": [
{
"$ref": "#/components/schemas/ConvSummary"
},
{
"type": "null"
}
]
}
},
"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"
},
"spoken": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Spoken"
}
},
"type": "object",
"title": "ConvNotification"
},
"ConvSummary": {
"properties": {
"markdown": {
"type": "string",
"title": "Markdown"
},
"at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "At"
}
},
"type": "object",
"required": [
"markdown"
],
"title": "ConvSummary",
"description": "A conversation's published summary: the filled-in scaffold markdown (see\nscaffold.py) plus when it was published."
},
"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."
},
"Cta": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"name": {
"type": "string",
"title": "Name"
},
"label": {
"type": "string",
"title": "Label",
"default": ""
},
"description": {
"type": "string",
"title": "Description",
"default": ""
},
"icon": {
"type": "string",
"title": "Icon",
"default": ""
},
"promptFile": {
"type": "string",
"title": "Promptfile"
},
"enabled": {
"type": "boolean",
"title": "Enabled"
},
"order": {
"type": "integer",
"title": "Order",
"default": 0
},
"prompt": {
"type": "string",
"title": "Prompt",
"default": ""
},
"promptExists": {
"type": "boolean",
"title": "Promptexists",
"default": true
},
"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": {
"items": {
"$ref": "#/components/schemas/CtaRun"
},
"type": "array",
"title": "History"
}
},
"type": "object",
"required": [
"id",
"name",
"promptFile",
"enabled",
"history"
],
"title": "Cta",
"description": "A conversation CTA: a prompt file offered as a button under the last\nmessage of a finished conversation (see ctas.py)."
},
"CtaCreateBody": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"promptFile": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Promptfile"
},
"enabled": {
"type": "boolean",
"title": "Enabled",
"default": true
}
},
"type": "object",
"required": [
"name"
],
"title": "CtaCreateBody"
},
"CtaPatchBody": {
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Icon"
},
"promptFile": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Promptfile"
},
"enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Enabled"
},
"order": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Order"
}
},
"type": "object",
"title": "CtaPatchBody"
},
"CtaPromptBody": {
"properties": {
"content": {
"type": "string",
"title": "Content"
}
},
"type": "object",
"required": [
"content"
],
"title": "CtaPromptBody"
},
"CtaPromptFile": {
"properties": {
"path": {
"type": "string",
"title": "Path"
},
"content": {
"type": "string",
"title": "Content"
},
"exists": {
"type": "boolean",
"title": "Exists"
}
},
"type": "object",
"required": [
"path",
"content",
"exists"
],
"title": "CtaPromptFile"
},
"CtaReorderBody": {
"properties": {
"ids": {
"items": {
"type": "string"
},
"type": "array",
"title": "Ids"
}
},
"type": "object",
"required": [
"ids"
],
"title": "CtaReorderBody"
},
"CtaRun": {
"properties": {
"at": {
"type": "string",
"title": "At"
},
"sessionId": {
"type": "string",
"title": "Sessionid"
}
},
"type": "object",
"required": [
"at",
"sessionId"
],
"title": "CtaRun",
"description": "One background firing of a CTA (long-press), newest first."
},
"CtaRunBody": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
}
},
"type": "object",
"required": [
"sessionId"
],
"title": "CtaRunBody"
},
"CtasResponse": {
"properties": {
"ctas": {
"items": {
"$ref": "#/components/schemas/Cta"
},
"type": "array",
"title": "Ctas"
}
},
"type": "object",
"required": [
"ctas"
],
"title": "CtasResponse"
},
"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"
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"worktree",
"transcript"
]
},
{
"type": "null"
}
],
"title": "Source"
},
"worktrees": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/WorktreeRef"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Worktrees"
}
},
"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"
},
"spoken": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Spoken"
}
},
"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"
},
"wt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Wt"
}
},
"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"
},
"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"
},
"NotifAudioBody": {
"properties": {
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
},
"spoken": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Spoken"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Message"
}
},
"type": "object",
"title": "NotifAudioBody",
"description": "What a notification sounded like: its type (\u2192 jingle) and spoken line."
},
"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"
},
"spoken": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Spoken"
},
"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"
},
"SummaryBody": {
"properties": {
"markdown": {
"type": "string",
"title": "Markdown"
}
},
"type": "object",
"required": [
"markdown"
],
"title": "SummaryBody"
},
"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"
},
"WorktreeRef": {
"properties": {
"dir": {
"type": "string",
"title": "Dir"
},
"branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Branch"
},
"repo": {
"type": "string",
"title": "Repo"
}
},
"type": "object",
"required": [
"dir",
"repo"
],
"title": "WorktreeRef",
"description": "A live git worktree a conversation's diff was read from."
}
}
}
}