airaknit 1.1.2-rc.9

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 (440) hide show
  1. package/LICENSE +84 -0
  2. package/README.md +202 -0
  3. package/bin/airaknit +9 -0
  4. package/bin/airaknit-project +14 -0
  5. package/bin/kanna +9 -0
  6. package/dist/client/assets/CompactSummaryMessage-Yw0BDWEJ.js +1 -0
  7. package/dist/client/assets/ExitPlanModeMessage-DIdkQ4uF.js +1 -0
  8. package/dist/client/assets/LocalFilePreviewDialog-DQx2eiCc.js +3 -0
  9. package/dist/client/assets/LocalProjectsSection-C4xlWkgS.js +1 -0
  10. package/dist/client/assets/TextMessage-B5G39DEJ.js +1 -0
  11. package/dist/client/assets/UserMessage-CIkWk-0L.js +1 -0
  12. package/dist/client/assets/_basePickBy-CVrAFfnZ.js +1 -0
  13. package/dist/client/assets/_baseUniq-JL-aaF4P.js +1 -0
  14. package/dist/client/assets/arc-B07zg7ol.js +1 -0
  15. package/dist/client/assets/architecture-YZFGNWBL-PSLVJL3p.js +1 -0
  16. package/dist/client/assets/architectureDiagram-Q4EWVU46-DfWIF1G_.js +36 -0
  17. package/dist/client/assets/array-BGFCBI0e.js +1 -0
  18. package/dist/client/assets/blockDiagram-DXYQGD6D-CzwIeo_B.js +132 -0
  19. package/dist/client/assets/bundle-mjs-BDE2gWbQ.js +1 -0
  20. package/dist/client/assets/button-DO50qOGv.js +1 -0
  21. package/dist/client/assets/c4Diagram-AHTNJAMY-CR8DCQRE.js +10 -0
  22. package/dist/client/assets/channel-Dj-UUfaF.js +1 -0
  23. package/dist/client/assets/chunk-2KRD3SAO-dznP-cn8.js +1 -0
  24. package/dist/client/assets/chunk-336JU56O-Dqss5Vu6.js +2 -0
  25. package/dist/client/assets/chunk-426QAEUC-CEKis_0_.js +1 -0
  26. package/dist/client/assets/chunk-4BX2VUAB-BYOv0Gm1.js +1 -0
  27. package/dist/client/assets/chunk-4TB4RGXK-BxzubH5S.js +206 -0
  28. package/dist/client/assets/chunk-55IACEB6-BSlTj03a.js +1 -0
  29. package/dist/client/assets/chunk-5FUZZQ4R-9Au93Bi1.js +62 -0
  30. package/dist/client/assets/chunk-5PVQY5BW-BhksHFEZ.js +2 -0
  31. package/dist/client/assets/chunk-67CJDMHE-BFwhz-8t.js +1 -0
  32. package/dist/client/assets/chunk-7N4EOEYR-BDUPds87.js +1 -0
  33. package/dist/client/assets/chunk-AA7GKIK3-CEWTdyXO.js +1 -0
  34. package/dist/client/assets/chunk-BO2N2NFS-D0LvxnhU.js +103 -0
  35. package/dist/client/assets/chunk-BSJP7CBP-BNJnK6sq.js +1 -0
  36. package/dist/client/assets/chunk-Bj-mKKzh.js +1 -0
  37. package/dist/client/assets/chunk-CIAEETIT-CYhfoCeN.js +1 -0
  38. package/dist/client/assets/chunk-EDXVE4YY-C5ovJLc0.js +1 -0
  39. package/dist/client/assets/chunk-ENJZ2VHE-HOhYaeGr.js +10 -0
  40. package/dist/client/assets/chunk-FMBD7UC4-BLCiKcAQ.js +15 -0
  41. package/dist/client/assets/chunk-FOC6F5B3-B6GtY2ek.js +1 -0
  42. package/dist/client/assets/chunk-ICPOFSXX-DPoIZoC5.js +122 -0
  43. package/dist/client/assets/chunk-K5T4RW27-BsKN63rv.js +94 -0
  44. package/dist/client/assets/chunk-KGLVRYIC-BUGn9uuY.js +1 -0
  45. package/dist/client/assets/chunk-LIHQZDEY-DhaZyo03.js +1 -0
  46. package/dist/client/assets/chunk-ORNJ4GCN-DlpeeJyi.js +1 -0
  47. package/dist/client/assets/chunk-OYMX7WX6-Dc9q7aYA.js +231 -0
  48. package/dist/client/assets/chunk-QZHKN3VN-BEdrPoSb.js +1 -0
  49. package/dist/client/assets/chunk-U2HBQHQK-CIB3Bjjd.js +70 -0
  50. package/dist/client/assets/chunk-X2U36JSP-CtB-o8Yp.js +1 -0
  51. package/dist/client/assets/chunk-XPW4576I-C6iHhX_8.js +32 -0
  52. package/dist/client/assets/chunk-YZCP3GAM-CTmKr6ZH.js +1 -0
  53. package/dist/client/assets/chunk-ZZ45TVLE-BgU8A2RF.js +1 -0
  54. package/dist/client/assets/classDiagram-6PBFFD2Q-Bqk5e679.js +1 -0
  55. package/dist/client/assets/classDiagram-v2-HSJHXN6E-6pSaZOkC.js +1 -0
  56. package/dist/client/assets/client-BrKWI4CM.js +1 -0
  57. package/dist/client/assets/client-CGgNRU9w.js +1 -0
  58. package/dist/client/assets/client-DMSLRzg9.js +6 -0
  59. package/dist/client/assets/clone-DWcL7whJ.js +1 -0
  60. package/dist/client/assets/cose-bilkent-S5V4N54A-CrV5wsV_.js +1 -0
  61. package/dist/client/assets/cytoscape.esm--aLzKuep.js +321 -0
  62. package/dist/client/assets/dagre-CuRxWcrj.js +1 -0
  63. package/dist/client/assets/dagre-KV5264BT-BIDiVnkA.js +4 -0
  64. package/dist/client/assets/defaultLocale-CRZydyG6.js +1 -0
  65. package/dist/client/assets/diagram-5BDNPKRD-i1kjKRCB.js +10 -0
  66. package/dist/client/assets/diagram-G4DWMVQ6-9ZSLuhbl.js +24 -0
  67. package/dist/client/assets/diagram-MMDJMWI5-B4_CUjgv.js +43 -0
  68. package/dist/client/assets/diagram-TYMM5635-Ct5eTGS8.js +24 -0
  69. package/dist/client/assets/dist-CuB4kiSK.js +1 -0
  70. package/dist/client/assets/erDiagram-SMLLAGMA-Cy38ercc.js +85 -0
  71. package/dist/client/assets/flowDiagram-DWJPFMVM-CZKuYl0V.js +162 -0
  72. package/dist/client/assets/ganttDiagram-T4ZO3ILL-DLPjCh7a.js +292 -0
  73. package/dist/client/assets/gitGraph-7Q5UKJZL-DqbrtEp9.js +1 -0
  74. package/dist/client/assets/gitGraphDiagram-UUTBAWPF-BoRBkDhQ.js +106 -0
  75. package/dist/client/assets/graphlib-BcQ6qlQh.js +1 -0
  76. package/dist/client/assets/highlighted-body-OFNGDK62-BEpBVDTX.js +1 -0
  77. package/dist/client/assets/index-CetCiuqP.js +105 -0
  78. package/dist/client/assets/index-N29Mip7A.css +1 -0
  79. package/dist/client/assets/info-OMHHGYJF-D98DRBJX.js +1 -0
  80. package/dist/client/assets/infoDiagram-42DDH7IO-BAcdTWbt.js +2 -0
  81. package/dist/client/assets/init-B8gtcn7T.js +1 -0
  82. package/dist/client/assets/isArrayLikeObject-D8SJFmkN.js +1 -0
  83. package/dist/client/assets/isEmpty-BF3YX5Jk.js +1 -0
  84. package/dist/client/assets/ishikawaDiagram-UXIWVN3A-Ynu2VKdC.js +70 -0
  85. package/dist/client/assets/journeyDiagram-VCZTEJTY-BjfhQaN3.js +139 -0
  86. package/dist/client/assets/jsx-runtime-CyI9ICYU.js +1 -0
  87. package/dist/client/assets/kanban-definition-6JOO6SKY-JLXH9zUJ.js +89 -0
  88. package/dist/client/assets/katex-B94qP8b6.js +265 -0
  89. package/dist/client/assets/lib--QVjyxmL.js +29 -0
  90. package/dist/client/assets/lib-B6rgJiZ9.js +1 -0
  91. package/dist/client/assets/line-DCrYfLBn.js +1 -0
  92. package/dist/client/assets/linear-_4upLmeo.js +1 -0
  93. package/dist/client/assets/mermaid-GHXKKRXX-rwJHYUmW.js +1 -0
  94. package/dist/client/assets/mermaid-parser.core-KZinfW8o.js +4 -0
  95. package/dist/client/assets/mermaid.core-QqY9gSNe.js +11 -0
  96. package/dist/client/assets/mindmap-definition-QFDTVHPH-TWgHDAzp.js +96 -0
  97. package/dist/client/assets/ordinal-CCj7PWgZ.js +1 -0
  98. package/dist/client/assets/packet-4T2RLAQJ-DEvfkn3F.js +1 -0
  99. package/dist/client/assets/path-DZF-JdEe.js +1 -0
  100. package/dist/client/assets/pie-ZZUOXDRM-72e6WVjb.js +1 -0
  101. package/dist/client/assets/pieDiagram-DEJITSTG-Cl8PCsoj.js +30 -0
  102. package/dist/client/assets/preload-helper-rov5CBGT.js +1 -0
  103. package/dist/client/assets/pty-client-DZ27IS00.js +1 -0
  104. package/dist/client/assets/ptyInstancesStore-D9ag7SYd.js +1 -0
  105. package/dist/client/assets/quadrantDiagram-34T5L4WZ-CHyVGp9E.js +7 -0
  106. package/dist/client/assets/radar-PYXPWWZC-Cp7xd_EY.js +1 -0
  107. package/dist/client/assets/react-CClhXMB2.js +1 -0
  108. package/dist/client/assets/react-Dd6D81m0.js +1 -0
  109. package/dist/client/assets/react-dom--G6_6fQ_.js +1 -0
  110. package/dist/client/assets/requirementDiagram-MS252O5E-DaanG2iM.js +84 -0
  111. package/dist/client/assets/rough.esm-BsmKo2S5.js +1 -0
  112. package/dist/client/assets/sankeyDiagram-XADWPNL6-B_fhLY36.js +10 -0
  113. package/dist/client/assets/sequenceDiagram-FGHM5R23-C5FNrveI.js +157 -0
  114. package/dist/client/assets/src-DeTlMJAU.js +1 -0
  115. package/dist/client/assets/stateDiagram-FHFEXIEX-nTTcdjjQ.js +1 -0
  116. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-Dw0632j_.js +1 -0
  117. package/dist/client/assets/timeline-definition-GMOUNBTQ-DkQV1yP8.js +120 -0
  118. package/dist/client/assets/treeView-SZITEDCU-ZLIgC7_K.js +1 -0
  119. package/dist/client/assets/treemap-W4RFUUIX-BqaMbB6N.js +1 -0
  120. package/dist/client/assets/uiIdentityOverlay-Ba7GNj7m.js +1 -0
  121. package/dist/client/assets/vennDiagram-DHZGUBPP-DbZ2xgs6.js +34 -0
  122. package/dist/client/assets/wardley-RL74JXVD-DXQS8zf4.js +1 -0
  123. package/dist/client/assets/wardleyDiagram-NUSXRM2D-BzCJ6MAu.js +20 -0
  124. package/dist/client/assets/xychartDiagram-5P7HB3ND-BSlFecop.js +7 -0
  125. package/dist/client/favicon.png +0 -0
  126. package/dist/client/favicon.svg +15 -0
  127. package/dist/client/fonts/body-medium.woff2 +0 -0
  128. package/dist/client/fonts/body-regular-italic.woff2 +0 -0
  129. package/dist/client/fonts/body-regular.woff2 +0 -0
  130. package/dist/client/fonts/body-semibold.woff2 +0 -0
  131. package/dist/client/index.html +31 -0
  132. package/dist/client/manifest.webmanifest +12 -0
  133. package/dist/client/sw.js +32 -0
  134. package/package.json +122 -0
  135. package/src/nats/auth-callout/callout-config.test.ts +93 -0
  136. package/src/nats/auth-callout/callout-config.ts +109 -0
  137. package/src/nats/auth-callout/callout.integration.test.ts +332 -0
  138. package/src/nats/auth-callout/keys.ts +103 -0
  139. package/src/nats/auth-callout/responder.ts +241 -0
  140. package/src/nats/auth-callout/scope-policy.test.ts +159 -0
  141. package/src/nats/auth-callout/scope-policy.ts +210 -0
  142. package/src/nats/auth-callout/token.test.ts +163 -0
  143. package/src/nats/auth-callout/token.ts +157 -0
  144. package/src/nats/nats-daemon-callout.ts +194 -0
  145. package/src/nats/nats-daemon.test.ts +77 -0
  146. package/src/nats/nats-daemon.ts +50 -0
  147. package/src/nats/nats-token.test.ts +61 -0
  148. package/src/nats/nats-token.ts +59 -0
  149. package/src/runner/coordination-mcp-integration.test.ts +134 -0
  150. package/src/runner/nats-coordination-client.test.ts +49 -0
  151. package/src/runner/nats-coordination-client.ts +94 -0
  152. package/src/runner/runner-agent.test.ts +469 -0
  153. package/src/runner/runner-agent.ts +453 -0
  154. package/src/runner/runner-credential.test.ts +93 -0
  155. package/src/runner/runner-credential.ts +82 -0
  156. package/src/runner/runner-nats.test.ts +495 -0
  157. package/src/runner/runner-nats.ts +323 -0
  158. package/src/runner/runner-pair.test.ts +107 -0
  159. package/src/runner/runner-pair.ts +81 -0
  160. package/src/runner/runner.test.ts +135 -0
  161. package/src/runner/runner.ts +212 -0
  162. package/src/runner/turn-factories.test.ts +97 -0
  163. package/src/runner/turn-factories.ts +475 -0
  164. package/src/server/agent-config-journey.test.ts +106 -0
  165. package/src/server/agent.ts +8 -0
  166. package/src/server/auto-continue/auth-error-detector.ts +66 -0
  167. package/src/server/auto-continue/limit-detector.ts +194 -0
  168. package/src/server/bm25.test.ts +92 -0
  169. package/src/server/bm25.ts +101 -0
  170. package/src/server/chat-events-jetstream.test.ts +135 -0
  171. package/src/server/claude-harness.ts +360 -0
  172. package/src/server/claude-pty/agent-normalizers.ts +309 -0
  173. package/src/server/claude-pty/auth.test.ts +38 -0
  174. package/src/server/claude-pty/auth.ts +32 -0
  175. package/src/server/claude-pty/claude-session-registry.adapter.ts +81 -0
  176. package/src/server/claude-pty/claude-session-registry.test.ts +149 -0
  177. package/src/server/claude-pty/driver.test.ts +902 -0
  178. package/src/server/claude-pty/driver.ts +807 -0
  179. package/src/server/claude-pty/jsonl-path.adapter.ts +57 -0
  180. package/src/server/claude-pty/jsonl-path.test.ts +114 -0
  181. package/src/server/claude-pty/jsonl-to-event.test.ts +241 -0
  182. package/src/server/claude-pty/jsonl-to-event.ts +174 -0
  183. package/src/server/claude-pty/output-ring.test.ts +35 -0
  184. package/src/server/claude-pty/output-ring.ts +25 -0
  185. package/src/server/claude-pty/parity-matrix.test.ts +227 -0
  186. package/src/server/claude-pty/pid-registry.adapter.ts +135 -0
  187. package/src/server/claude-pty/pid-registry.test.ts +122 -0
  188. package/src/server/claude-pty/preflight/binary-fingerprint.adapter.ts +20 -0
  189. package/src/server/claude-pty/preflight/binary-fingerprint.test.ts +32 -0
  190. package/src/server/claude-pty/pty-instance-registry.test.ts +177 -0
  191. package/src/server/claude-pty/pty-instance-registry.ts +166 -0
  192. package/src/server/claude-pty/pty-memory-sampler.adapter.test.ts +103 -0
  193. package/src/server/claude-pty/pty-memory-sampler.adapter.ts +85 -0
  194. package/src/server/claude-pty/pty-process.adapter.ts +66 -0
  195. package/src/server/claude-pty/pty-process.test.ts +49 -0
  196. package/src/server/claude-pty/resolve-binary.adapter.ts +106 -0
  197. package/src/server/claude-pty/resolve-binary.test.ts +118 -0
  198. package/src/server/claude-pty/runtime-dir.adapter.ts +19 -0
  199. package/src/server/claude-pty/settings-writer.adapter.ts +27 -0
  200. package/src/server/claude-pty/settings-writer.test.ts +22 -0
  201. package/src/server/claude-pty/smoke-test-io.adapter.ts +28 -0
  202. package/src/server/claude-pty/smoke-test.test.ts +191 -0
  203. package/src/server/claude-pty/smoke-test.ts +185 -0
  204. package/src/server/claude-pty/subagent-orchestrator.ts +887 -0
  205. package/src/server/claude-pty/tool-callback.ts +274 -0
  206. package/src/server/claude-pty/tui-control.test.ts +272 -0
  207. package/src/server/claude-pty/tui-control.ts +182 -0
  208. package/src/server/claude-pty/tui-source.adapter.test.ts +360 -0
  209. package/src/server/claude-pty/tui-source.adapter.ts +343 -0
  210. package/src/server/claude-pty/tunnel-gateway.ts +12 -0
  211. package/src/server/claude-pty-mcp/canonical-args.ts +15 -0
  212. package/src/server/claude-pty-mcp/fs-stat.adapter.ts +8 -0
  213. package/src/server/claude-pty-mcp/history-primer.ts +90 -0
  214. package/src/server/claude-pty-mcp/http-server.adapter.ts +33 -0
  215. package/src/server/claude-pty-mcp/mcp-http.ts +177 -0
  216. package/src/server/claude-pty-mcp/mcp.ts +412 -0
  217. package/src/server/claude-pty-mcp/mention-parser.ts +25 -0
  218. package/src/server/claude-pty-mcp/paths.ts +24 -0
  219. package/src/server/claude-pty-mcp/permission-gate.ts +243 -0
  220. package/src/server/claude-pty-mcp/terminal-pid-registry.adapter.ts +107 -0
  221. package/src/server/claude-pty-mcp/tools/ask-user-question.test.ts +119 -0
  222. package/src/server/claude-pty-mcp/tools/ask-user-question.ts +61 -0
  223. package/src/server/claude-pty-mcp/tools/bash.adapter.ts +76 -0
  224. package/src/server/claude-pty-mcp/tools/bash.test.ts +56 -0
  225. package/src/server/claude-pty-mcp/tools/delegate-subagent.test.ts +155 -0
  226. package/src/server/claude-pty-mcp/tools/delegate-subagent.ts +111 -0
  227. package/src/server/claude-pty-mcp/tools/edit.adapter.ts +95 -0
  228. package/src/server/claude-pty-mcp/tools/edit.test.ts +93 -0
  229. package/src/server/claude-pty-mcp/tools/exit-plan-mode.test.ts +61 -0
  230. package/src/server/claude-pty-mcp/tools/exit-plan-mode.ts +50 -0
  231. package/src/server/claude-pty-mcp/tools/glob.adapter.ts +86 -0
  232. package/src/server/claude-pty-mcp/tools/glob.test.ts +61 -0
  233. package/src/server/claude-pty-mcp/tools/grep.adapter.ts +126 -0
  234. package/src/server/claude-pty-mcp/tools/grep.test.ts +62 -0
  235. package/src/server/claude-pty-mcp/tools/read.adapter.ts +58 -0
  236. package/src/server/claude-pty-mcp/tools/read.test.ts +62 -0
  237. package/src/server/claude-pty-mcp/tools/tool-callback-shim.ts +42 -0
  238. package/src/server/claude-pty-mcp/tools/webfetch.test.ts +81 -0
  239. package/src/server/claude-pty-mcp/tools/webfetch.ts +82 -0
  240. package/src/server/claude-pty-mcp/tools/websearch.test.ts +40 -0
  241. package/src/server/claude-pty-mcp/tools/websearch.ts +42 -0
  242. package/src/server/claude-pty-mcp/tools/write.adapter.ts +60 -0
  243. package/src/server/claude-pty-mcp/tools/write.test.ts +52 -0
  244. package/src/server/claude-pty-mcp/uploads.adapter.ts +98 -0
  245. package/src/server/claude-pty-mcp/uploads.ts +38 -0
  246. package/src/server/claude-turn.test.ts +176 -0
  247. package/src/server/cli-runtime.test.ts +456 -0
  248. package/src/server/cli-runtime.ts +374 -0
  249. package/src/server/cli-supervisor.ts +81 -0
  250. package/src/server/cli.ts +78 -0
  251. package/src/server/client-log-forwarder.test.ts +74 -0
  252. package/src/server/client-log-forwarder.ts +75 -0
  253. package/src/server/codex-app-server-protocol.ts +449 -0
  254. package/src/server/codex-app-server.test.ts +2990 -0
  255. package/src/server/codex-app-server.ts +1713 -0
  256. package/src/server/coordination-integration.test.ts +63 -0
  257. package/src/server/coordination-mcp.test.ts +149 -0
  258. package/src/server/coordination-mcp.ts +197 -0
  259. package/src/server/delegation-coordinator.test.ts +675 -0
  260. package/src/server/delegation-coordinator.ts +454 -0
  261. package/src/server/discovery.test.ts +211 -0
  262. package/src/server/discovery.ts +301 -0
  263. package/src/server/event-store-agent-config.test.ts +124 -0
  264. package/src/server/event-store-coordination.test.ts +149 -0
  265. package/src/server/event-store-profile.test.ts +132 -0
  266. package/src/server/event-store-repo.test.ts +154 -0
  267. package/src/server/event-store-runner-team.test.ts +104 -0
  268. package/src/server/event-store.test.ts +342 -0
  269. package/src/server/event-store.ts +2208 -0
  270. package/src/server/events.ts +379 -0
  271. package/src/server/extension-router.test.ts +183 -0
  272. package/src/server/extension-router.ts +114 -0
  273. package/src/server/extensions/agents/server.test.ts +191 -0
  274. package/src/server/extensions/agents/server.ts +108 -0
  275. package/src/server/extensions/c3/server.test.ts +284 -0
  276. package/src/server/extensions/c3/server.ts +212 -0
  277. package/src/server/extensions/code/server.test.ts +200 -0
  278. package/src/server/extensions/code/server.ts +150 -0
  279. package/src/server/extensions.config.ts +10 -0
  280. package/src/server/external-open.ts +69 -0
  281. package/src/server/generate-fork-context.ts +58 -0
  282. package/src/server/generate-merge-context.test.ts +290 -0
  283. package/src/server/generate-merge-context.ts +141 -0
  284. package/src/server/generate-title.ts +36 -0
  285. package/src/server/git-clone-policy.test.ts +138 -0
  286. package/src/server/git-clone-policy.ts +27 -0
  287. package/src/server/harness-types.ts +1 -0
  288. package/src/server/journey-verification.test.ts +640 -0
  289. package/src/server/journey-verification.ts +195 -0
  290. package/src/server/machine-name.ts +22 -0
  291. package/src/server/nats-auth.test.ts +92 -0
  292. package/src/server/nats-auth.ts +6 -0
  293. package/src/server/nats-bind-guard.test.ts +71 -0
  294. package/src/server/nats-bind-guard.ts +42 -0
  295. package/src/server/nats-bridge.test.ts +141 -0
  296. package/src/server/nats-bridge.ts +111 -0
  297. package/src/server/nats-connector.test.ts +56 -0
  298. package/src/server/nats-connector.ts +71 -0
  299. package/src/server/nats-daemon-manager.test.ts +76 -0
  300. package/src/server/nats-daemon-manager.ts +174 -0
  301. package/src/server/nats-publisher.test.ts +356 -0
  302. package/src/server/nats-publisher.ts +271 -0
  303. package/src/server/nats-responders.test.ts +1018 -0
  304. package/src/server/nats-responders.ts +925 -0
  305. package/src/server/nats-streams.test.ts +112 -0
  306. package/src/server/nats-streams.ts +129 -0
  307. package/src/server/oauth-pool/oauth-responders.ts +185 -0
  308. package/src/server/oauth-pool/oauth-settings-store.ts +173 -0
  309. package/src/server/oauth-pool/oauth-token-pool.ts +303 -0
  310. package/src/server/orchestration.test.ts +1063 -0
  311. package/src/server/orchestration.ts +716 -0
  312. package/src/server/pairing-endpoints.test.ts +171 -0
  313. package/src/server/pairing-store.test.ts +154 -0
  314. package/src/server/pairing-store.ts +124 -0
  315. package/src/server/paths.ts +27 -0
  316. package/src/server/pr3-liveness.test.ts +252 -0
  317. package/src/server/process-utils.ts +10 -0
  318. package/src/server/project-cli.ts +180 -0
  319. package/src/server/provider-catalog.test.ts +177 -0
  320. package/src/server/provider-catalog.ts +146 -0
  321. package/src/server/pty-responders.ts +345 -0
  322. package/src/server/push-notifications.test.ts +234 -0
  323. package/src/server/push-notifications.ts +188 -0
  324. package/src/server/quick-response.test.ts +196 -0
  325. package/src/server/quick-response.ts +154 -0
  326. package/src/server/read-models-agent-config.test.ts +59 -0
  327. package/src/server/read-models-coordination.test.ts +69 -0
  328. package/src/server/read-models.test.ts +332 -0
  329. package/src/server/read-models.ts +258 -0
  330. package/src/server/repo-journey.test.ts +96 -0
  331. package/src/server/repo-manager.test.ts +118 -0
  332. package/src/server/repo-manager.ts +97 -0
  333. package/src/server/repo-status.test.ts +54 -0
  334. package/src/server/repo-status.ts +82 -0
  335. package/src/server/restart.test.ts +27 -0
  336. package/src/server/restart.ts +30 -0
  337. package/src/server/runner-incompatible-gate.test.ts +383 -0
  338. package/src/server/runner-manager.test.ts +72 -0
  339. package/src/server/runner-manager.ts +312 -0
  340. package/src/server/runner-pairing-urls.test.ts +59 -0
  341. package/src/server/runner-pairing-urls.ts +67 -0
  342. package/src/server/runner-proxy.test.ts +456 -0
  343. package/src/server/runner-proxy.ts +494 -0
  344. package/src/server/runner-router.test.ts +429 -0
  345. package/src/server/runner-router.ts +212 -0
  346. package/src/server/runner-routing.test.ts +584 -0
  347. package/src/server/runtime-registry.test.ts +436 -0
  348. package/src/server/runtime-registry.ts +307 -0
  349. package/src/server/sandbox-health.test.ts +127 -0
  350. package/src/server/sandbox-health.ts +94 -0
  351. package/src/server/sandbox-journey.test.ts +232 -0
  352. package/src/server/sandbox-manager.test.ts +146 -0
  353. package/src/server/sandbox-manager.ts +159 -0
  354. package/src/server/server.test.ts +287 -0
  355. package/src/server/server.ts +1108 -0
  356. package/src/server/session-discovery.test.ts +129 -0
  357. package/src/server/session-discovery.ts +475 -0
  358. package/src/server/session-index.test.ts +362 -0
  359. package/src/server/session-index.ts +119 -0
  360. package/src/server/session-seed.ts +288 -0
  361. package/src/server/share.test.ts +108 -0
  362. package/src/server/share.ts +113 -0
  363. package/src/server/skill-discovery.test.ts +201 -0
  364. package/src/server/skill-discovery.ts +77 -0
  365. package/src/server/storage/test-helpers.ts +67 -0
  366. package/src/server/terminal-manager.test.ts +309 -0
  367. package/src/server/terminal-manager.ts +354 -0
  368. package/src/server/transcript-consumer.test.ts +339 -0
  369. package/src/server/transcript-consumer.ts +162 -0
  370. package/src/server/transcript-search.test.ts +193 -0
  371. package/src/server/transcript-search.ts +83 -0
  372. package/src/server/transcript-utils.ts +52 -0
  373. package/src/server/update-manager.test.ts +107 -0
  374. package/src/server/update-manager.ts +230 -0
  375. package/src/server/workflow-engine.test.ts +251 -0
  376. package/src/server/workflow-engine.ts +169 -0
  377. package/src/server/workflow-mcp.ts +49 -0
  378. package/src/server/workflow-store.test.ts +155 -0
  379. package/src/server/workflow-store.ts +139 -0
  380. package/src/server/workspace-agent-integration.test.ts +167 -0
  381. package/src/server/workspace-agent-routes.test.ts +127 -0
  382. package/src/server/workspace-agent-routes.ts +89 -0
  383. package/src/server/workspace-agent.test.ts +103 -0
  384. package/src/server/workspace-agent.ts +102 -0
  385. package/src/server/workspace-cli.test.ts +79 -0
  386. package/src/server/workspace-config-manager.test.ts +109 -0
  387. package/src/server/workspace-config-manager.ts +83 -0
  388. package/src/server/workspace-directory-policy.test.ts +109 -0
  389. package/src/server/workspace-directory-policy.ts +56 -0
  390. package/src/shared/agent-config-types.ts +25 -0
  391. package/src/shared/branding.test.ts +42 -0
  392. package/src/shared/branding.ts +54 -0
  393. package/src/shared/compression.test.ts +85 -0
  394. package/src/shared/compression.ts +42 -0
  395. package/src/shared/coordination-store.test.ts +24 -0
  396. package/src/shared/coordination-store.ts +26 -0
  397. package/src/shared/dev-ports.test.ts +84 -0
  398. package/src/shared/dev-ports.ts +100 -0
  399. package/src/shared/extension-types.ts +45 -0
  400. package/src/shared/fork-presets.ts +54 -0
  401. package/src/shared/harness-types.test.ts +15 -0
  402. package/src/shared/harness-types.ts +21 -0
  403. package/src/shared/log-sink.test.ts +112 -0
  404. package/src/shared/log-sink.ts +185 -0
  405. package/src/shared/mention-pattern.ts +7 -0
  406. package/src/shared/merge-presets.ts +41 -0
  407. package/src/shared/nats-subjects.test.ts +61 -0
  408. package/src/shared/nats-subjects.ts +131 -0
  409. package/src/shared/permission-policy.ts +136 -0
  410. package/src/shared/ports.ts +3 -0
  411. package/src/shared/preset-types.ts +15 -0
  412. package/src/shared/profile-types.ts +49 -0
  413. package/src/shared/projectFileUrl.ts +36 -0
  414. package/src/shared/protocol.ts +153 -0
  415. package/src/shared/pty-instance.ts +43 -0
  416. package/src/shared/puggy/diagnostics/result.ts +18 -0
  417. package/src/shared/puggy/expressions/evaluate.ts +292 -0
  418. package/src/shared/puggy/index.test.ts +101 -0
  419. package/src/shared/puggy/index.ts +69 -0
  420. package/src/shared/puggy/parser/ast.ts +110 -0
  421. package/src/shared/puggy/parser/parser.ts +624 -0
  422. package/src/shared/puggy/renderer/html.ts +447 -0
  423. package/src/shared/runner-protocol.test.ts +277 -0
  424. package/src/shared/runner-protocol.ts +210 -0
  425. package/src/shared/runner-team-types.ts +73 -0
  426. package/src/shared/runtime-types.ts +48 -0
  427. package/src/shared/sandbox-types.ts +53 -0
  428. package/src/shared/tailwind-build.test.ts +12 -0
  429. package/src/shared/tinkaria-system-prompt.ts +101 -0
  430. package/src/shared/tools.test.ts +335 -0
  431. package/src/shared/tools.ts +397 -0
  432. package/src/shared/transcript-entries.ts +27 -0
  433. package/src/shared/transcript-render.test.ts +225 -0
  434. package/src/shared/transcript-render.ts +467 -0
  435. package/src/shared/types.ts +1031 -0
  436. package/src/shared/vite-config.test.ts +47 -0
  437. package/src/shared/web-context.test.ts +110 -0
  438. package/src/shared/web-context.ts +76 -0
  439. package/src/shared/workflow-types.ts +51 -0
  440. package/src/shared/workspace-types.ts +100 -0
@@ -0,0 +1,1031 @@
1
+ export const STORE_VERSION = 3 as const
2
+ export const PROTOCOL_VERSION = 1 as const
3
+
4
+ export type AgentProvider = "claude" | "codex" | "claude-pty"
5
+
6
+ // === OAuth token pool (claude-pty auth) ===
7
+
8
+ export type OAuthTokenStatus = "active" | "limited" | "error" | "disabled"
9
+
10
+ export interface OAuthTokenEntry {
11
+ id: string
12
+ label: string
13
+ token: string
14
+ status: OAuthTokenStatus
15
+ limitedUntil: number | null
16
+ lastUsedAt: number | null
17
+ lastErrorAt: number | null
18
+ lastErrorMessage: string | null
19
+ addedAt: number
20
+ /** Per-token concurrent-chat cap. Falls back to ClaudeAuthSettings.concurrencyDefault. */
21
+ maxConcurrent?: number
22
+ }
23
+
24
+ export interface ClaudeAuthSettings {
25
+ tokens: OAuthTokenEntry[]
26
+ concurrencyDefault: number
27
+ }
28
+
29
+ export const OAUTH_TOKEN_MAX_CONCURRENT_MIN = 1
30
+ export const OAUTH_TOKEN_MAX_CONCURRENT_MAX = 5
31
+ export const OAUTH_TOKEN_CONCURRENCY_DEFAULT = 1
32
+ export const OAUTH_TOKEN_LABEL_MAX = 64
33
+ export const OAUTH_TOKEN_VALUE_MAX = 1024
34
+
35
+ export const CLAUDE_AUTH_DEFAULTS: ClaudeAuthSettings = {
36
+ tokens: [],
37
+ concurrencyDefault: OAUTH_TOKEN_CONCURRENCY_DEFAULT,
38
+ }
39
+
40
+ export interface ProviderModelOption {
41
+ id: string
42
+ label: string
43
+ supportsEffort: boolean
44
+ contextWindowOptions?: readonly ProviderContextWindowOption[]
45
+ description?: string
46
+ supportedEffortLevels?: string[]
47
+ }
48
+
49
+ export interface ProviderEffortOption {
50
+ id: string
51
+ label: string
52
+ }
53
+
54
+ export interface ProviderContextWindowOption {
55
+ id: ClaudeContextWindow
56
+ label: string
57
+ }
58
+
59
+ export const CLAUDE_REASONING_OPTIONS = [
60
+ { id: "low", label: "Low" },
61
+ { id: "medium", label: "Medium" },
62
+ { id: "high", label: "High" },
63
+ { id: "max", label: "Max" },
64
+ ] as const satisfies readonly ProviderEffortOption[]
65
+
66
+ export const CODEX_REASONING_OPTIONS = [
67
+ { id: "minimal", label: "Minimal" },
68
+ { id: "low", label: "Low" },
69
+ { id: "medium", label: "Medium" },
70
+ { id: "high", label: "High" },
71
+ { id: "xhigh", label: "XHigh" },
72
+ ] as const satisfies readonly ProviderEffortOption[]
73
+
74
+ export type ClaudeReasoningEffort = (typeof CLAUDE_REASONING_OPTIONS)[number]["id"]
75
+ export type CodexReasoningEffort = (typeof CODEX_REASONING_OPTIONS)[number]["id"]
76
+ export type ClaudeContextWindow = "200k" | "1m"
77
+ export type ServiceTier = "fast"
78
+
79
+ export interface ClaudeModelOptions {
80
+ reasoningEffort: ClaudeReasoningEffort
81
+ contextWindow: ClaudeContextWindow
82
+ }
83
+
84
+ export interface CodexModelOptions {
85
+ reasoningEffort: CodexReasoningEffort
86
+ fastMode: boolean
87
+ }
88
+
89
+ export interface ClaudePtyModelOptions {
90
+ reasoningEffort: ClaudeReasoningEffort
91
+ contextWindow: ClaudeContextWindow
92
+ }
93
+
94
+ export interface ProviderModelOptionsByProvider {
95
+ claude: ClaudeModelOptions
96
+ codex: CodexModelOptions
97
+ "claude-pty": ClaudePtyModelOptions
98
+ }
99
+
100
+ export type ModelOptions = Partial<{
101
+ [K in AgentProvider]: Partial<ProviderModelOptionsByProvider[K]>
102
+ }>
103
+
104
+ export const DEFAULT_CLAUDE_MODEL_OPTIONS = {
105
+ reasoningEffort: "high",
106
+ contextWindow: "200k",
107
+ } as const satisfies ClaudeModelOptions
108
+
109
+ export const DEFAULT_CODEX_MODEL_OPTIONS = {
110
+ reasoningEffort: "high",
111
+ fastMode: false,
112
+ } as const satisfies CodexModelOptions
113
+
114
+ export const DEFAULT_CLAUDE_PTY_MODEL_OPTIONS = {
115
+ reasoningEffort: "high",
116
+ contextWindow: "200k",
117
+ } as const satisfies ClaudePtyModelOptions
118
+
119
+ export function isClaudeReasoningEffort(value: unknown): value is ClaudeReasoningEffort {
120
+ return CLAUDE_REASONING_OPTIONS.some((option) => option.id === value)
121
+ }
122
+
123
+ export function isCodexReasoningEffort(value: unknown): value is CodexReasoningEffort {
124
+ return CODEX_REASONING_OPTIONS.some((option) => option.id === value)
125
+ }
126
+
127
+ export const CLAUDE_CONTEXT_WINDOW_OPTIONS = [
128
+ { id: "200k", label: "200k" },
129
+ { id: "1m", label: "1M" },
130
+ ] as const satisfies readonly ProviderContextWindowOption[]
131
+
132
+ export function isClaudeContextWindow(value: unknown): value is ClaudeContextWindow {
133
+ return CLAUDE_CONTEXT_WINDOW_OPTIONS.some((option) => option.id === value)
134
+ }
135
+
136
+ export interface ProviderCatalogEntry {
137
+ id: AgentProvider
138
+ label: string
139
+ defaultModel: string
140
+ defaultEffort?: string
141
+ supportsPlanMode: boolean
142
+ models: ProviderModelOption[]
143
+ efforts: ProviderEffortOption[]
144
+ }
145
+
146
+ export const PROVIDERS: ProviderCatalogEntry[] = [
147
+ {
148
+ id: "claude",
149
+ label: "Claude",
150
+ defaultModel: "opus",
151
+ defaultEffort: "high",
152
+ supportsPlanMode: true,
153
+ models: [
154
+ { id: "opus", label: "Opus", supportsEffort: true, contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS] },
155
+ { id: "sonnet", label: "Sonnet", supportsEffort: true, contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS] },
156
+ { id: "haiku", label: "Haiku", supportsEffort: true },
157
+ ],
158
+ efforts: [...CLAUDE_REASONING_OPTIONS],
159
+ },
160
+ {
161
+ id: "codex",
162
+ label: "Codex",
163
+ defaultModel: "gpt-5.4",
164
+ supportsPlanMode: true,
165
+ models: [
166
+ { id: "gpt-5.4", label: "GPT-5.4", supportsEffort: false },
167
+ { id: "gpt-5.3-codex", label: "GPT-5.3 Codex", supportsEffort: false },
168
+ { id: "gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark", supportsEffort: false },
169
+ ],
170
+ efforts: [],
171
+ },
172
+ {
173
+ id: "claude-pty",
174
+ label: "Claude (PTY)",
175
+ defaultModel: "opus",
176
+ defaultEffort: "high",
177
+ supportsPlanMode: true,
178
+ models: [
179
+ { id: "opus", label: "Opus", supportsEffort: true, contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS] },
180
+ { id: "sonnet", label: "Sonnet", supportsEffort: true, contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS] },
181
+ { id: "haiku", label: "Haiku", supportsEffort: true },
182
+ ],
183
+ efforts: [...CLAUDE_REASONING_OPTIONS],
184
+ },
185
+ ]
186
+
187
+ export function getProviderCatalog(provider: AgentProvider): ProviderCatalogEntry {
188
+ const entry = PROVIDERS.find((candidate) => candidate.id === provider)
189
+ if (!entry) {
190
+ throw new Error(`Unknown provider: ${provider}`)
191
+ }
192
+ return entry
193
+ }
194
+
195
+ export function getClaudeModelOption(modelId: string): ProviderModelOption | undefined {
196
+ return getProviderCatalog("claude").models.find((candidate) => candidate.id === modelId)
197
+ }
198
+
199
+ export function getClaudeContextWindowOptions(modelId: string): readonly ProviderContextWindowOption[] {
200
+ return getClaudeModelOption(modelId)?.contextWindowOptions ?? []
201
+ }
202
+
203
+ export function normalizeClaudeContextWindow(modelId: string, contextWindow?: unknown): ClaudeContextWindow {
204
+ const options = getClaudeContextWindowOptions(modelId)
205
+ if (options.length === 0) return DEFAULT_CLAUDE_MODEL_OPTIONS.contextWindow
206
+ return options.some((option) => option.id === contextWindow)
207
+ ? contextWindow as ClaudeContextWindow
208
+ : DEFAULT_CLAUDE_MODEL_OPTIONS.contextWindow
209
+ }
210
+
211
+ export function resolveClaudeApiModelId(modelId: string, contextWindow?: ClaudeContextWindow): string {
212
+ return contextWindow === "1m" ? `${modelId}[1m]` : modelId
213
+ }
214
+
215
+ export type SessionStatus =
216
+ | "idle"
217
+ | "starting"
218
+ | "running"
219
+ | "waiting_for_user"
220
+ | "failed"
221
+ | "awaiting_agents"
222
+
223
+ export interface RepoSummary {
224
+ id: string
225
+ workspaceId: string
226
+ label: string | null
227
+ origin: string | null
228
+ localPath: string
229
+ status: "cloned" | "pending" | "error"
230
+ branch: string | null
231
+ }
232
+
233
+ export interface WorkspaceSummary {
234
+ id: string
235
+ localPath: string
236
+ title: string
237
+ createdAt: number
238
+ updatedAt: number
239
+ }
240
+
241
+ export interface SidebarChatRow {
242
+ _id: string
243
+ _creationTime: number
244
+ chatId: string
245
+ title: string
246
+ status: SessionStatus
247
+ unread: boolean
248
+ localPath: string
249
+ provider: AgentProvider | null
250
+ model?: string | null
251
+ lastMessageAt?: number
252
+ hasAutomation: boolean
253
+ }
254
+
255
+ export interface SidebarWorkspaceGroup {
256
+ groupKey: string
257
+ localPath: string
258
+ chats: SidebarChatRow[]
259
+ }
260
+
261
+ export interface SidebarData {
262
+ workspaceGroups: SidebarWorkspaceGroup[]
263
+ independentWorkspaces: IndependentWorkspace[]
264
+ }
265
+
266
+ export interface IndependentWorkspace {
267
+ id: string
268
+ name: string
269
+ createdAt: number
270
+ updatedAt: number
271
+ /** Pinned workspaces sort to the top. Absent = unpinned. */
272
+ pinned?: boolean
273
+ /** Explicit ordering within the pinned/unpinned group; lower renders higher. Absent sorts last. */
274
+ sortOrder?: number
275
+ }
276
+
277
+ /**
278
+ * Canonical ordering for independent workspaces, shared by the persisted
279
+ * snapshot and the client-facing sidebar read-model so both surfaces agree:
280
+ * pinned first, then explicit `sortOrder`, then creation time.
281
+ */
282
+ export function compareIndependentWorkspaces(a: IndependentWorkspace, b: IndependentWorkspace): number {
283
+ const aPinned = a.pinned ? 0 : 1
284
+ const bPinned = b.pinned ? 0 : 1
285
+ if (aPinned !== bPinned) return aPinned - bPinned
286
+ const aOrder = a.sortOrder ?? Number.MAX_SAFE_INTEGER
287
+ const bOrder = b.sortOrder ?? Number.MAX_SAFE_INTEGER
288
+ if (aOrder !== bOrder) return aOrder - bOrder
289
+ return a.createdAt - b.createdAt
290
+ }
291
+
292
+ export interface DiscoveredSessionRuntime {
293
+ model?: string
294
+ tokenUsage?: DiscoveredSessionTokenUsage
295
+ usageBuckets?: DiscoveredSessionUsageBucket[]
296
+ }
297
+
298
+ export interface DiscoveredSessionTokenUsage {
299
+ totalTokens: number
300
+ contextWindow?: number
301
+ contextLeft?: number
302
+ estimatedContextPercent?: number
303
+ }
304
+
305
+ export interface DiscoveredSessionUsageBucket {
306
+ label: string
307
+ usedPercent: number
308
+ }
309
+
310
+ export interface LocalWorkspaceSummary {
311
+ localPath: string
312
+ title: string
313
+ source: "saved" | "discovered"
314
+ lastOpenedAt?: number
315
+ chatCount: number
316
+ }
317
+
318
+ export interface LocalWorkspacesSnapshot {
319
+ machine: {
320
+ id: "local"
321
+ displayName: string
322
+ }
323
+ workspaces: LocalWorkspaceSummary[]
324
+ }
325
+
326
+ export type UpdateStatus =
327
+ | "idle"
328
+ | "checking"
329
+ | "available"
330
+ | "up_to_date"
331
+ | "updating"
332
+ | "restart_pending"
333
+ | "error"
334
+
335
+ export interface UpdateSnapshot {
336
+ currentVersion: string
337
+ latestVersion: string | null
338
+ status: UpdateStatus
339
+ updateAvailable: boolean
340
+ lastCheckedAt: number | null
341
+ error: string | null
342
+ installAction: "restart" | "reload"
343
+ }
344
+
345
+ export type UpdateInstallErrorCode =
346
+ | "version_not_live_yet"
347
+ | "install_failed"
348
+ | "command_missing"
349
+
350
+ export interface UpdateInstallResult {
351
+ ok: boolean
352
+ action: "restart" | "reload"
353
+ errorCode: UpdateInstallErrorCode | null
354
+ userTitle: string | null
355
+ userMessage: string | null
356
+ }
357
+
358
+ export interface McpServerInfo {
359
+ name: string
360
+ status: string
361
+ error?: string
362
+ }
363
+
364
+ export interface AccountInfo {
365
+ email?: string
366
+ organization?: string
367
+ subscriptionType?: string
368
+ tokenSource?: string
369
+ apiKeySource?: string
370
+ oauthKeyMasked?: string | null
371
+ accountLabel?: string | null
372
+ }
373
+
374
+ // === claude-pty additions ===
375
+
376
+ export interface SlashCommand {
377
+ name: string
378
+ description: string
379
+ argumentHint: string
380
+ }
381
+
382
+ export interface ContextWindowUsageSnapshot {
383
+ usedTokens: number
384
+ totalProcessedTokens?: number
385
+ maxTokens?: number
386
+ inputTokens?: number
387
+ cachedInputTokens?: number
388
+ outputTokens?: number
389
+ reasoningOutputTokens?: number
390
+ lastUsedTokens?: number
391
+ lastInputTokens?: number
392
+ lastCachedInputTokens?: number
393
+ lastOutputTokens?: number
394
+ lastReasoningOutputTokens?: number
395
+ toolUses?: number
396
+ durationMs?: number
397
+ compactsAutomatically: boolean
398
+ }
399
+
400
+ export type McpServerTransport = "stdio" | "http" | "sse" | "ws"
401
+
402
+ export type McpServerTestResult =
403
+ | { status: "untested" }
404
+ | { status: "pending"; startedAt: string }
405
+ | { status: "ok"; testedAt: string; toolCount: number }
406
+ | { status: "error"; testedAt: string; message: string }
407
+
408
+ export interface McpServerBaseFields {
409
+ id: string
410
+ name: string
411
+ enabled: boolean
412
+ createdAt: string
413
+ updatedAt: string
414
+ lastTest: McpServerTestResult
415
+ }
416
+
417
+ export interface McpServerStdioFields {
418
+ transport: "stdio"
419
+ command: string
420
+ args: string[]
421
+ env: Record<string, string>
422
+ cwd?: string
423
+ }
424
+
425
+ export interface McpServerNetworkFields {
426
+ transport: "http" | "sse" | "ws"
427
+ url: string
428
+ headers: Record<string, string>
429
+ }
430
+
431
+ export type McpServerConfig =
432
+ | (McpServerBaseFields & McpServerStdioFields)
433
+ | (McpServerBaseFields & McpServerNetworkFields)
434
+
435
+ export type AttachmentKind = "image" | "file"
436
+
437
+ export interface ChatAttachment {
438
+ id: string
439
+ kind: AttachmentKind
440
+ displayName: string
441
+ absolutePath: string
442
+ relativePath: string
443
+ contentUrl: string
444
+ mimeType: string
445
+ size: number
446
+ }
447
+
448
+ export type SubagentContextScope = "previous-assistant-reply" | "full-transcript"
449
+
450
+ export interface Subagent {
451
+ id: string
452
+ name: string
453
+ description?: string
454
+ provider: AgentProvider
455
+ model: string
456
+ modelOptions: ClaudeModelOptions | CodexModelOptions
457
+ systemPrompt: string
458
+ contextScope: SubagentContextScope
459
+ createdAt: number
460
+ updatedAt: number
461
+ }
462
+
463
+ export type KannaStatus =
464
+ | "idle"
465
+ | "starting"
466
+ | "running"
467
+ | "waiting_for_user"
468
+ | "failed"
469
+
470
+ export interface PendingToolSnapshot {
471
+ toolUseId: string
472
+ toolKind: "ask_user_question" | "exit_plan_mode"
473
+ }
474
+
475
+ export interface QueuedChatMessage {
476
+ id: string
477
+ content: string
478
+ attachments: ChatAttachment[]
479
+ createdAt: number
480
+ provider?: AgentProvider
481
+ model?: string
482
+ modelOptions?: ModelOptions
483
+ planMode?: boolean
484
+ autoContinue?: { scheduleId: string }
485
+ }
486
+
487
+ // === end claude-pty additions ===
488
+
489
+ export interface AskUserQuestionOption {
490
+ label: string
491
+ description?: string
492
+ }
493
+
494
+ export interface AskUserQuestionItem {
495
+ id?: string
496
+ question: string
497
+ header?: string
498
+ options?: AskUserQuestionOption[]
499
+ multiSelect?: boolean
500
+ }
501
+
502
+ export type AskUserQuestionAnswerMap = Record<string, string[]>
503
+
504
+ export interface TodoItem {
505
+ content: string
506
+ status: "pending" | "in_progress" | "completed"
507
+ activeForm: string
508
+ }
509
+
510
+ interface TranscriptEntryBase {
511
+ _id: string
512
+ messageId?: string
513
+ createdAt: number
514
+ hidden?: boolean
515
+ debugRaw?: string
516
+ }
517
+
518
+ interface ToolCallBase<TKind extends string, TInput> {
519
+ kind: "tool"
520
+ toolKind: TKind
521
+ toolName: string
522
+ toolId: string
523
+ input: TInput
524
+ rawInput?: Record<string, unknown>
525
+ }
526
+
527
+ export interface AskUserQuestionToolCall
528
+ extends ToolCallBase<"ask_user_question", { questions: AskUserQuestionItem[] }> { }
529
+
530
+ export interface PresentContentInput {
531
+ title: string
532
+ kind: "markdown" | "code" | "diagram"
533
+ format: string
534
+ source: string
535
+ summary?: string
536
+ collapsed?: boolean
537
+ }
538
+
539
+ export interface PresentContentToolCall
540
+ extends ToolCallBase<"present_content", PresentContentInput> { }
541
+
542
+ export interface ExitPlanModeToolCall
543
+ extends ToolCallBase<"exit_plan_mode", { plan?: string; summary?: string }> { }
544
+
545
+ export interface TodoWriteToolCall
546
+ extends ToolCallBase<"todo_write", { todos: TodoItem[] }> { }
547
+
548
+ export interface SkillToolCall
549
+ extends ToolCallBase<"skill", { skill: string }> { }
550
+
551
+ export interface GlobToolCall
552
+ extends ToolCallBase<"glob", { pattern: string }> { }
553
+
554
+ export interface GrepToolCall
555
+ extends ToolCallBase<"grep", { pattern: string; outputMode?: string }> { }
556
+
557
+ export interface BashToolCall
558
+ extends ToolCallBase<"bash", { command: string; description?: string; timeoutMs?: number; runInBackground?: boolean }> { }
559
+
560
+ export interface WebSearchToolCall
561
+ extends ToolCallBase<"web_search", { query: string }> { }
562
+
563
+ export interface ReadFileToolCall
564
+ extends ToolCallBase<"read_file", { filePath: string }> { }
565
+
566
+ export interface WriteFileToolCall
567
+ extends ToolCallBase<"write_file", { filePath: string; content: string }> { }
568
+
569
+ export interface EditFileToolCall
570
+ extends ToolCallBase<"edit_file", { filePath: string; oldString: string; newString: string }> { }
571
+
572
+ export interface SubagentTaskToolCall
573
+ extends ToolCallBase<"subagent_task", { subagentType?: string }> { }
574
+
575
+ export interface McpGenericToolCall
576
+ extends ToolCallBase<"mcp_generic", { server: string; tool: string; payload: Record<string, unknown> }> { }
577
+
578
+ export interface UnknownToolCall
579
+ extends ToolCallBase<"unknown_tool", { payload: Record<string, unknown> }> { }
580
+
581
+ export type NormalizedToolCall =
582
+ | AskUserQuestionToolCall
583
+ | PresentContentToolCall
584
+ | ExitPlanModeToolCall
585
+ | TodoWriteToolCall
586
+ | SkillToolCall
587
+ | GlobToolCall
588
+ | GrepToolCall
589
+ | BashToolCall
590
+ | WebSearchToolCall
591
+ | ReadFileToolCall
592
+ | WriteFileToolCall
593
+ | EditFileToolCall
594
+ | SubagentTaskToolCall
595
+ | McpGenericToolCall
596
+ | UnknownToolCall
597
+
598
+ export interface ToolResultEntry extends TranscriptEntryBase {
599
+ kind: "tool_result"
600
+ toolId: string
601
+ content: unknown
602
+ isError?: boolean
603
+ }
604
+
605
+ export interface UserPromptEntry extends TranscriptEntryBase {
606
+ kind: "user_prompt"
607
+ content: string
608
+ }
609
+
610
+ export interface SystemInitEntry extends TranscriptEntryBase {
611
+ kind: "system_init"
612
+ provider: AgentProvider
613
+ model: string
614
+ tools: string[]
615
+ agents: string[]
616
+ slashCommands: string[]
617
+ mcpServers: McpServerInfo[]
618
+ }
619
+
620
+ export interface AccountInfoEntry extends TranscriptEntryBase {
621
+ kind: "account_info"
622
+ accountInfo: AccountInfo
623
+ }
624
+
625
+ export interface AssistantTextEntry extends TranscriptEntryBase {
626
+ kind: "assistant_text"
627
+ text: string
628
+ }
629
+
630
+ export interface ToolCallEntry extends TranscriptEntryBase {
631
+ kind: "tool_call"
632
+ tool: NormalizedToolCall
633
+ }
634
+
635
+ export interface ResultEntry extends TranscriptEntryBase {
636
+ kind: "result"
637
+ subtype: "success" | "error" | "cancelled"
638
+ isError: boolean
639
+ durationMs: number
640
+ result: string
641
+ costUsd?: number
642
+ }
643
+
644
+ export interface StatusEntry extends TranscriptEntryBase {
645
+ kind: "status"
646
+ status: string
647
+ }
648
+
649
+ export interface CompactBoundaryEntry extends TranscriptEntryBase {
650
+ kind: "compact_boundary"
651
+ }
652
+
653
+ export interface CompactSummaryEntry extends TranscriptEntryBase {
654
+ kind: "compact_summary"
655
+ summary: string
656
+ }
657
+
658
+ export interface ContextClearedEntry extends TranscriptEntryBase {
659
+ kind: "context_cleared"
660
+ }
661
+
662
+ export interface InterruptedEntry extends TranscriptEntryBase {
663
+ kind: "interrupted"
664
+ }
665
+
666
+ export interface ContextUsageEntry extends TranscriptEntryBase {
667
+ kind: "context_usage"
668
+ contextUsage: {
669
+ percentage: number
670
+ totalTokens: number
671
+ maxTokens: number
672
+ }
673
+ }
674
+
675
+ export type DelegationMode = "blocking" | "background"
676
+ export type DelegationResumeMode = "immediate" | "gate"
677
+ export type DelegationStatus =
678
+ | "active"
679
+ | "completing"
680
+ | "completed"
681
+ | "failed"
682
+ | "orphaned"
683
+ | "stale"
684
+
685
+ export interface ContextWindowUpdatedEntry extends TranscriptEntryBase {
686
+ kind: "context_window_updated"
687
+ usage: ContextWindowUsageSnapshot
688
+ }
689
+
690
+ export interface RateLimitEntry extends TranscriptEntryBase {
691
+ kind: "rate_limit"
692
+ rateLimit: { resetAt: number; tz: string }
693
+ }
694
+
695
+ export interface AgentResultEntry extends TranscriptEntryBase {
696
+ kind: "agent_result"
697
+ delegationId: string
698
+ childChatId: string
699
+ childProvider: AgentProvider
700
+ mode: DelegationMode
701
+ instructionPreview: string
702
+ resumeHint?: string
703
+ resultSummary: string
704
+ resultRef?: string
705
+ isError: boolean
706
+ completedAt: number
707
+ }
708
+
709
+ export type TranscriptEntry =
710
+ | UserPromptEntry
711
+ | SystemInitEntry
712
+ | AccountInfoEntry
713
+ | AssistantTextEntry
714
+ | ToolCallEntry
715
+ | ToolResultEntry
716
+ | ResultEntry
717
+ | StatusEntry
718
+ | CompactBoundaryEntry
719
+ | CompactSummaryEntry
720
+ | ContextClearedEntry
721
+ | InterruptedEntry
722
+ | ContextUsageEntry
723
+ | ContextWindowUpdatedEntry
724
+ | RateLimitEntry
725
+ | AgentResultEntry
726
+
727
+ export interface HydratedToolCallBase<TKind extends string, TInput, TResult> {
728
+ id: string
729
+ messageId?: string
730
+ hidden?: boolean
731
+ kind: "tool"
732
+ toolKind: TKind
733
+ toolName: string
734
+ toolId: string
735
+ input: TInput
736
+ result?: TResult
737
+ rawResult?: unknown
738
+ isError?: boolean
739
+ timestamp: string
740
+ }
741
+
742
+ export interface AskUserQuestionToolResult {
743
+ answers: AskUserQuestionAnswerMap
744
+ discarded?: boolean
745
+ }
746
+
747
+ export interface PresentContentSuccessToolResult {
748
+ accepted: true
749
+ title: string
750
+ kind: "markdown" | "code" | "diagram"
751
+ format: string
752
+ source: string
753
+ summary?: string
754
+ collapsed?: boolean
755
+ }
756
+
757
+ export interface PresentContentValidationIssue {
758
+ path: string[]
759
+ code: string
760
+ message: string
761
+ }
762
+
763
+ export interface PresentContentSchemaValidationError {
764
+ source: "schema_validation"
765
+ schema: "present_content"
766
+ issues: PresentContentValidationIssue[]
767
+ }
768
+
769
+ export interface PresentContentErrorToolResult {
770
+ error: PresentContentSchemaValidationError
771
+ }
772
+
773
+ export type PresentContentToolResult =
774
+ | PresentContentSuccessToolResult
775
+ | PresentContentErrorToolResult
776
+
777
+ export interface ExitPlanModeToolResult {
778
+ confirmed?: boolean
779
+ clearContext?: boolean
780
+ message?: string
781
+ discarded?: boolean
782
+ }
783
+
784
+ export type HydratedAskUserQuestionToolCall =
785
+ HydratedToolCallBase<"ask_user_question", AskUserQuestionToolCall["input"], AskUserQuestionToolResult>
786
+
787
+ export type HydratedPresentContentToolCall =
788
+ HydratedToolCallBase<"present_content", PresentContentToolCall["input"], PresentContentToolResult>
789
+
790
+ export type HydratedExitPlanModeToolCall =
791
+ HydratedToolCallBase<"exit_plan_mode", ExitPlanModeToolCall["input"], ExitPlanModeToolResult>
792
+
793
+ export type HydratedTodoWriteToolCall =
794
+ HydratedToolCallBase<"todo_write", TodoWriteToolCall["input"], unknown>
795
+
796
+ export type HydratedSkillToolCall =
797
+ HydratedToolCallBase<"skill", SkillToolCall["input"], unknown>
798
+
799
+ export type HydratedGlobToolCall =
800
+ HydratedToolCallBase<"glob", GlobToolCall["input"], unknown>
801
+
802
+ export type HydratedGrepToolCall =
803
+ HydratedToolCallBase<"grep", GrepToolCall["input"], unknown>
804
+
805
+ export type HydratedBashToolCall =
806
+ HydratedToolCallBase<"bash", BashToolCall["input"], unknown>
807
+
808
+ export type HydratedWebSearchToolCall =
809
+ HydratedToolCallBase<"web_search", WebSearchToolCall["input"], unknown>
810
+
811
+ export interface ReadFileToolResult {
812
+ content: string
813
+ }
814
+
815
+ export interface ImageContentBlock {
816
+ mediaType: string
817
+ data: string
818
+ }
819
+
820
+ export interface ReadFileImageResult {
821
+ images: ImageContentBlock[]
822
+ text?: string
823
+ }
824
+
825
+ export function isReadFileImageResult(result: unknown): result is ReadFileImageResult {
826
+ return (
827
+ result !== null
828
+ && typeof result === "object"
829
+ && "images" in result
830
+ && Array.isArray(result.images)
831
+ )
832
+ }
833
+
834
+ export type HydratedReadFileToolCall =
835
+ HydratedToolCallBase<"read_file", ReadFileToolCall["input"], ReadFileToolResult | ReadFileImageResult | string>
836
+
837
+ export type HydratedWriteFileToolCall =
838
+ HydratedToolCallBase<"write_file", WriteFileToolCall["input"], unknown>
839
+
840
+ export type HydratedEditFileToolCall =
841
+ HydratedToolCallBase<"edit_file", EditFileToolCall["input"], unknown>
842
+
843
+ export type HydratedSubagentTaskToolCall =
844
+ HydratedToolCallBase<"subagent_task", SubagentTaskToolCall["input"], unknown>
845
+
846
+ export type HydratedMcpGenericToolCall =
847
+ HydratedToolCallBase<"mcp_generic", McpGenericToolCall["input"], unknown>
848
+
849
+ export type HydratedUnknownToolCall =
850
+ HydratedToolCallBase<"unknown_tool", UnknownToolCall["input"], unknown>
851
+
852
+ export type HydratedToolCall =
853
+ | HydratedAskUserQuestionToolCall
854
+ | HydratedPresentContentToolCall
855
+ | HydratedExitPlanModeToolCall
856
+ | HydratedTodoWriteToolCall
857
+ | HydratedSkillToolCall
858
+ | HydratedGlobToolCall
859
+ | HydratedGrepToolCall
860
+ | HydratedBashToolCall
861
+ | HydratedWebSearchToolCall
862
+ | HydratedReadFileToolCall
863
+ | HydratedWriteFileToolCall
864
+ | HydratedEditFileToolCall
865
+ | HydratedSubagentTaskToolCall
866
+ | HydratedMcpGenericToolCall
867
+ | HydratedUnknownToolCall
868
+
869
+ export type HydratedTranscriptMessage =
870
+ | ({ kind: "user_prompt"; content: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
871
+ | ({ kind: "system_init"; model: string; tools: string[]; agents: string[]; slashCommands: string[]; mcpServers: McpServerInfo[]; provider: AgentProvider; id: string; messageId?: string; timestamp: string; hidden?: boolean; debugRaw?: string })
872
+ | ({ kind: "account_info"; accountInfo: AccountInfo; id: string; messageId?: string; timestamp: string; hidden?: boolean })
873
+ | ({ kind: "assistant_text"; text: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
874
+ | ({ kind: "result"; success: boolean; cancelled?: boolean; result: string; durationMs: number; costUsd?: number; id: string; messageId?: string; timestamp: string; hidden?: boolean })
875
+ | ({ kind: "status"; status: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
876
+ | ({ kind: "compact_boundary"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
877
+ | ({ kind: "compact_summary"; summary: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
878
+ | ({ kind: "context_cleared"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
879
+ | ({ kind: "interrupted"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
880
+ | ({ kind: "unknown"; json: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
881
+ | ({ kind: "rate_limit"; rateLimit: { resetAt: number; tz: string }; id: string; messageId?: string; timestamp: string; hidden?: boolean })
882
+ | ({ id: string; messageId?: string; hidden?: boolean } & HydratedToolCall)
883
+
884
+ export type TranscriptRenderUnitKind =
885
+ | "user_prompt"
886
+ | "system_init"
887
+ | "account_info"
888
+ | "assistant_response"
889
+ | "wip_block"
890
+ | "tool_group"
891
+ | "standalone_tool"
892
+ | "artifact"
893
+ | "status"
894
+ | "result"
895
+ | "compact_boundary"
896
+ | "compact_summary"
897
+ | "context_cleared"
898
+ | "interrupted"
899
+ | "unknown"
900
+ | "rate_limit"
901
+
902
+ export interface TranscriptRenderUnitBase<TKind extends TranscriptRenderUnitKind> {
903
+ kind: TKind
904
+ id: string
905
+ sourceEntryIds: string[]
906
+ }
907
+
908
+ export type TranscriptSingleRenderUnit =
909
+ | (TranscriptRenderUnitBase<"user_prompt"> & { message: Extract<HydratedTranscriptMessage, { kind: "user_prompt" }> })
910
+ | (TranscriptRenderUnitBase<"system_init"> & { message: Extract<HydratedTranscriptMessage, { kind: "system_init" }> })
911
+ | (TranscriptRenderUnitBase<"account_info"> & { message: Extract<HydratedTranscriptMessage, { kind: "account_info" }> })
912
+ | (TranscriptRenderUnitBase<"assistant_response"> & { message: Extract<HydratedTranscriptMessage, { kind: "assistant_text" }> })
913
+ | (TranscriptRenderUnitBase<"standalone_tool"> & { tool: HydratedToolCall })
914
+ | (TranscriptRenderUnitBase<"artifact"> & { artifact: HydratedPresentContentToolCall })
915
+ | (TranscriptRenderUnitBase<"status"> & { message: Extract<HydratedTranscriptMessage, { kind: "status" }> })
916
+ | (TranscriptRenderUnitBase<"result"> & { message: Extract<HydratedTranscriptMessage, { kind: "result" }> })
917
+ | (TranscriptRenderUnitBase<"compact_boundary"> & { message: Extract<HydratedTranscriptMessage, { kind: "compact_boundary" }> })
918
+ | (TranscriptRenderUnitBase<"compact_summary"> & { message: Extract<HydratedTranscriptMessage, { kind: "compact_summary" }> })
919
+ | (TranscriptRenderUnitBase<"context_cleared"> & { message: Extract<HydratedTranscriptMessage, { kind: "context_cleared" }> })
920
+ | (TranscriptRenderUnitBase<"interrupted"> & { message: Extract<HydratedTranscriptMessage, { kind: "interrupted" }> })
921
+ | (TranscriptRenderUnitBase<"unknown"> & { message: Extract<HydratedTranscriptMessage, { kind: "unknown" }> })
922
+ | (TranscriptRenderUnitBase<"rate_limit"> & { message: Extract<HydratedTranscriptMessage, { kind: "rate_limit" }> })
923
+
924
+ export type TranscriptRenderUnit =
925
+ | TranscriptSingleRenderUnit
926
+ | (TranscriptRenderUnitBase<"wip_block"> & { steps: HydratedTranscriptMessage[] })
927
+ | (TranscriptRenderUnitBase<"tool_group"> & { tools: HydratedToolCall[] })
928
+
929
+ export interface ChatRuntime {
930
+ chatId: string
931
+ workspaceId: string
932
+ localPath: string
933
+ title: string
934
+ status: SessionStatus
935
+ provider: AgentProvider | null
936
+ model: string | null
937
+ planMode: boolean
938
+ sessionToken: string | null
939
+ }
940
+
941
+ export interface QueuedChatTurnSnapshot {
942
+ chatId: string
943
+ provider?: AgentProvider
944
+ content: string
945
+ model?: string
946
+ modelOptions?: ModelOptions
947
+ effort?: string
948
+ planMode?: boolean
949
+ updatedAt: number
950
+ }
951
+
952
+ export interface ChatSnapshot {
953
+ runtime: ChatRuntime
954
+ messageCount: number
955
+ renderUnits: TranscriptRenderUnit[]
956
+ availableProviders: ProviderCatalogEntry[]
957
+ availableSkills: string[]
958
+ queuedTurn: QueuedChatTurnSnapshot | null
959
+ }
960
+
961
+ export interface CurrentSessionSnapshot {
962
+ runtime: DiscoveredSessionRuntime | null
963
+ }
964
+
965
+ export interface CurrentRepoStatusSnapshot {
966
+ localPath: string
967
+ branch: string | null
968
+ stagedCount: number
969
+ unstagedCount: number
970
+ untrackedCount: number
971
+ ahead: number
972
+ behind: number
973
+ isRepo: boolean
974
+ }
975
+
976
+ export interface ChatMessageEvent {
977
+ chatId: string
978
+ entry: TranscriptEntry
979
+ }
980
+
981
+ export interface AppSnapshot {
982
+ sidebar: SidebarData
983
+ chat?: ChatSnapshot | null
984
+ }
985
+
986
+ export interface PendingToolSnapshot {
987
+ toolUseId: string
988
+ toolKind: "ask_user_question" | "exit_plan_mode"
989
+ }
990
+
991
+ export type OrchestrationChildStatus =
992
+ | "spawning"
993
+ | "running"
994
+ | "waiting"
995
+ | "completed"
996
+ | "failed"
997
+ | "closed"
998
+
999
+ export interface OrchestrationChildNode {
1000
+ chatId: string
1001
+ externalSessionId?: string
1002
+ status: OrchestrationChildStatus
1003
+ spawnedAt: number
1004
+ lastStatusAt: number
1005
+ instruction: string
1006
+ children: OrchestrationChildNode[]
1007
+ }
1008
+
1009
+ export interface OrchestrationHierarchySnapshot {
1010
+ children: OrchestrationChildNode[]
1011
+ }
1012
+
1013
+ export interface DurableDelegation {
1014
+ delegationId: string
1015
+ workspaceId: string
1016
+ parentChatId: string
1017
+ childChatId: string
1018
+ childProvider: AgentProvider
1019
+ instructionPreview: string
1020
+ mode: DelegationMode
1021
+ resume: DelegationResumeMode
1022
+ status: DelegationStatus
1023
+ depth: number
1024
+ resumeHint?: string
1025
+ resultSummary?: string
1026
+ resultRef?: string
1027
+ isError?: boolean
1028
+ agentResultEntryId?: string
1029
+ createdAt: number
1030
+ updatedAt: number
1031
+ }