@orion-agents/orion-code 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (778) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +46 -18
  3. package/README.zh-CN.md +36 -16
  4. package/dist/runtime/agent-runtime-controller.d.ts +1 -0
  5. package/dist/runtime/agent-runtime-controller.js +92 -41
  6. package/dist/runtime/capability-receipt-journal.js +1 -1
  7. package/dist/runtime/durable-tool-receipt-reader.js +1 -1
  8. package/dist/runtime/legacy-thread-materializer.js +2 -2
  9. package/dist/runtime/orion-runtime-v1.d.ts +2 -1
  10. package/dist/runtime/orion-runtime-v1.js +18 -16
  11. package/dist/runtime/orion-session-runner.d.ts +2 -0
  12. package/dist/runtime/orion-session-runner.js +12 -4
  13. package/dist/runtime/product-bootstrap.d.ts +6 -0
  14. package/dist/runtime/product-bootstrap.js +389 -337
  15. package/dist/runtime/product-orion-runtime.d.ts +5 -0
  16. package/dist/runtime/product-orion-runtime.js +2 -0
  17. package/dist/runtime/release-receipts.d.ts +7 -3
  18. package/dist/runtime/release-receipts.js +79 -1
  19. package/dist/runtime/step-snapshot.d.ts +12 -0
  20. package/dist/runtime/step-snapshot.js +14 -1
  21. package/dist/runtime/subagent-thread-runtime.js +1 -1
  22. package/dist/runtime/thread-event-store.d.ts +10 -1
  23. package/dist/runtime/thread-event-store.js +48 -12
  24. package/dist/runtime/thread-projection.d.ts +19 -0
  25. package/dist/runtime/thread-projection.js +12 -0
  26. package/dist/runtime/thread-runtime.d.ts +2 -2
  27. package/dist/runtime/thread-runtime.js +2 -2
  28. package/dist/runtime/thread-session-index.d.ts +17 -1
  29. package/dist/runtime/thread-session-index.js +89 -6
  30. package/dist/runtime/thread-session-view.d.ts +4 -1
  31. package/dist/runtime/thread-session-view.js +5 -2
  32. package/dist/runtime/thread-ui-adapter.js +10 -3
  33. package/dist/runtime/tool-gateway.js +1 -0
  34. package/dist/runtime/turn-commit.js +1 -1
  35. package/dist/runtime/ui-events.d.ts +3 -0
  36. package/dist/runtime/workspace-runtime-kernel.d.ts +67 -0
  37. package/dist/runtime/workspace-runtime-kernel.js +148 -0
  38. package/dist/services/global-config.d.ts +2 -0
  39. package/dist/services/global-config.js +7 -1
  40. package/dist/services/provider-resilience/coordinator.d.ts +3 -1
  41. package/dist/services/provider-resilience/coordinator.js +23 -1
  42. package/dist/services/provider-resilience/request-gate.js +7 -2
  43. package/dist/services/redaction.js +19 -2
  44. package/dist/services/settings-coordinator.d.ts +3 -1
  45. package/dist/services/settings-coordinator.js +40 -8
  46. package/dist/services/settings-document-repository.d.ts +8 -1
  47. package/dist/services/settings-document-repository.js +22 -1
  48. package/dist/tui-ui/transcript-inspector-layout.js +13 -6
  49. package/dist/web/event-hub.d.ts +2 -0
  50. package/dist/web/event-hub.js +43 -6
  51. package/dist/web/file-read-service.d.ts +2 -0
  52. package/dist/web/file-read-service.js +39 -12
  53. package/dist/web/git-read-model-service.js +7 -0
  54. package/dist/web/protocol.d.ts +51 -3
  55. package/dist/web/protocol.js +38 -2
  56. package/dist/web/review-service.d.ts +1 -0
  57. package/dist/web/review-service.js +1 -0
  58. package/dist/web/server.js +30 -6
  59. package/dist/web/session-runtime-registry.d.ts +124 -0
  60. package/dist/web/session-runtime-registry.js +448 -0
  61. package/dist/web/terminal-manager.js +23 -4
  62. package/dist/web/terminal-server.js +35 -6
  63. package/dist/web/workbench-controller.d.ts +27 -3
  64. package/dist/web/workbench-controller.js +557 -134
  65. package/dist/web/workspace-mutation-arbiter.d.ts +54 -0
  66. package/dist/web/workspace-mutation-arbiter.js +267 -0
  67. package/dist/web-client/assets/{DiffViewer-eaQNsnCh.js → DiffViewer-D6mG729y.js} +1 -1
  68. package/dist/web-client/assets/FilesPanel-CCDoAZ1J.js +2 -0
  69. package/dist/web-client/assets/{GitPanel-CnU4XVr7.js → GitPanel-DtNgiH7A.js} +1 -1
  70. package/dist/web-client/assets/ReviewPanel-CKEBSt6P.js +1 -0
  71. package/dist/web-client/assets/{TerminalPanel-Q5mSSsoK.js → TerminalPanel-CNxMaBLp.js} +14 -14
  72. package/dist/web-client/assets/index-BBvNg3By.css +1 -0
  73. package/dist/web-client/assets/index-C6TDJwMC.js +17 -0
  74. package/dist/web-client/index.html +4 -4
  75. package/docs/architecture/v0.3.3-web-api.yaml +3205 -0
  76. package/docs/architecture/v0.3.4-stabilization-contract.md +32 -0
  77. package/docs/migration/v0.3.2-to-v0.3.3.md +62 -0
  78. package/docs/migration/v0.3.3-to-v0.3.4.md +36 -0
  79. package/docs/plan/v0.3.3-plan.md +1113 -0
  80. package/docs/plan/v0.3.4-stabilization-plan.md +89 -0
  81. package/docs/test/v0.3.3-web-workbench-e2e-plan.md +79 -0
  82. package/docs/test/v0.3.4-stabilization-e2e-plan.md +54 -0
  83. package/npm-shrinkwrap.json +25 -25
  84. package/package.json +10 -1
  85. package/dist/cli.d.ts.map +0 -1
  86. package/dist/cli.js.map +0 -1
  87. package/dist/commands/context-commands.d.ts.map +0 -1
  88. package/dist/commands/context-commands.js.map +0 -1
  89. package/dist/commands/context-tool-command-handlers.d.ts.map +0 -1
  90. package/dist/commands/context-tool-command-handlers.js.map +0 -1
  91. package/dist/commands/core-command-handlers.d.ts.map +0 -1
  92. package/dist/commands/core-command-handlers.js.map +0 -1
  93. package/dist/commands/diagnostic-command-handlers.d.ts.map +0 -1
  94. package/dist/commands/diagnostic-command-handlers.js.map +0 -1
  95. package/dist/commands/diagnostic-commands.d.ts.map +0 -1
  96. package/dist/commands/diagnostic-commands.js.map +0 -1
  97. package/dist/commands/index.d.ts.map +0 -1
  98. package/dist/commands/index.js.map +0 -1
  99. package/dist/commands/model-command-handlers.d.ts.map +0 -1
  100. package/dist/commands/model-command-handlers.js.map +0 -1
  101. package/dist/commands/model-commands.d.ts.map +0 -1
  102. package/dist/commands/model-commands.js.map +0 -1
  103. package/dist/commands/parser.d.ts.map +0 -1
  104. package/dist/commands/parser.js.map +0 -1
  105. package/dist/commands/registry.d.ts.map +0 -1
  106. package/dist/commands/registry.js.map +0 -1
  107. package/dist/commands/session-command-handlers.d.ts.map +0 -1
  108. package/dist/commands/session-command-handlers.js.map +0 -1
  109. package/dist/commands/session-commands.d.ts.map +0 -1
  110. package/dist/commands/session-commands.js.map +0 -1
  111. package/dist/commands/system-commands.d.ts.map +0 -1
  112. package/dist/commands/system-commands.js.map +0 -1
  113. package/dist/commands/target-command.d.ts.map +0 -1
  114. package/dist/commands/target-command.js.map +0 -1
  115. package/dist/commands/tool-commands.d.ts.map +0 -1
  116. package/dist/commands/tool-commands.js.map +0 -1
  117. package/dist/commands/types.d.ts.map +0 -1
  118. package/dist/commands/types.js.map +0 -1
  119. package/dist/commands/workflow-command-handlers.d.ts.map +0 -1
  120. package/dist/commands/workflow-command-handlers.js.map +0 -1
  121. package/dist/commands/workflow-commands.d.ts.map +0 -1
  122. package/dist/commands/workflow-commands.js.map +0 -1
  123. package/dist/core/checkpoint.d.ts.map +0 -1
  124. package/dist/core/checkpoint.js.map +0 -1
  125. package/dist/core/cost-tracker.d.ts.map +0 -1
  126. package/dist/core/cost-tracker.js.map +0 -1
  127. package/dist/core/security-warning.d.ts.map +0 -1
  128. package/dist/core/security-warning.js.map +0 -1
  129. package/dist/core/strategy-tracker.d.ts.map +0 -1
  130. package/dist/core/strategy-tracker.js.map +0 -1
  131. package/dist/core/tool-artifacts.d.ts.map +0 -1
  132. package/dist/core/tool-artifacts.js.map +0 -1
  133. package/dist/core/warn-dedup.d.ts.map +0 -1
  134. package/dist/core/warn-dedup.js.map +0 -1
  135. package/dist/framework/agent-mode.d.ts.map +0 -1
  136. package/dist/framework/agent-mode.js.map +0 -1
  137. package/dist/framework/external-assertion.d.ts.map +0 -1
  138. package/dist/framework/external-assertion.js.map +0 -1
  139. package/dist/framework/index.d.ts.map +0 -1
  140. package/dist/framework/index.js.map +0 -1
  141. package/dist/framework/loop-budget-contract.d.ts.map +0 -1
  142. package/dist/framework/loop-budget-contract.js.map +0 -1
  143. package/dist/framework/prompt.d.ts.map +0 -1
  144. package/dist/framework/prompt.js.map +0 -1
  145. package/dist/framework/query.d.ts.map +0 -1
  146. package/dist/framework/query.js.map +0 -1
  147. package/dist/framework/stop-decision.d.ts.map +0 -1
  148. package/dist/framework/stop-decision.js.map +0 -1
  149. package/dist/framework/store.d.ts.map +0 -1
  150. package/dist/framework/store.js.map +0 -1
  151. package/dist/framework/tool-call-orchestrator.d.ts.map +0 -1
  152. package/dist/framework/tool-call-orchestrator.js.map +0 -1
  153. package/dist/framework/tool-serializer.d.ts.map +0 -1
  154. package/dist/framework/tool-serializer.js.map +0 -1
  155. package/dist/framework/tool-state.d.ts.map +0 -1
  156. package/dist/framework/tool-state.js.map +0 -1
  157. package/dist/framework/tool.d.ts.map +0 -1
  158. package/dist/framework/tool.js.map +0 -1
  159. package/dist/harness/assembler.d.ts.map +0 -1
  160. package/dist/harness/assembler.js.map +0 -1
  161. package/dist/harness/capability-profile.d.ts.map +0 -1
  162. package/dist/harness/capability-profile.js.map +0 -1
  163. package/dist/harness/capsule.d.ts.map +0 -1
  164. package/dist/harness/capsule.js.map +0 -1
  165. package/dist/harness/compact-benchmark-corpus.d.ts.map +0 -1
  166. package/dist/harness/compact-benchmark-corpus.js.map +0 -1
  167. package/dist/harness/context-harness.d.ts.map +0 -1
  168. package/dist/harness/context-harness.js.map +0 -1
  169. package/dist/harness/contract.d.ts.map +0 -1
  170. package/dist/harness/contract.js.map +0 -1
  171. package/dist/harness/drift-guard.d.ts.map +0 -1
  172. package/dist/harness/drift-guard.js.map +0 -1
  173. package/dist/harness/evidence.d.ts.map +0 -1
  174. package/dist/harness/evidence.js.map +0 -1
  175. package/dist/harness/index.d.ts.map +0 -1
  176. package/dist/harness/index.js.map +0 -1
  177. package/dist/harness/intent.d.ts.map +0 -1
  178. package/dist/harness/intent.js.map +0 -1
  179. package/dist/harness/ledger.d.ts.map +0 -1
  180. package/dist/harness/ledger.js.map +0 -1
  181. package/dist/harness/progress-controller.d.ts.map +0 -1
  182. package/dist/harness/progress-controller.js.map +0 -1
  183. package/dist/harness/state.d.ts.map +0 -1
  184. package/dist/harness/state.js.map +0 -1
  185. package/dist/harness/stop-controller.d.ts.map +0 -1
  186. package/dist/harness/stop-controller.js.map +0 -1
  187. package/dist/harness/turn-summary.d.ts.map +0 -1
  188. package/dist/harness/turn-summary.js.map +0 -1
  189. package/dist/harness/types.d.ts.map +0 -1
  190. package/dist/harness/types.js.map +0 -1
  191. package/dist/harness/verification.d.ts.map +0 -1
  192. package/dist/harness/verification.js.map +0 -1
  193. package/dist/index.d.ts.map +0 -1
  194. package/dist/index.js.map +0 -1
  195. package/dist/memory/embeddings.d.ts.map +0 -1
  196. package/dist/memory/embeddings.js.map +0 -1
  197. package/dist/memory/entrypoint.d.ts.map +0 -1
  198. package/dist/memory/entrypoint.js.map +0 -1
  199. package/dist/memory/index.d.ts.map +0 -1
  200. package/dist/memory/index.js.map +0 -1
  201. package/dist/memory/prompt-context.d.ts.map +0 -1
  202. package/dist/memory/prompt-context.js.map +0 -1
  203. package/dist/memory/prompts.d.ts.map +0 -1
  204. package/dist/memory/prompts.js.map +0 -1
  205. package/dist/memory/relevant-finder.d.ts.map +0 -1
  206. package/dist/memory/relevant-finder.js.map +0 -1
  207. package/dist/memory/semantic-config.d.ts.map +0 -1
  208. package/dist/memory/semantic-config.js.map +0 -1
  209. package/dist/memory/semantic-search.d.ts.map +0 -1
  210. package/dist/memory/semantic-search.js.map +0 -1
  211. package/dist/memory/storage.d.ts.map +0 -1
  212. package/dist/memory/storage.js.map +0 -1
  213. package/dist/memory/store.d.ts.map +0 -1
  214. package/dist/memory/store.js.map +0 -1
  215. package/dist/memory/team-paths.d.ts.map +0 -1
  216. package/dist/memory/team-paths.js.map +0 -1
  217. package/dist/memory/types.d.ts.map +0 -1
  218. package/dist/memory/types.js.map +0 -1
  219. package/dist/memory/validation.d.ts.map +0 -1
  220. package/dist/memory/validation.js.map +0 -1
  221. package/dist/memory/vector-store.d.ts.map +0 -1
  222. package/dist/memory/vector-store.js.map +0 -1
  223. package/dist/migration/command.d.ts.map +0 -1
  224. package/dist/migration/command.js.map +0 -1
  225. package/dist/migration/index.d.ts.map +0 -1
  226. package/dist/migration/index.js.map +0 -1
  227. package/dist/migration/migrate.d.ts.map +0 -1
  228. package/dist/migration/migrate.js.map +0 -1
  229. package/dist/migration/types.d.ts.map +0 -1
  230. package/dist/migration/types.js.map +0 -1
  231. package/dist/print-ui/launch.d.ts.map +0 -1
  232. package/dist/print-ui/launch.js.map +0 -1
  233. package/dist/product/environment.d.ts.map +0 -1
  234. package/dist/product/environment.js.map +0 -1
  235. package/dist/product/identity.d.ts.map +0 -1
  236. package/dist/product/identity.js.map +0 -1
  237. package/dist/product/index.d.ts.map +0 -1
  238. package/dist/product/index.js.map +0 -1
  239. package/dist/product/paths.d.ts.map +0 -1
  240. package/dist/product/paths.js.map +0 -1
  241. package/dist/product/version.d.ts.map +0 -1
  242. package/dist/product/version.js.map +0 -1
  243. package/dist/runtime/agent-loop.d.ts.map +0 -1
  244. package/dist/runtime/agent-loop.js.map +0 -1
  245. package/dist/runtime/agent-runtime-controller.d.ts.map +0 -1
  246. package/dist/runtime/agent-runtime-controller.js.map +0 -1
  247. package/dist/runtime/agent-runtime-protocol.d.ts.map +0 -1
  248. package/dist/runtime/agent-runtime-protocol.js.map +0 -1
  249. package/dist/runtime/agent-runtime-runner.d.ts.map +0 -1
  250. package/dist/runtime/agent-runtime-runner.js.map +0 -1
  251. package/dist/runtime/agent-status.d.ts.map +0 -1
  252. package/dist/runtime/agent-status.js.map +0 -1
  253. package/dist/runtime/aggregate-tool-presenter.d.ts.map +0 -1
  254. package/dist/runtime/aggregate-tool-presenter.js.map +0 -1
  255. package/dist/runtime/batch-read-service.d.ts.map +0 -1
  256. package/dist/runtime/batch-read-service.js.map +0 -1
  257. package/dist/runtime/builtin-tool-provider.d.ts.map +0 -1
  258. package/dist/runtime/builtin-tool-provider.js.map +0 -1
  259. package/dist/runtime/capabilities/compiler.d.ts.map +0 -1
  260. package/dist/runtime/capabilities/compiler.js.map +0 -1
  261. package/dist/runtime/capabilities/index.d.ts.map +0 -1
  262. package/dist/runtime/capabilities/index.js.map +0 -1
  263. package/dist/runtime/capabilities/types.d.ts.map +0 -1
  264. package/dist/runtime/capabilities/types.js.map +0 -1
  265. package/dist/runtime/capability-receipt-journal.d.ts.map +0 -1
  266. package/dist/runtime/capability-receipt-journal.js.map +0 -1
  267. package/dist/runtime/capability-step-factory.d.ts.map +0 -1
  268. package/dist/runtime/capability-step-factory.js.map +0 -1
  269. package/dist/runtime/compact-transaction.d.ts.map +0 -1
  270. package/dist/runtime/compact-transaction.js.map +0 -1
  271. package/dist/runtime/composer/buffer.d.ts.map +0 -1
  272. package/dist/runtime/composer/buffer.js.map +0 -1
  273. package/dist/runtime/composer/grapheme.d.ts.map +0 -1
  274. package/dist/runtime/composer/grapheme.js.map +0 -1
  275. package/dist/runtime/composer/history.d.ts.map +0 -1
  276. package/dist/runtime/composer/history.js.map +0 -1
  277. package/dist/runtime/composer/layout.d.ts.map +0 -1
  278. package/dist/runtime/composer/layout.js.map +0 -1
  279. package/dist/runtime/core-tools/descriptors.d.ts.map +0 -1
  280. package/dist/runtime/core-tools/descriptors.js.map +0 -1
  281. package/dist/runtime/durable-tool-receipt-reader.d.ts.map +0 -1
  282. package/dist/runtime/durable-tool-receipt-reader.js.map +0 -1
  283. package/dist/runtime/first-party-core-provider.d.ts.map +0 -1
  284. package/dist/runtime/first-party-core-provider.js.map +0 -1
  285. package/dist/runtime/first-party-long-tail-provider.d.ts.map +0 -1
  286. package/dist/runtime/first-party-long-tail-provider.js.map +0 -1
  287. package/dist/runtime/first-party-tool-services.d.ts.map +0 -1
  288. package/dist/runtime/first-party-tool-services.js.map +0 -1
  289. package/dist/runtime/first-party-tool-universe.d.ts.map +0 -1
  290. package/dist/runtime/first-party-tool-universe.js.map +0 -1
  291. package/dist/runtime/goal-lifecycle-v2.d.ts.map +0 -1
  292. package/dist/runtime/goal-lifecycle-v2.js.map +0 -1
  293. package/dist/runtime/goal-runtime-coordinator.d.ts.map +0 -1
  294. package/dist/runtime/goal-runtime-coordinator.js.map +0 -1
  295. package/dist/runtime/goals/completion-audit.d.ts.map +0 -1
  296. package/dist/runtime/goals/completion-audit.js.map +0 -1
  297. package/dist/runtime/goals/evidence.d.ts.map +0 -1
  298. package/dist/runtime/goals/evidence.js.map +0 -1
  299. package/dist/runtime/goals/objective.d.ts.map +0 -1
  300. package/dist/runtime/goals/objective.js.map +0 -1
  301. package/dist/runtime/goals/presentation.d.ts.map +0 -1
  302. package/dist/runtime/goals/presentation.js.map +0 -1
  303. package/dist/runtime/goals/types.d.ts.map +0 -1
  304. package/dist/runtime/goals/types.js.map +0 -1
  305. package/dist/runtime/harness-confluence.d.ts.map +0 -1
  306. package/dist/runtime/harness-confluence.js.map +0 -1
  307. package/dist/runtime/harness-eval.d.ts.map +0 -1
  308. package/dist/runtime/harness-eval.js.map +0 -1
  309. package/dist/runtime/harness-metrics.d.ts.map +0 -1
  310. package/dist/runtime/harness-metrics.js.map +0 -1
  311. package/dist/runtime/legacy-session-importer.d.ts.map +0 -1
  312. package/dist/runtime/legacy-session-importer.js.map +0 -1
  313. package/dist/runtime/legacy-thread-materializer.d.ts.map +0 -1
  314. package/dist/runtime/legacy-thread-materializer.js.map +0 -1
  315. package/dist/runtime/long-tail-tools/descriptors.d.ts.map +0 -1
  316. package/dist/runtime/long-tail-tools/descriptors.js.map +0 -1
  317. package/dist/runtime/loop-budget.d.ts.map +0 -1
  318. package/dist/runtime/loop-budget.js.map +0 -1
  319. package/dist/runtime/mcp/first-party-mcp-adapter.d.ts.map +0 -1
  320. package/dist/runtime/mcp/first-party-mcp-adapter.js.map +0 -1
  321. package/dist/runtime/mcp/first-party-mcp-config.d.ts.map +0 -1
  322. package/dist/runtime/mcp/first-party-mcp-config.js.map +0 -1
  323. package/dist/runtime/mcp/index.d.ts.map +0 -1
  324. package/dist/runtime/mcp/index.js.map +0 -1
  325. package/dist/runtime/mcp/lazy-mcp-runtime.d.ts.map +0 -1
  326. package/dist/runtime/mcp/lazy-mcp-runtime.js.map +0 -1
  327. package/dist/runtime/mcp/types.d.ts.map +0 -1
  328. package/dist/runtime/mcp/types.js.map +0 -1
  329. package/dist/runtime/model-coordinator.d.ts.map +0 -1
  330. package/dist/runtime/model-coordinator.js.map +0 -1
  331. package/dist/runtime/orion-runtime-v1.d.ts.map +0 -1
  332. package/dist/runtime/orion-runtime-v1.js.map +0 -1
  333. package/dist/runtime/orion-session-runner.d.ts.map +0 -1
  334. package/dist/runtime/orion-session-runner.js.map +0 -1
  335. package/dist/runtime/plan-review.d.ts.map +0 -1
  336. package/dist/runtime/plan-review.js.map +0 -1
  337. package/dist/runtime/product-bootstrap.d.ts.map +0 -1
  338. package/dist/runtime/product-bootstrap.js.map +0 -1
  339. package/dist/runtime/product-orion-runtime.d.ts.map +0 -1
  340. package/dist/runtime/product-orion-runtime.js.map +0 -1
  341. package/dist/runtime/prompts/index.d.ts.map +0 -1
  342. package/dist/runtime/prompts/index.js.map +0 -1
  343. package/dist/runtime/prompts/prompt-registry.d.ts.map +0 -1
  344. package/dist/runtime/prompts/prompt-registry.js.map +0 -1
  345. package/dist/runtime/prompts/types.d.ts.map +0 -1
  346. package/dist/runtime/prompts/types.js.map +0 -1
  347. package/dist/runtime/protocol/canonical.d.ts.map +0 -1
  348. package/dist/runtime/protocol/canonical.js.map +0 -1
  349. package/dist/runtime/protocol/index.d.ts.map +0 -1
  350. package/dist/runtime/protocol/index.js.map +0 -1
  351. package/dist/runtime/protocol/runtime-protocol-v1.d.ts.map +0 -1
  352. package/dist/runtime/protocol/runtime-protocol-v1.js.map +0 -1
  353. package/dist/runtime/release-receipts.d.ts.map +0 -1
  354. package/dist/runtime/release-receipts.js.map +0 -1
  355. package/dist/runtime/resource-scope.d.ts.map +0 -1
  356. package/dist/runtime/resource-scope.js.map +0 -1
  357. package/dist/runtime/rich-text/ansi-parser.d.ts.map +0 -1
  358. package/dist/runtime/rich-text/ansi-parser.js.map +0 -1
  359. package/dist/runtime/rich-text/layout.d.ts.map +0 -1
  360. package/dist/runtime/rich-text/layout.js.map +0 -1
  361. package/dist/runtime/rich-text/markdown-parser.d.ts.map +0 -1
  362. package/dist/runtime/rich-text/markdown-parser.js.map +0 -1
  363. package/dist/runtime/rich-text/sanitizer.d.ts.map +0 -1
  364. package/dist/runtime/rich-text/sanitizer.js.map +0 -1
  365. package/dist/runtime/rich-text/types.d.ts.map +0 -1
  366. package/dist/runtime/rich-text/types.js.map +0 -1
  367. package/dist/runtime/runtime-event-buffer.d.ts.map +0 -1
  368. package/dist/runtime/runtime-event-buffer.js.map +0 -1
  369. package/dist/runtime/runtime-services.d.ts.map +0 -1
  370. package/dist/runtime/runtime-services.js.map +0 -1
  371. package/dist/runtime/session-composer-control.d.ts.map +0 -1
  372. package/dist/runtime/session-composer-control.js.map +0 -1
  373. package/dist/runtime/session-history-recovery.d.ts.map +0 -1
  374. package/dist/runtime/session-history-recovery.js.map +0 -1
  375. package/dist/runtime/skills/bounded-lru-cache.d.ts.map +0 -1
  376. package/dist/runtime/skills/bounded-lru-cache.js.map +0 -1
  377. package/dist/runtime/skills/filesystem-skill-provider.d.ts.map +0 -1
  378. package/dist/runtime/skills/filesystem-skill-provider.js.map +0 -1
  379. package/dist/runtime/skills/index.d.ts.map +0 -1
  380. package/dist/runtime/skills/index.js.map +0 -1
  381. package/dist/runtime/skills/lazy-skill-runtime.d.ts.map +0 -1
  382. package/dist/runtime/skills/lazy-skill-runtime.js.map +0 -1
  383. package/dist/runtime/skills/types.d.ts.map +0 -1
  384. package/dist/runtime/skills/types.js.map +0 -1
  385. package/dist/runtime/step-snapshot.d.ts.map +0 -1
  386. package/dist/runtime/step-snapshot.js.map +0 -1
  387. package/dist/runtime/subagent-thread-runtime.d.ts.map +0 -1
  388. package/dist/runtime/subagent-thread-runtime.js.map +0 -1
  389. package/dist/runtime/subagents/budget.d.ts.map +0 -1
  390. package/dist/runtime/subagents/budget.js.map +0 -1
  391. package/dist/runtime/subagents/child-executor-guard.d.ts.map +0 -1
  392. package/dist/runtime/subagents/child-executor-guard.js.map +0 -1
  393. package/dist/runtime/subagents/context-builder.d.ts.map +0 -1
  394. package/dist/runtime/subagents/context-builder.js.map +0 -1
  395. package/dist/runtime/subagents/index.d.ts.map +0 -1
  396. package/dist/runtime/subagents/index.js.map +0 -1
  397. package/dist/runtime/subagents/parent-step-fork.d.ts.map +0 -1
  398. package/dist/runtime/subagents/parent-step-fork.js.map +0 -1
  399. package/dist/runtime/subagents/policy.d.ts.map +0 -1
  400. package/dist/runtime/subagents/policy.js.map +0 -1
  401. package/dist/runtime/subagents/presets.d.ts.map +0 -1
  402. package/dist/runtime/subagents/presets.js.map +0 -1
  403. package/dist/runtime/subagents/production.d.ts.map +0 -1
  404. package/dist/runtime/subagents/production.js.map +0 -1
  405. package/dist/runtime/subagents/provider-gate.d.ts.map +0 -1
  406. package/dist/runtime/subagents/provider-gate.js.map +0 -1
  407. package/dist/runtime/subagents/receipt-journal.d.ts.map +0 -1
  408. package/dist/runtime/subagents/receipt-journal.js.map +0 -1
  409. package/dist/runtime/subagents/research-artifact.d.ts.map +0 -1
  410. package/dist/runtime/subagents/research-artifact.js.map +0 -1
  411. package/dist/runtime/subagents/research-citation.d.ts.map +0 -1
  412. package/dist/runtime/subagents/research-citation.js.map +0 -1
  413. package/dist/runtime/subagents/research-contract.d.ts.map +0 -1
  414. package/dist/runtime/subagents/research-contract.js.map +0 -1
  415. package/dist/runtime/subagents/research-quality.d.ts.map +0 -1
  416. package/dist/runtime/subagents/research-quality.js.map +0 -1
  417. package/dist/runtime/subagents/research-renderer.d.ts.map +0 -1
  418. package/dist/runtime/subagents/research-renderer.js.map +0 -1
  419. package/dist/runtime/subagents/research-types.d.ts.map +0 -1
  420. package/dist/runtime/subagents/research-types.js.map +0 -1
  421. package/dist/runtime/subagents/result-parser.d.ts.map +0 -1
  422. package/dist/runtime/subagents/result-parser.js.map +0 -1
  423. package/dist/runtime/subagents/runner.d.ts.map +0 -1
  424. package/dist/runtime/subagents/runner.js.map +0 -1
  425. package/dist/runtime/subagents/runtime-contract.d.ts.map +0 -1
  426. package/dist/runtime/subagents/runtime-contract.js.map +0 -1
  427. package/dist/runtime/subagents/runtime-integration.d.ts.map +0 -1
  428. package/dist/runtime/subagents/runtime-integration.js.map +0 -1
  429. package/dist/runtime/subagents/supervisor.d.ts.map +0 -1
  430. package/dist/runtime/subagents/supervisor.js.map +0 -1
  431. package/dist/runtime/subagents/tool.d.ts.map +0 -1
  432. package/dist/runtime/subagents/tool.js.map +0 -1
  433. package/dist/runtime/subagents/types.d.ts.map +0 -1
  434. package/dist/runtime/subagents/types.js.map +0 -1
  435. package/dist/runtime/subagents/web-research-adapter.d.ts.map +0 -1
  436. package/dist/runtime/subagents/web-research-adapter.js.map +0 -1
  437. package/dist/runtime/task-context-service.d.ts.map +0 -1
  438. package/dist/runtime/task-context-service.js.map +0 -1
  439. package/dist/runtime/thread-admission.d.ts.map +0 -1
  440. package/dist/runtime/thread-admission.js.map +0 -1
  441. package/dist/runtime/thread-compact-persistence.d.ts.map +0 -1
  442. package/dist/runtime/thread-compact-persistence.js.map +0 -1
  443. package/dist/runtime/thread-event-store.d.ts.map +0 -1
  444. package/dist/runtime/thread-event-store.js.map +0 -1
  445. package/dist/runtime/thread-projection.d.ts.map +0 -1
  446. package/dist/runtime/thread-projection.js.map +0 -1
  447. package/dist/runtime/thread-runtime.d.ts.map +0 -1
  448. package/dist/runtime/thread-runtime.js.map +0 -1
  449. package/dist/runtime/thread-session-index.d.ts.map +0 -1
  450. package/dist/runtime/thread-session-index.js.map +0 -1
  451. package/dist/runtime/thread-session-view.d.ts.map +0 -1
  452. package/dist/runtime/thread-session-view.js.map +0 -1
  453. package/dist/runtime/thread-tool-journal.d.ts.map +0 -1
  454. package/dist/runtime/thread-tool-journal.js.map +0 -1
  455. package/dist/runtime/thread-ui-adapter.d.ts.map +0 -1
  456. package/dist/runtime/thread-ui-adapter.js.map +0 -1
  457. package/dist/runtime/tool-detail-repository.d.ts.map +0 -1
  458. package/dist/runtime/tool-detail-repository.js.map +0 -1
  459. package/dist/runtime/tool-gateway.d.ts.map +0 -1
  460. package/dist/runtime/tool-gateway.js.map +0 -1
  461. package/dist/runtime/tool-output-presentation.d.ts.map +0 -1
  462. package/dist/runtime/tool-output-presentation.js.map +0 -1
  463. package/dist/runtime/tool-receipt-validator.d.ts.map +0 -1
  464. package/dist/runtime/tool-receipt-validator.js.map +0 -1
  465. package/dist/runtime/turn-commit.d.ts.map +0 -1
  466. package/dist/runtime/turn-commit.js.map +0 -1
  467. package/dist/runtime/turn-controller.d.ts.map +0 -1
  468. package/dist/runtime/turn-controller.js.map +0 -1
  469. package/dist/runtime/ui-events.d.ts.map +0 -1
  470. package/dist/runtime/ui-events.js.map +0 -1
  471. package/dist/runtime/ui-view-model.d.ts.map +0 -1
  472. package/dist/runtime/ui-view-model.js.map +0 -1
  473. package/dist/services/atomic-write.d.ts.map +0 -1
  474. package/dist/services/atomic-write.js.map +0 -1
  475. package/dist/services/auth/auth.d.ts.map +0 -1
  476. package/dist/services/auth/auth.js.map +0 -1
  477. package/dist/services/auth/aws.d.ts.map +0 -1
  478. package/dist/services/auth/aws.js.map +0 -1
  479. package/dist/services/auth/index.d.ts.map +0 -1
  480. package/dist/services/auth/index.js.map +0 -1
  481. package/dist/services/auto-fix/autoFixConfig.d.ts.map +0 -1
  482. package/dist/services/auto-fix/autoFixConfig.js.map +0 -1
  483. package/dist/services/auto-fix/autoFixHook.d.ts.map +0 -1
  484. package/dist/services/auto-fix/autoFixHook.js.map +0 -1
  485. package/dist/services/auto-fix/autoFixRunner.d.ts.map +0 -1
  486. package/dist/services/auto-fix/autoFixRunner.js.map +0 -1
  487. package/dist/services/auto-fix/index.d.ts.map +0 -1
  488. package/dist/services/auto-fix/index.js.map +0 -1
  489. package/dist/services/bounded-response.d.ts.map +0 -1
  490. package/dist/services/bounded-response.js.map +0 -1
  491. package/dist/services/commit-plan.d.ts.map +0 -1
  492. package/dist/services/commit-plan.js.map +0 -1
  493. package/dist/services/compact/auto-compact.d.ts.map +0 -1
  494. package/dist/services/compact/auto-compact.js.map +0 -1
  495. package/dist/services/compact/compact.d.ts.map +0 -1
  496. package/dist/services/compact/compact.js.map +0 -1
  497. package/dist/services/compact/coordinator.d.ts.map +0 -1
  498. package/dist/services/compact/coordinator.js.map +0 -1
  499. package/dist/services/compact/fingerprint.d.ts.map +0 -1
  500. package/dist/services/compact/fingerprint.js.map +0 -1
  501. package/dist/services/compact/index.d.ts.map +0 -1
  502. package/dist/services/compact/index.js.map +0 -1
  503. package/dist/services/compact/planner.d.ts.map +0 -1
  504. package/dist/services/compact/planner.js.map +0 -1
  505. package/dist/services/compact/semantic-summary.d.ts.map +0 -1
  506. package/dist/services/compact/semantic-summary.js.map +0 -1
  507. package/dist/services/compact/summary-generator.d.ts.map +0 -1
  508. package/dist/services/compact/summary-generator.js.map +0 -1
  509. package/dist/services/compact/tool-call-groups.d.ts.map +0 -1
  510. package/dist/services/compact/tool-call-groups.js.map +0 -1
  511. package/dist/services/concurrent-sessions.d.ts.map +0 -1
  512. package/dist/services/concurrent-sessions.js.map +0 -1
  513. package/dist/services/config-dir.d.ts.map +0 -1
  514. package/dist/services/config-dir.js.map +0 -1
  515. package/dist/services/config.d.ts.map +0 -1
  516. package/dist/services/config.js.map +0 -1
  517. package/dist/services/diagnostic-tracking/diagnosticTracking.d.ts.map +0 -1
  518. package/dist/services/diagnostic-tracking/diagnosticTracking.js.map +0 -1
  519. package/dist/services/diagnostic-tracking/formatter.d.ts.map +0 -1
  520. package/dist/services/diagnostic-tracking/formatter.js.map +0 -1
  521. package/dist/services/diagnostic-tracking/index.d.ts.map +0 -1
  522. package/dist/services/diagnostic-tracking/index.js.map +0 -1
  523. package/dist/services/diagnostic-tracking/types.d.ts.map +0 -1
  524. package/dist/services/diagnostic-tracking/types.js.map +0 -1
  525. package/dist/services/doctor.d.ts.map +0 -1
  526. package/dist/services/doctor.js.map +0 -1
  527. package/dist/services/effort.d.ts.map +0 -1
  528. package/dist/services/effort.js.map +0 -1
  529. package/dist/services/file-context.d.ts.map +0 -1
  530. package/dist/services/file-context.js.map +0 -1
  531. package/dist/services/file-glob.d.ts.map +0 -1
  532. package/dist/services/file-glob.js.map +0 -1
  533. package/dist/services/file-lock.d.ts.map +0 -1
  534. package/dist/services/file-lock.js.map +0 -1
  535. package/dist/services/format.d.ts.map +0 -1
  536. package/dist/services/format.js.map +0 -1
  537. package/dist/services/global-config.d.ts.map +0 -1
  538. package/dist/services/global-config.js.map +0 -1
  539. package/dist/services/goal-storage.d.ts.map +0 -1
  540. package/dist/services/goal-storage.js.map +0 -1
  541. package/dist/services/llm.d.ts.map +0 -1
  542. package/dist/services/llm.js.map +0 -1
  543. package/dist/services/mcp/index.d.ts.map +0 -1
  544. package/dist/services/mcp/index.js.map +0 -1
  545. package/dist/services/mcp/transports.d.ts.map +0 -1
  546. package/dist/services/mcp/transports.js.map +0 -1
  547. package/dist/services/memory.d.ts.map +0 -1
  548. package/dist/services/memory.js.map +0 -1
  549. package/dist/services/model-catalog.d.ts.map +0 -1
  550. package/dist/services/model-catalog.js.map +0 -1
  551. package/dist/services/model-client-pool.d.ts.map +0 -1
  552. package/dist/services/model-client-pool.js.map +0 -1
  553. package/dist/services/model-context.d.ts.map +0 -1
  554. package/dist/services/model-context.js.map +0 -1
  555. package/dist/services/model-registry.d.ts.map +0 -1
  556. package/dist/services/model-registry.js.map +0 -1
  557. package/dist/services/project-instructions.d.ts.map +0 -1
  558. package/dist/services/project-instructions.js.map +0 -1
  559. package/dist/services/prompt-context.d.ts.map +0 -1
  560. package/dist/services/prompt-context.js.map +0 -1
  561. package/dist/services/provider-diagnostics.d.ts.map +0 -1
  562. package/dist/services/provider-diagnostics.js.map +0 -1
  563. package/dist/services/provider-resilience/circuit-breaker.d.ts.map +0 -1
  564. package/dist/services/provider-resilience/circuit-breaker.js.map +0 -1
  565. package/dist/services/provider-resilience/coordinator.d.ts.map +0 -1
  566. package/dist/services/provider-resilience/coordinator.js.map +0 -1
  567. package/dist/services/provider-resilience/error-classifier.d.ts.map +0 -1
  568. package/dist/services/provider-resilience/error-classifier.js.map +0 -1
  569. package/dist/services/provider-resilience/index.d.ts.map +0 -1
  570. package/dist/services/provider-resilience/index.js.map +0 -1
  571. package/dist/services/provider-resilience/request-gate.d.ts.map +0 -1
  572. package/dist/services/provider-resilience/request-gate.js.map +0 -1
  573. package/dist/services/provider-resilience/stream-recovery.d.ts.map +0 -1
  574. package/dist/services/provider-resilience/stream-recovery.js.map +0 -1
  575. package/dist/services/provider-resilience/types.d.ts.map +0 -1
  576. package/dist/services/provider-resilience/types.js.map +0 -1
  577. package/dist/services/redaction.d.ts.map +0 -1
  578. package/dist/services/redaction.js.map +0 -1
  579. package/dist/services/safe-project-reader.d.ts.map +0 -1
  580. package/dist/services/safe-project-reader.js.map +0 -1
  581. package/dist/services/session-index.d.ts.map +0 -1
  582. package/dist/services/session-index.js.map +0 -1
  583. package/dist/services/session-memory/index.d.ts.map +0 -1
  584. package/dist/services/session-memory/index.js.map +0 -1
  585. package/dist/services/session-memory/prompts.d.ts.map +0 -1
  586. package/dist/services/session-memory/prompts.js.map +0 -1
  587. package/dist/services/session-memory/sessionMemory.d.ts.map +0 -1
  588. package/dist/services/session-memory/sessionMemory.js.map +0 -1
  589. package/dist/services/session-storage.d.ts.map +0 -1
  590. package/dist/services/session-storage.js.map +0 -1
  591. package/dist/services/settings-coordinator.d.ts.map +0 -1
  592. package/dist/services/settings-coordinator.js.map +0 -1
  593. package/dist/services/settings-document-repository.d.ts.map +0 -1
  594. package/dist/services/settings-document-repository.js.map +0 -1
  595. package/dist/services/smart-routing.d.ts.map +0 -1
  596. package/dist/services/smart-routing.js.map +0 -1
  597. package/dist/services/storage-maintenance.d.ts.map +0 -1
  598. package/dist/services/storage-maintenance.js.map +0 -1
  599. package/dist/services/tool-allowlist.d.ts.map +0 -1
  600. package/dist/services/tool-allowlist.js.map +0 -1
  601. package/dist/services/usage-state.d.ts.map +0 -1
  602. package/dist/services/usage-state.js.map +0 -1
  603. package/dist/services/verification-profile.d.ts.map +0 -1
  604. package/dist/services/verification-profile.js.map +0 -1
  605. package/dist/services/web-search-adapters.d.ts.map +0 -1
  606. package/dist/services/web-search-adapters.js.map +0 -1
  607. package/dist/services/web-search-mcp.d.ts.map +0 -1
  608. package/dist/services/web-search-mcp.js.map +0 -1
  609. package/dist/services/web-search-provider.d.ts.map +0 -1
  610. package/dist/services/web-search-provider.js.map +0 -1
  611. package/dist/services/workspace-containment.d.ts.map +0 -1
  612. package/dist/services/workspace-containment.js.map +0 -1
  613. package/dist/services/workspace-diff.d.ts.map +0 -1
  614. package/dist/services/workspace-diff.js.map +0 -1
  615. package/dist/services/workspace-registry.d.ts.map +0 -1
  616. package/dist/services/workspace-registry.js.map +0 -1
  617. package/dist/services/workspace-state.d.ts.map +0 -1
  618. package/dist/services/workspace-state.js.map +0 -1
  619. package/dist/services/yaml-config.d.ts.map +0 -1
  620. package/dist/services/yaml-config.js.map +0 -1
  621. package/dist/terminal-ui/completion.d.ts.map +0 -1
  622. package/dist/terminal-ui/completion.js.map +0 -1
  623. package/dist/terminal-ui/editor.d.ts.map +0 -1
  624. package/dist/terminal-ui/editor.js.map +0 -1
  625. package/dist/terminal-ui/launch.d.ts.map +0 -1
  626. package/dist/terminal-ui/launch.js.map +0 -1
  627. package/dist/terminal-ui/output-queue.d.ts.map +0 -1
  628. package/dist/terminal-ui/output-queue.js.map +0 -1
  629. package/dist/terminal-ui/raw-editor.d.ts.map +0 -1
  630. package/dist/terminal-ui/raw-editor.js.map +0 -1
  631. package/dist/tools/_validate.d.ts.map +0 -1
  632. package/dist/tools/_validate.js.map +0 -1
  633. package/dist/tools/bash_security.d.ts.map +0 -1
  634. package/dist/tools/bash_security.js.map +0 -1
  635. package/dist/tools/core/common.d.ts.map +0 -1
  636. package/dist/tools/core/common.js.map +0 -1
  637. package/dist/tools/core/edit-file.d.ts.map +0 -1
  638. package/dist/tools/core/edit-file.js.map +0 -1
  639. package/dist/tools/core/exec-command.d.ts.map +0 -1
  640. package/dist/tools/core/exec-command.js.map +0 -1
  641. package/dist/tools/core/glob.d.ts.map +0 -1
  642. package/dist/tools/core/glob.js.map +0 -1
  643. package/dist/tools/core/grep.d.ts.map +0 -1
  644. package/dist/tools/core/grep.js.map +0 -1
  645. package/dist/tools/core/index.d.ts.map +0 -1
  646. package/dist/tools/core/index.js.map +0 -1
  647. package/dist/tools/core/list-files.d.ts.map +0 -1
  648. package/dist/tools/core/list-files.js.map +0 -1
  649. package/dist/tools/core/read-file.d.ts.map +0 -1
  650. package/dist/tools/core/read-file.js.map +0 -1
  651. package/dist/tools/core/write-file.d.ts.map +0 -1
  652. package/dist/tools/core/write-file.js.map +0 -1
  653. package/dist/tools/git.d.ts.map +0 -1
  654. package/dist/tools/git.js.map +0 -1
  655. package/dist/tools/lsp.d.ts.map +0 -1
  656. package/dist/tools/lsp.js.map +0 -1
  657. package/dist/tools/sandbox.d.ts.map +0 -1
  658. package/dist/tools/sandbox.js.map +0 -1
  659. package/dist/tools/todo.d.ts.map +0 -1
  660. package/dist/tools/todo.js.map +0 -1
  661. package/dist/tools/web.d.ts.map +0 -1
  662. package/dist/tools/web.js.map +0 -1
  663. package/dist/tui-core/frame.d.ts.map +0 -1
  664. package/dist/tui-core/frame.js.map +0 -1
  665. package/dist/tui-core/input-parser.d.ts.map +0 -1
  666. package/dist/tui-core/input-parser.js.map +0 -1
  667. package/dist/tui-core/style.d.ts.map +0 -1
  668. package/dist/tui-core/style.js.map +0 -1
  669. package/dist/tui-core/terminal-writer.d.ts.map +0 -1
  670. package/dist/tui-core/terminal-writer.js.map +0 -1
  671. package/dist/tui-ui/chrome-view-model.d.ts.map +0 -1
  672. package/dist/tui-ui/chrome-view-model.js.map +0 -1
  673. package/dist/tui-ui/inline-surface.d.ts.map +0 -1
  674. package/dist/tui-ui/inline-surface.js.map +0 -1
  675. package/dist/tui-ui/input-ownership.d.ts.map +0 -1
  676. package/dist/tui-ui/input-ownership.js.map +0 -1
  677. package/dist/tui-ui/launch.d.ts.map +0 -1
  678. package/dist/tui-ui/launch.js.map +0 -1
  679. package/dist/tui-ui/layout.d.ts.map +0 -1
  680. package/dist/tui-ui/layout.js.map +0 -1
  681. package/dist/tui-ui/pickers.d.ts.map +0 -1
  682. package/dist/tui-ui/pickers.js.map +0 -1
  683. package/dist/tui-ui/pixel-mascot.d.ts.map +0 -1
  684. package/dist/tui-ui/pixel-mascot.js.map +0 -1
  685. package/dist/tui-ui/render-scheduler.d.ts.map +0 -1
  686. package/dist/tui-ui/render-scheduler.js.map +0 -1
  687. package/dist/tui-ui/runner.d.ts.map +0 -1
  688. package/dist/tui-ui/runner.js.map +0 -1
  689. package/dist/tui-ui/state.d.ts.map +0 -1
  690. package/dist/tui-ui/state.js.map +0 -1
  691. package/dist/tui-ui/terminal-image.d.ts.map +0 -1
  692. package/dist/tui-ui/terminal-image.js.map +0 -1
  693. package/dist/tui-ui/theme-profile.d.ts.map +0 -1
  694. package/dist/tui-ui/theme-profile.js.map +0 -1
  695. package/dist/tui-ui/theme.d.ts.map +0 -1
  696. package/dist/tui-ui/theme.js.map +0 -1
  697. package/dist/tui-ui/transcript-cache.d.ts.map +0 -1
  698. package/dist/tui-ui/transcript-cache.js.map +0 -1
  699. package/dist/tui-ui/transcript-inspector-layout.d.ts.map +0 -1
  700. package/dist/tui-ui/transcript-inspector-layout.js.map +0 -1
  701. package/dist/tui-ui/transcript-inspector-surface.d.ts.map +0 -1
  702. package/dist/tui-ui/transcript-inspector-surface.js.map +0 -1
  703. package/dist/tui-ui/transcript-inspector.d.ts.map +0 -1
  704. package/dist/tui-ui/transcript-inspector.js.map +0 -1
  705. package/dist/tui-ui/transcript-layout.d.ts.map +0 -1
  706. package/dist/tui-ui/transcript-layout.js.map +0 -1
  707. package/dist/ui/box.d.ts.map +0 -1
  708. package/dist/ui/box.js.map +0 -1
  709. package/dist/ui/command-panel.d.ts.map +0 -1
  710. package/dist/ui/command-panel.js.map +0 -1
  711. package/dist/ui/file-completion.d.ts.map +0 -1
  712. package/dist/ui/file-completion.js.map +0 -1
  713. package/dist/ui/markdown.d.ts.map +0 -1
  714. package/dist/ui/markdown.js.map +0 -1
  715. package/dist/ui/multiline-input.d.ts.map +0 -1
  716. package/dist/ui/multiline-input.js.map +0 -1
  717. package/dist/ui/progress.d.ts.map +0 -1
  718. package/dist/ui/progress.js.map +0 -1
  719. package/dist/ui/shared/command-palette.d.ts.map +0 -1
  720. package/dist/ui/shared/command-palette.js.map +0 -1
  721. package/dist/ui/shared/command-suggestions.d.ts.map +0 -1
  722. package/dist/ui/shared/command-suggestions.js.map +0 -1
  723. package/dist/ui/shared/input-frame.d.ts.map +0 -1
  724. package/dist/ui/shared/input-frame.js.map +0 -1
  725. package/dist/ui/shared/text.d.ts.map +0 -1
  726. package/dist/ui/shared/text.js.map +0 -1
  727. package/dist/ui/shared/types.d.ts.map +0 -1
  728. package/dist/ui/shared/types.js.map +0 -1
  729. package/dist/ui/status-bar.d.ts.map +0 -1
  730. package/dist/ui/status-bar.js.map +0 -1
  731. package/dist/ui/stream-markdown.d.ts.map +0 -1
  732. package/dist/ui/stream-markdown.js.map +0 -1
  733. package/dist/ui/suggestions.d.ts.map +0 -1
  734. package/dist/ui/suggestions.js.map +0 -1
  735. package/dist/ui/tool-preview.d.ts.map +0 -1
  736. package/dist/ui/tool-preview.js.map +0 -1
  737. package/dist/ui/user-input.d.ts.map +0 -1
  738. package/dist/ui/user-input.js.map +0 -1
  739. package/dist/utils/debug-log.d.ts.map +0 -1
  740. package/dist/utils/debug-log.js.map +0 -1
  741. package/dist/utils/errors.d.ts.map +0 -1
  742. package/dist/utils/errors.js.map +0 -1
  743. package/dist/utils/json.d.ts.map +0 -1
  744. package/dist/utils/json.js.map +0 -1
  745. package/dist/utils/mask.d.ts.map +0 -1
  746. package/dist/utils/mask.js.map +0 -1
  747. package/dist/utils/observability.d.ts.map +0 -1
  748. package/dist/utils/observability.js.map +0 -1
  749. package/dist/utils/token-estimate.d.ts.map +0 -1
  750. package/dist/utils/token-estimate.js.map +0 -1
  751. package/dist/web/errors.d.ts.map +0 -1
  752. package/dist/web/errors.js.map +0 -1
  753. package/dist/web/event-hub.d.ts.map +0 -1
  754. package/dist/web/event-hub.js.map +0 -1
  755. package/dist/web/file-read-service.d.ts.map +0 -1
  756. package/dist/web/file-read-service.js.map +0 -1
  757. package/dist/web/git-read-model-service.d.ts.map +0 -1
  758. package/dist/web/git-read-model-service.js.map +0 -1
  759. package/dist/web/index.d.ts.map +0 -1
  760. package/dist/web/index.js.map +0 -1
  761. package/dist/web/launch.d.ts.map +0 -1
  762. package/dist/web/launch.js.map +0 -1
  763. package/dist/web/protocol.d.ts.map +0 -1
  764. package/dist/web/protocol.js.map +0 -1
  765. package/dist/web/review-service.d.ts.map +0 -1
  766. package/dist/web/review-service.js.map +0 -1
  767. package/dist/web/server.d.ts.map +0 -1
  768. package/dist/web/server.js.map +0 -1
  769. package/dist/web/terminal-manager.d.ts.map +0 -1
  770. package/dist/web/terminal-manager.js.map +0 -1
  771. package/dist/web/terminal-server.d.ts.map +0 -1
  772. package/dist/web/terminal-server.js.map +0 -1
  773. package/dist/web/workbench-controller.d.ts.map +0 -1
  774. package/dist/web/workbench-controller.js.map +0 -1
  775. package/dist/web-client/assets/FilesPanel-DYs1MhoM.js +0 -2
  776. package/dist/web-client/assets/ReviewPanel-BDxG670T.js +0 -1
  777. package/dist/web-client/assets/index-BWV5sIvw.css +0 -1
  778. package/dist/web-client/assets/index-VVUKj6FE.js +0 -17
@@ -0,0 +1,3205 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Orion Code Local Web API
4
+ version: 0.3.3
5
+ description: >-
6
+ Same-origin loopback API for the Orion Code v0.3.3 Web Workbench. It preserves the v0.3.2
7
+ Context and Composer contracts while adding a bounded Session actor pool, explicit Session
8
+ Runtime revision guards, queue cancellation, background Runtime summaries, and the closed
9
+ appearance.style setting. Unary resources use bounded JSON HTTP; commands use POST; runtime
10
+ invalidations use one replayable Server-Sent Events downlink. Terminal bytes remain isolated on
11
+ a ticket-authenticated, same-origin WebSocket and never enter SSE, snapshots, diagnostics,
12
+ evidence logs, or durable transcripts.
13
+ servers:
14
+ - url: /api/v1
15
+ paths:
16
+ /health:
17
+ get:
18
+ operationId: getHealth
19
+ responses:
20
+ '200':
21
+ description: Process health without secret or workspace data.
22
+ content:
23
+ application/json:
24
+ schema:
25
+ $ref: '#/components/schemas/HealthResponse'
26
+ /bootstrap:
27
+ get:
28
+ operationId: getBootstrap
29
+ responses:
30
+ '200':
31
+ description: Secret-free workbench bootstrap state.
32
+ content:
33
+ application/json:
34
+ schema:
35
+ $ref: '#/components/schemas/BootstrapResponse'
36
+ /workspaces:
37
+ get:
38
+ operationId: listWorkspaces
39
+ description: Cursor-paged canonical workspaces known to the local Orion installation.
40
+ parameters:
41
+ - $ref: '#/components/parameters/ContextWorkspaceId'
42
+ - $ref: '#/components/parameters/ExpectedContextRevision'
43
+ - $ref: '#/components/parameters/CollectionCursor'
44
+ - $ref: '#/components/parameters/PageSize'
45
+ responses:
46
+ '200':
47
+ description: One bounded workspace page.
48
+ content:
49
+ application/json:
50
+ schema:
51
+ $ref: '#/components/schemas/WorkspacePage'
52
+ '400': { $ref: '#/components/responses/Problem' }
53
+ '409': { $ref: '#/components/responses/Problem' }
54
+ /workspaces/{workspaceId}/sessions:
55
+ get:
56
+ operationId: listWorkspaceSessions
57
+ description: >-
58
+ Read one revision-bound Session page for a registered project, including an inactive
59
+ project, without activating or constructing its Runtime.
60
+ parameters:
61
+ - $ref: '#/components/parameters/WorkspaceId'
62
+ - $ref: '#/components/parameters/ContextWorkspaceId'
63
+ - $ref: '#/components/parameters/ExpectedContextRevision'
64
+ - $ref: '#/components/parameters/CollectionCursor'
65
+ - $ref: '#/components/parameters/PageSize'
66
+ responses:
67
+ '200':
68
+ description: One bounded Session page for the named workspace.
69
+ content:
70
+ application/json:
71
+ schema: { $ref: '#/components/schemas/SessionPage' }
72
+ '400': { $ref: '#/components/responses/Problem' }
73
+ '404': { $ref: '#/components/responses/Problem' }
74
+ '409': { $ref: '#/components/responses/Problem' }
75
+ /workspaces/{workspaceId}/summary:
76
+ get:
77
+ operationId: getWorkspaceSummary
78
+ description: Return a bounded Git/project summary without activating the workspace Runtime.
79
+ parameters:
80
+ - $ref: '#/components/parameters/WorkspaceId'
81
+ - $ref: '#/components/parameters/ContextWorkspaceId'
82
+ - $ref: '#/components/parameters/ExpectedContextRevision'
83
+ responses:
84
+ '200':
85
+ description: Repository facts for one registered workspace.
86
+ content:
87
+ application/json:
88
+ schema: { $ref: '#/components/schemas/WorkspaceProjectSummary' }
89
+ '400': { $ref: '#/components/responses/Problem' }
90
+ '404': { $ref: '#/components/responses/Problem' }
91
+ '409': { $ref: '#/components/responses/ContextConflict' }
92
+ /workspaces/{workspaceId}/pin:
93
+ post:
94
+ operationId: setWorkspacePinned
95
+ description: Pin or unpin a registered workspace through the process idempotency ledger.
96
+ security: [{ webNonce: [] }]
97
+ parameters:
98
+ - $ref: '#/components/parameters/WorkspaceId'
99
+ requestBody:
100
+ required: true
101
+ content:
102
+ application/json:
103
+ schema: { $ref: '#/components/schemas/WorkspacePinRequest' }
104
+ responses:
105
+ '200':
106
+ description: Updated workspace summary, or an exact requestId replay.
107
+ content:
108
+ application/json:
109
+ schema: { $ref: '#/components/schemas/WorkspacePinResult' }
110
+ '400': { $ref: '#/components/responses/Problem' }
111
+ '403': { $ref: '#/components/responses/Problem' }
112
+ '404': { $ref: '#/components/responses/Problem' }
113
+ '409': { $ref: '#/components/responses/Problem' }
114
+ /workspaces/{workspaceId}:
115
+ delete:
116
+ operationId: removeWorkspace
117
+ description: >-
118
+ Remove an inactive registry entry. Session/Thread data and files are not deleted; the
119
+ active workspace cannot be removed.
120
+ security: [{ webNonce: [] }]
121
+ parameters:
122
+ - $ref: '#/components/parameters/WorkspaceId'
123
+ requestBody:
124
+ required: true
125
+ content:
126
+ application/json:
127
+ schema: { $ref: '#/components/schemas/WorkspaceRemoveRequest' }
128
+ responses:
129
+ '200':
130
+ description: Registry entry removed, or an exact requestId replay.
131
+ content:
132
+ application/json:
133
+ schema: { $ref: '#/components/schemas/WorkspaceRemoveResult' }
134
+ '400': { $ref: '#/components/responses/Problem' }
135
+ '403': { $ref: '#/components/responses/Problem' }
136
+ '404': { $ref: '#/components/responses/Problem' }
137
+ '409': { $ref: '#/components/responses/Problem' }
138
+ /context/activate:
139
+ post:
140
+ operationId: activateContext
141
+ description: >-
142
+ Atomically switch workspace and optional Session under expectedContextRevision. Failure
143
+ leaves the previous context authoritative; success returns a complete bootstrap.
144
+ security: [{ webNonce: [] }]
145
+ requestBody:
146
+ required: true
147
+ content:
148
+ application/json:
149
+ schema: { $ref: '#/components/schemas/ContextActivateRequest' }
150
+ responses:
151
+ '200':
152
+ description: New atomic context, or an exact requestId replay.
153
+ content:
154
+ application/json:
155
+ schema: { $ref: '#/components/schemas/ContextMutationResult' }
156
+ '400': { $ref: '#/components/responses/Problem' }
157
+ '403': { $ref: '#/components/responses/Problem' }
158
+ '404': { $ref: '#/components/responses/Problem' }
159
+ '409': { $ref: '#/components/responses/Problem' }
160
+ /workspaces/activate:
161
+ post:
162
+ operationId: activateWorkspace
163
+ description: Select a canonical workspace after draining the previous runtime owner.
164
+ security: [{ webNonce: [] }]
165
+ requestBody:
166
+ required: true
167
+ content:
168
+ application/json:
169
+ schema:
170
+ $ref: '#/components/schemas/ActivateWorkspaceRequest'
171
+ responses:
172
+ '200':
173
+ description: Workspace selected, or an exact requestId retry replayed.
174
+ content:
175
+ application/json:
176
+ schema:
177
+ $ref: '#/components/schemas/WorkspaceMutationResult'
178
+ '400': { $ref: '#/components/responses/Problem' }
179
+ '403': { $ref: '#/components/responses/Problem' }
180
+ '409': { $ref: '#/components/responses/Problem' }
181
+ /sessions:
182
+ get:
183
+ operationId: listSessions
184
+ description: Cursor-paged sessions whose canonical project is the active workspace.
185
+ parameters:
186
+ - $ref: '#/components/parameters/ContextWorkspaceId'
187
+ - $ref: '#/components/parameters/ExpectedContextRevision'
188
+ - $ref: '#/components/parameters/CollectionCursor'
189
+ - $ref: '#/components/parameters/PageSize'
190
+ responses:
191
+ '200':
192
+ description: One bounded session page.
193
+ content:
194
+ application/json:
195
+ schema:
196
+ $ref: '#/components/schemas/SessionPage'
197
+ '400': { $ref: '#/components/responses/Problem' }
198
+ '409': { $ref: '#/components/responses/Problem' }
199
+ post:
200
+ operationId: createSession
201
+ security: [{ webNonce: [] }]
202
+ requestBody:
203
+ required: true
204
+ content:
205
+ application/json:
206
+ schema:
207
+ $ref: '#/components/schemas/CreateSessionRequest'
208
+ responses:
209
+ '201':
210
+ description: New active session, or an exact requestId retry replayed.
211
+ content:
212
+ application/json:
213
+ schema:
214
+ $ref: '#/components/schemas/SessionMutationResult'
215
+ '400': { $ref: '#/components/responses/Problem' }
216
+ '403': { $ref: '#/components/responses/Problem' }
217
+ '409': { $ref: '#/components/responses/Problem' }
218
+ /sessions/{sessionId}:
219
+ patch:
220
+ operationId: renameSession
221
+ security: [{ webNonce: [] }]
222
+ parameters:
223
+ - $ref: '#/components/parameters/SessionId'
224
+ requestBody:
225
+ required: true
226
+ content:
227
+ application/json:
228
+ schema:
229
+ $ref: '#/components/schemas/RenameSessionRequest'
230
+ responses:
231
+ '200':
232
+ description: Updated session, or an exact requestId retry replayed.
233
+ content:
234
+ application/json:
235
+ schema:
236
+ $ref: '#/components/schemas/SessionMutationResult'
237
+ '400': { $ref: '#/components/responses/Problem' }
238
+ '403': { $ref: '#/components/responses/Problem' }
239
+ '404': { $ref: '#/components/responses/Problem' }
240
+ '409': { $ref: '#/components/responses/Problem' }
241
+ /sessions/{sessionId}/activate:
242
+ post:
243
+ operationId: activateSession
244
+ description: Select and restore a session after draining the previous runtime owner.
245
+ security: [{ webNonce: [] }]
246
+ parameters:
247
+ - $ref: '#/components/parameters/SessionId'
248
+ requestBody:
249
+ required: true
250
+ content:
251
+ application/json:
252
+ schema:
253
+ $ref: '#/components/schemas/ContextGuardRequest'
254
+ responses:
255
+ '200':
256
+ description: Session selected, or an exact requestId retry replayed.
257
+ content:
258
+ application/json:
259
+ schema:
260
+ $ref: '#/components/schemas/CommandResult'
261
+ '400': { $ref: '#/components/responses/Problem' }
262
+ '403': { $ref: '#/components/responses/Problem' }
263
+ '404': { $ref: '#/components/responses/Problem' }
264
+ '409': { $ref: '#/components/responses/Problem' }
265
+ /sessions/{sessionId}/snapshot:
266
+ get:
267
+ operationId: getSessionSnapshot
268
+ description: >-
269
+ Recovery snapshot for one session. Transcript items are cursor-paged; `threadCursor`
270
+ identifies the durable Thread projection edge and the independent `eventCursor` resumes
271
+ `/events`. Pending approvals are projected here and remain pending across refresh, network
272
+ loss and tab closure.
273
+ parameters:
274
+ - $ref: '#/components/parameters/SessionId'
275
+ - $ref: '#/components/parameters/ContextWorkspaceId'
276
+ - $ref: '#/components/parameters/ExpectedContextRevision'
277
+ - $ref: '#/components/parameters/TranscriptCursor'
278
+ - $ref: '#/components/parameters/PageSize'
279
+ responses:
280
+ '200':
281
+ description: Sanitized recovery state from durable runtime sources.
282
+ content:
283
+ application/json:
284
+ schema:
285
+ $ref: '#/components/schemas/SessionSnapshot'
286
+ '400': { $ref: '#/components/responses/Problem' }
287
+ '404': { $ref: '#/components/responses/Problem' }
288
+ '409': { $ref: '#/components/responses/Problem' }
289
+ /sessions/{sessionId}/composer-state:
290
+ get:
291
+ operationId: getSessionComposerState
292
+ description: >-
293
+ Return the complete revision-bound Composer baseline for the active Session. The state is
294
+ independent of transcript length and includes current, pending, last-good/error, Context,
295
+ durable Plan review and queue projections.
296
+ parameters:
297
+ - $ref: '#/components/parameters/SessionId'
298
+ - $ref: '#/components/parameters/ContextWorkspaceId'
299
+ - $ref: '#/components/parameters/ExpectedContextRevision'
300
+ responses:
301
+ '200':
302
+ description: Matching active Session Composer state.
303
+ content:
304
+ application/json:
305
+ schema: { $ref: '#/components/schemas/ComposerControlState' }
306
+ '400': { $ref: '#/components/responses/Problem' }
307
+ '404': { $ref: '#/components/responses/Problem' }
308
+ '409': { $ref: '#/components/responses/ContextConflict' }
309
+ '503': { $ref: '#/components/responses/Problem' }
310
+ /sessions/{sessionId}/model-catalog:
311
+ get:
312
+ operationId: getSessionModelCatalog
313
+ description: >-
314
+ Return one cursor-bounded Host model page. Unavailable providers remain explicit and never
315
+ expose credential values or raw provider errors; healthy provider groups remain usable.
316
+ parameters:
317
+ - $ref: '#/components/parameters/SessionId'
318
+ - $ref: '#/components/parameters/ContextWorkspaceId'
319
+ - $ref: '#/components/parameters/ExpectedContextRevision'
320
+ - $ref: '#/components/parameters/CollectionCursor'
321
+ - $ref: '#/components/parameters/PageSize'
322
+ responses:
323
+ '200':
324
+ description: One revision-bound model catalog page.
325
+ content:
326
+ application/json:
327
+ schema: { $ref: '#/components/schemas/ModelCatalogPage' }
328
+ '400': { $ref: '#/components/responses/Problem' }
329
+ '404': { $ref: '#/components/responses/Problem' }
330
+ '409': { $ref: '#/components/responses/ContextConflict' }
331
+ '503': { $ref: '#/components/responses/Problem' }
332
+ /sessions/{sessionId}/composer-actions:
333
+ post:
334
+ operationId: applySessionComposerAction
335
+ description: >-
336
+ Apply exactly one idempotent Composer control mutation after workspace, Context, Session,
337
+ control and item/Plan revision admission. Any stale guard fails before side effects; the
338
+ client must recover and must not automatically replay a high-risk action.
339
+ security: [{ webNonce: [] }]
340
+ parameters:
341
+ - $ref: '#/components/parameters/SessionId'
342
+ requestBody:
343
+ required: true
344
+ content:
345
+ application/json:
346
+ schema: { $ref: '#/components/schemas/ComposerAction' }
347
+ responses:
348
+ '200':
349
+ description: Applied/deferred receipt and matching Composer state, or exact replay.
350
+ content:
351
+ application/json:
352
+ schema: { $ref: '#/components/schemas/ComposerActionResult' }
353
+ '400': { $ref: '#/components/responses/Problem' }
354
+ '403': { $ref: '#/components/responses/Problem' }
355
+ '404': { $ref: '#/components/responses/Problem' }
356
+ '409': { $ref: '#/components/responses/Problem' }
357
+ '422': { $ref: '#/components/responses/Problem' }
358
+ '503': { $ref: '#/components/responses/Problem' }
359
+ /files:
360
+ get:
361
+ operationId: listFiles
362
+ description: >-
363
+ Lazily list one active-workspace directory by opaque node id. The cursor binds the parent
364
+ id and file revision; paths outside the canonical workspace and symlink escapes fail closed.
365
+ parameters:
366
+ - $ref: '#/components/parameters/ContextWorkspaceId'
367
+ - $ref: '#/components/parameters/ExpectedContextRevision'
368
+ - $ref: '#/components/parameters/ParentFileId'
369
+ - $ref: '#/components/parameters/ResourceCursor'
370
+ - $ref: '#/components/parameters/PageSize'
371
+ responses:
372
+ '200':
373
+ description: One bounded directory page with no absolute filesystem paths.
374
+ content:
375
+ application/json:
376
+ schema: { $ref: '#/components/schemas/FileTreePage' }
377
+ '400': { $ref: '#/components/responses/Problem' }
378
+ '403': { $ref: '#/components/responses/Problem' }
379
+ '404': { $ref: '#/components/responses/Problem' }
380
+ '409': { $ref: '#/components/responses/Problem' }
381
+ /files/{fileId}/content:
382
+ get:
383
+ operationId: getFileContent
384
+ description: >-
385
+ Read one bounded UTF-8 page from a non-sensitive regular file. Binary files return metadata
386
+ only. The continuation is bound to the file revision and byte boundary.
387
+ parameters:
388
+ - $ref: '#/components/parameters/FileId'
389
+ - $ref: '#/components/parameters/ContextWorkspaceId'
390
+ - $ref: '#/components/parameters/ExpectedContextRevision'
391
+ - $ref: '#/components/parameters/ResourceCursor'
392
+ - $ref: '#/components/parameters/FileLimitBytes'
393
+ responses:
394
+ '200':
395
+ description: One redacted text page or binary metadata.
396
+ content:
397
+ application/json:
398
+ schema: { $ref: '#/components/schemas/FileContentPage' }
399
+ '400': { $ref: '#/components/responses/Problem' }
400
+ '403': { $ref: '#/components/responses/Problem' }
401
+ '404': { $ref: '#/components/responses/Problem' }
402
+ '409': { $ref: '#/components/responses/Problem' }
403
+ '415': { $ref: '#/components/responses/Problem' }
404
+ /git/status:
405
+ get:
406
+ operationId: getGitStatus
407
+ description: >-
408
+ Return bounded, argv-only Git facts for the active workspace. The opaque cursor binds the
409
+ repository revision and record offset; it never carries credentials or raw .git content.
410
+ parameters:
411
+ - $ref: '#/components/parameters/ContextWorkspaceId'
412
+ - $ref: '#/components/parameters/ExpectedContextRevision'
413
+ - $ref: '#/components/parameters/ResourceCursor'
414
+ - $ref: '#/components/parameters/GitStatusPageSize'
415
+ responses:
416
+ '200':
417
+ description: Grouped clean/staged/unstaged/untracked/conflicted repository state.
418
+ content:
419
+ application/json:
420
+ schema: { $ref: '#/components/schemas/GitStatus' }
421
+ '400': { $ref: '#/components/responses/Problem' }
422
+ '409': { $ref: '#/components/responses/Problem' }
423
+ '503': { $ref: '#/components/responses/Problem' }
424
+ /git/log:
425
+ get:
426
+ operationId: getGitLog
427
+ description: Return one sanitized commit page bound to the current repository revision.
428
+ parameters:
429
+ - $ref: '#/components/parameters/ContextWorkspaceId'
430
+ - $ref: '#/components/parameters/ExpectedContextRevision'
431
+ - $ref: '#/components/parameters/ResourceCursor'
432
+ - $ref: '#/components/parameters/GitLogPageSize'
433
+ responses:
434
+ '200':
435
+ description: One bounded Git history page.
436
+ content:
437
+ application/json:
438
+ schema: { $ref: '#/components/schemas/GitLogPage' }
439
+ '400': { $ref: '#/components/responses/Problem' }
440
+ '409': { $ref: '#/components/responses/Problem' }
441
+ '503': { $ref: '#/components/responses/Problem' }
442
+ /git/diff/{fileId}:
443
+ get:
444
+ operationId: getGitDiff
445
+ description: >-
446
+ Return bounded redacted diff lines for an opaque file id. Continuations bind file identity,
447
+ repository revision and page boundary; binary data is never emitted.
448
+ parameters:
449
+ - $ref: '#/components/parameters/FileId'
450
+ - $ref: '#/components/parameters/ContextWorkspaceId'
451
+ - $ref: '#/components/parameters/ExpectedContextRevision'
452
+ - $ref: '#/components/parameters/ResourceCursor'
453
+ - $ref: '#/components/parameters/DiffLineLimit'
454
+ - $ref: '#/components/parameters/DiffByteLimit'
455
+ responses:
456
+ '200':
457
+ description: One revision-bound diff page.
458
+ content:
459
+ application/json:
460
+ schema: { $ref: '#/components/schemas/GitDiffPage' }
461
+ '400': { $ref: '#/components/responses/Problem' }
462
+ '404': { $ref: '#/components/responses/Problem' }
463
+ '409': { $ref: '#/components/responses/Problem' }
464
+ '503': { $ref: '#/components/responses/Problem' }
465
+ /review:
466
+ get:
467
+ operationId: getReview
468
+ description: >-
469
+ Compose a read-only review summary from Git facts and durable tool-detail metadata. Sending
470
+ selected diff text to Composer is a client action; this endpoint never edits files.
471
+ parameters:
472
+ - $ref: '#/components/parameters/ContextWorkspaceId'
473
+ - $ref: '#/components/parameters/ExpectedContextRevision'
474
+ responses:
475
+ '200':
476
+ description: Revisioned change-set and verification metadata.
477
+ content:
478
+ application/json:
479
+ schema: { $ref: '#/components/schemas/ReviewSnapshot' }
480
+ '409': { $ref: '#/components/responses/Problem' }
481
+ '503': { $ref: '#/components/responses/Problem' }
482
+ /terminals:
483
+ get:
484
+ operationId: listTerminals
485
+ description: List only ephemeral terminals owned by the active workspace.
486
+ parameters:
487
+ - $ref: '#/components/parameters/ContextWorkspaceId'
488
+ - $ref: '#/components/parameters/ExpectedContextRevision'
489
+ - $ref: '#/components/parameters/CollectionCursor'
490
+ - $ref: '#/components/parameters/PageSize'
491
+ responses:
492
+ '200':
493
+ description: One bounded terminal metadata page; no terminal output is included.
494
+ content:
495
+ application/json:
496
+ schema: { $ref: '#/components/schemas/TerminalPage' }
497
+ '400': { $ref: '#/components/responses/Problem' }
498
+ '409': { $ref: '#/components/responses/Problem' }
499
+ post:
500
+ operationId: createTerminal
501
+ description: >-
502
+ Create a real PTY only after an explicit user gesture. The single-use attach ticket is
503
+ short-lived and must never be logged, persisted, placed in a URL, or sent on SSE.
504
+ security: [{ webNonce: [], terminalUserGesture: [] }]
505
+ requestBody:
506
+ required: true
507
+ content:
508
+ application/json:
509
+ schema: { $ref: '#/components/schemas/TerminalCreateRequest' }
510
+ responses:
511
+ '201':
512
+ description: Terminal metadata plus one short-lived single-use ticket.
513
+ content:
514
+ application/json:
515
+ schema: { $ref: '#/components/schemas/TerminalCreateMutationResult' }
516
+ '400': { $ref: '#/components/responses/Problem' }
517
+ '403': { $ref: '#/components/responses/Problem' }
518
+ '409': { $ref: '#/components/responses/Problem' }
519
+ '503': { $ref: '#/components/responses/Problem' }
520
+ /terminals/{terminalId}/attach-ticket:
521
+ post:
522
+ operationId: issueTerminalAttachTicket
523
+ description: Replace any unused ticket with a new single-use, short-lived attach ticket.
524
+ security: [{ webNonce: [] }]
525
+ parameters:
526
+ - $ref: '#/components/parameters/TerminalId'
527
+ requestBody:
528
+ required: true
529
+ content:
530
+ application/json:
531
+ schema: { $ref: '#/components/schemas/ContextGuardRequest' }
532
+ responses:
533
+ '200':
534
+ description: Fresh attach ticket, or an exact requestId replay.
535
+ content:
536
+ application/json:
537
+ schema: { $ref: '#/components/schemas/TerminalTicketMutationResult' }
538
+ '400': { $ref: '#/components/responses/Problem' }
539
+ '403': { $ref: '#/components/responses/Problem' }
540
+ '404': { $ref: '#/components/responses/Problem' }
541
+ '409': { $ref: '#/components/responses/Problem' }
542
+ /terminals/{terminalId}:
543
+ delete:
544
+ operationId: closeTerminal
545
+ description: Terminate the PTY process tree and invalidate outstanding attach tickets.
546
+ security: [{ webNonce: [] }]
547
+ parameters:
548
+ - $ref: '#/components/parameters/TerminalId'
549
+ requestBody:
550
+ required: true
551
+ content:
552
+ application/json:
553
+ schema: { $ref: '#/components/schemas/ContextGuardRequest' }
554
+ responses:
555
+ '200':
556
+ description: Closed terminal metadata, or an exact requestId replay.
557
+ content:
558
+ application/json:
559
+ schema: { $ref: '#/components/schemas/TerminalCloseMutationResult' }
560
+ '400': { $ref: '#/components/responses/Problem' }
561
+ '403': { $ref: '#/components/responses/Problem' }
562
+ '404': { $ref: '#/components/responses/Problem' }
563
+ '409': { $ref: '#/components/responses/Problem' }
564
+ /terminals/{terminalId}/stream:
565
+ get:
566
+ operationId: streamTerminal
567
+ description: >-
568
+ WebSocket upgrade only; HTTP success bodies are not used. The client offers subprotocol
569
+ `orion-terminal-v1`, then sends Authenticate as its first JSON message within five seconds.
570
+ The ticket stays in the message body, never in the URL. Terminal output is non-durable and
571
+ isolated from the Workbench SSE cursor.
572
+ parameters:
573
+ - $ref: '#/components/parameters/TerminalId'
574
+ x-orion-websocket:
575
+ subprotocol: orion-terminal-v1
576
+ firstClientMessage: '#/components/schemas/TerminalAuthenticateMessage'
577
+ clientMessages: '#/components/schemas/TerminalClientMessage'
578
+ serverMessages: '#/components/schemas/TerminalServerMessage'
579
+ closeCodes: [1000, 1001, 4400, 4401, 4403, 4409, 4413]
580
+ responses:
581
+ '101':
582
+ description: Switching Protocols to the terminal WebSocket.
583
+ '400': { $ref: '#/components/responses/Problem' }
584
+ '403': { $ref: '#/components/responses/Problem' }
585
+ '404': { $ref: '#/components/responses/Problem' }
586
+ /tool-details:
587
+ get:
588
+ operationId: listToolDetails
589
+ description: >-
590
+ Cursor-paged safe summaries from the active workspace's project artifact repository.
591
+ Current artifact metadata has no session identity, so this route is deliberately
592
+ workspace/project-scoped and must not be presented as proof that an artifact belongs to a
593
+ particular session.
594
+ parameters:
595
+ - $ref: '#/components/parameters/ContextWorkspaceId'
596
+ - $ref: '#/components/parameters/ExpectedContextRevision'
597
+ - $ref: '#/components/parameters/CollectionCursor'
598
+ - $ref: '#/components/parameters/PageSize'
599
+ responses:
600
+ '200':
601
+ description: One bounded tool-detail summary page.
602
+ content:
603
+ application/json:
604
+ schema:
605
+ $ref: '#/components/schemas/ToolDetailSummaryPage'
606
+ '400': { $ref: '#/components/responses/Problem' }
607
+ '404': { $ref: '#/components/responses/Problem' }
608
+ '409': { $ref: '#/components/responses/Problem' }
609
+ /tool-details/{callId}:
610
+ get:
611
+ operationId: getToolDetail
612
+ description: >-
613
+ Byte-paged output from a pre-sanitized derivative resolved only from the active workspace's
614
+ artifact list. `offsetBytes` addresses derivative bytes, never raw tool-output bytes, so a
615
+ caller cannot bypass redaction by choosing a sensitive-field boundary. The current artifact
616
+ metadata cannot prove session ownership; the host returns no artifact filesystem path and
617
+ makes no session-attribution claim.
618
+ parameters:
619
+ - $ref: '#/components/parameters/CallId'
620
+ - $ref: '#/components/parameters/ContextWorkspaceId'
621
+ - $ref: '#/components/parameters/ExpectedContextRevision'
622
+ - $ref: '#/components/parameters/OffsetBytes'
623
+ - $ref: '#/components/parameters/LimitBytes'
624
+ responses:
625
+ '200':
626
+ description: One UTF-8-safe redacted output page.
627
+ content:
628
+ application/json:
629
+ schema:
630
+ $ref: '#/components/schemas/ToolDetailPage'
631
+ '400': { $ref: '#/components/responses/Problem' }
632
+ '404': { $ref: '#/components/responses/Problem' }
633
+ '409': { $ref: '#/components/responses/ContextConflict' }
634
+ /skills:
635
+ get:
636
+ operationId: listSkills
637
+ description: >-
638
+ Cursor-paged safe Skill descriptors. Bodies, resource paths and trigger implementations are
639
+ excluded.
640
+ parameters:
641
+ - $ref: '#/components/parameters/ContextWorkspaceId'
642
+ - $ref: '#/components/parameters/ExpectedContextRevision'
643
+ - $ref: '#/components/parameters/CollectionCursor'
644
+ - $ref: '#/components/parameters/PageSize'
645
+ responses:
646
+ '200':
647
+ description: One bounded Skill descriptor page.
648
+ content:
649
+ application/json:
650
+ schema:
651
+ $ref: '#/components/schemas/SkillPage'
652
+ '400': { $ref: '#/components/responses/Problem' }
653
+ '409': { $ref: '#/components/responses/Problem' }
654
+ /mcp:
655
+ get:
656
+ operationId: listMcpServers
657
+ description: >-
658
+ Cursor-paged safe MCP catalog/runtime summaries. Commands, endpoints, headers and
659
+ credentials are excluded and this read never activates a dormant server.
660
+ parameters:
661
+ - $ref: '#/components/parameters/ContextWorkspaceId'
662
+ - $ref: '#/components/parameters/ExpectedContextRevision'
663
+ - $ref: '#/components/parameters/CollectionCursor'
664
+ - $ref: '#/components/parameters/PageSize'
665
+ responses:
666
+ '200':
667
+ description: One bounded MCP summary page.
668
+ content:
669
+ application/json:
670
+ schema:
671
+ $ref: '#/components/schemas/McpPage'
672
+ '400': { $ref: '#/components/responses/Problem' }
673
+ '409': { $ref: '#/components/responses/Problem' }
674
+ /commands:
675
+ post:
676
+ operationId: dispatchCommand
677
+ description: >-
678
+ Dispatch a renderer-neutral runtime mutation. Approval decisions allow only once, project
679
+ or global scope. Interrupt and shutdown paths deny affected unresolved approvals and fail
680
+ their waiting tool calls closed.
681
+ security: [{ webNonce: [] }]
682
+ requestBody:
683
+ required: true
684
+ content:
685
+ application/json:
686
+ schema:
687
+ $ref: '#/components/schemas/WebCommand'
688
+ responses:
689
+ '202':
690
+ description: Accepted command, or an exact requestId retry replayed.
691
+ content:
692
+ application/json:
693
+ schema:
694
+ $ref: '#/components/schemas/CommandResult'
695
+ '400': { $ref: '#/components/responses/Problem' }
696
+ '403': { $ref: '#/components/responses/Problem' }
697
+ '409': { $ref: '#/components/responses/Problem' }
698
+ /events:
699
+ get:
700
+ operationId: streamEvents
701
+ description: >-
702
+ One Server-Sent Events downlink. `cursor` or `Last-Event-ID` is the last delivered durable
703
+ sequence; the query value wins when both are present. Each SSE `id` is the decimal cursor,
704
+ while the JSON envelope also carries a UUID `eventId`. Disconnecting this stream does not
705
+ resolve or deny pending approvals.
706
+ parameters:
707
+ - $ref: '#/components/parameters/EventCursor'
708
+ - $ref: '#/components/parameters/LastEventId'
709
+ responses:
710
+ '200':
711
+ description: text/event-stream of discriminated WebEventEnvelope values.
712
+ content:
713
+ text/event-stream:
714
+ schema:
715
+ $ref: '#/components/schemas/WebEventEnvelope'
716
+ '400': { $ref: '#/components/responses/Problem' }
717
+ '409': { $ref: '#/components/responses/Problem' }
718
+ /diagnostics:
719
+ get:
720
+ operationId: getDiagnostics
721
+ parameters:
722
+ - $ref: '#/components/parameters/ContextWorkspaceId'
723
+ - $ref: '#/components/parameters/ExpectedContextRevision'
724
+ responses:
725
+ '200':
726
+ description: Sanitized runtime and harness diagnostics.
727
+ content:
728
+ application/json:
729
+ schema:
730
+ type: object
731
+ properties:
732
+ performance: { $ref: '#/components/schemas/WebPerformanceCounters' }
733
+ additionalProperties: true
734
+ '409': { $ref: '#/components/responses/ContextConflict' }
735
+ /settings:
736
+ get:
737
+ operationId: getSettings
738
+ responses:
739
+ '200':
740
+ description: Current secret-free, source-aware Settings document and durable revision.
741
+ content:
742
+ application/json:
743
+ schema:
744
+ $ref: '#/components/schemas/SettingsDocument'
745
+ patch:
746
+ operationId: updateSettings
747
+ description: >-
748
+ Atomically apply one bounded batch only when `expectedRevision` equals the keyed revision of
749
+ the exact current orion.json bytes and the supplied Workspace Context guard still matches.
750
+ Duplicate keys, stale tabs and partial commits are rejected with zero side effects.
751
+ security: [{ webNonce: [] }]
752
+ requestBody:
753
+ required: true
754
+ content:
755
+ application/json:
756
+ schema:
757
+ $ref: '#/components/schemas/UpdateSettingsRequest'
758
+ responses:
759
+ '200':
760
+ description: Updated settings, or an exact requestId retry replayed.
761
+ content:
762
+ application/json:
763
+ schema:
764
+ $ref: '#/components/schemas/SettingsMutationResult'
765
+ '400': { $ref: '#/components/responses/Problem' }
766
+ '403': { $ref: '#/components/responses/Problem' }
767
+ '409':
768
+ description: requestId/body conflict, stale expectedRevision, or busy Runtime; no field was applied.
769
+ content:
770
+ application/problem+json:
771
+ schema:
772
+ $ref: '#/components/schemas/Problem'
773
+ '422': { $ref: '#/components/responses/Problem' }
774
+ '503': { $ref: '#/components/responses/Problem' }
775
+ /settings/open-document:
776
+ post:
777
+ operationId: openSettingsDocument
778
+ description: >-
779
+ Open the Host-resolved orion.json in the native text editor. This loopback-only action accepts
780
+ no path and never returns the resolved filesystem path.
781
+ security: [{ webNonce: [] }]
782
+ requestBody:
783
+ required: true
784
+ content:
785
+ application/json:
786
+ schema:
787
+ type: object
788
+ additionalProperties: false
789
+ required: [requestId]
790
+ properties:
791
+ requestId: { $ref: '#/components/schemas/RequestId' }
792
+ responses:
793
+ '200':
794
+ description: The pathless open request was accepted or replayed idempotently.
795
+ content:
796
+ application/json:
797
+ schema:
798
+ type: object
799
+ additionalProperties: false
800
+ required: [requestId, opened]
801
+ properties:
802
+ requestId: { $ref: '#/components/schemas/RequestId' }
803
+ opened: { type: boolean, const: true }
804
+ '400': { $ref: '#/components/responses/Problem' }
805
+ '403': { $ref: '#/components/responses/Problem' }
806
+ '409': { $ref: '#/components/responses/Problem' }
807
+ '503': { $ref: '#/components/responses/Problem' }
808
+ components:
809
+ securitySchemes:
810
+ webNonce:
811
+ type: apiKey
812
+ in: header
813
+ name: X-Orion-Web-Nonce
814
+ description: Per-process secret returned only by same-origin bootstrap and required on mutations.
815
+ terminalUserGesture:
816
+ type: apiKey
817
+ in: header
818
+ name: X-Orion-User-Gesture
819
+ description: Terminal creation requires the exact value terminal-create-v1 from a user gesture.
820
+ parameters:
821
+ ContextWorkspaceId:
822
+ in: query
823
+ name: workspaceId
824
+ required: true
825
+ description: >-
826
+ UUID of the active workspace observed with expectedContextRevision. A mismatch returns 409
827
+ context_revision_conflict and the Host performs no activation, read, spawn, or mutation.
828
+ schema: { type: string, format: uuid }
829
+ ExpectedContextRevision:
830
+ in: query
831
+ name: expectedContextRevision
832
+ required: true
833
+ description: >-
834
+ ContextRevision from bootstrap or the last successful atomic activation. A stale value
835
+ returns 409 context_revision_conflict with zero side effects.
836
+ schema: { $ref: '#/components/schemas/ContextRevision' }
837
+ WorkspaceId:
838
+ in: path
839
+ name: workspaceId
840
+ required: true
841
+ schema: { type: string, format: uuid }
842
+ SessionId:
843
+ in: path
844
+ name: sessionId
845
+ required: true
846
+ schema: { type: string, minLength: 1, maxLength: 256 }
847
+ FileId:
848
+ in: path
849
+ name: fileId
850
+ required: true
851
+ description: Opaque active-workspace file identity; never a client-supplied path.
852
+ schema: { type: string, minLength: 1, maxLength: 256 }
853
+ ParentFileId:
854
+ in: query
855
+ name: parentId
856
+ required: false
857
+ description: Opaque directory identity; omission selects the active-workspace root.
858
+ schema: { type: string, minLength: 1, maxLength: 256 }
859
+ TerminalId:
860
+ in: path
861
+ name: terminalId
862
+ required: true
863
+ schema: { type: string, format: uuid }
864
+ CallId:
865
+ in: path
866
+ name: callId
867
+ required: true
868
+ description: >-
869
+ Opaque identifier returned by the active workspace's tool-detail summary. The current file
870
+ repository aliases callId to its project artifact identifier.
871
+ schema: { type: string, minLength: 1, maxLength: 256 }
872
+ CollectionCursor:
873
+ in: query
874
+ name: cursor
875
+ required: false
876
+ description: >-
877
+ Opaque continuation returned by the preceding page. It binds the route scope, the complete
878
+ ordered collection revision and the last stable item key. Any insertion, deletion or
879
+ reorder makes it stale; the Host returns 409 collection_cursor_stale and the client restarts
880
+ from the first page.
881
+ schema: { type: string, minLength: 1, maxLength: 512 }
882
+ TranscriptCursor:
883
+ in: query
884
+ name: cursor
885
+ required: false
886
+ description: >-
887
+ Opaque backward-page continuation bound to the Session's Thread identity, immutable
888
+ transcript-manifest revision and page boundary. A newer Thread revision returns 409
889
+ transcript_cursor_stale; the client must recover a fresh tail snapshot before paging again.
890
+ schema: { type: string, minLength: 1, maxLength: 512 }
891
+ ResourceCursor:
892
+ in: query
893
+ name: cursor
894
+ required: false
895
+ description: >-
896
+ Opaque continuation bound to the active workspace, resource identity, resource revision and
897
+ page boundary. A stale or cross-resource value returns 409 and must be restarted from the
898
+ first page; the value is not an encoded filesystem path.
899
+ schema: { type: string, minLength: 1, maxLength: 4096 }
900
+ PageSize:
901
+ in: query
902
+ name: pageSize
903
+ required: false
904
+ schema: { type: integer, minimum: 1, maximum: 100, default: 50 }
905
+ OffsetBytes:
906
+ in: query
907
+ name: offsetBytes
908
+ required: false
909
+ schema: { type: integer, minimum: 0, default: 0 }
910
+ LimitBytes:
911
+ in: query
912
+ name: limitBytes
913
+ required: false
914
+ schema: { type: integer, minimum: 1, maximum: 1048576, default: 65536 }
915
+ FileLimitBytes:
916
+ in: query
917
+ name: limitBytes
918
+ required: false
919
+ schema: { type: integer, minimum: 1, maximum: 262144, default: 65536 }
920
+ GitStatusPageSize:
921
+ in: query
922
+ name: pageSize
923
+ required: false
924
+ schema: { type: integer, minimum: 1, maximum: 2000, default: 200 }
925
+ GitLogPageSize:
926
+ in: query
927
+ name: pageSize
928
+ required: false
929
+ schema: { type: integer, minimum: 1, maximum: 100, default: 30 }
930
+ DiffLineLimit:
931
+ in: query
932
+ name: lineLimit
933
+ required: false
934
+ schema: { type: integer, minimum: 1, maximum: 500, default: 240 }
935
+ DiffByteLimit:
936
+ in: query
937
+ name: byteLimit
938
+ required: false
939
+ schema: { type: integer, minimum: 1024, maximum: 1048576, default: 262144 }
940
+ EventCursor:
941
+ in: query
942
+ name: cursor
943
+ required: false
944
+ description: Last durable Web event cursor accepted by the client.
945
+ schema: { type: integer, minimum: 0, default: 0 }
946
+ LastEventId:
947
+ in: header
948
+ name: Last-Event-ID
949
+ required: false
950
+ description: Browser-provided fallback for the last durable Web event cursor.
951
+ schema: { type: string, pattern: '^[0-9]+$' }
952
+ responses:
953
+ Problem:
954
+ description: Safe structured error with no secret-bearing data.
955
+ content:
956
+ application/problem+json:
957
+ schema:
958
+ $ref: '#/components/schemas/Problem'
959
+ ContextConflict:
960
+ description: >-
961
+ workspaceId or expectedContextRevision is stale. The Host returns
962
+ context_revision_conflict and performs zero reads from another workspace and zero side
963
+ effects.
964
+ content:
965
+ application/problem+json:
966
+ schema: { $ref: '#/components/schemas/Problem' }
967
+ example:
968
+ type: https://orioncode.dev/problems/context_revision_conflict
969
+ title: State conflict
970
+ status: 409
971
+ code: context_revision_conflict
972
+ detail: The active Context changed before the request was admitted.
973
+ schemas:
974
+ WebPerformanceCounters:
975
+ type: object
976
+ additionalProperties: false
977
+ required: [files, git]
978
+ properties:
979
+ files:
980
+ type: object
981
+ additionalProperties: false
982
+ required: [readOperations, bytesRead, itemsParsed]
983
+ properties:
984
+ readOperations: { type: integer, minimum: 0 }
985
+ bytesRead: { type: integer, minimum: 0 }
986
+ itemsParsed: { type: integer, minimum: 0 }
987
+ git:
988
+ type: object
989
+ additionalProperties: false
990
+ required: [processCount, bytesRead, itemsParsed]
991
+ properties:
992
+ processCount: { type: integer, minimum: 0 }
993
+ bytesRead: { type: integer, minimum: 0 }
994
+ itemsParsed: { type: integer, minimum: 0 }
995
+ HealthResponse:
996
+ type: object
997
+ additionalProperties: false
998
+ required: [ok, version]
999
+ properties:
1000
+ ok: { type: boolean, const: true }
1001
+ version: { type: string }
1002
+ BootstrapResponse:
1003
+ type: object
1004
+ additionalProperties: false
1005
+ required:
1006
+ - apiVersion
1007
+ - productVersion
1008
+ - nonce
1009
+ - contextRevision
1010
+ - workspaceId
1011
+ - workspace
1012
+ - configured
1013
+ - activeSessionId
1014
+ - settings
1015
+ - capabilities
1016
+ properties:
1017
+ apiVersion: { type: integer, const: 1 }
1018
+ productVersion: { type: string }
1019
+ nonce: { type: string, minLength: 32 }
1020
+ contextRevision: { type: string, format: uuid }
1021
+ workspaceId: { type: string, format: uuid }
1022
+ workspace: { type: string }
1023
+ configured: { type: boolean }
1024
+ activeSessionId: { type: [string, 'null'] }
1025
+ settings: { $ref: '#/components/schemas/SettingsDocument' }
1026
+ capabilities:
1027
+ type: object
1028
+ additionalProperties: false
1029
+ required: [goal, plan, skills, mcp, diagnostics, review, files, git, terminal]
1030
+ properties:
1031
+ goal: { type: boolean }
1032
+ plan: { type: boolean }
1033
+ skills: { type: boolean }
1034
+ mcp: { type: boolean }
1035
+ diagnostics: { type: boolean }
1036
+ review: { type: boolean, const: true }
1037
+ files: { type: boolean, const: true }
1038
+ git: { type: boolean, const: true }
1039
+ terminal: { type: boolean }
1040
+ MutationRequest:
1041
+ type: object
1042
+ additionalProperties: false
1043
+ required: [requestId]
1044
+ properties:
1045
+ requestId: { $ref: '#/components/schemas/RequestId' }
1046
+ RequestId:
1047
+ type: string
1048
+ format: uuid
1049
+ description: >-
1050
+ Client-generated idempotency key. Reuse is valid only for a byte-equivalent normalized
1051
+ mutation body.
1052
+ ContextRevision:
1053
+ type: string
1054
+ format: uuid
1055
+ description: Compare-and-swap identity for the single active Workspace/Session context.
1056
+ ContextActivateRequest:
1057
+ type: object
1058
+ additionalProperties: false
1059
+ required: [requestId, expectedContextRevision, workspaceId, sessionId]
1060
+ properties:
1061
+ requestId: { $ref: '#/components/schemas/RequestId' }
1062
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1063
+ workspaceId: { type: string, format: uuid }
1064
+ sessionId: { type: [string, 'null'] }
1065
+ ContextMutationResult:
1066
+ type: object
1067
+ additionalProperties: false
1068
+ required: [requestId, contextRevision, bootstrap]
1069
+ properties:
1070
+ requestId: { $ref: '#/components/schemas/RequestId' }
1071
+ contextRevision: { $ref: '#/components/schemas/ContextRevision' }
1072
+ bootstrap: { $ref: '#/components/schemas/BootstrapResponse' }
1073
+ ActivateWorkspaceRequest:
1074
+ type: object
1075
+ additionalProperties: false
1076
+ required: [requestId, expectedContextRevision, path]
1077
+ properties:
1078
+ requestId: { $ref: '#/components/schemas/RequestId' }
1079
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1080
+ path: { type: string, minLength: 1, maxLength: 4096 }
1081
+ CreateSessionRequest:
1082
+ type: object
1083
+ additionalProperties: false
1084
+ required: [requestId, expectedContextRevision, workspaceId]
1085
+ properties:
1086
+ requestId: { $ref: '#/components/schemas/RequestId' }
1087
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1088
+ workspaceId: { type: string, format: uuid }
1089
+ name: { type: string, minLength: 1, maxLength: 120 }
1090
+ RenameSessionRequest:
1091
+ type: object
1092
+ additionalProperties: false
1093
+ required: [requestId, expectedContextRevision, workspaceId, name]
1094
+ properties:
1095
+ requestId: { $ref: '#/components/schemas/RequestId' }
1096
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1097
+ workspaceId: { type: string, format: uuid }
1098
+ name: { type: string, minLength: 1, maxLength: 120 }
1099
+ WorkspaceSummary:
1100
+ type: object
1101
+ additionalProperties: false
1102
+ required: [id, path, label, active, available, sessionCount, lastActivatedAt]
1103
+ properties:
1104
+ id: { type: string, format: uuid }
1105
+ path: { type: string }
1106
+ label: { type: string }
1107
+ active: { type: boolean }
1108
+ available: { type: boolean }
1109
+ sessionCount: { type: integer, minimum: 0 }
1110
+ lastActivatedAt: { type: string, format: date-time }
1111
+ pinnedOrder: { type: integer, minimum: 0 }
1112
+ WorkspacePage:
1113
+ type: object
1114
+ additionalProperties: false
1115
+ required: [items, nextCursor]
1116
+ properties:
1117
+ items:
1118
+ type: array
1119
+ maxItems: 100
1120
+ items: { $ref: '#/components/schemas/WorkspaceSummary' }
1121
+ nextCursor: { type: [string, 'null'] }
1122
+ WorkspaceMutationResult:
1123
+ type: object
1124
+ additionalProperties: false
1125
+ required: [requestId, active, page]
1126
+ properties:
1127
+ requestId: { $ref: '#/components/schemas/RequestId' }
1128
+ active: { type: string }
1129
+ page: { $ref: '#/components/schemas/WorkspacePage' }
1130
+ WorkspaceProjectSummary:
1131
+ type: object
1132
+ additionalProperties: false
1133
+ required:
1134
+ - workspaceId
1135
+ - repositoryRevision
1136
+ - isRepository
1137
+ - branch
1138
+ - detached
1139
+ - head
1140
+ - dirtyCount
1141
+ - conflictCount
1142
+ properties:
1143
+ workspaceId: { type: string, format: uuid }
1144
+ repositoryRevision: { type: string, minLength: 1 }
1145
+ isRepository: { type: boolean }
1146
+ branch: { type: [string, 'null'] }
1147
+ detached: { type: boolean }
1148
+ head: { type: [string, 'null'] }
1149
+ dirtyCount: { type: integer, minimum: 0 }
1150
+ conflictCount: { type: integer, minimum: 0 }
1151
+ WorkspacePinRequest:
1152
+ type: object
1153
+ additionalProperties: false
1154
+ required: [requestId, expectedContextRevision, pinned]
1155
+ properties:
1156
+ requestId: { $ref: '#/components/schemas/RequestId' }
1157
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1158
+ pinned: { type: boolean }
1159
+ WorkspacePinResult:
1160
+ type: object
1161
+ additionalProperties: false
1162
+ required: [requestId, workspace]
1163
+ properties:
1164
+ requestId: { $ref: '#/components/schemas/RequestId' }
1165
+ workspace: { $ref: '#/components/schemas/WorkspaceSummary' }
1166
+ WorkspaceRemoveRequest:
1167
+ type: object
1168
+ additionalProperties: false
1169
+ required: [requestId, expectedContextRevision]
1170
+ properties:
1171
+ requestId: { $ref: '#/components/schemas/RequestId' }
1172
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1173
+ WorkspaceRemoveResult:
1174
+ type: object
1175
+ additionalProperties: false
1176
+ required: [requestId, removed]
1177
+ properties:
1178
+ requestId: { $ref: '#/components/schemas/RequestId' }
1179
+ removed: { type: boolean, const: true }
1180
+ SessionSummary:
1181
+ type: object
1182
+ additionalProperties: false
1183
+ required: [id, projectPath, model, createdAt, updatedAt, messageCount]
1184
+ properties:
1185
+ id: { type: string }
1186
+ projectPath: { type: string }
1187
+ name: { type: string }
1188
+ model: { type: string }
1189
+ createdAt: { type: string, format: date-time }
1190
+ updatedAt: { type: string, format: date-time }
1191
+ messageCount: { type: integer, minimum: 0 }
1192
+ taskSummary: { type: string }
1193
+ activeGoalId: { type: string }
1194
+ activeGoalObjective: { type: string }
1195
+ SessionPage:
1196
+ type: object
1197
+ additionalProperties: false
1198
+ required: [items, nextCursor]
1199
+ properties:
1200
+ items:
1201
+ type: array
1202
+ maxItems: 100
1203
+ items: { $ref: '#/components/schemas/SessionSummary' }
1204
+ nextCursor: { type: [string, 'null'] }
1205
+ SessionMutationResult:
1206
+ type: object
1207
+ additionalProperties: false
1208
+ required: [requestId, session]
1209
+ properties:
1210
+ requestId: { $ref: '#/components/schemas/RequestId' }
1211
+ session: { $ref: '#/components/schemas/SessionSummary' }
1212
+ FileNode:
1213
+ type: object
1214
+ additionalProperties: false
1215
+ required: [id, name, displayPath, kind, modifiedAt, sensitive, readable]
1216
+ properties:
1217
+ id: { type: string, minLength: 1 }
1218
+ name: { type: string, minLength: 1 }
1219
+ displayPath:
1220
+ type: string
1221
+ minLength: 1
1222
+ description: Sanitized workspace-relative display metadata; requests still use opaque id.
1223
+ kind: { type: string, enum: [file, directory, symlink] }
1224
+ targetKind:
1225
+ type: string
1226
+ enum: [file, directory]
1227
+ description: Effective target kind when a readable node is a symbolic link.
1228
+ sizeBytes: { type: integer, minimum: 0 }
1229
+ modifiedAt: { type: string, format: date-time }
1230
+ sensitive: { type: boolean }
1231
+ readable: { type: boolean }
1232
+ FileTreePage:
1233
+ type: object
1234
+ additionalProperties: false
1235
+ required: [parentId, revision, items, nextCursor]
1236
+ properties:
1237
+ parentId: { type: string, minLength: 1 }
1238
+ revision: { type: string, minLength: 1 }
1239
+ items:
1240
+ type: array
1241
+ maxItems: 100
1242
+ items: { $ref: '#/components/schemas/FileNode' }
1243
+ nextCursor: { type: [string, 'null'] }
1244
+ FileContentPage:
1245
+ type: object
1246
+ additionalProperties: false
1247
+ required:
1248
+ - fileId
1249
+ - name
1250
+ - revision
1251
+ - sizeBytes
1252
+ - binary
1253
+ - sensitive
1254
+ - mediaType
1255
+ - offsetBytes
1256
+ - nextCursor
1257
+ properties:
1258
+ fileId: { type: string, minLength: 1 }
1259
+ name: { type: string, minLength: 1 }
1260
+ revision: { type: string, minLength: 1 }
1261
+ sizeBytes: { type: integer, minimum: 0 }
1262
+ binary: { type: boolean }
1263
+ sensitive: { type: boolean, const: false }
1264
+ mediaType: { type: string, enum: [text/plain, application/octet-stream] }
1265
+ offsetBytes: { type: integer, minimum: 0 }
1266
+ content:
1267
+ type: string
1268
+ description: Present only for redacted UTF-8 text; omitted for binary metadata.
1269
+ nextCursor: { type: [string, 'null'] }
1270
+ GitFile:
1271
+ type: object
1272
+ additionalProperties: false
1273
+ required: [fileId, path, indexStatus, worktreeStatus]
1274
+ properties:
1275
+ fileId: { type: string, minLength: 1 }
1276
+ path:
1277
+ type: string
1278
+ description: Sanitized workspace-relative display path; requests still use fileId.
1279
+ indexStatus: { type: string, minLength: 1, maxLength: 1 }
1280
+ worktreeStatus: { type: string, minLength: 1, maxLength: 1 }
1281
+ renamedFrom: { type: string }
1282
+ GitFileList:
1283
+ type: array
1284
+ maxItems: 2000
1285
+ items: { $ref: '#/components/schemas/GitFile' }
1286
+ GitStatus:
1287
+ type: object
1288
+ additionalProperties: false
1289
+ required:
1290
+ - isRepository
1291
+ - repositoryRevision
1292
+ - branch
1293
+ - detached
1294
+ - head
1295
+ - upstream
1296
+ - ahead
1297
+ - behind
1298
+ - clean
1299
+ - staged
1300
+ - unstaged
1301
+ - untracked
1302
+ - conflicted
1303
+ - totalFiles
1304
+ - truncated
1305
+ - nextCursor
1306
+ properties:
1307
+ isRepository: { type: boolean }
1308
+ repositoryRevision: { type: string, minLength: 1 }
1309
+ rootLabel: { type: string }
1310
+ branch: { type: [string, 'null'] }
1311
+ detached: { type: boolean }
1312
+ head: { type: [string, 'null'] }
1313
+ upstream: { type: [string, 'null'] }
1314
+ ahead: { type: integer, minimum: 0 }
1315
+ behind: { type: integer, minimum: 0 }
1316
+ clean: { type: boolean }
1317
+ staged: { $ref: '#/components/schemas/GitFileList' }
1318
+ unstaged: { $ref: '#/components/schemas/GitFileList' }
1319
+ untracked: { $ref: '#/components/schemas/GitFileList' }
1320
+ conflicted: { $ref: '#/components/schemas/GitFileList' }
1321
+ totalFiles: { type: integer, minimum: 0 }
1322
+ truncated: { type: boolean }
1323
+ nextCursor: { type: [string, 'null'] }
1324
+ GitCommit:
1325
+ type: object
1326
+ additionalProperties: false
1327
+ required: [id, shortId, authoredAt, authorName, subject]
1328
+ properties:
1329
+ id: { type: string, pattern: '^[a-f0-9]{40,64}$' }
1330
+ shortId: { type: string, pattern: '^[a-f0-9]{7,16}$' }
1331
+ authoredAt: { type: string, format: date-time }
1332
+ authorName: { type: string }
1333
+ subject: { type: string }
1334
+ GitLogPage:
1335
+ type: object
1336
+ additionalProperties: false
1337
+ required: [repositoryRevision, items, nextCursor]
1338
+ properties:
1339
+ repositoryRevision: { type: string, minLength: 1 }
1340
+ items:
1341
+ type: array
1342
+ maxItems: 100
1343
+ items: { $ref: '#/components/schemas/GitCommit' }
1344
+ nextCursor: { type: [string, 'null'] }
1345
+ GitDiffPage:
1346
+ type: object
1347
+ additionalProperties: false
1348
+ required:
1349
+ - fileId
1350
+ - path
1351
+ - repositoryRevision
1352
+ - binary
1353
+ - lines
1354
+ - nextCursor
1355
+ - truncated
1356
+ properties:
1357
+ fileId: { type: string, minLength: 1 }
1358
+ path: { type: string }
1359
+ repositoryRevision: { type: string, minLength: 1 }
1360
+ binary: { type: boolean }
1361
+ lines:
1362
+ type: array
1363
+ maxItems: 500
1364
+ items: { type: string }
1365
+ nextCursor: { type: [string, 'null'] }
1366
+ truncated: { type: boolean }
1367
+ ReviewVerification:
1368
+ type: object
1369
+ additionalProperties: false
1370
+ required:
1371
+ - callId
1372
+ - sessionId
1373
+ - threadId
1374
+ - sequence
1375
+ - toolName
1376
+ - state
1377
+ - terminal
1378
+ - success
1379
+ - outputBytes
1380
+ - hasArtifact
1381
+ - executionPolicyDigest
1382
+ - receiptDigest
1383
+ properties:
1384
+ callId: { type: string, minLength: 1 }
1385
+ sessionId: { type: string, minLength: 1 }
1386
+ threadId: { type: string, minLength: 1 }
1387
+ sequence: { type: integer, minimum: 1 }
1388
+ toolName: { type: string, minLength: 1 }
1389
+ state: { type: string, enum: [success, error, skipped] }
1390
+ terminal: { type: string, enum: [completed, failed, interrupted, indeterminate] }
1391
+ success: { type: boolean }
1392
+ outputBytes: { type: integer, minimum: 0 }
1393
+ hasArtifact: { type: boolean }
1394
+ executionPolicyDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
1395
+ receiptDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
1396
+ ReviewSnapshot:
1397
+ type: object
1398
+ additionalProperties: false
1399
+ required:
1400
+ - revision
1401
+ - repositoryRevision
1402
+ - isRepository
1403
+ - clean
1404
+ - changedFiles
1405
+ - totalChangedFiles
1406
+ - stagedCount
1407
+ - unstagedCount
1408
+ - untrackedCount
1409
+ - conflictCount
1410
+ - truncated
1411
+ - verification
1412
+ properties:
1413
+ revision: { type: string, minLength: 1 }
1414
+ repositoryRevision: { type: string, minLength: 1 }
1415
+ isRepository: { type: boolean }
1416
+ clean: { type: boolean }
1417
+ changedFiles: { $ref: '#/components/schemas/GitFileList' }
1418
+ totalChangedFiles: { type: integer, minimum: 0 }
1419
+ stagedCount: { type: integer, minimum: 0 }
1420
+ unstagedCount: { type: integer, minimum: 0 }
1421
+ untrackedCount: { type: integer, minimum: 0 }
1422
+ conflictCount: { type: integer, minimum: 0 }
1423
+ truncated: { type: boolean }
1424
+ verification:
1425
+ type: array
1426
+ maxItems: 100
1427
+ items: { $ref: '#/components/schemas/ReviewVerification' }
1428
+ ContextGuardRequest:
1429
+ type: object
1430
+ additionalProperties: false
1431
+ required: [requestId, expectedContextRevision, workspaceId]
1432
+ properties:
1433
+ requestId: { $ref: '#/components/schemas/RequestId' }
1434
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1435
+ workspaceId: { type: string, format: uuid }
1436
+ TerminalCreateRequest:
1437
+ type: object
1438
+ additionalProperties: false
1439
+ required: [requestId, expectedContextRevision, workspaceId]
1440
+ properties:
1441
+ requestId: { $ref: '#/components/schemas/RequestId' }
1442
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
1443
+ workspaceId: { type: string, format: uuid }
1444
+ cols: { type: integer, minimum: 2, maximum: 400, default: 100 }
1445
+ rows: { type: integer, minimum: 1, maximum: 200, default: 30 }
1446
+ TerminalMetadata:
1447
+ type: object
1448
+ additionalProperties: false
1449
+ required:
1450
+ - id
1451
+ - workspaceId
1452
+ - title
1453
+ - shell
1454
+ - state
1455
+ - cols
1456
+ - rows
1457
+ - connected
1458
+ - createdAt
1459
+ - lastActiveAt
1460
+ - earliestSequence
1461
+ - lastSequence
1462
+ properties:
1463
+ id: { type: string, format: uuid }
1464
+ workspaceId: { type: string, format: uuid }
1465
+ title: { type: string }
1466
+ shell: { type: string, description: Display basename only; no shell argv or environment. }
1467
+ state: { type: string, enum: [running, exited, closing] }
1468
+ cols: { type: integer, minimum: 2, maximum: 400 }
1469
+ rows: { type: integer, minimum: 1, maximum: 200 }
1470
+ connected: { type: boolean }
1471
+ createdAt: { type: string, format: date-time }
1472
+ lastActiveAt: { type: string, format: date-time }
1473
+ earliestSequence: { type: integer, minimum: 1 }
1474
+ lastSequence: { type: integer, minimum: 0 }
1475
+ exitCode: { type: integer }
1476
+ signal: { type: integer }
1477
+ TerminalPage:
1478
+ type: object
1479
+ additionalProperties: false
1480
+ required: [items, nextCursor]
1481
+ properties:
1482
+ items:
1483
+ type: array
1484
+ maxItems: 100
1485
+ items: { $ref: '#/components/schemas/TerminalMetadata' }
1486
+ nextCursor: { type: [string, 'null'] }
1487
+ TerminalTicket:
1488
+ type: object
1489
+ additionalProperties: false
1490
+ required: [ticket, ticketExpiresAt]
1491
+ properties:
1492
+ ticket:
1493
+ type: string
1494
+ minLength: 32
1495
+ maxLength: 128
1496
+ writeOnly: true
1497
+ description: Single-use bearer delivered only in this JSON body and first WS message.
1498
+ ticketExpiresAt: { type: string, format: date-time }
1499
+ TerminalCreateMutationResult:
1500
+ type: object
1501
+ additionalProperties: false
1502
+ required: [requestId, terminal, ticket, ticketExpiresAt]
1503
+ properties:
1504
+ requestId: { $ref: '#/components/schemas/RequestId' }
1505
+ terminal: { $ref: '#/components/schemas/TerminalMetadata' }
1506
+ ticket: { type: string, minLength: 32, maxLength: 128, writeOnly: true }
1507
+ ticketExpiresAt: { type: string, format: date-time }
1508
+ TerminalTicketMutationResult:
1509
+ type: object
1510
+ additionalProperties: false
1511
+ required: [requestId, ticket, ticketExpiresAt]
1512
+ properties:
1513
+ requestId: { $ref: '#/components/schemas/RequestId' }
1514
+ ticket: { type: string, minLength: 32, maxLength: 128, writeOnly: true }
1515
+ ticketExpiresAt: { type: string, format: date-time }
1516
+ TerminalCloseMutationResult:
1517
+ type: object
1518
+ additionalProperties: false
1519
+ required: [requestId, terminal]
1520
+ properties:
1521
+ requestId: { $ref: '#/components/schemas/RequestId' }
1522
+ terminal: { $ref: '#/components/schemas/TerminalMetadata' }
1523
+ TerminalAuthenticateMessage:
1524
+ type: object
1525
+ additionalProperties: false
1526
+ required: [type, ticket, afterSequence]
1527
+ properties:
1528
+ type: { type: string, const: authenticate }
1529
+ ticket: { type: string, minLength: 32, maxLength: 128, writeOnly: true }
1530
+ afterSequence: { type: integer, minimum: 0 }
1531
+ TerminalInputMessage:
1532
+ type: object
1533
+ additionalProperties: false
1534
+ required: [type, data]
1535
+ properties:
1536
+ type: { type: string, const: input }
1537
+ data: { type: string, maxLength: 65536 }
1538
+ TerminalResizeMessage:
1539
+ type: object
1540
+ additionalProperties: false
1541
+ required: [type, cols, rows]
1542
+ properties:
1543
+ type: { type: string, const: resize }
1544
+ cols: { type: integer, minimum: 2, maximum: 400 }
1545
+ rows: { type: integer, minimum: 1, maximum: 200 }
1546
+ TerminalPingMessage:
1547
+ type: object
1548
+ additionalProperties: false
1549
+ required: [type, timestamp]
1550
+ properties:
1551
+ type: { type: string, const: ping }
1552
+ timestamp: { type: number }
1553
+ TerminalClientMessage:
1554
+ oneOf:
1555
+ - $ref: '#/components/schemas/TerminalInputMessage'
1556
+ - $ref: '#/components/schemas/TerminalResizeMessage'
1557
+ - $ref: '#/components/schemas/TerminalPingMessage'
1558
+ discriminator: { propertyName: type }
1559
+ TerminalReadyMessage:
1560
+ type: object
1561
+ additionalProperties: false
1562
+ required: [type, terminal]
1563
+ properties:
1564
+ type: { type: string, const: ready }
1565
+ terminal: { $ref: '#/components/schemas/TerminalMetadata' }
1566
+ TerminalOutputMessage:
1567
+ type: object
1568
+ additionalProperties: false
1569
+ required: [type, sequence, data]
1570
+ properties:
1571
+ type: { type: string, const: output }
1572
+ sequence: { type: integer, minimum: 1 }
1573
+ data: { type: string, maxLength: 8000 }
1574
+ TerminalGapMessage:
1575
+ type: object
1576
+ additionalProperties: false
1577
+ required: [type, earliestSequence, latestSequence]
1578
+ properties:
1579
+ type: { type: string, const: gap }
1580
+ earliestSequence: { type: integer, minimum: 1 }
1581
+ latestSequence: { type: integer, minimum: 0 }
1582
+ TerminalExitMessage:
1583
+ type: object
1584
+ additionalProperties: false
1585
+ required: [type, exitCode]
1586
+ properties:
1587
+ type: { type: string, const: exit }
1588
+ exitCode: { type: integer }
1589
+ signal: { type: integer }
1590
+ TerminalPongMessage:
1591
+ type: object
1592
+ additionalProperties: false
1593
+ required: [type, timestamp]
1594
+ properties:
1595
+ type: { type: string, const: pong }
1596
+ timestamp: { type: number }
1597
+ TerminalErrorMessage:
1598
+ type: object
1599
+ additionalProperties: false
1600
+ required: [type, code]
1601
+ properties:
1602
+ type: { type: string, const: error }
1603
+ code: { type: string, minLength: 1 }
1604
+ TerminalServerMessage:
1605
+ oneOf:
1606
+ - $ref: '#/components/schemas/TerminalReadyMessage'
1607
+ - $ref: '#/components/schemas/TerminalOutputMessage'
1608
+ - $ref: '#/components/schemas/TerminalGapMessage'
1609
+ - $ref: '#/components/schemas/TerminalExitMessage'
1610
+ - $ref: '#/components/schemas/TerminalPongMessage'
1611
+ - $ref: '#/components/schemas/TerminalErrorMessage'
1612
+ discriminator: { propertyName: type }
1613
+ TranscriptMessage:
1614
+ type: object
1615
+ additionalProperties: false
1616
+ required: [id, role, content, timestamp]
1617
+ properties:
1618
+ id: { type: string }
1619
+ role:
1620
+ type: string
1621
+ enum: [system, user, assistant, tool]
1622
+ content: { type: string }
1623
+ timestamp: { type: number, minimum: 0 }
1624
+ modelVisibleContent: { type: string }
1625
+ toolCallId: { type: string }
1626
+ tool_calls:
1627
+ type: array
1628
+ items: {}
1629
+ appliedSkills:
1630
+ type: array
1631
+ items: { type: string }
1632
+ TranscriptPage:
1633
+ type: object
1634
+ additionalProperties: false
1635
+ required: [items, nextCursor]
1636
+ properties:
1637
+ items:
1638
+ type: array
1639
+ maxItems: 100
1640
+ items: { $ref: '#/components/schemas/TranscriptMessage' }
1641
+ nextCursor: { type: [string, 'null'] }
1642
+ GoalView:
1643
+ type: object
1644
+ additionalProperties: false
1645
+ description: >-
1646
+ Goal projection from the latest valid TurnCommitV1. A legacy Goal sidecar is eligible only
1647
+ as a one-time migration seed and is never a competing read authority.
1648
+ required: [authority, digest, state]
1649
+ properties:
1650
+ authority: { type: string, const: turn_commit }
1651
+ digest: { type: string, minLength: 1 }
1652
+ state:
1653
+ description: >-
1654
+ Opaque JSON value parsed from TurnCommitV1.goalState. The v0.3.0 wire type is unknown;
1655
+ this contract does not invent required Goal fields or status/revision enums.
1656
+ PlanView:
1657
+ type: object
1658
+ additionalProperties: false
1659
+ description: >-
1660
+ Exact safe projection of the PlanReceipt bound into TurnCommitV1. A valid planning commit
1661
+ enters durable Plan review; it never schedules execution until the exact digest is approved.
1662
+ required: [body, returnMode, digest]
1663
+ properties:
1664
+ body: { type: string, minLength: 1 }
1665
+ returnMode: { type: string, enum: [build, auto] }
1666
+ digest: { type: string, minLength: 1 }
1667
+ PendingApproval:
1668
+ type: object
1669
+ additionalProperties: false
1670
+ description: Runtime-owned approval that survives browser disconnect and tab closure.
1671
+ required: [id, toolName, sanitizedArguments, allowedScopes]
1672
+ properties:
1673
+ id: { type: string }
1674
+ toolName: { type: string }
1675
+ reason: { type: string }
1676
+ sanitizedArguments: { type: object, additionalProperties: true }
1677
+ allowedScopes:
1678
+ type: array
1679
+ const: [once, project, global]
1680
+ items: { type: string, enum: [once, project, global] }
1681
+ FollowupItem:
1682
+ type: object
1683
+ additionalProperties: false
1684
+ required: [id, text, queuedAt]
1685
+ properties:
1686
+ id: { type: string }
1687
+ text: { type: string }
1688
+ queuedAt: { type: number, minimum: 0 }
1689
+ ControlRevision:
1690
+ type: string
1691
+ format: uuid
1692
+ description: Compare-and-swap identity for the active Session Composer authority.
1693
+ ContextUsageView:
1694
+ type: object
1695
+ additionalProperties: false
1696
+ required:
1697
+ - modelId
1698
+ - usedTokens
1699
+ - contextWindow
1700
+ - percent
1701
+ - source
1702
+ - warningThresholdPercent
1703
+ - autoCompactThresholdPercent
1704
+ - autoCompactEnabled
1705
+ properties:
1706
+ modelId: { type: string, minLength: 1 }
1707
+ usedTokens: { type: integer, minimum: 0 }
1708
+ contextWindow: { type: integer, minimum: 1 }
1709
+ percent: { type: number, minimum: 0 }
1710
+ rawPercent: { type: number, minimum: 0 }
1711
+ safeInputBudget: { type: integer, minimum: 0 }
1712
+ reservedOutputTokens: { type: integer, minimum: 0 }
1713
+ safetyMarginTokens: { type: integer, minimum: 0 }
1714
+ source: { type: string, enum: [estimated, provider, provider_adjusted] }
1715
+ warningThresholdPercent: { type: number, minimum: 0 }
1716
+ autoCompactThresholdPercent: { type: number, minimum: 0 }
1717
+ autoCompactEnabled: { type: boolean }
1718
+ ComposerEffortSelection:
1719
+ type: object
1720
+ additionalProperties: false
1721
+ required: [requested, effective, source, supported, supportedLevels]
1722
+ properties:
1723
+ requested: { $ref: '#/components/schemas/EffortPreference' }
1724
+ effective:
1725
+ oneOf:
1726
+ - type: string
1727
+ enum: [none, minimal, low, medium, high, xhigh, max]
1728
+ - type: 'null'
1729
+ source:
1730
+ type: string
1731
+ enum: [request, session, project, global, model-default, provider-default]
1732
+ supported: { type: boolean }
1733
+ supportedLevels:
1734
+ type: array
1735
+ uniqueItems: true
1736
+ items: { type: string, enum: [none, minimal, low, medium, high, xhigh, max] }
1737
+ warning: { type: string }
1738
+ ComposerModelSelection:
1739
+ type: object
1740
+ additionalProperties: false
1741
+ required:
1742
+ - modelId
1743
+ - providerId
1744
+ - providerLabel
1745
+ - contextWindow
1746
+ - maxOutputTokens
1747
+ - effort
1748
+ properties:
1749
+ modelId: { type: string, minLength: 1, maxLength: 256 }
1750
+ providerId: { type: [string, 'null'] }
1751
+ providerLabel: { type: [string, 'null'] }
1752
+ contextWindow: { type: integer, minimum: 1 }
1753
+ maxOutputTokens: { type: integer, minimum: 0 }
1754
+ effort: { $ref: '#/components/schemas/ComposerEffortSelection' }
1755
+ ComposerPermissionSelection:
1756
+ type: object
1757
+ additionalProperties: false
1758
+ required: [effective, override, projectDefault, source]
1759
+ properties:
1760
+ effective: { type: string, enum: [ask, allow, deny] }
1761
+ override:
1762
+ oneOf:
1763
+ - type: string
1764
+ enum: [ask, allow, deny]
1765
+ - type: 'null'
1766
+ projectDefault: { type: string, enum: [ask, allow, deny] }
1767
+ source: { type: string, enum: [session, project] }
1768
+ ComposerPendingState:
1769
+ type: object
1770
+ additionalProperties: false
1771
+ required: [model, permission]
1772
+ properties:
1773
+ model:
1774
+ oneOf:
1775
+ - type: object
1776
+ additionalProperties: false
1777
+ required: [modelId, effort]
1778
+ properties:
1779
+ modelId: { type: string, minLength: 1, maxLength: 256 }
1780
+ effort: { $ref: '#/components/schemas/EffortPreference' }
1781
+ - type: 'null'
1782
+ permission:
1783
+ oneOf:
1784
+ - type: object
1785
+ additionalProperties: false
1786
+ required: [override]
1787
+ properties:
1788
+ override:
1789
+ oneOf:
1790
+ - type: string
1791
+ enum: [ask, allow, deny]
1792
+ - type: 'null'
1793
+ - type: 'null'
1794
+ ComposerLastError:
1795
+ type: object
1796
+ additionalProperties: false
1797
+ required: [code, message]
1798
+ properties:
1799
+ code:
1800
+ type: string
1801
+ enum:
1802
+ - runtime_busy
1803
+ - model_unavailable
1804
+ - model_effort_unsupported
1805
+ - model_switch_rolled_back
1806
+ - permission_override_rejected
1807
+ - composer_control_conflict
1808
+ - composer_recovery_required
1809
+ - session_unavailable
1810
+ message: { type: string, minLength: 1 }
1811
+ PlanReviewView:
1812
+ type: object
1813
+ additionalProperties: false
1814
+ required: [planDigest, revision, status, createdAt, createdModel, returnMode]
1815
+ properties:
1816
+ planDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
1817
+ revision: { type: string, format: uuid }
1818
+ status: { type: string, enum: [awaiting_review, approved, continued, cancelled] }
1819
+ createdAt: { type: number, minimum: 0 }
1820
+ createdModel: { type: string, minLength: 1 }
1821
+ returnMode: { type: string, enum: [build, auto] }
1822
+ resolvedAt: { type: number, minimum: 0 }
1823
+ ComposerQueueItem:
1824
+ type: object
1825
+ additionalProperties: false
1826
+ required: [id, text, queuedAt, revision]
1827
+ properties:
1828
+ id: { type: string, minLength: 1 }
1829
+ text: { type: string, minLength: 1, maxLength: 1048576 }
1830
+ queuedAt: { type: number, minimum: 0 }
1831
+ revision: { type: integer, minimum: 1 }
1832
+ ComposerQueue:
1833
+ type: object
1834
+ additionalProperties: false
1835
+ required: [items, limit]
1836
+ properties:
1837
+ items:
1838
+ type: array
1839
+ maxItems: 16
1840
+ items: { $ref: '#/components/schemas/ComposerQueueItem' }
1841
+ limit: { type: integer, minimum: 0, maximum: 16 }
1842
+ ComposerControlState:
1843
+ type: object
1844
+ additionalProperties: false
1845
+ required:
1846
+ - apiVersion
1847
+ - workspaceId
1848
+ - sessionId
1849
+ - contextRevision
1850
+ - controlRevision
1851
+ - processing
1852
+ - mode
1853
+ - model
1854
+ - permission
1855
+ - contextUsage
1856
+ - compactAvailable
1857
+ - pending
1858
+ - lastError
1859
+ - planReview
1860
+ - queue
1861
+ properties:
1862
+ apiVersion: { type: integer, const: 1 }
1863
+ workspaceId: { type: string, format: uuid }
1864
+ sessionId: { type: string, minLength: 1, maxLength: 256 }
1865
+ contextRevision: { $ref: '#/components/schemas/ContextRevision' }
1866
+ controlRevision: { $ref: '#/components/schemas/ControlRevision' }
1867
+ processing: { type: boolean }
1868
+ compactAvailable: { type: boolean }
1869
+ mode:
1870
+ type: object
1871
+ additionalProperties: false
1872
+ required: [baseMode, pendingBaseMode]
1873
+ properties:
1874
+ baseMode: { type: string, enum: [interactive, plan, auto] }
1875
+ pendingBaseMode:
1876
+ oneOf:
1877
+ - type: string
1878
+ enum: [interactive, plan, auto]
1879
+ - type: 'null'
1880
+ model: { $ref: '#/components/schemas/ComposerModelSelection' }
1881
+ permission: { $ref: '#/components/schemas/ComposerPermissionSelection' }
1882
+ contextUsage:
1883
+ oneOf:
1884
+ - $ref: '#/components/schemas/ContextUsageView'
1885
+ - type: 'null'
1886
+ pending: { $ref: '#/components/schemas/ComposerPendingState' }
1887
+ lastError:
1888
+ oneOf:
1889
+ - $ref: '#/components/schemas/ComposerLastError'
1890
+ - type: 'null'
1891
+ planReview:
1892
+ oneOf:
1893
+ - $ref: '#/components/schemas/PlanReviewView'
1894
+ - type: 'null'
1895
+ queue: { $ref: '#/components/schemas/ComposerQueue' }
1896
+ ModelCatalogEntry:
1897
+ type: object
1898
+ additionalProperties: false
1899
+ required:
1900
+ - id
1901
+ - label
1902
+ - providerId
1903
+ - providerLabel
1904
+ - contextWindow
1905
+ - maxOutputTokens
1906
+ - reasoning
1907
+ - effortLevels
1908
+ - aliases
1909
+ - fingerprint
1910
+ properties:
1911
+ id: { type: string, minLength: 1, maxLength: 256 }
1912
+ label: { type: string, minLength: 1 }
1913
+ providerId: { type: string, minLength: 1 }
1914
+ providerLabel: { type: string, minLength: 1 }
1915
+ contextWindow: { type: integer, minimum: 1 }
1916
+ maxOutputTokens: { type: integer, minimum: 0 }
1917
+ reasoning: { type: boolean }
1918
+ effortLevels:
1919
+ type: array
1920
+ uniqueItems: true
1921
+ items: { type: string, enum: [none, minimal, low, medium, high, xhigh, max] }
1922
+ defaultEffort: { type: string, enum: [none, minimal, low, medium, high, xhigh, max] }
1923
+ aliases:
1924
+ type: array
1925
+ items: { type: string }
1926
+ fingerprint: { type: string, pattern: '^[a-f0-9]{64}$' }
1927
+ ModelCatalogPage:
1928
+ type: object
1929
+ additionalProperties: false
1930
+ required: [revision, unavailableProviders, items, nextCursor]
1931
+ properties:
1932
+ revision: { type: string, pattern: '^[a-f0-9]{64}$' }
1933
+ unavailableProviders:
1934
+ type: array
1935
+ items:
1936
+ type: object
1937
+ additionalProperties: false
1938
+ required: [id, reason]
1939
+ properties:
1940
+ id: { type: string, minLength: 1 }
1941
+ reason: { type: string, minLength: 1 }
1942
+ items:
1943
+ type: array
1944
+ maxItems: 100
1945
+ items: { $ref: '#/components/schemas/ModelCatalogEntry' }
1946
+ nextCursor: { type: [string, 'null'] }
1947
+ SessionRuntimeSummary:
1948
+ type: object
1949
+ additionalProperties: false
1950
+ required:
1951
+ - workspaceId
1952
+ - sessionId
1953
+ - runtimeRevision
1954
+ - phase
1955
+ - pendingApprovalCount
1956
+ - resident
1957
+ - estimatedBytes
1958
+ - updatedAt
1959
+ properties:
1960
+ workspaceId: { type: string, format: uuid }
1961
+ sessionId: { type: string, format: uuid }
1962
+ runtimeRevision: { type: string, format: uuid }
1963
+ phase:
1964
+ type: string
1965
+ enum:
1966
+ [cold, starting, idle, queued, running, waiting_approval, stopping, interrupted, failed]
1967
+ queueId:
1968
+ type: string
1969
+ format: uuid
1970
+ description: Present only while phase is queued; required to cancel that exact admission.
1971
+ queuePosition: { type: integer, minimum: 1 }
1972
+ pendingApprovalCount: { type: integer, minimum: 0 }
1973
+ resident: { type: boolean }
1974
+ estimatedBytes: { type: integer, minimum: 0 }
1975
+ updatedAt: { type: string, format: date-time }
1976
+ allOf:
1977
+ - if:
1978
+ properties: { phase: { const: queued } }
1979
+ required: [phase]
1980
+ then:
1981
+ required: [queueId, queuePosition]
1982
+ else:
1983
+ not:
1984
+ anyOf:
1985
+ - required: [queueId]
1986
+ - required: [queuePosition]
1987
+ SessionRuntimeSnapshot:
1988
+ type: object
1989
+ additionalProperties: false
1990
+ required:
1991
+ - active
1992
+ - processing
1993
+ - agentMode
1994
+ - permissionMode
1995
+ - status
1996
+ - followups
1997
+ - followupLimit
1998
+ - contextUsage
1999
+ - tokenUsage
2000
+ properties:
2001
+ active: { type: boolean }
2002
+ processing: { type: boolean }
2003
+ agentMode: { type: string }
2004
+ permissionMode: { type: string }
2005
+ status: { type: string }
2006
+ followups:
2007
+ type: array
2008
+ items: { $ref: '#/components/schemas/FollowupItem' }
2009
+ followupLimit: { type: integer, minimum: 0 }
2010
+ contextUsage:
2011
+ description: Runtime context-usage projection or null; the wire type is currently unknown.
2012
+ tokenUsage:
2013
+ description: Runtime token-usage projection or null; the wire type is currently unknown.
2014
+ SessionSnapshot:
2015
+ type: object
2016
+ additionalProperties: false
2017
+ required:
2018
+ - apiVersion
2019
+ - session
2020
+ - sessionRuntime
2021
+ - threadId
2022
+ - threadCursor
2023
+ - eventCursor
2024
+ - threadStatus
2025
+ - transcript
2026
+ - runtime
2027
+ - pendingApprovals
2028
+ - goal
2029
+ - plan
2030
+ - composer
2031
+ - recoveryDiagnostics
2032
+ properties:
2033
+ apiVersion: { type: integer, const: 1 }
2034
+ session: { $ref: '#/components/schemas/SessionSummary' }
2035
+ sessionRuntime: { $ref: '#/components/schemas/SessionRuntimeSummary' }
2036
+ threadId:
2037
+ type: [string, 'null']
2038
+ description: Null for a legacy session that has no materialized Thread identity.
2039
+ threadCursor:
2040
+ type: integer
2041
+ minimum: 0
2042
+ description: Latest projected durable Thread sequence; independent of eventCursor.
2043
+ eventCursor: { type: integer, minimum: 0 }
2044
+ projectionDigest: { type: string }
2045
+ threadStatus: { type: string, enum: [new, active, idle, legacy] }
2046
+ activeTurnId: { type: string }
2047
+ transcript: { $ref: '#/components/schemas/TranscriptPage' }
2048
+ runtime: { $ref: '#/components/schemas/SessionRuntimeSnapshot' }
2049
+ pendingApprovals:
2050
+ type: array
2051
+ items: { $ref: '#/components/schemas/PendingApproval' }
2052
+ goal:
2053
+ oneOf:
2054
+ - $ref: '#/components/schemas/GoalView'
2055
+ - type: 'null'
2056
+ plan:
2057
+ oneOf:
2058
+ - $ref: '#/components/schemas/PlanView'
2059
+ - type: 'null'
2060
+ composer: { $ref: '#/components/schemas/ComposerControlState' }
2061
+ recoveryDiagnostics:
2062
+ type: array
2063
+ items: {}
2064
+ SkillSummary:
2065
+ type: object
2066
+ additionalProperties: false
2067
+ required:
2068
+ - id
2069
+ - name
2070
+ - description
2071
+ - providerId
2072
+ - sourceScope
2073
+ - modelInvocable
2074
+ - userInvocable
2075
+ - requestedCapabilities
2076
+ - digest
2077
+ properties:
2078
+ id: { type: string }
2079
+ name: { type: string }
2080
+ description: { type: string }
2081
+ providerId: { type: string }
2082
+ sourceScope: { type: string, enum: [builtin, user, configured, project, remote] }
2083
+ modelInvocable: { type: boolean }
2084
+ userInvocable: { type: boolean }
2085
+ requestedCapabilities:
2086
+ type: array
2087
+ items: { type: string }
2088
+ digest: { type: string }
2089
+ SkillPage:
2090
+ type: object
2091
+ additionalProperties: false
2092
+ required: [items, nextCursor]
2093
+ properties:
2094
+ items:
2095
+ type: array
2096
+ maxItems: 100
2097
+ items: { $ref: '#/components/schemas/SkillSummary' }
2098
+ nextCursor: { type: [string, 'null'] }
2099
+ McpServerSummary:
2100
+ type: object
2101
+ additionalProperties: false
2102
+ required:
2103
+ - id
2104
+ - name
2105
+ - transport
2106
+ - tags
2107
+ - disabled
2108
+ - state
2109
+ - generation
2110
+ - toolCount
2111
+ - activeCallCount
2112
+ properties:
2113
+ id: { type: string }
2114
+ name: { type: string }
2115
+ description: { type: string }
2116
+ transport:
2117
+ type: string
2118
+ enum: [stdio, sse, http, streamable-http, websocket]
2119
+ tags:
2120
+ type: array
2121
+ items: { type: string }
2122
+ disabled: { type: boolean }
2123
+ state:
2124
+ type: string
2125
+ enum: [dormant, activating, connected, idle, draining, failed]
2126
+ generation: { type: integer, minimum: 0 }
2127
+ toolCount: { type: integer, minimum: 0 }
2128
+ activeCallCount: { type: integer, minimum: 0 }
2129
+ failure: { type: string }
2130
+ McpPage:
2131
+ type: object
2132
+ additionalProperties: false
2133
+ required: [items, nextCursor]
2134
+ properties:
2135
+ items:
2136
+ type: array
2137
+ maxItems: 100
2138
+ items: { $ref: '#/components/schemas/McpServerSummary' }
2139
+ nextCursor: { type: [string, 'null'] }
2140
+ ToolDetailSummary:
2141
+ type: object
2142
+ additionalProperties: false
2143
+ required: [callId, sequence, toolName, state, outputBytes, hasArtifact]
2144
+ properties:
2145
+ callId: { type: string }
2146
+ sequence: { type: integer, minimum: 0 }
2147
+ turnId: { type: string }
2148
+ toolName: { type: string }
2149
+ state: { type: string, enum: [success, error, skipped] }
2150
+ outputBytes: { type: integer, minimum: 0 }
2151
+ artifactId:
2152
+ type: string
2153
+ description: Opaque project artifact identifier; it is not a filesystem path.
2154
+ hasArtifact: { type: boolean }
2155
+ ToolDetailSummaryPage:
2156
+ type: object
2157
+ additionalProperties: false
2158
+ required: [items, nextCursor]
2159
+ properties:
2160
+ items:
2161
+ type: array
2162
+ maxItems: 100
2163
+ items: { $ref: '#/components/schemas/ToolDetailSummary' }
2164
+ nextCursor: { type: [string, 'null'] }
2165
+ ToolDetailPage:
2166
+ type: object
2167
+ additionalProperties: false
2168
+ required: [content, offsetBytes, totalBytes, redacted]
2169
+ properties:
2170
+ content: { type: string }
2171
+ offsetBytes: { type: integer, minimum: 0 }
2172
+ nextOffsetBytes:
2173
+ type: [integer, 'null']
2174
+ minimum: 0
2175
+ description: Omitted or null when the page reaches the end of the artifact.
2176
+ totalBytes: { type: integer, minimum: 0 }
2177
+ redacted:
2178
+ type: boolean
2179
+ description: >-
2180
+ True when content is served from the browser-safe, pre-sanitized derivative. It does
2181
+ not imply that this particular page contained a secret replacement.
2182
+ SettingsRevision:
2183
+ type: string
2184
+ pattern: '^hmac-sha256:[a-f0-9]{64}$'
2185
+ description: >-
2186
+ Opaque HMAC over the exact current config bytes. The local HMAC key is never exposed.
2187
+ SettingsFieldCommon:
2188
+ type: object
2189
+ required: [source, scope, applies, overridden, writable]
2190
+ properties:
2191
+ source: { type: string, enum: [internal, model, global, project, session] }
2192
+ scope: { type: string, enum: [global, project, session] }
2193
+ applies:
2194
+ type: string
2195
+ enum: [live, next-logical-request, new-session, restart]
2196
+ overridden: { type: boolean }
2197
+ writable: { type: boolean }
2198
+ blockedReason:
2199
+ type: string
2200
+ enum: [runtime_busy, read_only, invalid_document]
2201
+ ThemeSettingsField:
2202
+ allOf:
2203
+ - $ref: '#/components/schemas/SettingsFieldCommon'
2204
+ - type: object
2205
+ required: [effectiveValue]
2206
+ properties:
2207
+ effectiveValue: { type: string, enum: [system, light, dark] }
2208
+ explicitValue: { type: string, enum: [system, light, dark] }
2209
+ inheritedValue: { type: string, enum: [system, light, dark] }
2210
+ UiStyleSettingsField:
2211
+ allOf:
2212
+ - $ref: '#/components/schemas/SettingsFieldCommon'
2213
+ - type: object
2214
+ required: [effectiveValue]
2215
+ properties:
2216
+ effectiveValue: { type: string, enum: [classic, orion-blocksmith] }
2217
+ explicitValue: { type: string, enum: [classic, orion-blocksmith] }
2218
+ inheritedValue: { type: string, enum: [classic, orion-blocksmith] }
2219
+ MotionSettingsField:
2220
+ allOf:
2221
+ - $ref: '#/components/schemas/SettingsFieldCommon'
2222
+ - type: object
2223
+ required: [effectiveValue]
2224
+ properties:
2225
+ effectiveValue: { type: string, enum: [system, reduced] }
2226
+ explicitValue: { type: string, enum: [system, reduced] }
2227
+ inheritedValue: { type: string, enum: [system, reduced] }
2228
+ ModelSettingsField:
2229
+ allOf:
2230
+ - $ref: '#/components/schemas/SettingsFieldCommon'
2231
+ - type: object
2232
+ required: [effectiveValue]
2233
+ properties:
2234
+ effectiveValue: { type: string, minLength: 1 }
2235
+ explicitValue: { type: string, minLength: 1 }
2236
+ inheritedValue: { type: string, minLength: 1 }
2237
+ EffortSettingsField:
2238
+ allOf:
2239
+ - $ref: '#/components/schemas/SettingsFieldCommon'
2240
+ - type: object
2241
+ required: [effectiveValue]
2242
+ properties:
2243
+ effectiveValue: { $ref: '#/components/schemas/EffortPreference' }
2244
+ explicitValue: { $ref: '#/components/schemas/EffortPreference' }
2245
+ inheritedValue: { $ref: '#/components/schemas/EffortPreference' }
2246
+ ToolConfirmationSettingsField:
2247
+ allOf:
2248
+ - $ref: '#/components/schemas/SettingsFieldCommon'
2249
+ - type: object
2250
+ required: [effectiveValue]
2251
+ properties:
2252
+ effectiveValue: { type: string, enum: [allow, ask, deny] }
2253
+ explicitValue: { type: string, enum: [allow, ask, deny] }
2254
+ inheritedValue: { type: string, enum: [allow, ask, deny] }
2255
+ EffortPreference:
2256
+ type: string
2257
+ enum: [auto, none, minimal, low, medium, high, xhigh, max]
2258
+ ModelSummary:
2259
+ type: object
2260
+ additionalProperties: false
2261
+ required: [id, label]
2262
+ properties:
2263
+ id: { type: string, minLength: 1 }
2264
+ label: { type: string, minLength: 1 }
2265
+ provider: { type: string }
2266
+ CredentialSlot:
2267
+ type: object
2268
+ additionalProperties: false
2269
+ required: [providerId, state, source, writable]
2270
+ properties:
2271
+ providerId: { type: string, minLength: 1 }
2272
+ state: { type: string, enum: [ready, missing, unavailable] }
2273
+ source: { type: string, enum: [environment, legacy, none] }
2274
+ writable: { type: boolean, const: false }
2275
+ SettingsDocument:
2276
+ type: object
2277
+ additionalProperties: false
2278
+ required:
2279
+ - schemaVersion
2280
+ - revision
2281
+ - state
2282
+ - writable
2283
+ - hasDocument
2284
+ - workspace
2285
+ - sections
2286
+ - models
2287
+ - credentials
2288
+ properties:
2289
+ schemaVersion: { type: integer, const: 2 }
2290
+ revision: { $ref: '#/components/schemas/SettingsRevision' }
2291
+ state: { type: string, enum: [ready, invalid, read-only, unavailable] }
2292
+ writable: { type: boolean }
2293
+ hasDocument: { type: boolean }
2294
+ workspace: { type: string }
2295
+ sections:
2296
+ type: object
2297
+ additionalProperties: false
2298
+ required: [appearance, defaults, permissions]
2299
+ properties:
2300
+ appearance:
2301
+ type: object
2302
+ additionalProperties: false
2303
+ required: [style, theme, motion]
2304
+ properties:
2305
+ style: { $ref: '#/components/schemas/UiStyleSettingsField' }
2306
+ theme: { $ref: '#/components/schemas/ThemeSettingsField' }
2307
+ motion: { $ref: '#/components/schemas/MotionSettingsField' }
2308
+ defaults:
2309
+ type: object
2310
+ additionalProperties: false
2311
+ required: [model, effort]
2312
+ properties:
2313
+ model: { $ref: '#/components/schemas/ModelSettingsField' }
2314
+ effort: { $ref: '#/components/schemas/EffortSettingsField' }
2315
+ permissions:
2316
+ type: object
2317
+ additionalProperties: false
2318
+ required: [toolConfirmation]
2319
+ properties:
2320
+ toolConfirmation:
2321
+ $ref: '#/components/schemas/ToolConfirmationSettingsField'
2322
+ models:
2323
+ type: array
2324
+ items: { $ref: '#/components/schemas/ModelSummary' }
2325
+ credentials:
2326
+ type: array
2327
+ items: { $ref: '#/components/schemas/CredentialSlot' }
2328
+ currentSession:
2329
+ type: object
2330
+ additionalProperties: false
2331
+ required: [model, effort, overridesProjectEffort]
2332
+ properties:
2333
+ model: { type: string }
2334
+ effort: { $ref: '#/components/schemas/EffortPreference' }
2335
+ overridesProjectEffort: { type: boolean }
2336
+ diagnostic:
2337
+ type: object
2338
+ additionalProperties: false
2339
+ required: [code, message]
2340
+ properties:
2341
+ code: { type: string }
2342
+ message: { type: string }
2343
+ SettingsOperation:
2344
+ oneOf:
2345
+ - $ref: '#/components/schemas/SetUiStyleSetting'
2346
+ - $ref: '#/components/schemas/UnsetUiStyleSetting'
2347
+ - $ref: '#/components/schemas/SetThemeSetting'
2348
+ - $ref: '#/components/schemas/UnsetThemeSetting'
2349
+ - $ref: '#/components/schemas/SetMotionSetting'
2350
+ - $ref: '#/components/schemas/UnsetMotionSetting'
2351
+ - $ref: '#/components/schemas/SetModelSetting'
2352
+ - $ref: '#/components/schemas/UnsetModelSetting'
2353
+ - $ref: '#/components/schemas/SetEffortSetting'
2354
+ - $ref: '#/components/schemas/UnsetEffortSetting'
2355
+ - $ref: '#/components/schemas/SetToolConfirmationSetting'
2356
+ - $ref: '#/components/schemas/UnsetToolConfirmationSetting'
2357
+ SetUiStyleSetting:
2358
+ type: object
2359
+ additionalProperties: false
2360
+ required: [op, key, value]
2361
+ properties:
2362
+ op: { type: string, const: set }
2363
+ key: { type: string, const: appearance.style }
2364
+ value: { type: string, enum: [classic, orion-blocksmith] }
2365
+ UnsetUiStyleSetting:
2366
+ type: object
2367
+ additionalProperties: false
2368
+ required: [op, key]
2369
+ properties:
2370
+ op: { type: string, const: unset }
2371
+ key: { type: string, const: appearance.style }
2372
+ SetThemeSetting:
2373
+ type: object
2374
+ additionalProperties: false
2375
+ required: [op, key, value]
2376
+ properties:
2377
+ op: { type: string, const: set }
2378
+ key: { type: string, const: appearance.theme }
2379
+ value: { type: string, enum: [system, light, dark] }
2380
+ UnsetThemeSetting:
2381
+ type: object
2382
+ additionalProperties: false
2383
+ required: [op, key]
2384
+ properties:
2385
+ op: { type: string, const: unset }
2386
+ key: { type: string, const: appearance.theme }
2387
+ SetMotionSetting:
2388
+ type: object
2389
+ additionalProperties: false
2390
+ required: [op, key, value]
2391
+ properties:
2392
+ op: { type: string, const: set }
2393
+ key: { type: string, const: appearance.motion }
2394
+ value: { type: string, enum: [system, reduced] }
2395
+ UnsetMotionSetting:
2396
+ type: object
2397
+ additionalProperties: false
2398
+ required: [op, key]
2399
+ properties:
2400
+ op: { type: string, const: unset }
2401
+ key: { type: string, const: appearance.motion }
2402
+ SetModelSetting:
2403
+ type: object
2404
+ additionalProperties: false
2405
+ required: [op, key, value]
2406
+ properties:
2407
+ op: { type: string, const: set }
2408
+ key: { type: string, const: defaults.model }
2409
+ value: { type: string, minLength: 1, maxLength: 200 }
2410
+ UnsetModelSetting:
2411
+ type: object
2412
+ additionalProperties: false
2413
+ required: [op, key]
2414
+ properties:
2415
+ op: { type: string, const: unset }
2416
+ key: { type: string, const: defaults.model }
2417
+ SetEffortSetting:
2418
+ type: object
2419
+ additionalProperties: false
2420
+ required: [op, key, value]
2421
+ properties:
2422
+ op: { type: string, const: set }
2423
+ key: { type: string, const: defaults.effort }
2424
+ value: { $ref: '#/components/schemas/EffortPreference' }
2425
+ UnsetEffortSetting:
2426
+ type: object
2427
+ additionalProperties: false
2428
+ required: [op, key]
2429
+ properties:
2430
+ op: { type: string, const: unset }
2431
+ key: { type: string, const: defaults.effort }
2432
+ SetToolConfirmationSetting:
2433
+ type: object
2434
+ additionalProperties: false
2435
+ required: [op, key, value]
2436
+ properties:
2437
+ op: { type: string, const: set }
2438
+ key: { type: string, const: permissions.toolConfirmation }
2439
+ value: { type: string, enum: [allow, ask, deny] }
2440
+ UnsetToolConfirmationSetting:
2441
+ type: object
2442
+ additionalProperties: false
2443
+ required: [op, key]
2444
+ properties:
2445
+ op: { type: string, const: unset }
2446
+ key: { type: string, const: permissions.toolConfirmation }
2447
+ UpdateSettingsRequest:
2448
+ type: object
2449
+ additionalProperties: false
2450
+ required: [requestId, workspaceId, expectedContextRevision, expectedRevision, operations]
2451
+ properties:
2452
+ requestId: { $ref: '#/components/schemas/RequestId' }
2453
+ workspaceId: { type: string, format: uuid }
2454
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
2455
+ expectedRevision: { $ref: '#/components/schemas/SettingsRevision' }
2456
+ operations:
2457
+ type: array
2458
+ minItems: 1
2459
+ maxItems: 20
2460
+ items: { $ref: '#/components/schemas/SettingsOperation' }
2461
+ SettingsMutationResult:
2462
+ type: object
2463
+ additionalProperties: false
2464
+ required: [requestId, revision, appliedKeys, settings]
2465
+ properties:
2466
+ requestId: { $ref: '#/components/schemas/RequestId' }
2467
+ revision: { $ref: '#/components/schemas/SettingsRevision' }
2468
+ appliedKeys:
2469
+ type: array
2470
+ minItems: 1
2471
+ maxItems: 20
2472
+ items:
2473
+ type: string
2474
+ enum:
2475
+ - appearance.style
2476
+ - appearance.theme
2477
+ - appearance.motion
2478
+ - defaults.model
2479
+ - defaults.effort
2480
+ - permissions.toolConfirmation
2481
+ settings: { $ref: '#/components/schemas/SettingsDocument' }
2482
+ ContextReference:
2483
+ oneOf:
2484
+ - $ref: '#/components/schemas/FileContextReference'
2485
+ - $ref: '#/components/schemas/FolderContextReference'
2486
+ - $ref: '#/components/schemas/ReviewContextReference'
2487
+ - $ref: '#/components/schemas/SessionContextReference'
2488
+ - $ref: '#/components/schemas/SkillContextReference'
2489
+ discriminator:
2490
+ propertyName: kind
2491
+ mapping:
2492
+ file: '#/components/schemas/FileContextReference'
2493
+ folder: '#/components/schemas/FolderContextReference'
2494
+ review: '#/components/schemas/ReviewContextReference'
2495
+ session: '#/components/schemas/SessionContextReference'
2496
+ skill: '#/components/schemas/SkillContextReference'
2497
+ FileContextReference:
2498
+ type: object
2499
+ additionalProperties: false
2500
+ required: [kind, id, label, revision]
2501
+ properties:
2502
+ kind: { type: string, const: file }
2503
+ id: { type: string, minLength: 1, maxLength: 1024 }
2504
+ label: { type: string, minLength: 1, maxLength: 256 }
2505
+ revision: { type: string, minLength: 1, maxLength: 256 }
2506
+ FolderContextReference:
2507
+ type: object
2508
+ additionalProperties: false
2509
+ required: [kind, id, label, revision]
2510
+ properties:
2511
+ kind: { type: string, const: folder }
2512
+ id: { type: string, minLength: 1, maxLength: 1024 }
2513
+ label: { type: string, minLength: 1, maxLength: 256 }
2514
+ revision: { type: string, minLength: 1, maxLength: 256 }
2515
+ ReviewContextReference:
2516
+ type: object
2517
+ additionalProperties: false
2518
+ required: [kind, id, label, gitRevision]
2519
+ properties:
2520
+ kind: { type: string, const: review }
2521
+ id: { type: string, minLength: 1, maxLength: 1024 }
2522
+ label: { type: string, minLength: 1, maxLength: 256 }
2523
+ gitRevision: { type: string, minLength: 1, maxLength: 256 }
2524
+ SessionContextReference:
2525
+ type: object
2526
+ additionalProperties: false
2527
+ required: [kind, id, label, digest]
2528
+ properties:
2529
+ kind: { type: string, const: session }
2530
+ id: { type: string, minLength: 1, maxLength: 256 }
2531
+ label: { type: string, minLength: 1, maxLength: 256 }
2532
+ digest: { type: string, pattern: '^[a-f0-9]{64}$' }
2533
+ SkillContextReference:
2534
+ type: object
2535
+ additionalProperties: false
2536
+ required: [kind, id, label, digest]
2537
+ properties:
2538
+ kind: { type: string, const: skill }
2539
+ id: { type: string, minLength: 1, maxLength: 256 }
2540
+ label: { type: string, minLength: 1, maxLength: 256 }
2541
+ digest: { type: string, pattern: '^[a-f0-9]{64}$' }
2542
+ ComposerActionBase:
2543
+ type: object
2544
+ required:
2545
+ - requestId
2546
+ - workspaceId
2547
+ - expectedContextRevision
2548
+ - expectedSessionId
2549
+ - expectedControlRevision
2550
+ - type
2551
+ properties:
2552
+ requestId: { $ref: '#/components/schemas/RequestId' }
2553
+ workspaceId: { type: string, format: uuid }
2554
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
2555
+ expectedSessionId: { type: string, format: uuid }
2556
+ expectedControlRevision: { $ref: '#/components/schemas/ControlRevision' }
2557
+ type:
2558
+ type: string
2559
+ enum:
2560
+ - set_agent_mode
2561
+ - set_permission_override
2562
+ - clear_permission_override
2563
+ - select_model
2564
+ - compact_context
2565
+ - review_plan
2566
+ - edit_queue_item
2567
+ - move_queue_item
2568
+ - remove_queue_item
2569
+ ComposerSetModeAction:
2570
+ allOf:
2571
+ - $ref: '#/components/schemas/ComposerActionBase'
2572
+ - type: object
2573
+ required: [mode]
2574
+ properties:
2575
+ type: { type: string, const: set_agent_mode }
2576
+ mode: { type: string, enum: [interactive, plan, auto] }
2577
+ unevaluatedProperties: false
2578
+ ComposerSetPermissionAction:
2579
+ allOf:
2580
+ - $ref: '#/components/schemas/ComposerActionBase'
2581
+ - type: object
2582
+ required: [value]
2583
+ properties:
2584
+ type: { type: string, const: set_permission_override }
2585
+ value: { type: string, enum: [ask, allow, deny] }
2586
+ unevaluatedProperties: false
2587
+ ComposerClearPermissionAction:
2588
+ allOf:
2589
+ - $ref: '#/components/schemas/ComposerActionBase'
2590
+ - type: object
2591
+ properties:
2592
+ type: { type: string, const: clear_permission_override }
2593
+ unevaluatedProperties: false
2594
+ ComposerSelectModelAction:
2595
+ allOf:
2596
+ - $ref: '#/components/schemas/ComposerActionBase'
2597
+ - type: object
2598
+ required: [modelId]
2599
+ properties:
2600
+ type: { type: string, const: select_model }
2601
+ modelId: { type: string, minLength: 1, maxLength: 256 }
2602
+ effort: { $ref: '#/components/schemas/EffortPreference' }
2603
+ unevaluatedProperties: false
2604
+ ComposerCompactAction:
2605
+ allOf:
2606
+ - $ref: '#/components/schemas/ComposerActionBase'
2607
+ - type: object
2608
+ properties:
2609
+ type: { type: string, const: compact_context }
2610
+ unevaluatedProperties: false
2611
+ ComposerReviewPlanAction:
2612
+ allOf:
2613
+ - $ref: '#/components/schemas/ComposerActionBase'
2614
+ - type: object
2615
+ required: [planDigest, action]
2616
+ properties:
2617
+ type: { type: string, const: review_plan }
2618
+ planDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
2619
+ action: { type: string, enum: [approve, continue, cancel] }
2620
+ feedback: { type: string, minLength: 1, maxLength: 1048576 }
2621
+ unevaluatedProperties: false
2622
+ ComposerEditQueueAction:
2623
+ allOf:
2624
+ - $ref: '#/components/schemas/ComposerActionBase'
2625
+ - type: object
2626
+ required: [itemId, expectedItemRevision, text]
2627
+ properties:
2628
+ type: { type: string, const: edit_queue_item }
2629
+ itemId: { type: string, minLength: 1, maxLength: 256 }
2630
+ expectedItemRevision: { type: integer, minimum: 1 }
2631
+ text: { type: string, minLength: 1, maxLength: 1048576 }
2632
+ unevaluatedProperties: false
2633
+ ComposerMoveQueueAction:
2634
+ allOf:
2635
+ - $ref: '#/components/schemas/ComposerActionBase'
2636
+ - type: object
2637
+ required: [itemId, expectedItemRevision, targetIndex]
2638
+ properties:
2639
+ type: { type: string, const: move_queue_item }
2640
+ itemId: { type: string, minLength: 1, maxLength: 256 }
2641
+ expectedItemRevision: { type: integer, minimum: 1 }
2642
+ targetIndex: { type: integer, minimum: 0, maximum: 15 }
2643
+ unevaluatedProperties: false
2644
+ ComposerRemoveQueueAction:
2645
+ allOf:
2646
+ - $ref: '#/components/schemas/ComposerActionBase'
2647
+ - type: object
2648
+ required: [itemId, expectedItemRevision]
2649
+ properties:
2650
+ type: { type: string, const: remove_queue_item }
2651
+ itemId: { type: string, minLength: 1, maxLength: 256 }
2652
+ expectedItemRevision: { type: integer, minimum: 1 }
2653
+ unevaluatedProperties: false
2654
+ ComposerAction:
2655
+ oneOf:
2656
+ - $ref: '#/components/schemas/ComposerSetModeAction'
2657
+ - $ref: '#/components/schemas/ComposerSetPermissionAction'
2658
+ - $ref: '#/components/schemas/ComposerClearPermissionAction'
2659
+ - $ref: '#/components/schemas/ComposerSelectModelAction'
2660
+ - $ref: '#/components/schemas/ComposerCompactAction'
2661
+ - $ref: '#/components/schemas/ComposerReviewPlanAction'
2662
+ - $ref: '#/components/schemas/ComposerEditQueueAction'
2663
+ - $ref: '#/components/schemas/ComposerMoveQueueAction'
2664
+ - $ref: '#/components/schemas/ComposerRemoveQueueAction'
2665
+ discriminator:
2666
+ propertyName: type
2667
+ mapping:
2668
+ set_agent_mode: '#/components/schemas/ComposerSetModeAction'
2669
+ set_permission_override: '#/components/schemas/ComposerSetPermissionAction'
2670
+ clear_permission_override: '#/components/schemas/ComposerClearPermissionAction'
2671
+ select_model: '#/components/schemas/ComposerSelectModelAction'
2672
+ compact_context: '#/components/schemas/ComposerCompactAction'
2673
+ review_plan: '#/components/schemas/ComposerReviewPlanAction'
2674
+ edit_queue_item: '#/components/schemas/ComposerEditQueueAction'
2675
+ move_queue_item: '#/components/schemas/ComposerMoveQueueAction'
2676
+ remove_queue_item: '#/components/schemas/ComposerRemoveQueueAction'
2677
+ SessionModelSwitchReceipt:
2678
+ type: object
2679
+ additionalProperties: false
2680
+ required:
2681
+ - receiptId
2682
+ - fromModelId
2683
+ - toModelId
2684
+ - requestedEffort
2685
+ - compacted
2686
+ - compactRequired
2687
+ - compactPreflight
2688
+ - appliesFrom
2689
+ - sessionPreferencesDigest
2690
+ properties:
2691
+ receiptId: { type: string, format: uuid }
2692
+ fromModelId: { type: string, minLength: 1 }
2693
+ toModelId: { type: string, minLength: 1 }
2694
+ requestedEffort: { $ref: '#/components/schemas/EffortPreference' }
2695
+ compacted: { type: boolean }
2696
+ compactRequired: { type: boolean }
2697
+ compactPreflight:
2698
+ type: string
2699
+ enum: [not_required, unavailable, not_needed, committed, deferred]
2700
+ appliesFrom: { type: string, enum: [immediate, next-logical-request] }
2701
+ sessionPreferencesDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
2702
+ SessionPermissionReceipt:
2703
+ type: object
2704
+ additionalProperties: false
2705
+ required: [receiptId, previous, current, appliesFrom, sessionPreferencesDigest]
2706
+ properties:
2707
+ receiptId: { type: string, format: uuid }
2708
+ previous: { $ref: '#/components/schemas/ComposerPermissionSelection' }
2709
+ current: { $ref: '#/components/schemas/ComposerPermissionSelection' }
2710
+ appliesFrom: { type: string, enum: [immediate, next-tool-admission] }
2711
+ sessionPreferencesDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
2712
+ PlanReviewProjection:
2713
+ type: object
2714
+ additionalProperties: false
2715
+ required:
2716
+ - reviewId
2717
+ - revision
2718
+ - planDigest
2719
+ - planReceiptDigest
2720
+ - status
2721
+ - createdAt
2722
+ - createdModel
2723
+ - returnMode
2724
+ - requestedSeq
2725
+ properties:
2726
+ reviewId: { type: string, format: uuid }
2727
+ revision: { type: string, format: uuid }
2728
+ planDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
2729
+ planReceiptDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
2730
+ status: { type: string, enum: [awaiting_review, approved, continued, cancelled] }
2731
+ createdAt: { type: number, minimum: 0 }
2732
+ createdModel: { type: string, minLength: 1 }
2733
+ returnMode: { type: string, enum: [build, auto] }
2734
+ requestedSeq: { type: integer, minimum: 1 }
2735
+ resolvedAt: { type: number, minimum: 0 }
2736
+ resolvedSeq: { type: integer, minimum: 1 }
2737
+ feedback: { type: string }
2738
+ feedbackDigest: { type: string, pattern: '^[a-f0-9]{64}$' }
2739
+ PlanReviewAdmission:
2740
+ oneOf:
2741
+ - type: object
2742
+ additionalProperties: false
2743
+ required: [status, turnId]
2744
+ properties:
2745
+ status: { type: string, const: started }
2746
+ turnId: { type: string, minLength: 1 }
2747
+ - type: object
2748
+ additionalProperties: false
2749
+ required: [status, queueId]
2750
+ properties:
2751
+ status: { type: string, const: queued }
2752
+ queueId: { type: string, minLength: 1 }
2753
+ - type: object
2754
+ additionalProperties: false
2755
+ required: [status]
2756
+ properties:
2757
+ status: { type: string, enum: [already_admitted, cancelled] }
2758
+ - type: object
2759
+ additionalProperties: false
2760
+ required: [status, reason]
2761
+ properties:
2762
+ status: { type: string, const: pending }
2763
+ reason: { type: string, minLength: 1 }
2764
+ discriminator: { propertyName: status }
2765
+ PlanReviewResolutionReceipt:
2766
+ type: object
2767
+ additionalProperties: false
2768
+ required: [receiptId, state, admission, digest]
2769
+ properties:
2770
+ receiptId: { type: string, format: uuid }
2771
+ state: { $ref: '#/components/schemas/PlanReviewProjection' }
2772
+ admission: { $ref: '#/components/schemas/PlanReviewAdmission' }
2773
+ digest: { type: string, pattern: '^[a-f0-9]{64}$' }
2774
+ ComposerActionResult:
2775
+ type: object
2776
+ additionalProperties: false
2777
+ required: [requestId, outcome, controlRevision, state]
2778
+ properties:
2779
+ requestId: { $ref: '#/components/schemas/RequestId' }
2780
+ outcome: { type: string, enum: [applied, deferred] }
2781
+ controlRevision: { $ref: '#/components/schemas/ControlRevision' }
2782
+ state: { $ref: '#/components/schemas/ComposerControlState' }
2783
+ modelReceipt: { $ref: '#/components/schemas/SessionModelSwitchReceipt' }
2784
+ permissionReceipt: { $ref: '#/components/schemas/SessionPermissionReceipt' }
2785
+ planReviewReceipt: { $ref: '#/components/schemas/PlanReviewResolutionReceipt' }
2786
+ detail: { type: string }
2787
+ WebCommand:
2788
+ type: object
2789
+ additionalProperties: false
2790
+ required:
2791
+ - requestId
2792
+ - expectedContextRevision
2793
+ - workspaceId
2794
+ - expectedSessionId
2795
+ - expectedSessionRuntimeRevision
2796
+ - type
2797
+ allOf:
2798
+ - if:
2799
+ properties:
2800
+ type: { const: set_agent_mode }
2801
+ required: [type]
2802
+ then:
2803
+ required: [agentMode]
2804
+ - if:
2805
+ properties:
2806
+ type: { const: cancel_queued_turn }
2807
+ required: [type]
2808
+ then:
2809
+ required: [queueId]
2810
+ properties:
2811
+ requestId: { $ref: '#/components/schemas/RequestId' }
2812
+ expectedContextRevision: { $ref: '#/components/schemas/ContextRevision' }
2813
+ workspaceId: { type: string, format: uuid }
2814
+ expectedSessionId:
2815
+ type: string
2816
+ minLength: 1
2817
+ maxLength: 256
2818
+ description: >-
2819
+ Compare-and-swap guard for the active Session. The Host returns 409
2820
+ active_session_changed without dispatching when the selection no longer matches.
2821
+ expectedSessionRuntimeRevision:
2822
+ type: string
2823
+ format: uuid
2824
+ description: Compare-and-swap guard for the exact Session actor admission state.
2825
+ type:
2826
+ type: string
2827
+ enum:
2828
+ - submit
2829
+ - cancel_queued_turn
2830
+ - queue_followup
2831
+ - remove_followup
2832
+ - clear_followups
2833
+ - interrupt
2834
+ - permission_decision
2835
+ - goal_control
2836
+ - permission_mode_change
2837
+ - cycle_agent_mode
2838
+ - set_agent_mode
2839
+ text: { type: string, maxLength: 1048576 }
2840
+ queueId: { type: string, format: uuid }
2841
+ itemId: { type: string }
2842
+ requestPermissionId: { type: string }
2843
+ approved: { type: boolean }
2844
+ scope: { type: string, enum: [once, project, global] }
2845
+ goalAction: { type: string, enum: [create, status, pause, resume, clear] }
2846
+ objective: { type: string }
2847
+ toolConfirmation: { type: string, enum: [allow, ask, deny] }
2848
+ agentMode: { type: string, enum: [interactive, plan, auto] }
2849
+ contextReferences:
2850
+ type: array
2851
+ maxItems: 20
2852
+ items: { $ref: '#/components/schemas/ContextReference' }
2853
+ CommandResult:
2854
+ type: object
2855
+ additionalProperties: false
2856
+ required: [requestId, result, sessionRuntime]
2857
+ properties:
2858
+ requestId: { $ref: '#/components/schemas/RequestId' }
2859
+ result: { type: string }
2860
+ sessionRuntime: { $ref: '#/components/schemas/SessionRuntimeSummary' }
2861
+ queueId: { type: string, format: uuid }
2862
+ queuePosition: { type: integer, minimum: 1 }
2863
+ detail: { type: string }
2864
+ WebEventEnvelope:
2865
+ description: >-
2866
+ Versioned, cursor-ordered event union. `type` is the discriminator; every branch carries
2867
+ explicit `sessionId` and `threadId` keys. Runtime events allow null identities before a
2868
+ session or Thread exists; committed Thread events require both values to be non-null.
2869
+ oneOf:
2870
+ - $ref: '#/components/schemas/RuntimeEventEnvelope'
2871
+ - $ref: '#/components/schemas/ThreadEventEnvelope'
2872
+ - $ref: '#/components/schemas/WorkbenchStateEnvelope'
2873
+ - $ref: '#/components/schemas/SessionRuntimeChangedEnvelope'
2874
+ - $ref: '#/components/schemas/WorkspaceMutationChangedEnvelope'
2875
+ - $ref: '#/components/schemas/SettingsInvalidatedEnvelope'
2876
+ - $ref: '#/components/schemas/WorkspaceResourceInvalidatedEnvelope'
2877
+ - $ref: '#/components/schemas/ComposerStateChangedEnvelope'
2878
+ - $ref: '#/components/schemas/ReplayResetEnvelope'
2879
+ discriminator:
2880
+ propertyName: type
2881
+ mapping:
2882
+ runtime_event: '#/components/schemas/RuntimeEventEnvelope'
2883
+ thread_event: '#/components/schemas/ThreadEventEnvelope'
2884
+ workbench_state: '#/components/schemas/WorkbenchStateEnvelope'
2885
+ session_runtime_changed: '#/components/schemas/SessionRuntimeChangedEnvelope'
2886
+ workspace_mutation_changed: '#/components/schemas/WorkspaceMutationChangedEnvelope'
2887
+ settings_invalidated: '#/components/schemas/SettingsInvalidatedEnvelope'
2888
+ workspace_resource_invalidated: '#/components/schemas/WorkspaceResourceInvalidatedEnvelope'
2889
+ composer_state_changed: '#/components/schemas/ComposerStateChangedEnvelope'
2890
+ replay_reset: '#/components/schemas/ReplayResetEnvelope'
2891
+ RuntimeEventEnvelope:
2892
+ type: object
2893
+ additionalProperties: false
2894
+ required:
2895
+ - apiVersion
2896
+ - eventId
2897
+ - cursor
2898
+ - sessionId
2899
+ - threadId
2900
+ - type
2901
+ - durable
2902
+ - timestamp
2903
+ - payload
2904
+ properties:
2905
+ apiVersion: { type: integer, const: 1 }
2906
+ eventId: { type: string, format: uuid }
2907
+ cursor: { type: integer, minimum: 1 }
2908
+ sessionId: { type: [string, 'null'] }
2909
+ threadId: { type: [string, 'null'] }
2910
+ type: { type: string, const: runtime_event }
2911
+ durable: { type: boolean }
2912
+ timestamp: { type: string, format: date-time }
2913
+ payload:
2914
+ type: object
2915
+ additionalProperties: false
2916
+ required: [eventType, value]
2917
+ properties:
2918
+ eventType: { type: string, minLength: 1 }
2919
+ value: { type: object, additionalProperties: true }
2920
+ ThreadEventEnvelope:
2921
+ type: object
2922
+ additionalProperties: false
2923
+ required:
2924
+ - apiVersion
2925
+ - eventId
2926
+ - cursor
2927
+ - sessionId
2928
+ - threadId
2929
+ - type
2930
+ - durable
2931
+ - timestamp
2932
+ - payload
2933
+ properties:
2934
+ apiVersion: { type: integer, const: 1 }
2935
+ eventId: { type: string, format: uuid }
2936
+ cursor: { type: integer, minimum: 1 }
2937
+ sessionId: { type: string, minLength: 1 }
2938
+ threadId: { type: string, minLength: 1 }
2939
+ type: { type: string, const: thread_event }
2940
+ durable: { type: boolean, const: true }
2941
+ timestamp: { type: string, format: date-time }
2942
+ payload:
2943
+ type: object
2944
+ additionalProperties: false
2945
+ required: [sequence, eventType, value]
2946
+ properties:
2947
+ sequence: { type: integer, minimum: 1 }
2948
+ eventType: { type: string, minLength: 1 }
2949
+ value: { type: object, additionalProperties: true }
2950
+ WorkbenchStateEnvelope:
2951
+ type: object
2952
+ additionalProperties: false
2953
+ required:
2954
+ - apiVersion
2955
+ - eventId
2956
+ - cursor
2957
+ - sessionId
2958
+ - threadId
2959
+ - type
2960
+ - durable
2961
+ - timestamp
2962
+ - payload
2963
+ properties:
2964
+ apiVersion: { type: integer, const: 1 }
2965
+ eventId: { type: string, format: uuid }
2966
+ cursor: { type: integer, minimum: 1 }
2967
+ sessionId: { type: [string, 'null'] }
2968
+ threadId: { type: [string, 'null'] }
2969
+ type: { type: string, const: workbench_state }
2970
+ durable: { type: boolean }
2971
+ timestamp: { type: string, format: date-time }
2972
+ payload:
2973
+ type: object
2974
+ additionalProperties: false
2975
+ required: [contextRevision, workspaceId, workspace, activeSessionId]
2976
+ properties:
2977
+ contextRevision: { $ref: '#/components/schemas/ContextRevision' }
2978
+ workspaceId: { type: string, format: uuid }
2979
+ workspace: { type: string }
2980
+ activeSessionId: { type: [string, 'null'] }
2981
+ SettingsInvalidatedEnvelope:
2982
+ type: object
2983
+ additionalProperties: false
2984
+ required:
2985
+ - apiVersion
2986
+ - eventId
2987
+ - cursor
2988
+ - sessionId
2989
+ - threadId
2990
+ - type
2991
+ - durable
2992
+ - timestamp
2993
+ - payload
2994
+ properties:
2995
+ apiVersion: { type: integer, const: 1 }
2996
+ eventId: { type: string, format: uuid }
2997
+ cursor: { type: integer, minimum: 1 }
2998
+ sessionId: { type: [string, 'null'] }
2999
+ threadId: { type: [string, 'null'] }
3000
+ type: { type: string, const: settings_invalidated }
3001
+ durable: { type: boolean, const: false }
3002
+ timestamp: { type: string, format: date-time }
3003
+ payload:
3004
+ type: object
3005
+ additionalProperties: false
3006
+ required: [revision, reason, state]
3007
+ properties:
3008
+ revision: { $ref: '#/components/schemas/SettingsRevision' }
3009
+ reason: { type: string, enum: [local-write, external-edit, workspace-change] }
3010
+ state: { type: string, enum: [ready, invalid] }
3011
+ SessionRuntimeChangedEnvelope:
3012
+ type: object
3013
+ additionalProperties: false
3014
+ required:
3015
+ - apiVersion
3016
+ - eventId
3017
+ - cursor
3018
+ - sessionId
3019
+ - threadId
3020
+ - type
3021
+ - durable
3022
+ - timestamp
3023
+ - payload
3024
+ properties:
3025
+ apiVersion: { type: integer, const: 1 }
3026
+ eventId: { type: string, format: uuid }
3027
+ cursor: { type: integer, minimum: 1 }
3028
+ sessionId: { type: string, format: uuid }
3029
+ threadId: { type: [string, 'null'] }
3030
+ type: { type: string, const: session_runtime_changed }
3031
+ durable: { type: boolean, const: true }
3032
+ timestamp: { type: string, format: date-time }
3033
+ payload:
3034
+ type: object
3035
+ additionalProperties: false
3036
+ required: [runtime]
3037
+ properties:
3038
+ runtime: { $ref: '#/components/schemas/SessionRuntimeSummary' }
3039
+ WorkspaceMutationChangedEnvelope:
3040
+ type: object
3041
+ additionalProperties: false
3042
+ required:
3043
+ - apiVersion
3044
+ - eventId
3045
+ - cursor
3046
+ - sessionId
3047
+ - threadId
3048
+ - type
3049
+ - durable
3050
+ - timestamp
3051
+ - payload
3052
+ properties:
3053
+ apiVersion: { type: integer, const: 1 }
3054
+ eventId: { type: string, format: uuid }
3055
+ cursor: { type: integer, minimum: 1 }
3056
+ sessionId: { type: string, format: uuid }
3057
+ threadId: { type: [string, 'null'] }
3058
+ type: { type: string, const: workspace_mutation_changed }
3059
+ durable: { type: boolean, const: false }
3060
+ timestamp: { type: string, format: date-time }
3061
+ payload:
3062
+ type: object
3063
+ additionalProperties: false
3064
+ required: [state]
3065
+ properties:
3066
+ state:
3067
+ type: object
3068
+ additionalProperties: false
3069
+ required: [callId, phase]
3070
+ properties:
3071
+ callId: { type: string, minLength: 1 }
3072
+ phase: { type: string, enum: [queued, running, completed, failed, cancelled] }
3073
+ queuePosition: { type: integer, minimum: 1 }
3074
+ allOf:
3075
+ - if:
3076
+ properties: { phase: { const: queued } }
3077
+ required: [phase]
3078
+ then:
3079
+ required: [queuePosition]
3080
+ else:
3081
+ not: { required: [queuePosition] }
3082
+ WorkspaceResourceInvalidatedEnvelope:
3083
+ type: object
3084
+ additionalProperties: false
3085
+ required:
3086
+ - apiVersion
3087
+ - eventId
3088
+ - cursor
3089
+ - sessionId
3090
+ - threadId
3091
+ - type
3092
+ - durable
3093
+ - timestamp
3094
+ - payload
3095
+ properties:
3096
+ apiVersion: { type: integer, const: 1 }
3097
+ eventId: { type: string, format: uuid }
3098
+ cursor: { type: integer, minimum: 1 }
3099
+ sessionId: { type: [string, 'null'] }
3100
+ threadId: { type: [string, 'null'] }
3101
+ type: { type: string, const: workspace_resource_invalidated }
3102
+ durable: { type: boolean, const: false }
3103
+ timestamp: { type: string, format: date-time }
3104
+ payload:
3105
+ type: object
3106
+ additionalProperties: false
3107
+ required: [workspaceId, resources, reason]
3108
+ properties:
3109
+ workspaceId: { type: string, format: uuid }
3110
+ resources:
3111
+ type: array
3112
+ minItems: 1
3113
+ uniqueItems: true
3114
+ items: { type: string, enum: [files, git, review] }
3115
+ reason:
3116
+ type: string
3117
+ enum: [context-change, filesystem-change, terminal-command, tool-finished]
3118
+ ComposerStateChangedEnvelope:
3119
+ type: object
3120
+ additionalProperties: false
3121
+ required:
3122
+ - apiVersion
3123
+ - eventId
3124
+ - cursor
3125
+ - sessionId
3126
+ - threadId
3127
+ - type
3128
+ - durable
3129
+ - timestamp
3130
+ - payload
3131
+ properties:
3132
+ apiVersion: { type: integer, const: 1 }
3133
+ eventId: { type: string, format: uuid }
3134
+ cursor: { type: integer, minimum: 1 }
3135
+ sessionId: { type: string, minLength: 1 }
3136
+ threadId: { type: [string, 'null'] }
3137
+ type: { type: string, const: composer_state_changed }
3138
+ durable: { type: boolean, const: true }
3139
+ timestamp: { type: string, format: date-time }
3140
+ payload:
3141
+ type: object
3142
+ additionalProperties: false
3143
+ required: [state]
3144
+ properties:
3145
+ state: { $ref: '#/components/schemas/ComposerControlState' }
3146
+ ReplayResetEnvelope:
3147
+ type: object
3148
+ additionalProperties: false
3149
+ required:
3150
+ - apiVersion
3151
+ - eventId
3152
+ - cursor
3153
+ - sessionId
3154
+ - threadId
3155
+ - type
3156
+ - durable
3157
+ - timestamp
3158
+ - payload
3159
+ properties:
3160
+ apiVersion: { type: integer, const: 1 }
3161
+ eventId: { type: string, format: uuid }
3162
+ cursor: { type: integer, minimum: 1 }
3163
+ sessionId: { type: [string, 'null'] }
3164
+ threadId: { type: [string, 'null'] }
3165
+ type: { type: string, const: replay_reset }
3166
+ durable: { type: boolean, const: true }
3167
+ timestamp: { type: string, format: date-time }
3168
+ payload:
3169
+ type: object
3170
+ additionalProperties: false
3171
+ required: [reason, snapshotRequired]
3172
+ properties:
3173
+ reason: { type: string }
3174
+ snapshotRequired: { type: boolean, const: true }
3175
+ ComposerProblemCode:
3176
+ type: string
3177
+ description: Stable RFC 9457 code family for v0.3.2 Composer and Context operations.
3178
+ enum:
3179
+ - context_revision_conflict
3180
+ - active_session_changed
3181
+ - composer_control_conflict
3182
+ - composer_recovery_required
3183
+ - composer_control_failed
3184
+ - runtime_busy
3185
+ - model_unavailable
3186
+ - model_effort_unsupported
3187
+ - model_compaction_required
3188
+ - model_switch_rolled_back
3189
+ - permission_override_rejected
3190
+ - plan_review_stale
3191
+ - plan_review_invalid
3192
+ - context_reference_stale
3193
+ - context_reference_forbidden
3194
+ - context_reference_invalid
3195
+ - queue_item_conflict
3196
+ Problem:
3197
+ type: object
3198
+ additionalProperties: false
3199
+ required: [type, title, status, code]
3200
+ properties:
3201
+ type: { type: string }
3202
+ title: { type: string }
3203
+ status: { type: integer }
3204
+ code: { type: string, minLength: 1 }
3205
+ detail: { type: string }