@stoneforge/smithy 0.1.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 (497) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +114 -0
  3. package/dist/api/index.d.ts +7 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +7 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/orchestrator-api.d.ts +153 -0
  8. package/dist/api/orchestrator-api.d.ts.map +1 -0
  9. package/dist/api/orchestrator-api.js +374 -0
  10. package/dist/api/orchestrator-api.js.map +1 -0
  11. package/dist/bin/sf.d.ts +3 -0
  12. package/dist/bin/sf.d.ts.map +1 -0
  13. package/dist/bin/sf.js +10 -0
  14. package/dist/bin/sf.js.map +1 -0
  15. package/dist/cli/commands/agent.d.ts +20 -0
  16. package/dist/cli/commands/agent.d.ts.map +1 -0
  17. package/dist/cli/commands/agent.js +861 -0
  18. package/dist/cli/commands/agent.js.map +1 -0
  19. package/dist/cli/commands/daemon.d.ts +14 -0
  20. package/dist/cli/commands/daemon.d.ts.map +1 -0
  21. package/dist/cli/commands/daemon.js +272 -0
  22. package/dist/cli/commands/daemon.js.map +1 -0
  23. package/dist/cli/commands/dispatch.d.ts +9 -0
  24. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  25. package/dist/cli/commands/dispatch.js +128 -0
  26. package/dist/cli/commands/dispatch.js.map +1 -0
  27. package/dist/cli/commands/merge.d.ts +11 -0
  28. package/dist/cli/commands/merge.d.ts.map +1 -0
  29. package/dist/cli/commands/merge.js +246 -0
  30. package/dist/cli/commands/merge.js.map +1 -0
  31. package/dist/cli/commands/pool.d.ts +21 -0
  32. package/dist/cli/commands/pool.d.ts.map +1 -0
  33. package/dist/cli/commands/pool.js +762 -0
  34. package/dist/cli/commands/pool.js.map +1 -0
  35. package/dist/cli/commands/serve.d.ts +54 -0
  36. package/dist/cli/commands/serve.d.ts.map +1 -0
  37. package/dist/cli/commands/serve.js +57 -0
  38. package/dist/cli/commands/serve.js.map +1 -0
  39. package/dist/cli/commands/task.d.ts +36 -0
  40. package/dist/cli/commands/task.d.ts.map +1 -0
  41. package/dist/cli/commands/task.js +889 -0
  42. package/dist/cli/commands/task.js.map +1 -0
  43. package/dist/cli/commands/test-orchestration.d.ts +32 -0
  44. package/dist/cli/commands/test-orchestration.d.ts.map +1 -0
  45. package/dist/cli/commands/test-orchestration.js +392 -0
  46. package/dist/cli/commands/test-orchestration.js.map +1 -0
  47. package/dist/cli/index.d.ts +13 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +15 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/plugin.d.ts +23 -0
  52. package/dist/cli/plugin.d.ts.map +1 -0
  53. package/dist/cli/plugin.js +36 -0
  54. package/dist/cli/plugin.js.map +1 -0
  55. package/dist/git/index.d.ts +10 -0
  56. package/dist/git/index.d.ts.map +1 -0
  57. package/dist/git/index.js +12 -0
  58. package/dist/git/index.js.map +1 -0
  59. package/dist/git/merge.d.ts +79 -0
  60. package/dist/git/merge.d.ts.map +1 -0
  61. package/dist/git/merge.js +254 -0
  62. package/dist/git/merge.js.map +1 -0
  63. package/dist/git/worktree-manager.d.ts +299 -0
  64. package/dist/git/worktree-manager.d.ts.map +1 -0
  65. package/dist/git/worktree-manager.js +744 -0
  66. package/dist/git/worktree-manager.js.map +1 -0
  67. package/dist/index.d.ts +24 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +31 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/prompts/director.md +272 -0
  72. package/dist/prompts/index.d.ts +100 -0
  73. package/dist/prompts/index.d.ts.map +1 -0
  74. package/dist/prompts/index.js +294 -0
  75. package/dist/prompts/index.js.map +1 -0
  76. package/dist/prompts/message-triage.md +50 -0
  77. package/dist/prompts/persistent-worker.md +240 -0
  78. package/dist/prompts/steward-base.md +64 -0
  79. package/dist/prompts/steward-docs.md +118 -0
  80. package/dist/prompts/steward-health.md +39 -0
  81. package/dist/prompts/steward-merge.md +168 -0
  82. package/dist/prompts/steward-ops.md +28 -0
  83. package/dist/prompts/steward-reminder.md +26 -0
  84. package/dist/prompts/worker.md +282 -0
  85. package/dist/providers/claude/headless.d.ts +18 -0
  86. package/dist/providers/claude/headless.d.ts.map +1 -0
  87. package/dist/providers/claude/headless.js +307 -0
  88. package/dist/providers/claude/headless.js.map +1 -0
  89. package/dist/providers/claude/index.d.ts +24 -0
  90. package/dist/providers/claude/index.d.ts.map +1 -0
  91. package/dist/providers/claude/index.js +80 -0
  92. package/dist/providers/claude/index.js.map +1 -0
  93. package/dist/providers/claude/interactive.d.ts +21 -0
  94. package/dist/providers/claude/interactive.d.ts.map +1 -0
  95. package/dist/providers/claude/interactive.js +142 -0
  96. package/dist/providers/claude/interactive.js.map +1 -0
  97. package/dist/providers/codex/event-mapper.d.ts +91 -0
  98. package/dist/providers/codex/event-mapper.d.ts.map +1 -0
  99. package/dist/providers/codex/event-mapper.js +299 -0
  100. package/dist/providers/codex/event-mapper.js.map +1 -0
  101. package/dist/providers/codex/headless.d.ts +20 -0
  102. package/dist/providers/codex/headless.d.ts.map +1 -0
  103. package/dist/providers/codex/headless.js +174 -0
  104. package/dist/providers/codex/headless.js.map +1 -0
  105. package/dist/providers/codex/index.d.ts +30 -0
  106. package/dist/providers/codex/index.d.ts.map +1 -0
  107. package/dist/providers/codex/index.js +55 -0
  108. package/dist/providers/codex/index.js.map +1 -0
  109. package/dist/providers/codex/interactive.d.ts +21 -0
  110. package/dist/providers/codex/interactive.d.ts.map +1 -0
  111. package/dist/providers/codex/interactive.js +141 -0
  112. package/dist/providers/codex/interactive.js.map +1 -0
  113. package/dist/providers/codex/jsonrpc-client.d.ts +52 -0
  114. package/dist/providers/codex/jsonrpc-client.d.ts.map +1 -0
  115. package/dist/providers/codex/jsonrpc-client.js +141 -0
  116. package/dist/providers/codex/jsonrpc-client.js.map +1 -0
  117. package/dist/providers/codex/server-manager.d.ts +100 -0
  118. package/dist/providers/codex/server-manager.d.ts.map +1 -0
  119. package/dist/providers/codex/server-manager.js +153 -0
  120. package/dist/providers/codex/server-manager.js.map +1 -0
  121. package/dist/providers/index.d.ts +15 -0
  122. package/dist/providers/index.d.ts.map +1 -0
  123. package/dist/providers/index.js +19 -0
  124. package/dist/providers/index.js.map +1 -0
  125. package/dist/providers/opencode/async-queue.d.ts +21 -0
  126. package/dist/providers/opencode/async-queue.d.ts.map +1 -0
  127. package/dist/providers/opencode/async-queue.js +51 -0
  128. package/dist/providers/opencode/async-queue.js.map +1 -0
  129. package/dist/providers/opencode/event-mapper.d.ts +132 -0
  130. package/dist/providers/opencode/event-mapper.d.ts.map +1 -0
  131. package/dist/providers/opencode/event-mapper.js +204 -0
  132. package/dist/providers/opencode/event-mapper.js.map +1 -0
  133. package/dist/providers/opencode/headless.d.ts +25 -0
  134. package/dist/providers/opencode/headless.d.ts.map +1 -0
  135. package/dist/providers/opencode/headless.js +190 -0
  136. package/dist/providers/opencode/headless.js.map +1 -0
  137. package/dist/providers/opencode/index.d.ts +33 -0
  138. package/dist/providers/opencode/index.d.ts.map +1 -0
  139. package/dist/providers/opencode/index.js +42 -0
  140. package/dist/providers/opencode/index.js.map +1 -0
  141. package/dist/providers/opencode/interactive.d.ts +21 -0
  142. package/dist/providers/opencode/interactive.d.ts.map +1 -0
  143. package/dist/providers/opencode/interactive.js +135 -0
  144. package/dist/providers/opencode/interactive.js.map +1 -0
  145. package/dist/providers/opencode/server-manager.d.ts +145 -0
  146. package/dist/providers/opencode/server-manager.d.ts.map +1 -0
  147. package/dist/providers/opencode/server-manager.js +163 -0
  148. package/dist/providers/opencode/server-manager.js.map +1 -0
  149. package/dist/providers/registry.d.ts +38 -0
  150. package/dist/providers/registry.d.ts.map +1 -0
  151. package/dist/providers/registry.js +82 -0
  152. package/dist/providers/registry.js.map +1 -0
  153. package/dist/providers/types.d.ts +144 -0
  154. package/dist/providers/types.d.ts.map +1 -0
  155. package/dist/providers/types.js +25 -0
  156. package/dist/providers/types.js.map +1 -0
  157. package/dist/runtime/event-utils.d.ts +8 -0
  158. package/dist/runtime/event-utils.d.ts.map +1 -0
  159. package/dist/runtime/event-utils.js +23 -0
  160. package/dist/runtime/event-utils.js.map +1 -0
  161. package/dist/runtime/handoff.d.ts +195 -0
  162. package/dist/runtime/handoff.d.ts.map +1 -0
  163. package/dist/runtime/handoff.js +332 -0
  164. package/dist/runtime/handoff.js.map +1 -0
  165. package/dist/runtime/index.d.ts +17 -0
  166. package/dist/runtime/index.d.ts.map +1 -0
  167. package/dist/runtime/index.js +60 -0
  168. package/dist/runtime/index.js.map +1 -0
  169. package/dist/runtime/message-mapper.d.ts +99 -0
  170. package/dist/runtime/message-mapper.d.ts.map +1 -0
  171. package/dist/runtime/message-mapper.js +202 -0
  172. package/dist/runtime/message-mapper.js.map +1 -0
  173. package/dist/runtime/predecessor-query.d.ts +212 -0
  174. package/dist/runtime/predecessor-query.d.ts.map +1 -0
  175. package/dist/runtime/predecessor-query.js +283 -0
  176. package/dist/runtime/predecessor-query.js.map +1 -0
  177. package/dist/runtime/session-manager.d.ts +466 -0
  178. package/dist/runtime/session-manager.d.ts.map +1 -0
  179. package/dist/runtime/session-manager.js +986 -0
  180. package/dist/runtime/session-manager.js.map +1 -0
  181. package/dist/runtime/spawner.d.ts +407 -0
  182. package/dist/runtime/spawner.d.ts.map +1 -0
  183. package/dist/runtime/spawner.js +781 -0
  184. package/dist/runtime/spawner.js.map +1 -0
  185. package/dist/server/config.d.ts +22 -0
  186. package/dist/server/config.d.ts.map +1 -0
  187. package/dist/server/config.js +59 -0
  188. package/dist/server/config.js.map +1 -0
  189. package/dist/server/daemon-state.d.ts +50 -0
  190. package/dist/server/daemon-state.d.ts.map +1 -0
  191. package/dist/server/daemon-state.js +100 -0
  192. package/dist/server/daemon-state.js.map +1 -0
  193. package/dist/server/events-websocket.d.ts +32 -0
  194. package/dist/server/events-websocket.d.ts.map +1 -0
  195. package/dist/server/events-websocket.js +96 -0
  196. package/dist/server/events-websocket.js.map +1 -0
  197. package/dist/server/formatters.d.ts +94 -0
  198. package/dist/server/formatters.d.ts.map +1 -0
  199. package/dist/server/formatters.js +142 -0
  200. package/dist/server/formatters.js.map +1 -0
  201. package/dist/server/index.d.ts +17 -0
  202. package/dist/server/index.d.ts.map +1 -0
  203. package/dist/server/index.js +153 -0
  204. package/dist/server/index.js.map +1 -0
  205. package/dist/server/lsp-websocket.d.ts +33 -0
  206. package/dist/server/lsp-websocket.d.ts.map +1 -0
  207. package/dist/server/lsp-websocket.js +161 -0
  208. package/dist/server/lsp-websocket.js.map +1 -0
  209. package/dist/server/routes/agents.d.ts +9 -0
  210. package/dist/server/routes/agents.d.ts.map +1 -0
  211. package/dist/server/routes/agents.js +369 -0
  212. package/dist/server/routes/agents.js.map +1 -0
  213. package/dist/server/routes/daemon.d.ts +13 -0
  214. package/dist/server/routes/daemon.d.ts.map +1 -0
  215. package/dist/server/routes/daemon.js +187 -0
  216. package/dist/server/routes/daemon.js.map +1 -0
  217. package/dist/server/routes/events.d.ts +23 -0
  218. package/dist/server/routes/events.d.ts.map +1 -0
  219. package/dist/server/routes/events.js +282 -0
  220. package/dist/server/routes/events.js.map +1 -0
  221. package/dist/server/routes/extensions.d.ts +9 -0
  222. package/dist/server/routes/extensions.d.ts.map +1 -0
  223. package/dist/server/routes/extensions.js +202 -0
  224. package/dist/server/routes/extensions.js.map +1 -0
  225. package/dist/server/routes/health.d.ts +7 -0
  226. package/dist/server/routes/health.d.ts.map +1 -0
  227. package/dist/server/routes/health.js +33 -0
  228. package/dist/server/routes/health.js.map +1 -0
  229. package/dist/server/routes/index.d.ts +21 -0
  230. package/dist/server/routes/index.d.ts.map +1 -0
  231. package/dist/server/routes/index.js +21 -0
  232. package/dist/server/routes/index.js.map +1 -0
  233. package/dist/server/routes/lsp.d.ts +9 -0
  234. package/dist/server/routes/lsp.d.ts.map +1 -0
  235. package/dist/server/routes/lsp.js +50 -0
  236. package/dist/server/routes/lsp.js.map +1 -0
  237. package/dist/server/routes/plugins.d.ts +9 -0
  238. package/dist/server/routes/plugins.d.ts.map +1 -0
  239. package/dist/server/routes/plugins.js +109 -0
  240. package/dist/server/routes/plugins.js.map +1 -0
  241. package/dist/server/routes/pools.d.ts +9 -0
  242. package/dist/server/routes/pools.d.ts.map +1 -0
  243. package/dist/server/routes/pools.js +189 -0
  244. package/dist/server/routes/pools.js.map +1 -0
  245. package/dist/server/routes/scheduler.d.ts +9 -0
  246. package/dist/server/routes/scheduler.d.ts.map +1 -0
  247. package/dist/server/routes/scheduler.js +162 -0
  248. package/dist/server/routes/scheduler.js.map +1 -0
  249. package/dist/server/routes/sessions.d.ts +27 -0
  250. package/dist/server/routes/sessions.d.ts.map +1 -0
  251. package/dist/server/routes/sessions.js +773 -0
  252. package/dist/server/routes/sessions.js.map +1 -0
  253. package/dist/server/routes/tasks.d.ts +9 -0
  254. package/dist/server/routes/tasks.d.ts.map +1 -0
  255. package/dist/server/routes/tasks.js +954 -0
  256. package/dist/server/routes/tasks.js.map +1 -0
  257. package/dist/server/routes/upload.d.ts +8 -0
  258. package/dist/server/routes/upload.d.ts.map +1 -0
  259. package/dist/server/routes/upload.js +40 -0
  260. package/dist/server/routes/upload.js.map +1 -0
  261. package/dist/server/routes/workflows.d.ts +9 -0
  262. package/dist/server/routes/workflows.d.ts.map +1 -0
  263. package/dist/server/routes/workflows.js +532 -0
  264. package/dist/server/routes/workflows.js.map +1 -0
  265. package/dist/server/routes/workspace-files.d.ts +12 -0
  266. package/dist/server/routes/workspace-files.d.ts.map +1 -0
  267. package/dist/server/routes/workspace-files.js +520 -0
  268. package/dist/server/routes/workspace-files.js.map +1 -0
  269. package/dist/server/routes/worktrees.d.ts +9 -0
  270. package/dist/server/routes/worktrees.d.ts.map +1 -0
  271. package/dist/server/routes/worktrees.js +94 -0
  272. package/dist/server/routes/worktrees.js.map +1 -0
  273. package/dist/server/server.d.ts +14 -0
  274. package/dist/server/server.d.ts.map +1 -0
  275. package/dist/server/server.js +258 -0
  276. package/dist/server/server.js.map +1 -0
  277. package/dist/server/services/lsp-manager.d.ts +93 -0
  278. package/dist/server/services/lsp-manager.d.ts.map +1 -0
  279. package/dist/server/services/lsp-manager.js +291 -0
  280. package/dist/server/services/lsp-manager.js.map +1 -0
  281. package/dist/server/services/session-messages.d.ts +61 -0
  282. package/dist/server/services/session-messages.d.ts.map +1 -0
  283. package/dist/server/services/session-messages.js +101 -0
  284. package/dist/server/services/session-messages.js.map +1 -0
  285. package/dist/server/services.d.ts +35 -0
  286. package/dist/server/services.d.ts.map +1 -0
  287. package/dist/server/services.js +159 -0
  288. package/dist/server/services.js.map +1 -0
  289. package/dist/server/static.d.ts +18 -0
  290. package/dist/server/static.d.ts.map +1 -0
  291. package/dist/server/static.js +71 -0
  292. package/dist/server/static.js.map +1 -0
  293. package/dist/server/types.d.ts +20 -0
  294. package/dist/server/types.d.ts.map +1 -0
  295. package/dist/server/types.js +7 -0
  296. package/dist/server/types.js.map +1 -0
  297. package/dist/server/websocket.d.ts +16 -0
  298. package/dist/server/websocket.d.ts.map +1 -0
  299. package/dist/server/websocket.js +143 -0
  300. package/dist/server/websocket.js.map +1 -0
  301. package/dist/services/agent-pool-service.d.ts +181 -0
  302. package/dist/services/agent-pool-service.d.ts.map +1 -0
  303. package/dist/services/agent-pool-service.js +590 -0
  304. package/dist/services/agent-pool-service.js.map +1 -0
  305. package/dist/services/agent-registry.d.ts +185 -0
  306. package/dist/services/agent-registry.d.ts.map +1 -0
  307. package/dist/services/agent-registry.js +432 -0
  308. package/dist/services/agent-registry.js.map +1 -0
  309. package/dist/services/dispatch-daemon.d.ts +429 -0
  310. package/dist/services/dispatch-daemon.d.ts.map +1 -0
  311. package/dist/services/dispatch-daemon.js +1833 -0
  312. package/dist/services/dispatch-daemon.js.map +1 -0
  313. package/dist/services/dispatch-service.d.ts +148 -0
  314. package/dist/services/dispatch-service.d.ts.map +1 -0
  315. package/dist/services/dispatch-service.js +170 -0
  316. package/dist/services/dispatch-service.js.map +1 -0
  317. package/dist/services/docs-steward-service.d.ts +199 -0
  318. package/dist/services/docs-steward-service.d.ts.map +1 -0
  319. package/dist/services/docs-steward-service.js +599 -0
  320. package/dist/services/docs-steward-service.js.map +1 -0
  321. package/dist/services/health-steward-service.d.ts +446 -0
  322. package/dist/services/health-steward-service.d.ts.map +1 -0
  323. package/dist/services/health-steward-service.js +866 -0
  324. package/dist/services/health-steward-service.js.map +1 -0
  325. package/dist/services/index.d.ts +26 -0
  326. package/dist/services/index.d.ts.map +1 -0
  327. package/dist/services/index.js +111 -0
  328. package/dist/services/index.js.map +1 -0
  329. package/dist/services/merge-request-provider.d.ts +59 -0
  330. package/dist/services/merge-request-provider.d.ts.map +1 -0
  331. package/dist/services/merge-request-provider.js +89 -0
  332. package/dist/services/merge-request-provider.js.map +1 -0
  333. package/dist/services/merge-steward-service.d.ts +268 -0
  334. package/dist/services/merge-steward-service.d.ts.map +1 -0
  335. package/dist/services/merge-steward-service.js +568 -0
  336. package/dist/services/merge-steward-service.js.map +1 -0
  337. package/dist/services/plugin-executor.d.ts +247 -0
  338. package/dist/services/plugin-executor.d.ts.map +1 -0
  339. package/dist/services/plugin-executor.js +451 -0
  340. package/dist/services/plugin-executor.js.map +1 -0
  341. package/dist/services/role-definition-service.d.ts +117 -0
  342. package/dist/services/role-definition-service.d.ts.map +1 -0
  343. package/dist/services/role-definition-service.js +289 -0
  344. package/dist/services/role-definition-service.js.map +1 -0
  345. package/dist/services/steward-scheduler.d.ts +336 -0
  346. package/dist/services/steward-scheduler.d.ts.map +1 -0
  347. package/dist/services/steward-scheduler.js +732 -0
  348. package/dist/services/steward-scheduler.js.map +1 -0
  349. package/dist/services/task-assignment-service.d.ts +291 -0
  350. package/dist/services/task-assignment-service.d.ts.map +1 -0
  351. package/dist/services/task-assignment-service.js +454 -0
  352. package/dist/services/task-assignment-service.js.map +1 -0
  353. package/dist/services/worker-task-service.d.ts +202 -0
  354. package/dist/services/worker-task-service.d.ts.map +1 -0
  355. package/dist/services/worker-task-service.js +228 -0
  356. package/dist/services/worker-task-service.js.map +1 -0
  357. package/dist/testing/index.d.ts +13 -0
  358. package/dist/testing/index.d.ts.map +1 -0
  359. package/dist/testing/index.js +17 -0
  360. package/dist/testing/index.js.map +1 -0
  361. package/dist/testing/orchestration-tests.d.ts +62 -0
  362. package/dist/testing/orchestration-tests.d.ts.map +1 -0
  363. package/dist/testing/orchestration-tests.js +1115 -0
  364. package/dist/testing/orchestration-tests.js.map +1 -0
  365. package/dist/testing/test-context.d.ts +171 -0
  366. package/dist/testing/test-context.d.ts.map +1 -0
  367. package/dist/testing/test-context.js +665 -0
  368. package/dist/testing/test-context.js.map +1 -0
  369. package/dist/testing/test-prompts.d.ts +46 -0
  370. package/dist/testing/test-prompts.d.ts.map +1 -0
  371. package/dist/testing/test-prompts.js +140 -0
  372. package/dist/testing/test-prompts.js.map +1 -0
  373. package/dist/testing/test-utils.d.ts +200 -0
  374. package/dist/testing/test-utils.d.ts.map +1 -0
  375. package/dist/testing/test-utils.js +378 -0
  376. package/dist/testing/test-utils.js.map +1 -0
  377. package/dist/types/agent-pool.d.ts +215 -0
  378. package/dist/types/agent-pool.d.ts.map +1 -0
  379. package/dist/types/agent-pool.js +143 -0
  380. package/dist/types/agent-pool.js.map +1 -0
  381. package/dist/types/agent.d.ts +265 -0
  382. package/dist/types/agent.d.ts.map +1 -0
  383. package/dist/types/agent.js +127 -0
  384. package/dist/types/agent.js.map +1 -0
  385. package/dist/types/index.d.ts +11 -0
  386. package/dist/types/index.d.ts.map +1 -0
  387. package/dist/types/index.js +40 -0
  388. package/dist/types/index.js.map +1 -0
  389. package/dist/types/message-types.d.ts +294 -0
  390. package/dist/types/message-types.d.ts.map +1 -0
  391. package/dist/types/message-types.js +354 -0
  392. package/dist/types/message-types.js.map +1 -0
  393. package/dist/types/role-definition.d.ts +272 -0
  394. package/dist/types/role-definition.d.ts.map +1 -0
  395. package/dist/types/role-definition.js +144 -0
  396. package/dist/types/role-definition.js.map +1 -0
  397. package/dist/types/task-meta.d.ts +248 -0
  398. package/dist/types/task-meta.d.ts.map +1 -0
  399. package/dist/types/task-meta.js +213 -0
  400. package/dist/types/task-meta.js.map +1 -0
  401. package/package.json +120 -0
  402. package/web/assets/abap-BrgZPUOV.js +6 -0
  403. package/web/assets/apex-DyP6w7ZV.js +6 -0
  404. package/web/assets/azcli-BaLxmfj-.js +6 -0
  405. package/web/assets/bat-CFOPXBzS.js +6 -0
  406. package/web/assets/bicep-BfEKNvv3.js +7 -0
  407. package/web/assets/cameligo-BFG1Mk7z.js +6 -0
  408. package/web/assets/clojure-DTECt2xU.js +6 -0
  409. package/web/assets/codicon-DCmgc-ay.ttf +0 -0
  410. package/web/assets/coffee-CDGzqUPQ.js +6 -0
  411. package/web/assets/cpp-CLLBncYj.js +6 -0
  412. package/web/assets/csharp-dUCx_-0o.js +6 -0
  413. package/web/assets/csp-5Rap-vPy.js +6 -0
  414. package/web/assets/css-D3h14YRZ.js +8 -0
  415. package/web/assets/cssMode-DMo-5YLA.js +9 -0
  416. package/web/assets/cypher-DrQuvNYM.js +6 -0
  417. package/web/assets/dart-CFKIUWau.js +6 -0
  418. package/web/assets/dockerfile-Zznr-cwX.js +6 -0
  419. package/web/assets/ecl-Ce3n6wWz.js +6 -0
  420. package/web/assets/elixir-deUWdS0T.js +6 -0
  421. package/web/assets/flow9-i9-g7ZhI.js +6 -0
  422. package/web/assets/freemarker2-D4qgkQzN.js +8 -0
  423. package/web/assets/fsharp-CzKuDChf.js +6 -0
  424. package/web/assets/go-Cphgjts3.js +6 -0
  425. package/web/assets/graphql-Cg7bfA9N.js +6 -0
  426. package/web/assets/handlebars-CXFvNjQC.js +6 -0
  427. package/web/assets/hcl-0cvrggvQ.js +6 -0
  428. package/web/assets/html-oyuB_D-B.js +6 -0
  429. package/web/assets/htmlMode-iWuZ24-r.js +9 -0
  430. package/web/assets/index-DqP-_E4F.css +32 -0
  431. package/web/assets/index-R1cylSgw.js +1665 -0
  432. package/web/assets/ini-Drc7WvVn.js +6 -0
  433. package/web/assets/java-B_fMsGYe.js +6 -0
  434. package/web/assets/javascript-CRIkN2Pg.js +6 -0
  435. package/web/assets/jsonMode-DVDkDgex.js +15 -0
  436. package/web/assets/julia-Bqgm2twL.js +6 -0
  437. package/web/assets/kotlin-BSkB5QuD.js +6 -0
  438. package/web/assets/less-BsTHnhdd.js +7 -0
  439. package/web/assets/lexon-YWi4-JPR.js +6 -0
  440. package/web/assets/liquid-CSfldbB5.js +6 -0
  441. package/web/assets/lua-nf6ki56Z.js +6 -0
  442. package/web/assets/m3-Cpb6xl2v.js +6 -0
  443. package/web/assets/markdown-DSZPf7rp.js +6 -0
  444. package/web/assets/mdx-Dd58iymR.js +6 -0
  445. package/web/assets/mips-B_c3zf-v.js +6 -0
  446. package/web/assets/monaco-editor-B4lwqA13.js +751 -0
  447. package/web/assets/monaco-editor-CQpyCxOA.css +1 -0
  448. package/web/assets/msdax-rUNN04Wq.js +6 -0
  449. package/web/assets/mysql-DDwshQtU.js +6 -0
  450. package/web/assets/objective-c-B5zXfXm9.js +6 -0
  451. package/web/assets/pascal-CXOwvkN_.js +6 -0
  452. package/web/assets/pascaligo-Bc-ZgV77.js +6 -0
  453. package/web/assets/perl-CwNk8-XU.js +6 -0
  454. package/web/assets/pgsql-tGk8EFnU.js +6 -0
  455. package/web/assets/php-CpIb_Oan.js +6 -0
  456. package/web/assets/pla-B03wrqEc.js +6 -0
  457. package/web/assets/postiats-BKlk5iyT.js +6 -0
  458. package/web/assets/powerquery-Bhzvs7bI.js +6 -0
  459. package/web/assets/powershell-Dd3NCNK9.js +6 -0
  460. package/web/assets/protobuf-COyEY5Pt.js +7 -0
  461. package/web/assets/pug-BaJupSGV.js +6 -0
  462. package/web/assets/python-XWrMqdhO.js +6 -0
  463. package/web/assets/qsharp-DXyYeYxl.js +6 -0
  464. package/web/assets/r-CdQndTaG.js +6 -0
  465. package/web/assets/razor-DPlhCpIs.js +6 -0
  466. package/web/assets/redis-CVwtpugi.js +6 -0
  467. package/web/assets/redshift-25W9uPmb.js +6 -0
  468. package/web/assets/restructuredtext-DfzH4Xui.js +6 -0
  469. package/web/assets/router-vendor-DHlGizSU.js +41 -0
  470. package/web/assets/ruby-Cp1zYvxS.js +6 -0
  471. package/web/assets/rust-D5C2fndG.js +6 -0
  472. package/web/assets/sb-CDntyWJ8.js +6 -0
  473. package/web/assets/scala-BoFRg7Ot.js +6 -0
  474. package/web/assets/scheme-Bio4gycK.js +6 -0
  475. package/web/assets/scss-4Ik7cdeQ.js +8 -0
  476. package/web/assets/shell-CX-rkNHf.js +6 -0
  477. package/web/assets/solidity-Tw7wswEv.js +6 -0
  478. package/web/assets/sophia-C5WLch3f.js +6 -0
  479. package/web/assets/sparql-DHaeiCBh.js +6 -0
  480. package/web/assets/sql-CCSDG5nI.js +6 -0
  481. package/web/assets/st-pnP8ivHi.js +6 -0
  482. package/web/assets/swift-DwJ7jVG9.js +8 -0
  483. package/web/assets/systemverilog-B9Xyijhd.js +6 -0
  484. package/web/assets/tcl-DnHyzjbg.js +6 -0
  485. package/web/assets/tsMode-BbA1Jbf3.js +16 -0
  486. package/web/assets/twig-CPajHgWi.js +6 -0
  487. package/web/assets/typescript-DcLHYzvH.js +6 -0
  488. package/web/assets/typespec-D-MeaMDU.js +6 -0
  489. package/web/assets/ui-vendor-BSco96uv.js +51 -0
  490. package/web/assets/utils-vendor-DaJ2Dubl.js +911 -0
  491. package/web/assets/vb-DgyLZaXg.js +6 -0
  492. package/web/assets/wgsl-DYQUnd45.js +303 -0
  493. package/web/assets/xml-xKYS3dO6.js +6 -0
  494. package/web/assets/yaml-CNmlXqzH.js +6 -0
  495. package/web/favicon.ico +0 -0
  496. package/web/index.html +22 -0
  497. package/web/logo.png +0 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Handoff Service (TB-O10e, TB-O10f)
3
+ *
4
+ * This service enables agent session handoffs for context preservation:
5
+ *
6
+ * - **Self-Handoff (TB-O10e)**: Agent hands off to fresh instance of itself
7
+ * - Creates handoff message with context summary
8
+ * - Suspends current session (available for predecessor query)
9
+ * - New session finds handoff note in inbox
10
+ *
11
+ * - **Agent-Agent Handoff (TB-O10f)**: Agent hands off to another agent
12
+ * - Sends handoff message to target agent's channel
13
+ * - Optionally transfers tasks to target agent
14
+ * - Triggers target agent to process handoff
15
+ *
16
+ * Key design decisions:
17
+ * - Handoff is manual-only (agent decides when to hand off)
18
+ * - Handoff messages stored as Documents for persistence
19
+ * - Uses existing inbox/channel system for delivery
20
+ *
21
+ * @module
22
+ */
23
+ import type { EntityId, DocumentId, MessageId, Timestamp } from '@stoneforge/core';
24
+ import type { QuarryAPI } from '@stoneforge/quarry';
25
+ import type { SessionManager, SessionRecord } from './session-manager.js';
26
+ import type { AgentRegistry } from '../services/agent-registry.js';
27
+ /**
28
+ * Handoff message content structure
29
+ */
30
+ export interface HandoffContent {
31
+ /** Type identifier for handoff messages */
32
+ readonly type: 'handoff';
33
+ /** Agent ID of the source (handing off) */
34
+ readonly fromAgentId: EntityId;
35
+ /** Agent ID of the target (receiving handoff), undefined for self-handoff */
36
+ readonly toAgentId?: EntityId;
37
+ /** Summary of the current context/state */
38
+ readonly contextSummary: string;
39
+ /** Recommended next steps */
40
+ readonly nextSteps?: string;
41
+ /** Reason for the handoff */
42
+ readonly reason?: string;
43
+ /** Task IDs being transferred (for agent-agent handoff) */
44
+ readonly taskIds?: string[];
45
+ /** Provider session ID for predecessor queries */
46
+ readonly providerSessionId?: string;
47
+ /** Timestamp when handoff was initiated */
48
+ readonly initiatedAt: Timestamp;
49
+ }
50
+ /**
51
+ * Options for self-handoff
52
+ */
53
+ export interface SelfHandoffOptions {
54
+ /** Summary of current context to preserve */
55
+ readonly contextSummary: string;
56
+ /** Recommended next steps for the new session */
57
+ readonly nextSteps?: string;
58
+ /** Reason for triggering handoff */
59
+ readonly reason?: string;
60
+ /** Additional metadata to include */
61
+ readonly metadata?: Record<string, unknown>;
62
+ }
63
+ /**
64
+ * Result of a self-handoff operation
65
+ */
66
+ export interface SelfHandoffResult {
67
+ /** Whether the handoff was successful */
68
+ readonly success: boolean;
69
+ /** The handoff document ID */
70
+ readonly handoffDocumentId?: DocumentId;
71
+ /** The message ID sent to the agent's channel */
72
+ readonly messageId?: MessageId;
73
+ /** The suspended session record */
74
+ readonly suspendedSession?: SessionRecord;
75
+ /** Error message if failed */
76
+ readonly error?: string;
77
+ /** Timestamp when handoff completed */
78
+ readonly completedAt: Timestamp;
79
+ }
80
+ /**
81
+ * Options for agent-to-agent handoff
82
+ */
83
+ export interface AgentHandoffOptions {
84
+ /** Summary of current context to preserve */
85
+ readonly contextSummary: string;
86
+ /** Recommended next steps for the target agent */
87
+ readonly nextSteps?: string;
88
+ /** Reason for triggering handoff */
89
+ readonly reason?: string;
90
+ /** Task IDs to transfer to the target agent */
91
+ readonly taskIds?: string[];
92
+ /** Additional metadata to include */
93
+ readonly metadata?: Record<string, unknown>;
94
+ /** Whether to trigger the target agent to wake up (default: true) */
95
+ readonly triggerTarget?: boolean;
96
+ }
97
+ /**
98
+ * Result of an agent-to-agent handoff operation
99
+ */
100
+ export interface AgentHandoffResult {
101
+ /** Whether the handoff was successful */
102
+ readonly success: boolean;
103
+ /** The handoff document ID */
104
+ readonly handoffDocumentId?: DocumentId;
105
+ /** The message ID sent to the target agent's channel */
106
+ readonly messageId?: MessageId;
107
+ /** The suspended session record of the source agent */
108
+ readonly suspendedSession?: SessionRecord;
109
+ /** The target agent ID */
110
+ readonly targetAgentId?: EntityId;
111
+ /** Error message if failed */
112
+ readonly error?: string;
113
+ /** Timestamp when handoff completed */
114
+ readonly completedAt: Timestamp;
115
+ }
116
+ /**
117
+ * Handoff Service interface for agent session handoffs.
118
+ *
119
+ * The service provides methods for:
120
+ * - Self-handoff: Agent hands off to fresh instance of itself
121
+ * - Agent-agent handoff: Agent hands off to another agent (TB-O10f)
122
+ */
123
+ export interface HandoffService {
124
+ /**
125
+ * Performs a self-handoff for an agent.
126
+ *
127
+ * This operation:
128
+ * 1. Creates a handoff document with context summary
129
+ * 2. Sends a handoff message to the agent's own channel
130
+ * 3. Suspends the current session (preserving provider session ID)
131
+ * 4. Terminates the process gracefully
132
+ *
133
+ * The new session can find the handoff note in its inbox and
134
+ * optionally query the suspended predecessor for more context.
135
+ *
136
+ * @param agentId - The agent performing the handoff
137
+ * @param sessionId - The current session ID
138
+ * @param options - Handoff options
139
+ * @returns Result of the handoff operation
140
+ */
141
+ selfHandoff(agentId: EntityId, sessionId: string, options: SelfHandoffOptions): Promise<SelfHandoffResult>;
142
+ /**
143
+ * Performs a handoff from one agent to another.
144
+ *
145
+ * This operation:
146
+ * 1. Creates a handoff document with context summary
147
+ * 2. Sends a handoff message to the target agent's channel
148
+ * 3. Optionally transfers task assignments to the target
149
+ * 4. Suspends the source session
150
+ * 5. Optionally triggers the target agent to wake up
151
+ *
152
+ * @param fromAgentId - The agent initiating the handoff
153
+ * @param toAgentId - The target agent receiving the handoff
154
+ * @param sessionId - The current session ID of the source agent
155
+ * @param options - Handoff options
156
+ * @returns Result of the handoff operation
157
+ */
158
+ handoffToAgent(fromAgentId: EntityId, toAgentId: EntityId, sessionId: string, options: AgentHandoffOptions): Promise<AgentHandoffResult>;
159
+ /**
160
+ * Gets the most recent handoff message for an agent.
161
+ *
162
+ * @param agentId - The agent to check for handoff messages
163
+ * @returns The most recent handoff content, or undefined if none
164
+ */
165
+ getLastHandoff(agentId: EntityId): Promise<HandoffContent | undefined>;
166
+ /**
167
+ * Checks if an agent has a pending handoff message.
168
+ *
169
+ * @param agentId - The agent to check
170
+ * @returns True if a handoff message is pending
171
+ */
172
+ hasPendingHandoff(agentId: EntityId): Promise<boolean>;
173
+ }
174
+ /** Tag used to identify handoff documents */
175
+ export declare const HANDOFF_DOCUMENT_TAG = "handoff";
176
+ /** Message type for handoff messages */
177
+ export declare const HANDOFF_MESSAGE_TYPE = "handoff";
178
+ /**
179
+ * Implementation of the Handoff Service.
180
+ */
181
+ export declare class HandoffServiceImpl implements HandoffService {
182
+ private readonly sessionManager;
183
+ private readonly registry;
184
+ private readonly api;
185
+ constructor(sessionManager: SessionManager, registry: AgentRegistry, api: QuarryAPI);
186
+ selfHandoff(agentId: EntityId, sessionId: string, options: SelfHandoffOptions): Promise<SelfHandoffResult>;
187
+ handoffToAgent(fromAgentId: EntityId, toAgentId: EntityId, sessionId: string, options: AgentHandoffOptions): Promise<AgentHandoffResult>;
188
+ getLastHandoff(agentId: EntityId): Promise<HandoffContent | undefined>;
189
+ hasPendingHandoff(agentId: EntityId): Promise<boolean>;
190
+ }
191
+ /**
192
+ * Creates a HandoffService instance
193
+ */
194
+ export declare function createHandoffService(sessionManager: SessionManager, registry: AgentRegistry, api: QuarryAPI): HandoffService;
195
+ //# sourceMappingURL=handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/runtime/handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Handoff Service (TB-O10e, TB-O10f)
3
+ *
4
+ * This service enables agent session handoffs for context preservation:
5
+ *
6
+ * - **Self-Handoff (TB-O10e)**: Agent hands off to fresh instance of itself
7
+ * - Creates handoff message with context summary
8
+ * - Suspends current session (available for predecessor query)
9
+ * - New session finds handoff note in inbox
10
+ *
11
+ * - **Agent-Agent Handoff (TB-O10f)**: Agent hands off to another agent
12
+ * - Sends handoff message to target agent's channel
13
+ * - Optionally transfers tasks to target agent
14
+ * - Triggers target agent to process handoff
15
+ *
16
+ * Key design decisions:
17
+ * - Handoff is manual-only (agent decides when to hand off)
18
+ * - Handoff messages stored as Documents for persistence
19
+ * - Uses existing inbox/channel system for delivery
20
+ *
21
+ * @module
22
+ */
23
+ import { createTimestamp, createDocument, createMessage, ContentType } from '@stoneforge/core';
24
+ // ============================================================================
25
+ // Constants
26
+ // ============================================================================
27
+ /** Tag used to identify handoff documents */
28
+ export const HANDOFF_DOCUMENT_TAG = 'handoff';
29
+ /** Message type for handoff messages */
30
+ export const HANDOFF_MESSAGE_TYPE = 'handoff';
31
+ // ============================================================================
32
+ // Implementation
33
+ // ============================================================================
34
+ /**
35
+ * Implementation of the Handoff Service.
36
+ */
37
+ export class HandoffServiceImpl {
38
+ sessionManager;
39
+ registry;
40
+ api;
41
+ constructor(sessionManager, registry, api) {
42
+ this.sessionManager = sessionManager;
43
+ this.registry = registry;
44
+ this.api = api;
45
+ }
46
+ async selfHandoff(agentId, sessionId, options) {
47
+ const now = createTimestamp();
48
+ try {
49
+ // Get the current session
50
+ const session = this.sessionManager.getSession(sessionId);
51
+ if (!session) {
52
+ return {
53
+ success: false,
54
+ error: `Session not found: ${sessionId}`,
55
+ completedAt: now,
56
+ };
57
+ }
58
+ // Verify the session belongs to the agent
59
+ if (session.agentId !== agentId) {
60
+ return {
61
+ success: false,
62
+ error: `Session ${sessionId} does not belong to agent ${agentId}`,
63
+ completedAt: now,
64
+ };
65
+ }
66
+ // Verify the session is running
67
+ if (session.status !== 'running') {
68
+ return {
69
+ success: false,
70
+ error: `Cannot handoff session in status: ${session.status}`,
71
+ completedAt: now,
72
+ };
73
+ }
74
+ // Get the agent's channel
75
+ const channelId = await this.registry.getAgentChannelId(agentId);
76
+ if (!channelId) {
77
+ return {
78
+ success: false,
79
+ error: `Agent ${agentId} has no channel`,
80
+ completedAt: now,
81
+ };
82
+ }
83
+ // Create handoff content
84
+ const handoffContent = {
85
+ type: 'handoff',
86
+ fromAgentId: agentId,
87
+ toAgentId: undefined, // Self-handoff has no target
88
+ contextSummary: options.contextSummary,
89
+ nextSteps: options.nextSteps,
90
+ reason: options.reason,
91
+ providerSessionId: session.providerSessionId,
92
+ initiatedAt: now,
93
+ };
94
+ // Create handoff document
95
+ const handoffDocument = await createDocument({
96
+ content: JSON.stringify(handoffContent, null, 2),
97
+ contentType: ContentType.JSON,
98
+ createdBy: agentId,
99
+ tags: [HANDOFF_DOCUMENT_TAG, 'self-handoff'],
100
+ metadata: {
101
+ handoffType: 'self',
102
+ fromAgentId: agentId,
103
+ providerSessionId: session.providerSessionId,
104
+ ...options.metadata,
105
+ },
106
+ });
107
+ // Save the handoff document
108
+ const savedDocument = await this.api.create(handoffDocument);
109
+ const handoffDocumentId = savedDocument.id;
110
+ // Create and send handoff message to the agent's channel
111
+ const handoffMessage = await createMessage({
112
+ channelId: channelId,
113
+ sender: agentId,
114
+ contentRef: handoffDocumentId,
115
+ metadata: {
116
+ type: HANDOFF_MESSAGE_TYPE,
117
+ handoffType: 'self',
118
+ fromAgentId: agentId,
119
+ handoffDocumentId,
120
+ },
121
+ });
122
+ const savedMessage = await this.api.create(handoffMessage);
123
+ const messageId = savedMessage.id;
124
+ // Suspend the session (preserves provider session ID for predecessor queries)
125
+ const suspendReason = options.reason
126
+ ? `Self-handoff: ${options.reason}`
127
+ : 'Self-handoff initiated';
128
+ await this.sessionManager.suspendSession(sessionId, suspendReason);
129
+ // Get the updated session record
130
+ const suspendedSession = this.sessionManager.getSession(sessionId);
131
+ return {
132
+ success: true,
133
+ handoffDocumentId,
134
+ messageId,
135
+ suspendedSession: suspendedSession ?? undefined,
136
+ completedAt: createTimestamp(),
137
+ };
138
+ }
139
+ catch (error) {
140
+ return {
141
+ success: false,
142
+ error: error instanceof Error ? error.message : String(error),
143
+ completedAt: createTimestamp(),
144
+ };
145
+ }
146
+ }
147
+ async handoffToAgent(fromAgentId, toAgentId, sessionId, options) {
148
+ const now = createTimestamp();
149
+ try {
150
+ // Get the current session
151
+ const session = this.sessionManager.getSession(sessionId);
152
+ if (!session) {
153
+ return {
154
+ success: false,
155
+ error: `Session not found: ${sessionId}`,
156
+ completedAt: now,
157
+ };
158
+ }
159
+ // Verify the session belongs to the source agent
160
+ if (session.agentId !== fromAgentId) {
161
+ return {
162
+ success: false,
163
+ error: `Session ${sessionId} does not belong to agent ${fromAgentId}`,
164
+ completedAt: now,
165
+ };
166
+ }
167
+ // Verify the session is running
168
+ if (session.status !== 'running') {
169
+ return {
170
+ success: false,
171
+ error: `Cannot handoff session in status: ${session.status}`,
172
+ completedAt: now,
173
+ };
174
+ }
175
+ // Verify target agent exists
176
+ const targetAgent = await this.registry.getAgent(toAgentId);
177
+ if (!targetAgent) {
178
+ return {
179
+ success: false,
180
+ error: `Target agent not found: ${toAgentId}`,
181
+ completedAt: now,
182
+ };
183
+ }
184
+ // Get the target agent's channel
185
+ const targetChannelId = await this.registry.getAgentChannelId(toAgentId);
186
+ if (!targetChannelId) {
187
+ return {
188
+ success: false,
189
+ error: `Target agent ${toAgentId} has no channel`,
190
+ completedAt: now,
191
+ };
192
+ }
193
+ // Create handoff content
194
+ const handoffContent = {
195
+ type: 'handoff',
196
+ fromAgentId,
197
+ toAgentId,
198
+ contextSummary: options.contextSummary,
199
+ nextSteps: options.nextSteps,
200
+ reason: options.reason,
201
+ taskIds: options.taskIds,
202
+ providerSessionId: session.providerSessionId,
203
+ initiatedAt: now,
204
+ };
205
+ // Create handoff document
206
+ const handoffDocument = await createDocument({
207
+ content: JSON.stringify(handoffContent, null, 2),
208
+ contentType: ContentType.JSON,
209
+ createdBy: fromAgentId,
210
+ tags: [HANDOFF_DOCUMENT_TAG, 'agent-handoff'],
211
+ metadata: {
212
+ handoffType: 'agent-to-agent',
213
+ fromAgentId,
214
+ toAgentId,
215
+ providerSessionId: session.providerSessionId,
216
+ taskIds: options.taskIds,
217
+ ...options.metadata,
218
+ },
219
+ });
220
+ // Save the handoff document
221
+ const savedDocument = await this.api.create(handoffDocument);
222
+ const handoffDocumentId = savedDocument.id;
223
+ // Create and send handoff message to the target agent's channel
224
+ const handoffMessage = await createMessage({
225
+ channelId: targetChannelId,
226
+ sender: fromAgentId,
227
+ contentRef: handoffDocumentId,
228
+ metadata: {
229
+ type: HANDOFF_MESSAGE_TYPE,
230
+ handoffType: 'agent-to-agent',
231
+ fromAgentId,
232
+ toAgentId,
233
+ handoffDocumentId,
234
+ taskIds: options.taskIds,
235
+ },
236
+ });
237
+ const savedMessage = await this.api.create(handoffMessage);
238
+ const messageId = savedMessage.id;
239
+ // Suspend the source session
240
+ const suspendReason = options.reason
241
+ ? `Handoff to ${toAgentId}: ${options.reason}`
242
+ : `Handoff to ${toAgentId}`;
243
+ await this.sessionManager.suspendSession(sessionId, suspendReason);
244
+ // Get the updated session record
245
+ const suspendedSession = this.sessionManager.getSession(sessionId);
246
+ // TODO: If options.triggerTarget !== false and target agent is idle,
247
+ // we could notify/wake up the target agent here.
248
+ // This would require integration with a notification system or
249
+ // direct session starting capability.
250
+ return {
251
+ success: true,
252
+ handoffDocumentId,
253
+ messageId,
254
+ suspendedSession: suspendedSession ?? undefined,
255
+ targetAgentId: toAgentId,
256
+ completedAt: createTimestamp(),
257
+ };
258
+ }
259
+ catch (error) {
260
+ return {
261
+ success: false,
262
+ error: error instanceof Error ? error.message : String(error),
263
+ completedAt: createTimestamp(),
264
+ };
265
+ }
266
+ }
267
+ async getLastHandoff(agentId) {
268
+ try {
269
+ // Get the agent's channel ID
270
+ const channelId = await this.registry.getAgentChannelId(agentId);
271
+ if (!channelId) {
272
+ return undefined;
273
+ }
274
+ // Search for handoff documents targeting this agent
275
+ const documents = await this.api.list({
276
+ type: 'document',
277
+ tags: [HANDOFF_DOCUMENT_TAG],
278
+ });
279
+ // Filter to handoff documents for this agent and sort by creation time
280
+ const handoffDocs = documents
281
+ .filter((doc) => {
282
+ const meta = doc.metadata;
283
+ // Match self-handoff (fromAgentId === agentId, no toAgentId) or
284
+ // agent-to-agent handoff (toAgentId === agentId)
285
+ return ((meta?.fromAgentId === agentId && meta?.handoffType === 'self') ||
286
+ meta?.toAgentId === agentId);
287
+ })
288
+ .sort((a, b) => {
289
+ const aTime = typeof a.createdAt === 'number' ? a.createdAt : new Date(a.createdAt).getTime();
290
+ const bTime = typeof b.createdAt === 'number' ? b.createdAt : new Date(b.createdAt).getTime();
291
+ return bTime - aTime; // Most recent first
292
+ });
293
+ if (handoffDocs.length === 0) {
294
+ return undefined;
295
+ }
296
+ // Get the most recent handoff document
297
+ const latestDoc = handoffDocs[0];
298
+ const content = latestDoc.content;
299
+ if (!content) {
300
+ return undefined;
301
+ }
302
+ // Parse the handoff content
303
+ try {
304
+ const handoffContent = JSON.parse(content);
305
+ if (handoffContent.type !== 'handoff') {
306
+ return undefined;
307
+ }
308
+ return handoffContent;
309
+ }
310
+ catch {
311
+ return undefined;
312
+ }
313
+ }
314
+ catch {
315
+ return undefined;
316
+ }
317
+ }
318
+ async hasPendingHandoff(agentId) {
319
+ const handoff = await this.getLastHandoff(agentId);
320
+ return handoff !== undefined;
321
+ }
322
+ }
323
+ // ============================================================================
324
+ // Factory Function
325
+ // ============================================================================
326
+ /**
327
+ * Creates a HandoffService instance
328
+ */
329
+ export function createHandoffService(sessionManager, registry, api) {
330
+ return new HandoffServiceImpl(sessionManager, registry, api);
331
+ }
332
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/runtime/handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Orchestrator Runtime
3
+ *
4
+ * This module exports runtime management for Claude Code agent processes:
5
+ * - SpawnerService (TB-O9) - Spawns and manages Claude Code processes
6
+ * - SessionManager (TB-O10) - Session tracking with resume support
7
+ * - PredecessorQueryService (TB-O10d) - Query previous sessions for context
8
+ * - Handoff services (TB-O10e, TB-O10f) - TODO
9
+ */
10
+ export { type SpawnMode, type SpawnConfig, type SpawnOptions, type StreamJsonEventType, type StreamJsonEvent, type SpawnedSessionEvent, type SessionStatus, type SpawnedSession, type SpawnResult, type SendInputOptions, type SpawnerService, type UWPCheckResult, type UWPCheckOptions, type UWPTaskInfo, SessionStatusTransitions, SpawnerServiceImpl, createSpawnerService, canReceiveInput, isTerminalStatus, getStatusDescription, } from './spawner.js';
11
+ export { type SessionRecord, type StartSessionOptions, type ResumeSessionOptions, type StopSessionOptions, type MessageSessionOptions, type MessageSessionResult, type SessionFilter, type SessionHistoryEntry, type RoleSessionHistoryEntry, type SessionManager, type ResumeUWPCheckResult, SessionManagerImpl, createSessionManager, } from './session-manager.js';
12
+ export { DEFAULT_QUERY_TIMEOUT_MS, MIN_QUERY_TIMEOUT_MS, MAX_QUERY_TIMEOUT_MS, type PredecessorQueryOptions, type PredecessorQueryResult, type PredecessorInfo, type PredecessorQueryStatus, type ActivePredecessorQuery, type PredecessorQueryService, PredecessorQueryServiceImpl, createPredecessorQueryService, TimeoutError, NoPredecessorError, } from './predecessor-query.js';
13
+ export { trackListeners } from './event-utils.js';
14
+ export { HANDOFF_DOCUMENT_TAG, HANDOFF_MESSAGE_TYPE, type HandoffContent, type SelfHandoffOptions, type SelfHandoffResult, type AgentHandoffOptions, type AgentHandoffResult, type HandoffService, HandoffServiceImpl, createHandoffService, } from './handoff.js';
15
+ export { type SDKMessage, type SDKAssistantMessage, type SDKSystemMessage, type SDKResultMessage, type SDKErrorMessage, type SDKContentBlock, type AnySDKMessage, mapSDKMessageToEvent, mapToolResultToEvent, mapSDKMessagesToEvents, } from './message-mapper.js';
16
+ export { type ProviderSessionId, type AgentProviderConfig, type AgentMessage, type HeadlessSession, type HeadlessSpawnOptions, type HeadlessProvider, type InteractiveSession, type InteractiveSpawnOptions, type InteractiveProvider, type AgentProvider, AgentProviderRegistry, getProviderRegistry, ClaudeAgentProvider, ClaudeHeadlessProvider, ClaudeInteractiveProvider, OpenCodeAgentProvider, OpenCodeHeadlessProvider, OpenCodeInteractiveProvider, ProviderError, } from '../providers/index.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAEhB,wBAAwB,EAExB,kBAAkB,EAElB,oBAAoB,EAEpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAExB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EAEnB,KAAK,oBAAoB,EAEzB,kBAAkB,EAElB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EAEpB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE5B,2BAA2B,EAE3B,6BAA6B,EAE7B,YAAY,EACZ,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EAEpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,kBAAkB,EAElB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAElB,qBAAqB,EACrB,mBAAmB,EAEnB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EAEzB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAE3B,aAAa,GACd,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Orchestrator Runtime
3
+ *
4
+ * This module exports runtime management for Claude Code agent processes:
5
+ * - SpawnerService (TB-O9) - Spawns and manages Claude Code processes
6
+ * - SessionManager (TB-O10) - Session tracking with resume support
7
+ * - PredecessorQueryService (TB-O10d) - Query previous sessions for context
8
+ * - Handoff services (TB-O10e, TB-O10f) - TODO
9
+ */
10
+ // Spawner service (TB-O9)
11
+ export {
12
+ // Constants
13
+ SessionStatusTransitions,
14
+ // Implementation
15
+ SpawnerServiceImpl,
16
+ // Factory
17
+ createSpawnerService,
18
+ // Utilities
19
+ canReceiveInput, isTerminalStatus, getStatusDescription, } from './spawner.js';
20
+ // Session Manager (TB-O10)
21
+ export {
22
+ // Implementation
23
+ SessionManagerImpl,
24
+ // Factory
25
+ createSessionManager, } from './session-manager.js';
26
+ // Predecessor Query Service (TB-O10d)
27
+ export {
28
+ // Constants
29
+ DEFAULT_QUERY_TIMEOUT_MS, MIN_QUERY_TIMEOUT_MS, MAX_QUERY_TIMEOUT_MS,
30
+ // Implementation
31
+ PredecessorQueryServiceImpl,
32
+ // Factory
33
+ createPredecessorQueryService,
34
+ // Errors
35
+ TimeoutError, NoPredecessorError, } from './predecessor-query.js';
36
+ // Event utilities
37
+ export { trackListeners } from './event-utils.js';
38
+ // Handoff Service (TB-O10e, TB-O10f)
39
+ export {
40
+ // Constants
41
+ HANDOFF_DOCUMENT_TAG, HANDOFF_MESSAGE_TYPE,
42
+ // Implementation
43
+ HandoffServiceImpl,
44
+ // Factory
45
+ createHandoffService, } from './handoff.js';
46
+ // Message Mapper (SDK to SpawnedSessionEvent conversion)
47
+ export {
48
+ // Functions
49
+ mapSDKMessageToEvent, mapToolResultToEvent, mapSDKMessagesToEvents, } from './message-mapper.js';
50
+ // Provider Abstraction Layer
51
+ export {
52
+ // Registry
53
+ AgentProviderRegistry, getProviderRegistry,
54
+ // Claude provider (default)
55
+ ClaudeAgentProvider, ClaudeHeadlessProvider, ClaudeInteractiveProvider,
56
+ // OpenCode provider (stubs)
57
+ OpenCodeAgentProvider, OpenCodeHeadlessProvider, OpenCodeInteractiveProvider,
58
+ // Errors
59
+ ProviderError, } from '../providers/index.js';
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,0BAA0B;AAC1B,OAAO;AAiBL,YAAY;AACZ,wBAAwB;AACxB,iBAAiB;AACjB,kBAAkB;AAClB,UAAU;AACV,oBAAoB;AACpB,YAAY;AACZ,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,2BAA2B;AAC3B,OAAO;AAeL,iBAAiB;AACjB,kBAAkB;AAClB,UAAU;AACV,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,sCAAsC;AACtC,OAAO;AACL,YAAY;AACZ,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB;AAQpB,iBAAiB;AACjB,2BAA2B;AAC3B,UAAU;AACV,6BAA6B;AAC7B,SAAS;AACT,YAAY,EACZ,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,qCAAqC;AACrC,OAAO;AACL,YAAY;AACZ,oBAAoB,EACpB,oBAAoB;AAQpB,iBAAiB;AACjB,kBAAkB;AAClB,UAAU;AACV,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,yDAAyD;AACzD,OAAO;AASL,YAAY;AACZ,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,6BAA6B;AAC7B,OAAO;AAYL,WAAW;AACX,qBAAqB,EACrB,mBAAmB;AACnB,4BAA4B;AAC5B,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB;AACzB,4BAA4B;AAC5B,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B;AAC3B,SAAS;AACT,aAAa,GACd,MAAM,uBAAuB,CAAC"}