@orion-agents/orion-code 0.1.9 → 0.2.0

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 (732) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +142 -323
  3. package/README.zh-CN.md +117 -578
  4. package/dist/cli.js +65 -84
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/context-commands.d.ts.map +1 -1
  7. package/dist/commands/context-commands.js +14 -7
  8. package/dist/commands/context-commands.js.map +1 -1
  9. package/dist/commands/context-tool-command-handlers.d.ts +4 -5
  10. package/dist/commands/context-tool-command-handlers.d.ts.map +1 -1
  11. package/dist/commands/context-tool-command-handlers.js +132 -208
  12. package/dist/commands/context-tool-command-handlers.js.map +1 -1
  13. package/dist/commands/core-command-handlers.d.ts +3 -6
  14. package/dist/commands/core-command-handlers.d.ts.map +1 -1
  15. package/dist/commands/core-command-handlers.js +66 -664
  16. package/dist/commands/core-command-handlers.js.map +1 -1
  17. package/dist/commands/diagnostic-command-handlers.d.ts +1 -2
  18. package/dist/commands/diagnostic-command-handlers.d.ts.map +1 -1
  19. package/dist/commands/diagnostic-command-handlers.js +3 -17
  20. package/dist/commands/diagnostic-command-handlers.js.map +1 -1
  21. package/dist/commands/diagnostic-commands.d.ts.map +1 -1
  22. package/dist/commands/diagnostic-commands.js +0 -45
  23. package/dist/commands/diagnostic-commands.js.map +1 -1
  24. package/dist/commands/index.d.ts +1 -1
  25. package/dist/commands/index.d.ts.map +1 -1
  26. package/dist/commands/index.js +2 -7
  27. package/dist/commands/index.js.map +1 -1
  28. package/dist/commands/model-command-handlers.d.ts +1 -1
  29. package/dist/commands/model-command-handlers.js +2 -2
  30. package/dist/commands/model-command-handlers.js.map +1 -1
  31. package/dist/commands/model-commands.d.ts.map +1 -1
  32. package/dist/commands/model-commands.js +0 -11
  33. package/dist/commands/model-commands.js.map +1 -1
  34. package/dist/commands/registry.d.ts.map +1 -1
  35. package/dist/commands/registry.js +1 -139
  36. package/dist/commands/registry.js.map +1 -1
  37. package/dist/commands/session-command-handlers.d.ts.map +1 -1
  38. package/dist/commands/session-command-handlers.js +29 -205
  39. package/dist/commands/session-command-handlers.js.map +1 -1
  40. package/dist/commands/session-commands.d.ts.map +1 -1
  41. package/dist/commands/session-commands.js +0 -48
  42. package/dist/commands/session-commands.js.map +1 -1
  43. package/dist/commands/target-command.d.ts +9 -15
  44. package/dist/commands/target-command.d.ts.map +1 -1
  45. package/dist/commands/target-command.js +16 -130
  46. package/dist/commands/target-command.js.map +1 -1
  47. package/dist/commands/tool-commands.d.ts.map +1 -1
  48. package/dist/commands/tool-commands.js +0 -10
  49. package/dist/commands/tool-commands.js.map +1 -1
  50. package/dist/commands/types.d.ts +8 -14
  51. package/dist/commands/types.d.ts.map +1 -1
  52. package/dist/commands/types.js +1 -1
  53. package/dist/commands/types.js.map +1 -1
  54. package/dist/commands/workflow-command-handlers.d.ts.map +1 -1
  55. package/dist/commands/workflow-command-handlers.js +1 -3
  56. package/dist/commands/workflow-command-handlers.js.map +1 -1
  57. package/dist/commands/workflow-commands.d.ts.map +1 -1
  58. package/dist/commands/workflow-commands.js +2 -24
  59. package/dist/commands/workflow-commands.js.map +1 -1
  60. package/dist/framework/agent-mode.d.ts +2 -3
  61. package/dist/framework/agent-mode.d.ts.map +1 -1
  62. package/dist/framework/agent-mode.js +8 -31
  63. package/dist/framework/agent-mode.js.map +1 -1
  64. package/dist/framework/index.d.ts +3 -3
  65. package/dist/framework/index.d.ts.map +1 -1
  66. package/dist/framework/index.js +6 -9
  67. package/dist/framework/index.js.map +1 -1
  68. package/dist/framework/loop-budget-contract.d.ts +20 -0
  69. package/dist/framework/loop-budget-contract.d.ts.map +1 -0
  70. package/dist/framework/loop-budget-contract.js +13 -0
  71. package/dist/framework/loop-budget-contract.js.map +1 -0
  72. package/dist/framework/prompt.d.ts.map +1 -1
  73. package/dist/framework/prompt.js +5 -4
  74. package/dist/framework/prompt.js.map +1 -1
  75. package/dist/framework/query.d.ts +45 -22
  76. package/dist/framework/query.d.ts.map +1 -1
  77. package/dist/framework/query.js +64 -52
  78. package/dist/framework/query.js.map +1 -1
  79. package/dist/framework/store.d.ts +4 -2
  80. package/dist/framework/store.d.ts.map +1 -1
  81. package/dist/framework/store.js +1 -0
  82. package/dist/framework/store.js.map +1 -1
  83. package/dist/framework/tool-call-orchestrator.d.ts +80 -0
  84. package/dist/framework/tool-call-orchestrator.d.ts.map +1 -0
  85. package/dist/framework/tool-call-orchestrator.js +192 -0
  86. package/dist/framework/tool-call-orchestrator.js.map +1 -0
  87. package/dist/framework/tool-state.d.ts +12 -11
  88. package/dist/framework/tool-state.d.ts.map +1 -1
  89. package/dist/framework/tool-state.js +36 -28
  90. package/dist/framework/tool-state.js.map +1 -1
  91. package/dist/framework/tool.d.ts +0 -9
  92. package/dist/framework/tool.d.ts.map +1 -1
  93. package/dist/framework/tool.js.map +1 -1
  94. package/dist/index.d.ts +70 -26
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +64 -65
  97. package/dist/index.js.map +1 -1
  98. package/dist/print-ui/launch.d.ts.map +1 -1
  99. package/dist/print-ui/launch.js +9 -2
  100. package/dist/print-ui/launch.js.map +1 -1
  101. package/dist/product/paths.d.ts +7 -0
  102. package/dist/product/paths.d.ts.map +1 -1
  103. package/dist/product/paths.js +19 -0
  104. package/dist/product/paths.js.map +1 -1
  105. package/dist/runtime/agent-loop.d.ts +78 -0
  106. package/dist/runtime/agent-loop.d.ts.map +1 -0
  107. package/dist/runtime/agent-loop.js +418 -0
  108. package/dist/runtime/agent-loop.js.map +1 -0
  109. package/dist/runtime/agent-runtime-controller.d.ts +10 -57
  110. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  111. package/dist/runtime/agent-runtime-controller.js +265 -1215
  112. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  113. package/dist/runtime/agent-runtime-protocol.d.ts +4 -5
  114. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  115. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  116. package/dist/runtime/agent-runtime-runner.d.ts +34 -0
  117. package/dist/runtime/agent-runtime-runner.d.ts.map +1 -0
  118. package/dist/runtime/agent-runtime-runner.js +3 -0
  119. package/dist/runtime/agent-runtime-runner.js.map +1 -0
  120. package/dist/runtime/batch-read-service.d.ts +29 -0
  121. package/dist/runtime/batch-read-service.d.ts.map +1 -0
  122. package/dist/runtime/batch-read-service.js +212 -0
  123. package/dist/runtime/batch-read-service.js.map +1 -0
  124. package/dist/runtime/builtin-tool-provider.d.ts +30 -0
  125. package/dist/runtime/builtin-tool-provider.d.ts.map +1 -0
  126. package/dist/runtime/builtin-tool-provider.js +233 -0
  127. package/dist/runtime/builtin-tool-provider.js.map +1 -0
  128. package/dist/runtime/capabilities/compiler.d.ts +11 -0
  129. package/dist/runtime/capabilities/compiler.d.ts.map +1 -0
  130. package/dist/runtime/capabilities/compiler.js +719 -0
  131. package/dist/runtime/capabilities/compiler.js.map +1 -0
  132. package/dist/runtime/capabilities/index.d.ts +3 -0
  133. package/dist/runtime/capabilities/index.d.ts.map +1 -0
  134. package/dist/runtime/capabilities/index.js +9 -0
  135. package/dist/runtime/capabilities/index.js.map +1 -0
  136. package/dist/runtime/capabilities/types.d.ts +175 -0
  137. package/dist/runtime/capabilities/types.d.ts.map +1 -0
  138. package/dist/runtime/capabilities/types.js +3 -0
  139. package/dist/runtime/capabilities/types.js.map +1 -0
  140. package/dist/runtime/capability-receipt-journal.d.ts +29 -0
  141. package/dist/runtime/capability-receipt-journal.d.ts.map +1 -0
  142. package/dist/runtime/capability-receipt-journal.js +264 -0
  143. package/dist/runtime/capability-receipt-journal.js.map +1 -0
  144. package/dist/runtime/capability-step-factory.d.ts +73 -0
  145. package/dist/runtime/capability-step-factory.d.ts.map +1 -0
  146. package/dist/runtime/capability-step-factory.js +302 -0
  147. package/dist/runtime/capability-step-factory.js.map +1 -0
  148. package/dist/runtime/compact-transaction.d.ts +225 -0
  149. package/dist/runtime/compact-transaction.d.ts.map +1 -0
  150. package/dist/runtime/compact-transaction.js +622 -0
  151. package/dist/runtime/compact-transaction.js.map +1 -0
  152. package/dist/runtime/composer/buffer.d.ts +3 -4
  153. package/dist/runtime/composer/buffer.d.ts.map +1 -1
  154. package/dist/runtime/composer/buffer.js +3 -4
  155. package/dist/runtime/composer/buffer.js.map +1 -1
  156. package/dist/runtime/composer/grapheme.d.ts +2 -4
  157. package/dist/runtime/composer/grapheme.d.ts.map +1 -1
  158. package/dist/runtime/composer/grapheme.js +2 -4
  159. package/dist/runtime/composer/grapheme.js.map +1 -1
  160. package/dist/runtime/composer/layout.d.ts +1 -3
  161. package/dist/runtime/composer/layout.d.ts.map +1 -1
  162. package/dist/runtime/composer/layout.js +1 -3
  163. package/dist/runtime/composer/layout.js.map +1 -1
  164. package/dist/runtime/core-tools/descriptors.d.ts +17 -0
  165. package/dist/runtime/core-tools/descriptors.d.ts.map +1 -0
  166. package/dist/runtime/core-tools/descriptors.js +185 -0
  167. package/dist/runtime/core-tools/descriptors.js.map +1 -0
  168. package/dist/runtime/first-party-core-provider.d.ts +55 -0
  169. package/dist/runtime/first-party-core-provider.d.ts.map +1 -0
  170. package/dist/runtime/first-party-core-provider.js +197 -0
  171. package/dist/runtime/first-party-core-provider.js.map +1 -0
  172. package/dist/runtime/first-party-long-tail-provider.d.ts +57 -0
  173. package/dist/runtime/first-party-long-tail-provider.d.ts.map +1 -0
  174. package/dist/runtime/first-party-long-tail-provider.js +238 -0
  175. package/dist/runtime/first-party-long-tail-provider.js.map +1 -0
  176. package/dist/runtime/first-party-tool-services.d.ts +43 -0
  177. package/dist/runtime/first-party-tool-services.d.ts.map +1 -0
  178. package/dist/runtime/first-party-tool-services.js +200 -0
  179. package/dist/runtime/first-party-tool-services.js.map +1 -0
  180. package/dist/runtime/first-party-tool-universe.d.ts +14 -0
  181. package/dist/runtime/first-party-tool-universe.d.ts.map +1 -0
  182. package/dist/runtime/first-party-tool-universe.js +20 -0
  183. package/dist/runtime/first-party-tool-universe.js.map +1 -0
  184. package/dist/runtime/goal-lifecycle-v2.d.ts +63 -0
  185. package/dist/runtime/goal-lifecycle-v2.d.ts.map +1 -0
  186. package/dist/runtime/goal-lifecycle-v2.js +253 -0
  187. package/dist/runtime/goal-lifecycle-v2.js.map +1 -0
  188. package/dist/runtime/goal-runtime-coordinator.d.ts +105 -0
  189. package/dist/runtime/goal-runtime-coordinator.d.ts.map +1 -0
  190. package/dist/runtime/goal-runtime-coordinator.js +506 -0
  191. package/dist/runtime/goal-runtime-coordinator.js.map +1 -0
  192. package/dist/runtime/harness-confluence.d.ts +165 -0
  193. package/dist/runtime/harness-confluence.d.ts.map +1 -0
  194. package/dist/runtime/harness-confluence.js +807 -0
  195. package/dist/runtime/harness-confluence.js.map +1 -0
  196. package/dist/runtime/harness-eval.d.ts +96 -0
  197. package/dist/runtime/harness-eval.d.ts.map +1 -0
  198. package/dist/runtime/harness-eval.js +181 -0
  199. package/dist/runtime/harness-eval.js.map +1 -0
  200. package/dist/runtime/harness-metrics.d.ts +202 -0
  201. package/dist/runtime/harness-metrics.d.ts.map +1 -0
  202. package/dist/runtime/harness-metrics.js +415 -0
  203. package/dist/runtime/harness-metrics.js.map +1 -0
  204. package/dist/runtime/legacy-session-importer.d.ts +99 -0
  205. package/dist/runtime/legacy-session-importer.d.ts.map +1 -0
  206. package/dist/runtime/legacy-session-importer.js +455 -0
  207. package/dist/runtime/legacy-session-importer.js.map +1 -0
  208. package/dist/runtime/legacy-thread-materializer.d.ts +72 -0
  209. package/dist/runtime/legacy-thread-materializer.d.ts.map +1 -0
  210. package/dist/runtime/legacy-thread-materializer.js +553 -0
  211. package/dist/runtime/legacy-thread-materializer.js.map +1 -0
  212. package/dist/runtime/long-tail-tools/descriptors.d.ts +23 -0
  213. package/dist/runtime/long-tail-tools/descriptors.d.ts.map +1 -0
  214. package/dist/runtime/long-tail-tools/descriptors.js +423 -0
  215. package/dist/runtime/long-tail-tools/descriptors.js.map +1 -0
  216. package/dist/runtime/loop-budget.d.ts +1 -1
  217. package/dist/runtime/loop-budget.d.ts.map +1 -1
  218. package/dist/runtime/loop-budget.js +2 -2
  219. package/dist/runtime/loop-budget.js.map +1 -1
  220. package/dist/runtime/mcp/first-party-mcp-adapter.d.ts +75 -0
  221. package/dist/runtime/mcp/first-party-mcp-adapter.d.ts.map +1 -0
  222. package/dist/runtime/mcp/first-party-mcp-adapter.js +484 -0
  223. package/dist/runtime/mcp/first-party-mcp-adapter.js.map +1 -0
  224. package/dist/runtime/mcp/first-party-mcp-config.d.ts +13 -0
  225. package/dist/runtime/mcp/first-party-mcp-config.d.ts.map +1 -0
  226. package/dist/runtime/mcp/first-party-mcp-config.js +139 -0
  227. package/dist/runtime/mcp/first-party-mcp-config.js.map +1 -0
  228. package/dist/runtime/mcp/index.d.ts +5 -0
  229. package/dist/runtime/mcp/index.d.ts.map +1 -0
  230. package/dist/{skills → runtime/mcp}/index.js +3 -9
  231. package/dist/runtime/mcp/index.js.map +1 -0
  232. package/dist/runtime/mcp/lazy-mcp-runtime.d.ts +95 -0
  233. package/dist/runtime/mcp/lazy-mcp-runtime.d.ts.map +1 -0
  234. package/dist/runtime/mcp/lazy-mcp-runtime.js +854 -0
  235. package/dist/runtime/mcp/lazy-mcp-runtime.js.map +1 -0
  236. package/dist/runtime/mcp/types.d.ts +128 -0
  237. package/dist/runtime/mcp/types.d.ts.map +1 -0
  238. package/dist/runtime/mcp/types.js +5 -0
  239. package/dist/runtime/mcp/types.js.map +1 -0
  240. package/dist/runtime/orion-runtime-v1.d.ts +321 -0
  241. package/dist/runtime/orion-runtime-v1.d.ts.map +1 -0
  242. package/dist/runtime/orion-runtime-v1.js +958 -0
  243. package/dist/runtime/orion-runtime-v1.js.map +1 -0
  244. package/dist/runtime/orion-session-runner.d.ts +37 -0
  245. package/dist/runtime/orion-session-runner.d.ts.map +1 -0
  246. package/dist/runtime/orion-session-runner.js +146 -0
  247. package/dist/runtime/orion-session-runner.js.map +1 -0
  248. package/dist/runtime/product-orion-runtime.d.ts +35 -0
  249. package/dist/runtime/product-orion-runtime.d.ts.map +1 -0
  250. package/dist/runtime/product-orion-runtime.js +1019 -0
  251. package/dist/runtime/product-orion-runtime.js.map +1 -0
  252. package/dist/runtime/prompts/index.d.ts +3 -0
  253. package/dist/runtime/prompts/index.d.ts.map +1 -0
  254. package/dist/{ink-ui/types.js → runtime/prompts/index.js} +3 -2
  255. package/dist/runtime/prompts/index.js.map +1 -0
  256. package/dist/runtime/prompts/prompt-registry.d.ts +22 -0
  257. package/dist/runtime/prompts/prompt-registry.d.ts.map +1 -0
  258. package/dist/runtime/prompts/prompt-registry.js +356 -0
  259. package/dist/runtime/prompts/prompt-registry.js.map +1 -0
  260. package/dist/runtime/prompts/types.d.ts +111 -0
  261. package/dist/runtime/prompts/types.d.ts.map +1 -0
  262. package/dist/runtime/prompts/types.js +5 -0
  263. package/dist/runtime/prompts/types.js.map +1 -0
  264. package/dist/runtime/protocol/canonical.d.ts +3 -0
  265. package/dist/runtime/protocol/canonical.d.ts.map +1 -0
  266. package/dist/runtime/protocol/canonical.js +21 -0
  267. package/dist/runtime/protocol/canonical.js.map +1 -0
  268. package/dist/runtime/protocol/index.d.ts +4 -0
  269. package/dist/runtime/protocol/index.d.ts.map +1 -0
  270. package/dist/runtime/protocol/index.js +16 -0
  271. package/dist/runtime/protocol/index.js.map +1 -0
  272. package/dist/runtime/protocol/runtime-protocol-v1.d.ts +671 -0
  273. package/dist/runtime/protocol/runtime-protocol-v1.d.ts.map +1 -0
  274. package/dist/runtime/protocol/runtime-protocol-v1.js +557 -0
  275. package/dist/runtime/protocol/runtime-protocol-v1.js.map +1 -0
  276. package/dist/runtime/release-receipts.d.ts +109 -0
  277. package/dist/runtime/release-receipts.d.ts.map +1 -0
  278. package/dist/runtime/release-receipts.js +304 -0
  279. package/dist/runtime/release-receipts.js.map +1 -0
  280. package/dist/runtime/resource-scope.d.ts +123 -0
  281. package/dist/runtime/resource-scope.d.ts.map +1 -0
  282. package/dist/runtime/resource-scope.js +363 -0
  283. package/dist/runtime/resource-scope.js.map +1 -0
  284. package/dist/runtime/runtime-event-buffer.d.ts +78 -0
  285. package/dist/runtime/runtime-event-buffer.d.ts.map +1 -0
  286. package/dist/runtime/runtime-event-buffer.js +237 -0
  287. package/dist/runtime/runtime-event-buffer.js.map +1 -0
  288. package/dist/runtime/runtime-services.d.ts +87 -0
  289. package/dist/runtime/runtime-services.d.ts.map +1 -0
  290. package/dist/runtime/runtime-services.js +180 -0
  291. package/dist/runtime/runtime-services.js.map +1 -0
  292. package/dist/runtime/skills/bounded-lru-cache.d.ts +34 -0
  293. package/dist/runtime/skills/bounded-lru-cache.d.ts.map +1 -0
  294. package/dist/runtime/skills/bounded-lru-cache.js +100 -0
  295. package/dist/runtime/skills/bounded-lru-cache.js.map +1 -0
  296. package/dist/runtime/skills/filesystem-skill-provider.d.ts +96 -0
  297. package/dist/runtime/skills/filesystem-skill-provider.d.ts.map +1 -0
  298. package/dist/runtime/skills/filesystem-skill-provider.js +829 -0
  299. package/dist/runtime/skills/filesystem-skill-provider.js.map +1 -0
  300. package/dist/runtime/skills/index.d.ts +5 -0
  301. package/dist/runtime/skills/index.d.ts.map +1 -0
  302. package/dist/{ink-ui/controllers/chat-controller.js → runtime/skills/index.js} +5 -2
  303. package/dist/runtime/skills/index.js.map +1 -0
  304. package/dist/runtime/skills/lazy-skill-runtime.d.ts +77 -0
  305. package/dist/runtime/skills/lazy-skill-runtime.d.ts.map +1 -0
  306. package/dist/runtime/skills/lazy-skill-runtime.js +673 -0
  307. package/dist/runtime/skills/lazy-skill-runtime.js.map +1 -0
  308. package/dist/runtime/skills/types.d.ts +137 -0
  309. package/dist/runtime/skills/types.d.ts.map +1 -0
  310. package/dist/runtime/skills/types.js +13 -0
  311. package/dist/runtime/skills/types.js.map +1 -0
  312. package/dist/runtime/step-snapshot.d.ts +183 -0
  313. package/dist/runtime/step-snapshot.d.ts.map +1 -0
  314. package/dist/runtime/step-snapshot.js +286 -0
  315. package/dist/runtime/step-snapshot.js.map +1 -0
  316. package/dist/runtime/subagent-thread-runtime.d.ts +239 -0
  317. package/dist/runtime/subagent-thread-runtime.d.ts.map +1 -0
  318. package/dist/runtime/subagent-thread-runtime.js +876 -0
  319. package/dist/runtime/subagent-thread-runtime.js.map +1 -0
  320. package/dist/runtime/subagents/index.d.ts +4 -1
  321. package/dist/runtime/subagents/index.d.ts.map +1 -1
  322. package/dist/runtime/subagents/index.js +10 -2
  323. package/dist/runtime/subagents/index.js.map +1 -1
  324. package/dist/runtime/subagents/parent-step-fork.d.ts +36 -0
  325. package/dist/runtime/subagents/parent-step-fork.d.ts.map +1 -0
  326. package/dist/runtime/subagents/parent-step-fork.js +83 -0
  327. package/dist/runtime/subagents/parent-step-fork.js.map +1 -0
  328. package/dist/runtime/subagents/production.d.ts +65 -46
  329. package/dist/runtime/subagents/production.d.ts.map +1 -1
  330. package/dist/runtime/subagents/production.js +494 -170
  331. package/dist/runtime/subagents/production.js.map +1 -1
  332. package/dist/runtime/subagents/receipt-journal.d.ts +20 -0
  333. package/dist/runtime/subagents/receipt-journal.d.ts.map +1 -0
  334. package/dist/runtime/subagents/receipt-journal.js +74 -0
  335. package/dist/runtime/subagents/receipt-journal.js.map +1 -0
  336. package/dist/runtime/subagents/runtime-contract.d.ts +29 -0
  337. package/dist/runtime/subagents/runtime-contract.d.ts.map +1 -0
  338. package/dist/runtime/subagents/runtime-contract.js +3 -0
  339. package/dist/runtime/subagents/runtime-contract.js.map +1 -0
  340. package/dist/runtime/subagents/runtime-integration.d.ts +41 -56
  341. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
  342. package/dist/runtime/subagents/runtime-integration.js +34 -198
  343. package/dist/runtime/subagents/runtime-integration.js.map +1 -1
  344. package/dist/runtime/subagents/supervisor.d.ts +19 -7
  345. package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
  346. package/dist/runtime/subagents/supervisor.js +83 -40
  347. package/dist/runtime/subagents/supervisor.js.map +1 -1
  348. package/dist/runtime/subagents/types.d.ts +1 -1
  349. package/dist/runtime/subagents/types.js +1 -1
  350. package/dist/runtime/task-context-service.d.ts +91 -0
  351. package/dist/runtime/task-context-service.d.ts.map +1 -0
  352. package/dist/runtime/task-context-service.js +122 -0
  353. package/dist/runtime/task-context-service.js.map +1 -0
  354. package/dist/runtime/thread-admission.d.ts +130 -0
  355. package/dist/runtime/thread-admission.d.ts.map +1 -0
  356. package/dist/runtime/thread-admission.js +276 -0
  357. package/dist/runtime/thread-admission.js.map +1 -0
  358. package/dist/runtime/thread-compact-persistence.d.ts +50 -0
  359. package/dist/runtime/thread-compact-persistence.d.ts.map +1 -0
  360. package/dist/runtime/thread-compact-persistence.js +176 -0
  361. package/dist/runtime/thread-compact-persistence.js.map +1 -0
  362. package/dist/runtime/thread-event-store.d.ts +98 -0
  363. package/dist/runtime/thread-event-store.d.ts.map +1 -0
  364. package/dist/runtime/thread-event-store.js +737 -0
  365. package/dist/runtime/thread-event-store.js.map +1 -0
  366. package/dist/runtime/thread-projection.d.ts +91 -0
  367. package/dist/runtime/thread-projection.d.ts.map +1 -0
  368. package/dist/runtime/thread-projection.js +407 -0
  369. package/dist/runtime/thread-projection.js.map +1 -0
  370. package/dist/runtime/thread-runtime.d.ts +165 -0
  371. package/dist/runtime/thread-runtime.d.ts.map +1 -0
  372. package/dist/runtime/thread-runtime.js +704 -0
  373. package/dist/runtime/thread-runtime.js.map +1 -0
  374. package/dist/runtime/thread-tool-journal.d.ts +11 -0
  375. package/dist/runtime/thread-tool-journal.d.ts.map +1 -0
  376. package/dist/runtime/thread-tool-journal.js +131 -0
  377. package/dist/runtime/thread-tool-journal.js.map +1 -0
  378. package/dist/runtime/thread-ui-adapter.d.ts +85 -0
  379. package/dist/runtime/thread-ui-adapter.d.ts.map +1 -0
  380. package/dist/runtime/thread-ui-adapter.js +514 -0
  381. package/dist/runtime/thread-ui-adapter.js.map +1 -0
  382. package/dist/runtime/tool-gateway.d.ts +159 -0
  383. package/dist/runtime/tool-gateway.d.ts.map +1 -0
  384. package/dist/runtime/tool-gateway.js +311 -0
  385. package/dist/runtime/tool-gateway.js.map +1 -0
  386. package/dist/runtime/turn-commit.d.ts +103 -0
  387. package/dist/runtime/turn-commit.d.ts.map +1 -0
  388. package/dist/runtime/turn-commit.js +321 -0
  389. package/dist/runtime/turn-commit.js.map +1 -0
  390. package/dist/runtime/ui-events.d.ts +13 -5
  391. package/dist/runtime/ui-events.d.ts.map +1 -1
  392. package/dist/runtime/ui-events.js +0 -1
  393. package/dist/runtime/ui-events.js.map +1 -1
  394. package/dist/runtime/ui-view-model.d.ts +1 -1
  395. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  396. package/dist/runtime/ui-view-model.js +3 -5
  397. package/dist/runtime/ui-view-model.js.map +1 -1
  398. package/dist/services/config-dir.d.ts +1 -1
  399. package/dist/services/config-dir.d.ts.map +1 -1
  400. package/dist/services/config-dir.js +2 -1
  401. package/dist/services/config-dir.js.map +1 -1
  402. package/dist/services/config.d.ts +2 -16
  403. package/dist/services/config.d.ts.map +1 -1
  404. package/dist/services/config.js +2 -29
  405. package/dist/services/config.js.map +1 -1
  406. package/dist/services/doctor.d.ts +0 -2
  407. package/dist/services/doctor.d.ts.map +1 -1
  408. package/dist/services/doctor.js +39 -64
  409. package/dist/services/doctor.js.map +1 -1
  410. package/dist/services/global-config.d.ts +2 -2
  411. package/dist/services/global-config.d.ts.map +1 -1
  412. package/dist/skills/builtin/code-review/SKILL.md +51 -0
  413. package/dist/skills/builtin/security-check/SKILL.md +54 -0
  414. package/dist/skills/builtin/test-gen/SKILL.md +49 -0
  415. package/dist/terminal-ui/launch.d.ts +3 -1
  416. package/dist/terminal-ui/launch.d.ts.map +1 -1
  417. package/dist/terminal-ui/launch.js +19 -3
  418. package/dist/terminal-ui/launch.js.map +1 -1
  419. package/dist/tools/core/common.d.ts +34 -0
  420. package/dist/tools/core/common.d.ts.map +1 -0
  421. package/dist/tools/core/common.js +164 -0
  422. package/dist/tools/core/common.js.map +1 -0
  423. package/dist/tools/core/edit-file.d.ts +10 -0
  424. package/dist/tools/core/edit-file.d.ts.map +1 -0
  425. package/dist/tools/core/edit-file.js +301 -0
  426. package/dist/tools/core/edit-file.js.map +1 -0
  427. package/dist/tools/core/exec-command.d.ts +2 -0
  428. package/dist/tools/core/exec-command.d.ts.map +1 -0
  429. package/dist/tools/core/exec-command.js +347 -0
  430. package/dist/tools/core/exec-command.js.map +1 -0
  431. package/dist/tools/core/glob.d.ts +2 -0
  432. package/dist/tools/core/glob.d.ts.map +1 -0
  433. package/dist/tools/core/glob.js +133 -0
  434. package/dist/tools/core/glob.js.map +1 -0
  435. package/dist/tools/core/grep.d.ts +12 -0
  436. package/dist/tools/core/grep.d.ts.map +1 -0
  437. package/dist/tools/core/grep.js +223 -0
  438. package/dist/tools/core/grep.js.map +1 -0
  439. package/dist/tools/core/index.d.ts +15 -0
  440. package/dist/tools/core/index.d.ts.map +1 -0
  441. package/dist/tools/core/index.js +31 -0
  442. package/dist/tools/core/index.js.map +1 -0
  443. package/dist/tools/core/list-files.d.ts +2 -0
  444. package/dist/tools/core/list-files.d.ts.map +1 -0
  445. package/dist/tools/core/list-files.js +87 -0
  446. package/dist/tools/core/list-files.js.map +1 -0
  447. package/dist/tools/core/read-file.d.ts +2 -0
  448. package/dist/tools/core/read-file.d.ts.map +1 -0
  449. package/dist/tools/core/read-file.js +129 -0
  450. package/dist/tools/core/read-file.js.map +1 -0
  451. package/dist/tools/core/write-file.d.ts +2 -0
  452. package/dist/tools/core/write-file.d.ts.map +1 -0
  453. package/dist/tools/core/write-file.js +65 -0
  454. package/dist/tools/core/write-file.js.map +1 -0
  455. package/dist/tools/todo.d.ts +3 -4
  456. package/dist/tools/todo.d.ts.map +1 -1
  457. package/dist/tools/todo.js +80 -79
  458. package/dist/tools/todo.js.map +1 -1
  459. package/dist/tui-ui/chrome-view-model.js +1 -1
  460. package/dist/tui-ui/chrome-view-model.js.map +1 -1
  461. package/dist/tui-ui/layout.js +1 -1
  462. package/dist/tui-ui/layout.js.map +1 -1
  463. package/docs/migration/v0.1.9-to-v0.2.0.md +98 -0
  464. package/docs/orion.example.json +79 -0
  465. package/docs/plan/v0.2.0-dsh-harness-redesign-plan.md +1234 -0
  466. package/docs/plan/v0.2.0-release-checklist.md +91 -0
  467. package/docs/readme.md +8 -8
  468. package/npm-shrinkwrap.json +45 -450
  469. package/package.json +17 -13
  470. package/dist/agents/coder.d.ts +0 -12
  471. package/dist/agents/coder.d.ts.map +0 -1
  472. package/dist/agents/coder.js +0 -48
  473. package/dist/agents/coder.js.map +0 -1
  474. package/dist/agents/coordinator.d.ts +0 -86
  475. package/dist/agents/coordinator.d.ts.map +0 -1
  476. package/dist/agents/coordinator.js +0 -291
  477. package/dist/agents/coordinator.js.map +0 -1
  478. package/dist/agents/fork.d.ts +0 -73
  479. package/dist/agents/fork.d.ts.map +0 -1
  480. package/dist/agents/fork.js +0 -163
  481. package/dist/agents/fork.js.map +0 -1
  482. package/dist/agents/leader.d.ts +0 -12
  483. package/dist/agents/leader.d.ts.map +0 -1
  484. package/dist/agents/leader.js +0 -49
  485. package/dist/agents/leader.js.map +0 -1
  486. package/dist/agents/router.d.ts +0 -59
  487. package/dist/agents/router.d.ts.map +0 -1
  488. package/dist/agents/router.js +0 -193
  489. package/dist/agents/router.js.map +0 -1
  490. package/dist/agents/worker-pool.d.ts +0 -72
  491. package/dist/agents/worker-pool.d.ts.map +0 -1
  492. package/dist/agents/worker-pool.js +0 -229
  493. package/dist/agents/worker-pool.js.map +0 -1
  494. package/dist/commands/legacy-commands.d.ts +0 -4
  495. package/dist/commands/legacy-commands.d.ts.map +0 -1
  496. package/dist/commands/legacy-commands.js +0 -44
  497. package/dist/commands/legacy-commands.js.map +0 -1
  498. package/dist/core/agent.d.ts +0 -84
  499. package/dist/core/agent.d.ts.map +0 -1
  500. package/dist/core/agent.js +0 -58
  501. package/dist/core/agent.js.map +0 -1
  502. package/dist/core/brain.d.ts +0 -50
  503. package/dist/core/brain.d.ts.map +0 -1
  504. package/dist/core/brain.js +0 -95
  505. package/dist/core/brain.js.map +0 -1
  506. package/dist/framework/tool-scheduler.d.ts +0 -191
  507. package/dist/framework/tool-scheduler.d.ts.map +0 -1
  508. package/dist/framework/tool-scheduler.js +0 -573
  509. package/dist/framework/tool-scheduler.js.map +0 -1
  510. package/dist/harness/harness.d.ts +0 -58
  511. package/dist/harness/harness.d.ts.map +0 -1
  512. package/dist/harness/harness.js +0 -195
  513. package/dist/harness/harness.js.map +0 -1
  514. package/dist/harness/safety.d.ts +0 -101
  515. package/dist/harness/safety.d.ts.map +0 -1
  516. package/dist/harness/safety.js +0 -322
  517. package/dist/harness/safety.js.map +0 -1
  518. package/dist/init.d.ts +0 -108
  519. package/dist/init.d.ts.map +0 -1
  520. package/dist/init.js +0 -393
  521. package/dist/init.js.map +0 -1
  522. package/dist/ink-ui/App.d.ts +0 -9
  523. package/dist/ink-ui/App.d.ts.map +0 -1
  524. package/dist/ink-ui/App.js +0 -12
  525. package/dist/ink-ui/App.js.map +0 -1
  526. package/dist/ink-ui/components/Markdown.d.ts +0 -10
  527. package/dist/ink-ui/components/Markdown.d.ts.map +0 -1
  528. package/dist/ink-ui/components/Markdown.js +0 -210
  529. package/dist/ink-ui/components/Markdown.js.map +0 -1
  530. package/dist/ink-ui/components/NativeCursor.d.ts +0 -12
  531. package/dist/ink-ui/components/NativeCursor.d.ts.map +0 -1
  532. package/dist/ink-ui/components/NativeCursor.js +0 -35
  533. package/dist/ink-ui/components/NativeCursor.js.map +0 -1
  534. package/dist/ink-ui/components/PixelHorseBanner.d.ts +0 -8
  535. package/dist/ink-ui/components/PixelHorseBanner.d.ts.map +0 -1
  536. package/dist/ink-ui/components/PixelHorseBanner.js +0 -97
  537. package/dist/ink-ui/components/PixelHorseBanner.js.map +0 -1
  538. package/dist/ink-ui/components/PromptInput.d.ts +0 -13
  539. package/dist/ink-ui/components/PromptInput.d.ts.map +0 -1
  540. package/dist/ink-ui/components/PromptInput.js +0 -30
  541. package/dist/ink-ui/components/PromptInput.js.map +0 -1
  542. package/dist/ink-ui/components/RunningHorseIndicator.d.ts +0 -13
  543. package/dist/ink-ui/components/RunningHorseIndicator.d.ts.map +0 -1
  544. package/dist/ink-ui/components/RunningHorseIndicator.js +0 -53
  545. package/dist/ink-ui/components/RunningHorseIndicator.js.map +0 -1
  546. package/dist/ink-ui/components/SelectList.d.ts +0 -16
  547. package/dist/ink-ui/components/SelectList.d.ts.map +0 -1
  548. package/dist/ink-ui/components/SelectList.js +0 -60
  549. package/dist/ink-ui/components/SelectList.js.map +0 -1
  550. package/dist/ink-ui/components/StatusLine.d.ts +0 -11
  551. package/dist/ink-ui/components/StatusLine.d.ts.map +0 -1
  552. package/dist/ink-ui/components/StatusLine.js +0 -70
  553. package/dist/ink-ui/components/StatusLine.js.map +0 -1
  554. package/dist/ink-ui/components/ToolActivity.d.ts +0 -19
  555. package/dist/ink-ui/components/ToolActivity.d.ts.map +0 -1
  556. package/dist/ink-ui/components/ToolActivity.js +0 -134
  557. package/dist/ink-ui/components/ToolActivity.js.map +0 -1
  558. package/dist/ink-ui/components/Transcript.d.ts +0 -14
  559. package/dist/ink-ui/components/Transcript.d.ts.map +0 -1
  560. package/dist/ink-ui/components/Transcript.js +0 -66
  561. package/dist/ink-ui/components/Transcript.js.map +0 -1
  562. package/dist/ink-ui/controllers/chat-controller.d.ts +0 -2
  563. package/dist/ink-ui/controllers/chat-controller.d.ts.map +0 -1
  564. package/dist/ink-ui/controllers/chat-controller.js.map +0 -1
  565. package/dist/ink-ui/hooks/use-raw-input-bridge.d.ts +0 -6
  566. package/dist/ink-ui/hooks/use-raw-input-bridge.d.ts.map +0 -1
  567. package/dist/ink-ui/hooks/use-raw-input-bridge.js +0 -27
  568. package/dist/ink-ui/hooks/use-raw-input-bridge.js.map +0 -1
  569. package/dist/ink-ui/hooks/use-terminal-size.d.ts +0 -7
  570. package/dist/ink-ui/hooks/use-terminal-size.d.ts.map +0 -1
  571. package/dist/ink-ui/hooks/use-terminal-size.js +0 -34
  572. package/dist/ink-ui/hooks/use-terminal-size.js.map +0 -1
  573. package/dist/ink-ui/launch.d.ts +0 -9
  574. package/dist/ink-ui/launch.d.ts.map +0 -1
  575. package/dist/ink-ui/launch.js +0 -101
  576. package/dist/ink-ui/launch.js.map +0 -1
  577. package/dist/ink-ui/runtime/grapheme.d.ts +0 -10
  578. package/dist/ink-ui/runtime/grapheme.d.ts.map +0 -1
  579. package/dist/ink-ui/runtime/grapheme.js +0 -17
  580. package/dist/ink-ui/runtime/grapheme.js.map +0 -1
  581. package/dist/ink-ui/runtime/input-buffer.d.ts +0 -10
  582. package/dist/ink-ui/runtime/input-buffer.d.ts.map +0 -1
  583. package/dist/ink-ui/runtime/input-buffer.js +0 -18
  584. package/dist/ink-ui/runtime/input-buffer.js.map +0 -1
  585. package/dist/ink-ui/runtime/layout-budget.d.ts +0 -13
  586. package/dist/ink-ui/runtime/layout-budget.d.ts.map +0 -1
  587. package/dist/ink-ui/runtime/layout-budget.js +0 -25
  588. package/dist/ink-ui/runtime/layout-budget.js.map +0 -1
  589. package/dist/ink-ui/runtime/native-cursor.d.ts +0 -62
  590. package/dist/ink-ui/runtime/native-cursor.d.ts.map +0 -1
  591. package/dist/ink-ui/runtime/native-cursor.js +0 -398
  592. package/dist/ink-ui/runtime/native-cursor.js.map +0 -1
  593. package/dist/ink-ui/runtime/prompt-layout.d.ts +0 -10
  594. package/dist/ink-ui/runtime/prompt-layout.d.ts.map +0 -1
  595. package/dist/ink-ui/runtime/prompt-layout.js +0 -21
  596. package/dist/ink-ui/runtime/prompt-layout.js.map +0 -1
  597. package/dist/ink-ui/runtime/raw-input.d.ts +0 -4
  598. package/dist/ink-ui/runtime/raw-input.d.ts.map +0 -1
  599. package/dist/ink-ui/runtime/raw-input.js +0 -15
  600. package/dist/ink-ui/runtime/raw-input.js.map +0 -1
  601. package/dist/ink-ui/runtime/transcript-state.d.ts +0 -37
  602. package/dist/ink-ui/runtime/transcript-state.d.ts.map +0 -1
  603. package/dist/ink-ui/runtime/transcript-state.js +0 -91
  604. package/dist/ink-ui/runtime/transcript-state.js.map +0 -1
  605. package/dist/ink-ui/screens/ReplScreen.d.ts +0 -27
  606. package/dist/ink-ui/screens/ReplScreen.d.ts.map +0 -1
  607. package/dist/ink-ui/screens/ReplScreen.js +0 -781
  608. package/dist/ink-ui/screens/ReplScreen.js.map +0 -1
  609. package/dist/ink-ui/types.d.ts +0 -2
  610. package/dist/ink-ui/types.d.ts.map +0 -1
  611. package/dist/ink-ui/types.js.map +0 -1
  612. package/dist/runtime/chat-checkpoint.d.ts +0 -17
  613. package/dist/runtime/chat-checkpoint.d.ts.map +0 -1
  614. package/dist/runtime/chat-checkpoint.js +0 -105
  615. package/dist/runtime/chat-checkpoint.js.map +0 -1
  616. package/dist/runtime/chat-command-scope.d.ts +0 -5
  617. package/dist/runtime/chat-command-scope.d.ts.map +0 -1
  618. package/dist/runtime/chat-command-scope.js +0 -22
  619. package/dist/runtime/chat-command-scope.js.map +0 -1
  620. package/dist/runtime/chat-compact.d.ts +0 -26
  621. package/dist/runtime/chat-compact.d.ts.map +0 -1
  622. package/dist/runtime/chat-compact.js +0 -132
  623. package/dist/runtime/chat-compact.js.map +0 -1
  624. package/dist/runtime/chat-controller.d.ts +0 -62
  625. package/dist/runtime/chat-controller.d.ts.map +0 -1
  626. package/dist/runtime/chat-controller.js +0 -1620
  627. package/dist/runtime/chat-controller.js.map +0 -1
  628. package/dist/runtime/chat-effort.d.ts +0 -5
  629. package/dist/runtime/chat-effort.d.ts.map +0 -1
  630. package/dist/runtime/chat-effort.js +0 -47
  631. package/dist/runtime/chat-effort.js.map +0 -1
  632. package/dist/runtime/chat-presentation.d.ts +0 -63
  633. package/dist/runtime/chat-presentation.d.ts.map +0 -1
  634. package/dist/runtime/chat-presentation.js +0 -561
  635. package/dist/runtime/chat-presentation.js.map +0 -1
  636. package/dist/runtime/chat-trace.d.ts +0 -52
  637. package/dist/runtime/chat-trace.d.ts.map +0 -1
  638. package/dist/runtime/chat-trace.js +0 -234
  639. package/dist/runtime/chat-trace.js.map +0 -1
  640. package/dist/runtime/chat-workspace.d.ts +0 -22
  641. package/dist/runtime/chat-workspace.d.ts.map +0 -1
  642. package/dist/runtime/chat-workspace.js +0 -154
  643. package/dist/runtime/chat-workspace.js.map +0 -1
  644. package/dist/runtime/goals/accounting.d.ts +0 -45
  645. package/dist/runtime/goals/accounting.d.ts.map +0 -1
  646. package/dist/runtime/goals/accounting.js +0 -114
  647. package/dist/runtime/goals/accounting.js.map +0 -1
  648. package/dist/runtime/goals/coordinator.d.ts +0 -92
  649. package/dist/runtime/goals/coordinator.d.ts.map +0 -1
  650. package/dist/runtime/goals/coordinator.js +0 -1471
  651. package/dist/runtime/goals/coordinator.js.map +0 -1
  652. package/dist/runtime/goals/lifecycle.d.ts +0 -13
  653. package/dist/runtime/goals/lifecycle.d.ts.map +0 -1
  654. package/dist/runtime/goals/lifecycle.js +0 -46
  655. package/dist/runtime/goals/lifecycle.js.map +0 -1
  656. package/dist/runtime/goals/prompt.d.ts +0 -16
  657. package/dist/runtime/goals/prompt.d.ts.map +0 -1
  658. package/dist/runtime/goals/prompt.js +0 -88
  659. package/dist/runtime/goals/prompt.js.map +0 -1
  660. package/dist/runtime/goals/stop-policy.d.ts +0 -9
  661. package/dist/runtime/goals/stop-policy.d.ts.map +0 -1
  662. package/dist/runtime/goals/stop-policy.js +0 -83
  663. package/dist/runtime/goals/stop-policy.js.map +0 -1
  664. package/dist/runtime/goals/tools.d.ts +0 -61
  665. package/dist/runtime/goals/tools.d.ts.map +0 -1
  666. package/dist/runtime/goals/tools.js +0 -568
  667. package/dist/runtime/goals/tools.js.map +0 -1
  668. package/dist/sdk/index.d.ts +0 -10
  669. package/dist/sdk/index.d.ts.map +0 -1
  670. package/dist/sdk/index.js +0 -23
  671. package/dist/sdk/index.js.map +0 -1
  672. package/dist/sdk/init.d.ts +0 -24
  673. package/dist/sdk/init.d.ts.map +0 -1
  674. package/dist/sdk/init.js +0 -48
  675. package/dist/sdk/init.js.map +0 -1
  676. package/dist/sdk/query.d.ts +0 -19
  677. package/dist/sdk/query.d.ts.map +0 -1
  678. package/dist/sdk/query.js +0 -42
  679. package/dist/sdk/query.js.map +0 -1
  680. package/dist/sdk/sessions.d.ts +0 -19
  681. package/dist/sdk/sessions.d.ts.map +0 -1
  682. package/dist/sdk/sessions.js +0 -57
  683. package/dist/sdk/sessions.js.map +0 -1
  684. package/dist/sdk/types.d.ts +0 -47
  685. package/dist/sdk/types.d.ts.map +0 -1
  686. package/dist/sdk/types.js +0 -8
  687. package/dist/sdk/types.js.map +0 -1
  688. package/dist/services/agent-runner.d.ts +0 -71
  689. package/dist/services/agent-runner.d.ts.map +0 -1
  690. package/dist/services/agent-runner.js +0 -185
  691. package/dist/services/agent-runner.js.map +0 -1
  692. package/dist/services/task-manager.d.ts +0 -161
  693. package/dist/services/task-manager.d.ts.map +0 -1
  694. package/dist/services/task-manager.js +0 -315
  695. package/dist/services/task-manager.js.map +0 -1
  696. package/dist/skills/discovery.d.ts +0 -22
  697. package/dist/skills/discovery.d.ts.map +0 -1
  698. package/dist/skills/discovery.js +0 -75
  699. package/dist/skills/discovery.js.map +0 -1
  700. package/dist/skills/index.d.ts +0 -11
  701. package/dist/skills/index.d.ts.map +0 -1
  702. package/dist/skills/index.js.map +0 -1
  703. package/dist/skills/loader.d.ts +0 -53
  704. package/dist/skills/loader.d.ts.map +0 -1
  705. package/dist/skills/loader.js +0 -421
  706. package/dist/skills/loader.js.map +0 -1
  707. package/dist/skills/registry.d.ts +0 -41
  708. package/dist/skills/registry.d.ts.map +0 -1
  709. package/dist/skills/registry.js +0 -157
  710. package/dist/skills/registry.js.map +0 -1
  711. package/dist/skills/runtime.d.ts +0 -46
  712. package/dist/skills/runtime.d.ts.map +0 -1
  713. package/dist/skills/runtime.js +0 -363
  714. package/dist/skills/runtime.js.map +0 -1
  715. package/dist/skills/types.d.ts +0 -112
  716. package/dist/skills/types.d.ts.map +0 -1
  717. package/dist/skills/types.js +0 -24
  718. package/dist/skills/types.js.map +0 -1
  719. package/dist/tools/index.d.ts +0 -52
  720. package/dist/tools/index.d.ts.map +0 -1
  721. package/dist/tools/index.js +0 -2268
  722. package/dist/tools/index.js.map +0 -1
  723. package/dist/tools/mcp.d.ts +0 -99
  724. package/dist/tools/mcp.d.ts.map +0 -1
  725. package/dist/tools/mcp.js +0 -695
  726. package/dist/tools/mcp.js.map +0 -1
  727. package/dist/tools/plan.d.ts +0 -17
  728. package/dist/tools/plan.d.ts.map +0 -1
  729. package/dist/tools/plan.js +0 -84
  730. package/dist/tools/plan.js.map +0 -1
  731. package/docs/migration/v0.1.8-to-v0.1.9.md +0 -60
  732. package/docs/plan/v0.1.9-release-checklist.md +0 -64
@@ -0,0 +1,876 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SubagentThreadRuntimeError = exports.SubagentThreadRuntimeV1 = exports.SubagentThreadTreeScopeV1 = exports.SUBAGENT_THREAD_RUNTIME_VERSION = void 0;
4
+ exports.intersectSubagentAuthorityV1 = intersectSubagentAuthorityV1;
5
+ exports.createSubagentThreadReceiptV1 = createSubagentThreadReceiptV1;
6
+ exports.assertSubagentThreadReceiptV1 = assertSubagentThreadReceiptV1;
7
+ const path_1 = require("path");
8
+ const stop_decision_1 = require("../framework/stop-decision");
9
+ const canonical_1 = require("./protocol/canonical");
10
+ const runtime_protocol_v1_1 = require("./protocol/runtime-protocol-v1");
11
+ const step_snapshot_1 = require("./step-snapshot");
12
+ const thread_event_store_1 = require("./thread-event-store");
13
+ const thread_runtime_1 = require("./thread-runtime");
14
+ const turn_commit_1 = require("./turn-commit");
15
+ exports.SUBAGENT_THREAD_RUNTIME_VERSION = 1;
16
+ /** Root-tree owner for concurrency, provider/tool budgets and cancellation. */
17
+ class SubagentThreadTreeScopeV1 {
18
+ constructor(limits, parentSignal) {
19
+ this.controller = new AbortController();
20
+ this.waiters = [];
21
+ this.active = 0;
22
+ this.modelUsed = 0;
23
+ this.modelReserved = 0;
24
+ this.toolUsed = 0;
25
+ this.toolReserved = 0;
26
+ this.limits = {
27
+ maxConcurrent: positiveInteger(limits.maxConcurrent, 'maxConcurrent'),
28
+ maxQueued: nonNegativeInteger(limits.maxQueued ?? limits.maxConcurrent * 4, 'maxQueued'),
29
+ maxModelRequests: positiveInteger(limits.maxModelRequests, 'maxModelRequests'),
30
+ maxToolCalls: nonNegativeInteger(limits.maxToolCalls, 'maxToolCalls'),
31
+ };
32
+ this.signal = this.controller.signal;
33
+ this.detachParentAbort = forwardAbort(parentSignal, this.controller);
34
+ }
35
+ async acquire(signal) {
36
+ this.assertOpen();
37
+ throwIfAborted(signal);
38
+ if (this.active < this.limits.maxConcurrent) {
39
+ this.active += 1;
40
+ return this.releaseHandle();
41
+ }
42
+ if (this.waiters.length >= this.limits.maxQueued) {
43
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_TREE_OVERLOADED', `Subagent tree queue is full (${this.limits.maxQueued}).`);
44
+ }
45
+ return new Promise((resolveWaiter, rejectWaiter) => {
46
+ const waiter = {
47
+ signal,
48
+ resolve: resolveWaiter,
49
+ reject: rejectWaiter,
50
+ onAbort: () => {
51
+ const index = this.waiters.indexOf(waiter);
52
+ if (index >= 0)
53
+ this.waiters.splice(index, 1);
54
+ rejectWaiter(abortError(signal));
55
+ },
56
+ };
57
+ signal.addEventListener('abort', waiter.onAbort, { once: true });
58
+ this.waiters.push(waiter);
59
+ });
60
+ }
61
+ reserveBudget(ownerId, request) {
62
+ this.assertOpen();
63
+ const limits = validateBudgetRequest(request);
64
+ if (this.modelUsed + this.modelReserved + limits.maxModelRequests >
65
+ this.limits.maxModelRequests ||
66
+ this.toolUsed + this.toolReserved + limits.maxToolCalls > this.limits.maxToolCalls) {
67
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_TREE_BUDGET_EXCEEDED', 'The root-tree model/tool budget cannot satisfy this child reservation.');
68
+ }
69
+ this.modelReserved += limits.maxModelRequests;
70
+ this.toolReserved += limits.maxToolCalls;
71
+ return new SubagentThreadBudgetLeaseV1(this, ownerId, limits);
72
+ }
73
+ /** Charge work already performed by the root loop against the same tree budget. */
74
+ recordRootUsage(usage) {
75
+ this.assertOpen();
76
+ const modelRequests = nonNegativeInteger(usage.modelRequests, 'root modelRequests');
77
+ const toolCalls = nonNegativeInteger(usage.toolCalls, 'root toolCalls');
78
+ if (this.modelUsed + this.modelReserved + modelRequests > this.limits.maxModelRequests ||
79
+ this.toolUsed + this.toolReserved + toolCalls > this.limits.maxToolCalls) {
80
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_TREE_BUDGET_EXCEEDED', 'Root usage exceeds the remaining shared subagent-tree budget.');
81
+ }
82
+ this.modelUsed += modelRequests;
83
+ this.toolUsed += toolCalls;
84
+ return this.snapshot();
85
+ }
86
+ snapshot() {
87
+ return deepFreeze({
88
+ version: exports.SUBAGENT_THREAD_RUNTIME_VERSION,
89
+ active: this.active,
90
+ queued: this.waiters.length,
91
+ maxConcurrent: this.limits.maxConcurrent,
92
+ maxQueued: this.limits.maxQueued,
93
+ modelRequests: {
94
+ used: this.modelUsed,
95
+ reserved: this.modelReserved,
96
+ limit: this.limits.maxModelRequests,
97
+ },
98
+ toolCalls: {
99
+ used: this.toolUsed,
100
+ reserved: this.toolReserved,
101
+ limit: this.limits.maxToolCalls,
102
+ },
103
+ closed: this.signal.aborted,
104
+ });
105
+ }
106
+ close(reason = 'subagent thread tree closed') {
107
+ if (!this.signal.aborted)
108
+ this.controller.abort(reason);
109
+ this.detachParentAbort();
110
+ for (const waiter of this.waiters.splice(0)) {
111
+ waiter.signal.removeEventListener('abort', waiter.onAbort);
112
+ waiter.reject(abortError(this.signal));
113
+ }
114
+ }
115
+ consume(lease, resource, count) {
116
+ this.assertOpen();
117
+ const amount = positiveInteger(count, `${resource} budget charge`);
118
+ if (resource === 'model') {
119
+ if (lease.modelRequests + amount > lease.limits.maxModelRequests) {
120
+ throw lease.fail(childBudgetError(lease.ownerId, 'model requests', lease.limits.maxModelRequests));
121
+ }
122
+ lease.modelRequests += amount;
123
+ this.modelReserved -= amount;
124
+ this.modelUsed += amount;
125
+ }
126
+ else {
127
+ if (lease.toolCalls + amount > lease.limits.maxToolCalls) {
128
+ throw lease.fail(childBudgetError(lease.ownerId, 'tool calls', lease.limits.maxToolCalls));
129
+ }
130
+ lease.toolCalls += amount;
131
+ this.toolReserved -= amount;
132
+ this.toolUsed += amount;
133
+ }
134
+ return lease.snapshot();
135
+ }
136
+ releaseBudget(lease) {
137
+ this.modelReserved -= lease.limits.maxModelRequests - lease.modelRequests;
138
+ this.toolReserved -= lease.limits.maxToolCalls - lease.toolCalls;
139
+ }
140
+ assertOpen() {
141
+ if (this.signal.aborted)
142
+ throw abortError(this.signal);
143
+ }
144
+ releaseHandle() {
145
+ let released = false;
146
+ return () => {
147
+ if (released)
148
+ return;
149
+ released = true;
150
+ this.active -= 1;
151
+ this.promote();
152
+ };
153
+ }
154
+ promote() {
155
+ while (this.active < this.limits.maxConcurrent && this.waiters.length > 0) {
156
+ const waiter = this.waiters.shift();
157
+ waiter.signal.removeEventListener('abort', waiter.onAbort);
158
+ if (waiter.signal.aborted) {
159
+ waiter.reject(abortError(waiter.signal));
160
+ continue;
161
+ }
162
+ this.active += 1;
163
+ waiter.resolve(this.releaseHandle());
164
+ }
165
+ }
166
+ }
167
+ exports.SubagentThreadTreeScopeV1 = SubagentThreadTreeScopeV1;
168
+ class SubagentThreadBudgetLeaseV1 {
169
+ constructor(tree, ownerId, limits) {
170
+ this.tree = tree;
171
+ this.ownerId = ownerId;
172
+ this.limits = limits;
173
+ this.modelRequests = 0;
174
+ this.toolCalls = 0;
175
+ this.released = false;
176
+ }
177
+ consumeModelRequests(count = 1) {
178
+ this.assertOpen();
179
+ return this.tree.consume(this, 'model', count);
180
+ }
181
+ consumeToolCalls(count = 1) {
182
+ this.assertOpen();
183
+ return this.tree.consume(this, 'tool', count);
184
+ }
185
+ snapshot() {
186
+ return Object.freeze({ modelRequests: this.modelRequests, toolCalls: this.toolCalls });
187
+ }
188
+ release() {
189
+ if (this.released)
190
+ return;
191
+ this.released = true;
192
+ this.tree.releaseBudget(this);
193
+ }
194
+ fail(error) {
195
+ this.failure ?? (this.failure = error);
196
+ return this.failure;
197
+ }
198
+ assertOpen() {
199
+ if (this.released) {
200
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_TREE_CLOSED', `Budget lease ${this.ownerId} is closed.`);
201
+ }
202
+ }
203
+ }
204
+ /** Durable child-Thread orchestration; it never returns the child's transcript. */
205
+ class SubagentThreadRuntimeV1 {
206
+ constructor(options) {
207
+ this.options = validateOptions(options);
208
+ }
209
+ async run(request) {
210
+ const objective = request.objective.trim();
211
+ if (!objective || Buffer.byteLength(objective, 'utf8') > this.options.maxObjectiveBytes) {
212
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_INVALID_REQUEST', `Child objective must be non-empty and at most ${this.options.maxObjectiveBytes} bytes.`);
213
+ }
214
+ throwIfAborted(this.options.tree.signal);
215
+ throwIfAborted(request.abortSignal);
216
+ const parent = await flushAndCaptureParent(request.parent);
217
+ throwIfAborted(this.options.tree.signal);
218
+ throwIfAborted(request.abortSignal);
219
+ const rolePolicy = this.options.rolePolicies[request.role];
220
+ if (!rolePolicy) {
221
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_ROLE_DENIED', `Subagent role ${request.role} has no configured authority policy.`);
222
+ }
223
+ const authority = intersectSubagentAuthorityV1(request.parentAuthority, rolePolicy);
224
+ const childThreadId = this.options.threadIdFactory();
225
+ if (!(0, runtime_protocol_v1_1.isRuntimeId)(childThreadId) || childThreadId === parent.threadId) {
226
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_INVALID_REQUEST', 'Child Thread ID factory must return a UUID distinct from the parent Thread.');
227
+ }
228
+ const linked = linkAbortSignals([this.options.tree.signal, request.abortSignal]);
229
+ let releaseConcurrency;
230
+ let budget;
231
+ let runtime;
232
+ try {
233
+ releaseConcurrency = await this.options.tree.acquire(linked.signal);
234
+ throwIfAborted(linked.signal);
235
+ budget = this.options.tree.reserveBudget(childThreadId, request.budget ?? this.options.defaultBudget);
236
+ const evidence = new BoundedEvidenceCollectorV1(this.options.maxEvidenceItems, this.options.maxEvidenceBytes);
237
+ const store = new thread_event_store_1.ThreadEventStore(this.options.childStoreRootDir, childThreadId, this.options.eventStoreOptions);
238
+ const runner = await this.options.createAgentLoop({
239
+ role: request.role,
240
+ objective,
241
+ childThreadId,
242
+ childStore: store,
243
+ parent,
244
+ authority,
245
+ budget,
246
+ evidence,
247
+ abortSignal: linked.signal,
248
+ });
249
+ const captured = new CapturingTurnRunnerV1(runner, linked.signal);
250
+ runtime = new thread_runtime_1.ThreadRuntimeV1({
251
+ store,
252
+ runner: captured,
253
+ projectPath: authority.projectRoot,
254
+ requireTurnCommit: true,
255
+ });
256
+ store.appendDurable({
257
+ payload: {
258
+ type: 'thread.forked',
259
+ data: {
260
+ sourceThreadId: parent.threadId,
261
+ sourceSeq: parent.capabilityReceiptSeq,
262
+ },
263
+ },
264
+ });
265
+ const admission = runtime.dispatch({
266
+ type: 'turn.start',
267
+ data: { input: objective, mode: request.mode ?? 'build' },
268
+ });
269
+ if (admission.status !== 'started') {
270
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_CHILD_START_FAILED', `Child Thread start was ${admission.status}.`);
271
+ }
272
+ const onAbort = () => {
273
+ runtime?.dispatch({
274
+ type: 'turn.interrupt',
275
+ data: { reason: abortMessage(linked.signal) },
276
+ });
277
+ };
278
+ linked.signal.addEventListener('abort', onAbort, { once: true });
279
+ if (linked.signal.aborted)
280
+ onAbort();
281
+ try {
282
+ await runtime.waitForIdle();
283
+ }
284
+ finally {
285
+ linked.signal.removeEventListener('abort', onAbort);
286
+ }
287
+ const projection = store.loadProjection();
288
+ const turn = projection.turns[admission.turnId];
289
+ if (budget.failure)
290
+ throw budget.failure;
291
+ if (!turn || turn.status === 'active' || !turn.commit) {
292
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_CHILD_COMMIT_MISSING', 'Child AgentLoop did not durably publish a terminal TurnCommitV1.');
293
+ }
294
+ const childCommit = (0, turn_commit_1.parseTurnCommitV1)(turn.commit.receipt);
295
+ assertIndependentStepSnapshots(parent.stepSnapshotDigest, childCommit, turn.status);
296
+ const usage = budget.snapshot();
297
+ const stopDecision = childStopDecision(childCommit, turn.status, usage, budget.limits, parent);
298
+ const summary = boundedChildSummary(projection, admission.turnId, childCommit, this.options.maxSummaryBytes);
299
+ const evidenceItems = boundedEvidence(evidence.snapshot(), childCommit, this.options.maxEvidenceItems, this.options.maxEvidenceBytes);
300
+ const receipt = createSubagentThreadReceiptV1({
301
+ receiptId: (0, runtime_protocol_v1_1.createRuntimeId)(),
302
+ parent,
303
+ childThreadId,
304
+ childTurnId: admission.turnId,
305
+ childCursor: projection.cursor,
306
+ childProjectionDigest: projection.digest,
307
+ childCommit,
308
+ role: request.role,
309
+ authority,
310
+ usage,
311
+ turnTerminal: turn.status,
312
+ stopDecision,
313
+ summary,
314
+ evidence: evidenceItems,
315
+ createdAt: this.options.clock(),
316
+ });
317
+ try {
318
+ await this.options.onReceipt?.(receipt);
319
+ }
320
+ catch (error) {
321
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_RECEIPT_WRITE_FAILED', `Subagent receipt sink failed: ${errorMessage(error)}`);
322
+ }
323
+ return deepFreeze({
324
+ version: exports.SUBAGENT_THREAD_RUNTIME_VERSION,
325
+ parentThreadId: parent.threadId,
326
+ parentTurnId: parent.turnId,
327
+ childThreadId,
328
+ childTurnId: admission.turnId,
329
+ role: request.role,
330
+ authority,
331
+ status: stopDecision.status,
332
+ turnTerminal: turn.status,
333
+ summary,
334
+ evidence: evidenceItems,
335
+ usage,
336
+ stopDecision,
337
+ receipt,
338
+ });
339
+ }
340
+ finally {
341
+ runtime?.close('subagent child finished');
342
+ budget?.release();
343
+ releaseConcurrency?.();
344
+ linked.dispose();
345
+ }
346
+ }
347
+ }
348
+ exports.SubagentThreadRuntimeV1 = SubagentThreadRuntimeV1;
349
+ class CapturingTurnRunnerV1 {
350
+ constructor(runner, treeSignal) {
351
+ this.runner = runner;
352
+ this.treeSignal = treeSignal;
353
+ }
354
+ async run(context) {
355
+ const linked = linkAbortSignals([context.abortSignal, this.treeSignal]);
356
+ try {
357
+ return await this.runner.run({ ...context, abortSignal: linked.signal });
358
+ }
359
+ finally {
360
+ linked.dispose();
361
+ }
362
+ }
363
+ }
364
+ class BoundedEvidenceCollectorV1 {
365
+ constructor(maxItems, maxBytes) {
366
+ this.maxItems = maxItems;
367
+ this.maxBytes = maxBytes;
368
+ this.items = [];
369
+ }
370
+ record(evidence) {
371
+ if (this.items.length >= this.maxItems)
372
+ return false;
373
+ const source = truncateUtf8(evidence.source.trim(), this.maxBytes);
374
+ const detail = truncateUtf8(evidence.detail.trim(), this.maxBytes);
375
+ const reference = evidence.reference
376
+ ? truncateUtf8(evidence.reference.trim(), this.maxBytes)
377
+ : undefined;
378
+ if (!source || !detail)
379
+ return false;
380
+ this.items.push(deepFreeze({
381
+ kind: evidence.kind,
382
+ source,
383
+ detail,
384
+ ...(reference ? { reference } : {}),
385
+ }));
386
+ return true;
387
+ }
388
+ snapshot() {
389
+ return deepFreeze(this.items.map(item => ({ ...item })));
390
+ }
391
+ }
392
+ function intersectSubagentAuthorityV1(parent, rolePolicy) {
393
+ assertAuthority(parent, 'parent');
394
+ assertAuthority(rolePolicy, 'role');
395
+ const projectRoot = intersectProjectRoots(parent.projectRoot, rolePolicy.projectRoot);
396
+ const confirmation = moreRestrictive(parent.confirmation, rolePolicy.confirmation, [
397
+ 'allow',
398
+ 'ask',
399
+ 'deny',
400
+ ]);
401
+ const filesystem = moreRestrictive(parent.filesystem, rolePolicy.filesystem, [
402
+ 'full',
403
+ 'workspace',
404
+ ]);
405
+ const network = moreRestrictive(parent.network, rolePolicy.network, [
406
+ 'write',
407
+ 'read',
408
+ 'deny',
409
+ ]);
410
+ return (0, step_snapshot_1.createAuthoritySnapshotV1)({
411
+ authorityId: `subagent:${(0, canonical_1.digestRuntimeValue)({ parent: parent.digest, role: rolePolicy.digest })}`,
412
+ projectRoot,
413
+ confirmation,
414
+ filesystem,
415
+ network,
416
+ });
417
+ }
418
+ function createSubagentThreadReceiptV1(input) {
419
+ const content = {
420
+ version: exports.SUBAGENT_THREAD_RUNTIME_VERSION,
421
+ receiptId: input.receiptId,
422
+ parentThreadId: input.parent.threadId,
423
+ parentTurnId: input.parent.turnId,
424
+ parentStepId: input.parent.stepId,
425
+ parentRequestId: input.parent.requestId,
426
+ parentStepSnapshotSeq: input.parent.stepSnapshotSeq,
427
+ parentCapabilityReceiptSeq: input.parent.capabilityReceiptSeq,
428
+ parentStepSnapshotDigest: input.parent.stepSnapshotDigest,
429
+ parentCapabilityReceiptDigest: input.parent.capabilityReceiptDigest,
430
+ parentProjectionCursor: input.parent.projectionCursor,
431
+ parentProjectionDigest: input.parent.projectionDigest,
432
+ childThreadId: input.childThreadId,
433
+ childTurnId: input.childTurnId,
434
+ childCursor: input.childCursor,
435
+ childProjectionDigest: input.childProjectionDigest,
436
+ childCommitDigest: input.childCommit.digest,
437
+ childStepSnapshotDigests: [...input.childCommit.stepSnapshotDigests],
438
+ role: input.role,
439
+ authorityDigest: input.authority.digest,
440
+ usage: { ...input.usage },
441
+ turnTerminal: input.turnTerminal,
442
+ stopDecisionDigest: (0, canonical_1.digestRuntimeValue)(input.stopDecision),
443
+ resultDigest: (0, canonical_1.digestRuntimeValue)({
444
+ status: input.stopDecision.status,
445
+ turnTerminal: input.turnTerminal,
446
+ summary: input.summary,
447
+ }),
448
+ evidenceDigest: (0, canonical_1.digestRuntimeValue)(input.evidence),
449
+ createdAt: input.createdAt,
450
+ };
451
+ return deepFreeze({ ...content, digest: (0, canonical_1.digestRuntimeValue)(content) });
452
+ }
453
+ function assertSubagentThreadReceiptV1(receipt) {
454
+ const { digest, ...content } = receipt;
455
+ if (receipt.version !== exports.SUBAGENT_THREAD_RUNTIME_VERSION ||
456
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.receiptId) ||
457
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.parentThreadId) ||
458
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.parentTurnId) ||
459
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.parentStepId) ||
460
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.parentRequestId) ||
461
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.childThreadId) ||
462
+ !(0, runtime_protocol_v1_1.isRuntimeId)(receipt.childTurnId) ||
463
+ !Number.isSafeInteger(receipt.parentStepSnapshotSeq) ||
464
+ receipt.parentStepSnapshotSeq < 1 ||
465
+ receipt.parentCapabilityReceiptSeq !== receipt.parentStepSnapshotSeq + 1 ||
466
+ !Number.isSafeInteger(receipt.parentProjectionCursor) ||
467
+ receipt.parentCapabilityReceiptSeq > receipt.parentProjectionCursor ||
468
+ !receipt.parentStepSnapshotDigest.trim() ||
469
+ !receipt.parentCapabilityReceiptDigest.trim() ||
470
+ (0, canonical_1.digestRuntimeValue)(content) !== digest) {
471
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_RECEIPT_INVALID', 'Subagent Thread receipt failed identity or digest validation.');
472
+ }
473
+ }
474
+ class SubagentThreadRuntimeError extends Error {
475
+ constructor(code, message) {
476
+ super(message);
477
+ this.code = code;
478
+ this.name = 'SubagentThreadRuntimeError';
479
+ }
480
+ }
481
+ exports.SubagentThreadRuntimeError = SubagentThreadRuntimeError;
482
+ async function flushAndCaptureParent(input) {
483
+ assertParentForkRequest(input);
484
+ try {
485
+ await input.flush();
486
+ }
487
+ catch (error) {
488
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_FLUSH_FAILED', `Parent step receipt flush failed: ${errorMessage(error)}`);
489
+ }
490
+ const events = replayAllEvents(input.store);
491
+ const projection = input.store.loadProjection();
492
+ const turn = projection.turns[input.turnId];
493
+ if (!turn ||
494
+ turn.status !== 'active' ||
495
+ projection.activeTurnId !== input.turnId ||
496
+ turn.commit) {
497
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_NOT_ACTIVE', `Parent turn ${input.turnId} must remain active at the child fork boundary.`);
498
+ }
499
+ const replayCursor = events.at(-1)?.seq ?? 0;
500
+ if (projection.cursor !== replayCursor || input.store.getCursor() !== projection.cursor) {
501
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_DRIFT', 'Parent durable projection changed while capturing the child fork boundary.');
502
+ }
503
+ const snapshots = events.filter(event => event.payload.type === 'step.snapshot' &&
504
+ (event.stepId === input.stepId || event.payload.data.snapshotId === input.stepId));
505
+ const capabilities = events.filter(event => event.payload.type === 'capability.receipt' &&
506
+ (event.stepId === input.stepId || event.payload.data.receiptId === input.requestId));
507
+ if (snapshots.length !== 1 || capabilities.length !== 1) {
508
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_STEP_NOT_DURABLE', `Parent step ${input.stepId} does not have exactly one durable StepSnapshot/CapabilityReceipt pair.`);
509
+ }
510
+ const snapshotEvent = snapshots[0];
511
+ const capabilityEvent = capabilities[0];
512
+ if (snapshotEvent.payload.type !== 'step.snapshot' ||
513
+ capabilityEvent.payload.type !== 'capability.receipt' ||
514
+ snapshotEvent.seq + 1 !== capabilityEvent.seq ||
515
+ snapshotEvent.threadId !== input.threadId ||
516
+ capabilityEvent.threadId !== input.threadId ||
517
+ snapshotEvent.turnId !== input.turnId ||
518
+ capabilityEvent.turnId !== input.turnId ||
519
+ snapshotEvent.stepId !== input.stepId ||
520
+ capabilityEvent.stepId !== input.stepId ||
521
+ snapshotEvent.payload.data.snapshotId !== input.stepId ||
522
+ capabilityEvent.payload.data.receiptId !== input.requestId ||
523
+ snapshotEvent.payload.data.digest !== input.stepSnapshotDigest ||
524
+ capabilityEvent.payload.data.digest !== input.capabilityReceiptDigest) {
525
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_DRIFT', 'Parent StepSnapshot/CapabilityReceipt envelope differs from the requested fork anchor.');
526
+ }
527
+ const laterStep = events.find(event => event.payload.type === 'step.snapshot' &&
528
+ event.turnId === input.turnId &&
529
+ event.seq > capabilityEvent.seq);
530
+ if (laterStep) {
531
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_DRIFT', `Parent advanced beyond step ${input.stepId} before the child fork boundary.`);
532
+ }
533
+ assertParentReceiptChain(input, snapshotEvent, capabilityEvent);
534
+ return deepFreeze({
535
+ threadId: input.threadId,
536
+ turnId: input.turnId,
537
+ stepId: input.stepId,
538
+ requestId: input.requestId,
539
+ stepSnapshotSeq: snapshotEvent.seq,
540
+ capabilityReceiptSeq: capabilityEvent.seq,
541
+ stepSnapshotDigest: input.stepSnapshotDigest,
542
+ capabilityReceiptDigest: input.capabilityReceiptDigest,
543
+ projectionCursor: projection.cursor,
544
+ projectionDigest: projection.digest,
545
+ });
546
+ }
547
+ function assertParentForkRequest(input) {
548
+ if (!input?.store ||
549
+ !(0, runtime_protocol_v1_1.isRuntimeId)(input.threadId) ||
550
+ !(0, runtime_protocol_v1_1.isRuntimeId)(input.turnId) ||
551
+ !(0, runtime_protocol_v1_1.isRuntimeId)(input.stepId) ||
552
+ !(0, runtime_protocol_v1_1.isRuntimeId)(input.requestId) ||
553
+ input.store.threadId !== input.threadId ||
554
+ !input.stepSnapshotDigest.trim() ||
555
+ !input.capabilityReceiptDigest.trim() ||
556
+ typeof input.flush !== 'function') {
557
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_INVALID_REQUEST', 'Parent fork requires matching thread/turn/step/request identities and both receipt digests.');
558
+ }
559
+ }
560
+ function assertParentReceiptChain(input, snapshotEvent, capabilityEvent) {
561
+ if (snapshotEvent.payload.type !== 'step.snapshot' ||
562
+ capabilityEvent.payload.type !== 'capability.receipt') {
563
+ parentDrift('Parent fork events are not a StepSnapshot/CapabilityReceipt pair.');
564
+ }
565
+ const persistedSnapshot = parseReceiptObject(snapshotEvent.payload.data.receipt, 'StepSnapshot');
566
+ const capabilityReceipt = parseReceiptObject(capabilityEvent.payload.data.receipt, 'CapabilityReceipt');
567
+ const stepReceipt = persistedSnapshot.stepReceipt;
568
+ if (!isRecord(stepReceipt))
569
+ parentDrift('Parent StepSnapshot is missing its step receipt.');
570
+ assertReceiptDigest(persistedSnapshot, 'Parent StepSnapshot receipt');
571
+ assertReceiptDigest(stepReceipt, 'Parent CapabilityStep receipt');
572
+ assertReceiptDigest(capabilityReceipt, 'Parent Capability receipt');
573
+ if (persistedSnapshot.version !== 1 ||
574
+ persistedSnapshot.snapshotId !== input.stepId ||
575
+ persistedSnapshot.threadId !== input.threadId ||
576
+ persistedSnapshot.turnId !== input.turnId ||
577
+ persistedSnapshot.stepId !== input.stepId ||
578
+ persistedSnapshot.snapshotDigest !== input.stepSnapshotDigest ||
579
+ persistedSnapshot.capabilityReceiptDigest !== input.capabilityReceiptDigest ||
580
+ stepReceipt.version !== 1 ||
581
+ stepReceipt.threadId !== input.threadId ||
582
+ stepReceipt.turnId !== input.turnId ||
583
+ stepReceipt.stepId !== input.stepId ||
584
+ stepReceipt.snapshotDigest !== input.stepSnapshotDigest ||
585
+ stepReceipt.capabilityReceiptDigest !== input.capabilityReceiptDigest ||
586
+ capabilityReceipt.version !== 1 ||
587
+ capabilityReceipt.requestId !== input.requestId ||
588
+ capabilityReceipt.threadId !== input.threadId ||
589
+ capabilityReceipt.turnId !== input.turnId ||
590
+ capabilityReceipt.stepId !== input.stepId ||
591
+ capabilityReceipt.digest !== input.capabilityReceiptDigest) {
592
+ parentDrift('Parent step receipt identity or digest chain is inconsistent.');
593
+ }
594
+ }
595
+ function assertReceiptDigest(value, label) {
596
+ const record = value;
597
+ const digest = record.digest;
598
+ if (typeof digest !== 'string')
599
+ parentDrift(`${label} has no digest.`);
600
+ const content = { ...record };
601
+ delete content.digest;
602
+ if ((0, canonical_1.digestRuntimeValue)(content) !== digest)
603
+ parentDrift(`${label} digest is invalid.`);
604
+ }
605
+ function parseReceiptObject(serialized, label) {
606
+ let value;
607
+ try {
608
+ value = JSON.parse(serialized);
609
+ }
610
+ catch {
611
+ parentDrift(`${label} is not valid JSON.`);
612
+ }
613
+ if (!isRecord(value))
614
+ parentDrift(`${label} is not an object.`);
615
+ return value;
616
+ }
617
+ function isRecord(value) {
618
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
619
+ }
620
+ function parentDrift(message) {
621
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_PARENT_DRIFT', message);
622
+ }
623
+ function replayAllEvents(store) {
624
+ const events = [];
625
+ let cursor = 0;
626
+ while (true) {
627
+ const page = store.replay(cursor);
628
+ events.push(...page.events);
629
+ if (!page.hasMore)
630
+ return events;
631
+ if (page.nextCursor <= cursor)
632
+ parentDrift('Parent event replay cursor did not advance.');
633
+ cursor = page.nextCursor;
634
+ }
635
+ }
636
+ function validateOptions(options) {
637
+ if (!options.childStoreRootDir.trim()) {
638
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_INVALID_REQUEST', 'childStoreRootDir is required.');
639
+ }
640
+ const childStoreRootDir = (0, path_1.resolve)(options.childStoreRootDir);
641
+ return {
642
+ childStoreRootDir,
643
+ tree: options.tree,
644
+ rolePolicies: options.rolePolicies,
645
+ createAgentLoop: options.createAgentLoop,
646
+ eventStoreOptions: options.eventStoreOptions,
647
+ defaultBudget: validateBudgetRequest(options.defaultBudget ?? { maxModelRequests: 6, maxToolCalls: 24 }),
648
+ maxObjectiveBytes: positiveInteger(options.maxObjectiveBytes ?? 64 * 1024, 'maxObjectiveBytes'),
649
+ maxSummaryBytes: positiveInteger(options.maxSummaryBytes ?? 16 * 1024, 'maxSummaryBytes'),
650
+ maxEvidenceItems: positiveInteger(options.maxEvidenceItems ?? 32, 'maxEvidenceItems'),
651
+ maxEvidenceBytes: positiveInteger(options.maxEvidenceBytes ?? 2 * 1024, 'maxEvidenceBytes'),
652
+ threadIdFactory: options.threadIdFactory ?? runtime_protocol_v1_1.createRuntimeId,
653
+ clock: options.clock ?? Date.now,
654
+ onReceipt: options.onReceipt,
655
+ };
656
+ }
657
+ function validateBudgetRequest(input) {
658
+ return Object.freeze({
659
+ maxModelRequests: positiveInteger(input.maxModelRequests, 'child maxModelRequests'),
660
+ maxToolCalls: nonNegativeInteger(input.maxToolCalls, 'child maxToolCalls'),
661
+ });
662
+ }
663
+ function assertAuthority(authority, label) {
664
+ const { digest, ...content } = authority;
665
+ if (!authority.authorityId.trim() ||
666
+ !authority.projectRoot.trim() ||
667
+ !['allow', 'ask', 'deny'].includes(authority.confirmation) ||
668
+ !['workspace', 'full'].includes(authority.filesystem) ||
669
+ !['deny', 'read', 'write'].includes(authority.network) ||
670
+ (0, canonical_1.digestRuntimeValue)(content) !== digest) {
671
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_AUTHORITY_INVALID', `${label} AuthoritySnapshotV1 failed integrity validation.`);
672
+ }
673
+ }
674
+ function intersectProjectRoots(parentRoot, roleRoot) {
675
+ const parent = (0, path_1.resolve)(parentRoot);
676
+ const role = (0, path_1.resolve)(roleRoot);
677
+ if (isWithin(parent, role))
678
+ return role;
679
+ if (isWithin(role, parent))
680
+ return parent;
681
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_AUTHORITY_INVALID', 'Parent and role project roots do not overlap.');
682
+ }
683
+ function isWithin(root, candidate) {
684
+ const path = (0, path_1.relative)(root, candidate);
685
+ return path === '' || (path !== '..' && !path.startsWith(`..${path_1.sep}`) && !(0, path_1.isAbsolute)(path));
686
+ }
687
+ function moreRestrictive(left, right, order) {
688
+ return order[Math.max(order.indexOf(left), order.indexOf(right))];
689
+ }
690
+ function assertIndependentStepSnapshots(parentStepSnapshotDigest, child, terminal) {
691
+ if (terminal === 'completed' && child.stepSnapshotDigests.length === 0) {
692
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_CHILD_SNAPSHOT_INVALID', 'A completed child AgentLoop must persist an independent StepSnapshotV1.');
693
+ }
694
+ if (child.stepSnapshotDigests.includes(parentStepSnapshotDigest)) {
695
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_CHILD_SNAPSHOT_INVALID', 'Child StepSnapshotV1 aliases a parent snapshot digest.');
696
+ }
697
+ }
698
+ function childStopDecision(commit, terminal, usage, limits, parent) {
699
+ const parsed = parseStopDecision(commit);
700
+ const status = terminal === 'interrupted' ? 'cancelled' : terminal === 'failed' ? 'failed' : 'completed';
701
+ const base = parsed ??
702
+ (0, stop_decision_1.createStopDecision)({
703
+ scope: 'subagent',
704
+ status,
705
+ disposition: status === 'completed' ? 'finish_scope' : 'resume_allowed',
706
+ reason: {
707
+ code: `subagent_${status}`,
708
+ message: status === 'completed'
709
+ ? 'Child Thread completed its assigned scope.'
710
+ : `Child Thread ended with ${status}.`,
711
+ },
712
+ evidence: [],
713
+ nextActions: status === 'completed'
714
+ ? [{ kind: 'inspect', label: 'Inspect and reconcile child evidence.' }]
715
+ : [{ kind: 'retry', label: 'Retry only after inspecting the child receipt.' }],
716
+ resources: {},
717
+ });
718
+ return (0, stop_decision_1.createStopDecision)({
719
+ ...base,
720
+ scope: 'subagent',
721
+ evidence: [
722
+ ...base.evidence,
723
+ {
724
+ kind: 'runtime',
725
+ source: 'subagent-thread-runtime',
726
+ detail: `Forked from durable parent step ${parent.stepId} (${parent.capabilityReceiptDigest}).`,
727
+ },
728
+ ],
729
+ resources: {
730
+ ...base.resources,
731
+ llmRequests: { used: usage.modelRequests, limit: limits.maxModelRequests },
732
+ toolCalls: { used: usage.toolCalls, limit: limits.maxToolCalls },
733
+ },
734
+ });
735
+ }
736
+ function parseStopDecision(commit) {
737
+ if (!commit.stopDecision)
738
+ return undefined;
739
+ let value;
740
+ try {
741
+ value = JSON.parse(commit.stopDecision);
742
+ }
743
+ catch {
744
+ throw childResultError('Child TurnCommit stopDecision is not JSON.');
745
+ }
746
+ if (value.schemaVersion !== 1 ||
747
+ !['completed', 'stopped', 'blocked', 'cancelled', 'failed'].includes(value.status) ||
748
+ !['finish_scope', 'pause_scope', 'resume_allowed'].includes(value.disposition) ||
749
+ !value.reason ||
750
+ !Array.isArray(value.evidence) ||
751
+ !Array.isArray(value.nextActions) ||
752
+ !value.resources ||
753
+ (0, canonical_1.digestRuntimeValue)(value) !== commit.stopDecisionDigest) {
754
+ throw childResultError('Child TurnCommit stopDecision failed schema or digest validation.');
755
+ }
756
+ return value;
757
+ }
758
+ function boundedChildSummary(projection, turnId, commit, maxBytes) {
759
+ const turn = projection.turns[turnId];
760
+ const assistant = turn?.itemIds
761
+ .map(itemId => projection.items[itemId])
762
+ .filter(item => item.kind === 'message' && item.role === 'assistant' && item.content)
763
+ .at(-1)?.content;
764
+ const fallback = commit.outcome ||
765
+ commit.error ||
766
+ commit.reason ||
767
+ `Child Thread ended with ${commit.terminal}.`;
768
+ return truncateUtf8((assistant || fallback).trim(), maxBytes);
769
+ }
770
+ function boundedEvidence(collected, commit, maxItems, maxBytes) {
771
+ const items = collected.slice(0, maxItems).map(item => ({ ...item }));
772
+ if (items.length === 0) {
773
+ items.push({
774
+ kind: 'runtime',
775
+ source: 'subagent-thread-runtime',
776
+ detail: truncateUtf8('Child completed without separately reported task evidence.', maxBytes),
777
+ reference: truncateUtf8(commit.digest, maxBytes),
778
+ });
779
+ }
780
+ return deepFreeze(items);
781
+ }
782
+ function linkAbortSignals(signals) {
783
+ const controller = new AbortController();
784
+ const listeners = [];
785
+ for (const signal of signals) {
786
+ if (!signal)
787
+ continue;
788
+ const listener = () => {
789
+ if (!controller.signal.aborted)
790
+ controller.abort(signal.reason);
791
+ };
792
+ if (signal.aborted)
793
+ listener();
794
+ else {
795
+ signal.addEventListener('abort', listener, { once: true });
796
+ listeners.push({ signal, listener });
797
+ }
798
+ }
799
+ return {
800
+ signal: controller.signal,
801
+ dispose: () => {
802
+ for (const entry of listeners) {
803
+ entry.signal.removeEventListener('abort', entry.listener);
804
+ }
805
+ },
806
+ };
807
+ }
808
+ function forwardAbort(signal, target) {
809
+ if (!signal)
810
+ return () => undefined;
811
+ const listener = () => {
812
+ if (!target.signal.aborted)
813
+ target.abort(signal.reason);
814
+ };
815
+ if (signal.aborted)
816
+ listener();
817
+ else
818
+ signal.addEventListener('abort', listener, { once: true });
819
+ return () => signal.removeEventListener('abort', listener);
820
+ }
821
+ function throwIfAborted(signal) {
822
+ if (signal?.aborted)
823
+ throw abortError(signal);
824
+ }
825
+ function abortError(signal) {
826
+ return new SubagentThreadRuntimeError('ORION_SUBAGENT_ABORTED', abortMessage(signal));
827
+ }
828
+ function abortMessage(signal) {
829
+ return signal.reason instanceof Error
830
+ ? signal.reason.message
831
+ : String(signal.reason || 'Subagent Thread was aborted.');
832
+ }
833
+ function childBudgetError(ownerId, resource, limit) {
834
+ return new SubagentThreadRuntimeError('ORION_SUBAGENT_TREE_BUDGET_EXCEEDED', `Child ${ownerId} exceeded its ${resource} reservation (${limit}).`);
835
+ }
836
+ function childResultError(message) {
837
+ return new SubagentThreadRuntimeError('ORION_SUBAGENT_CHILD_RESULT_INVALID', message);
838
+ }
839
+ function truncateUtf8(value, maxBytes) {
840
+ if (Buffer.byteLength(value, 'utf8') <= maxBytes)
841
+ return value;
842
+ let result = '';
843
+ let bytes = 0;
844
+ for (const character of value) {
845
+ const next = Buffer.byteLength(character, 'utf8');
846
+ if (bytes + next > maxBytes)
847
+ break;
848
+ result += character;
849
+ bytes += next;
850
+ }
851
+ return result;
852
+ }
853
+ function positiveInteger(value, name) {
854
+ if (!Number.isSafeInteger(value) || value <= 0) {
855
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_INVALID_REQUEST', `${name} must be a positive safe integer.`);
856
+ }
857
+ return value;
858
+ }
859
+ function nonNegativeInteger(value, name) {
860
+ if (!Number.isSafeInteger(value) || value < 0) {
861
+ throw new SubagentThreadRuntimeError('ORION_SUBAGENT_INVALID_REQUEST', `${name} must be a non-negative safe integer.`);
862
+ }
863
+ return value;
864
+ }
865
+ function errorMessage(error) {
866
+ return error instanceof Error ? error.message : String(error);
867
+ }
868
+ function deepFreeze(value) {
869
+ if (typeof value !== 'object' || value === null || Object.isFrozen(value))
870
+ return value;
871
+ Object.freeze(value);
872
+ for (const child of Object.values(value))
873
+ deepFreeze(child);
874
+ return value;
875
+ }
876
+ //# sourceMappingURL=subagent-thread-runtime.js.map