@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,185 @@
1
+ /**
2
+ * Agent Registry Service
3
+ *
4
+ * This service provides agent registration and management functionality.
5
+ * It allows registering agents with roles (director, worker, steward) and
6
+ * querying agents by various criteria.
7
+ *
8
+ * Key features:
9
+ * - Register agents with specific roles
10
+ * - Query agents by role, status, and other filters
11
+ * - Track agent session status
12
+ * - Manage agent metadata
13
+ * - Create dedicated channels for agent messaging (TB-O7a)
14
+ *
15
+ * @module
16
+ */
17
+ import type { EntityId, Channel, ChannelId } from '@stoneforge/core';
18
+ import type { QuarryAPI } from '@stoneforge/quarry';
19
+ import type { AgentRole, AgentMetadata, AgentFilter, RegisterDirectorInput, RegisterWorkerInput, RegisterStewardInput } from '../types/index.js';
20
+ import { type AgentEntity, isAgentEntity, getAgentMetadata } from '../api/orchestrator-api.js';
21
+ export type { AgentEntity };
22
+ export { isAgentEntity, getAgentMetadata };
23
+ /**
24
+ * Generates the channel name for an agent based on agent name
25
+ * Channel names follow the pattern: agent-{agentName}
26
+ */
27
+ export declare function generateAgentChannelName(agentName: string): string;
28
+ /**
29
+ * Parses an agent name from a channel name
30
+ * Returns null if the name doesn't match the agent channel pattern
31
+ */
32
+ export declare function parseAgentChannelName(channelName: string): string | null;
33
+ /**
34
+ * Generic agent registration input
35
+ */
36
+ export type RegisterAgentInput = (RegisterDirectorInput & {
37
+ role: 'director';
38
+ }) | (RegisterWorkerInput & {
39
+ role: 'worker';
40
+ }) | (RegisterStewardInput & {
41
+ role: 'steward';
42
+ });
43
+ /**
44
+ * Agent Registry interface for managing agents in the orchestration system.
45
+ *
46
+ * The registry provides methods for:
47
+ * - Registering agents with specific roles
48
+ * - Querying agents by various criteria
49
+ * - Managing agent session status
50
+ */
51
+ export interface AgentRegistry {
52
+ /**
53
+ * Registers a new agent with the given parameters.
54
+ * This is a convenience method that dispatches to the appropriate
55
+ * role-specific registration method.
56
+ */
57
+ registerAgent(input: RegisterAgentInput): Promise<AgentEntity>;
58
+ /**
59
+ * Registers a Director agent.
60
+ * There should typically be only one Director per workspace.
61
+ */
62
+ registerDirector(input: RegisterDirectorInput): Promise<AgentEntity>;
63
+ /**
64
+ * Registers a Worker agent.
65
+ * Workers can be ephemeral (short-lived, task-specific) or persistent (long-lived).
66
+ */
67
+ registerWorker(input: RegisterWorkerInput): Promise<AgentEntity>;
68
+ /**
69
+ * Registers a Steward agent.
70
+ * Stewards perform support tasks like merging, health checks, etc.
71
+ */
72
+ registerSteward(input: RegisterStewardInput): Promise<AgentEntity>;
73
+ /**
74
+ * Gets an agent by ID
75
+ */
76
+ getAgent(entityId: EntityId): Promise<AgentEntity | undefined>;
77
+ /**
78
+ * Gets an agent by name
79
+ */
80
+ getAgentByName(name: string): Promise<AgentEntity | undefined>;
81
+ /**
82
+ * Lists agents matching the filter
83
+ */
84
+ listAgents(filter?: AgentFilter): Promise<AgentEntity[]>;
85
+ /**
86
+ * Gets all agents with a specific role
87
+ */
88
+ getAgentsByRole(role: AgentRole): Promise<AgentEntity[]>;
89
+ /**
90
+ * Gets available workers (idle or with capacity for more tasks)
91
+ */
92
+ getAvailableWorkers(): Promise<AgentEntity[]>;
93
+ /**
94
+ * Gets all stewards
95
+ */
96
+ getStewards(): Promise<AgentEntity[]>;
97
+ /**
98
+ * Gets the Director agent (there should be only one per workspace)
99
+ */
100
+ getDirector(): Promise<AgentEntity | undefined>;
101
+ /**
102
+ * Updates an agent's session status
103
+ */
104
+ updateAgentSession(entityId: EntityId, sessionId: string | undefined, status: 'idle' | 'running' | 'suspended' | 'terminated'): Promise<AgentEntity>;
105
+ /**
106
+ * Updates an agent's metadata
107
+ */
108
+ updateAgentMetadata(entityId: EntityId, updates: Partial<AgentMetadata>): Promise<AgentEntity>;
109
+ /**
110
+ * Updates an agent's properties (e.g., name)
111
+ */
112
+ updateAgent(entityId: EntityId, updates: {
113
+ name?: string;
114
+ }): Promise<AgentEntity>;
115
+ /**
116
+ * Deletes an agent and its associated channel
117
+ */
118
+ deleteAgent(entityId: EntityId): Promise<void>;
119
+ /**
120
+ * Gets the dedicated channel for an agent.
121
+ * Each agent has a channel named `agent-{agentId}` for receiving messages.
122
+ *
123
+ * @param agentId - The entity ID of the agent
124
+ * @returns The agent's channel, or undefined if not found
125
+ */
126
+ getAgentChannel(agentId: EntityId): Promise<Channel | undefined>;
127
+ /**
128
+ * Gets the channel ID for an agent from its metadata.
129
+ * This is faster than getAgentChannel() when you only need the ID.
130
+ *
131
+ * @param agentId - The entity ID of the agent
132
+ * @returns The channel ID, or undefined if the agent has no channel
133
+ */
134
+ getAgentChannelId(agentId: EntityId): Promise<ChannelId | undefined>;
135
+ }
136
+ /**
137
+ * Implementation of the Agent Registry service.
138
+ *
139
+ * This implementation uses the QuarryAPI for storage operations,
140
+ * storing agent information as Entity elements with specialized metadata.
141
+ */
142
+ export declare class AgentRegistryImpl implements AgentRegistry {
143
+ private readonly api;
144
+ constructor(api: QuarryAPI);
145
+ registerAgent(input: RegisterAgentInput): Promise<AgentEntity>;
146
+ registerDirector(input: RegisterDirectorInput): Promise<AgentEntity>;
147
+ registerWorker(input: RegisterWorkerInput): Promise<AgentEntity>;
148
+ registerSteward(input: RegisterStewardInput): Promise<AgentEntity>;
149
+ getAgent(entityId: EntityId): Promise<AgentEntity | undefined>;
150
+ getAgentByName(name: string): Promise<AgentEntity | undefined>;
151
+ listAgents(filter?: AgentFilter): Promise<AgentEntity[]>;
152
+ getAgentsByRole(role: AgentRole): Promise<AgentEntity[]>;
153
+ getAvailableWorkers(): Promise<AgentEntity[]>;
154
+ getStewards(): Promise<AgentEntity[]>;
155
+ getDirector(): Promise<AgentEntity | undefined>;
156
+ updateAgentSession(entityId: EntityId, sessionId: string | undefined, status: 'idle' | 'running' | 'suspended' | 'terminated'): Promise<AgentEntity>;
157
+ updateAgentMetadata(entityId: EntityId, updates: Partial<AgentMetadata>): Promise<AgentEntity>;
158
+ updateAgent(entityId: EntityId, updates: {
159
+ name?: string;
160
+ }): Promise<AgentEntity>;
161
+ deleteAgent(entityId: EntityId): Promise<void>;
162
+ getAgentChannel(agentId: EntityId): Promise<Channel | undefined>;
163
+ getAgentChannelId(agentId: EntityId): Promise<ChannelId | undefined>;
164
+ /**
165
+ * Creates an agent entity, its channel, and links them via metadata.
166
+ * Rolls back on partial failure to prevent orphaned resources.
167
+ */
168
+ private registerAgentWithRollback;
169
+ /**
170
+ * Creates a dedicated channel for an agent and updates the agent's metadata
171
+ * with the channel ID.
172
+ *
173
+ * @param agentName - The name of the agent (used for channel naming)
174
+ * @param agentId - The ID of the agent entity (used for membership)
175
+ * @param createdBy - The entity that created the agent (will be a channel member)
176
+ * @returns The created channel
177
+ */
178
+ private createAgentChannel;
179
+ private applyFilters;
180
+ }
181
+ /**
182
+ * Creates an AgentRegistry instance
183
+ */
184
+ export declare function createAgentRegistry(api: QuarryAPI): AgentRegistry;
185
+ //# sourceMappingURL=agent-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../src/services/agent-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Agent Registry Service
3
+ *
4
+ * This service provides agent registration and management functionality.
5
+ * It allows registering agents with roles (director, worker, steward) and
6
+ * querying agents by various criteria.
7
+ *
8
+ * Key features:
9
+ * - Register agents with specific roles
10
+ * - Query agents by role, status, and other filters
11
+ * - Track agent session status
12
+ * - Manage agent metadata
13
+ * - Create dedicated channels for agent messaging (TB-O7a)
14
+ *
15
+ * @module
16
+ */
17
+ import { EntityTypeValue, createEntity, createTimestamp, createDirectChannel, generateDirectChannelName, duplicateName, asEntityId, asElementId } from '@stoneforge/core';
18
+ // Import shared agent entity types from the API module to avoid duplication
19
+ import { isAgentEntity, getAgentMetadata, } from '../api/orchestrator-api.js';
20
+ export { isAgentEntity, getAgentMetadata };
21
+ // ============================================================================
22
+ // Constants
23
+ // ============================================================================
24
+ /**
25
+ * Key used to store agent metadata in Entity.metadata
26
+ */
27
+ const AGENT_META_KEY = 'agent';
28
+ /**
29
+ * Prefix for agent channel names
30
+ */
31
+ const AGENT_CHANNEL_PREFIX = 'agent-';
32
+ /**
33
+ * Generates the channel name for an agent based on agent name
34
+ * Channel names follow the pattern: agent-{agentName}
35
+ */
36
+ export function generateAgentChannelName(agentName) {
37
+ return `${AGENT_CHANNEL_PREFIX}${agentName}`;
38
+ }
39
+ /**
40
+ * Parses an agent name from a channel name
41
+ * Returns null if the name doesn't match the agent channel pattern
42
+ */
43
+ export function parseAgentChannelName(channelName) {
44
+ if (!channelName.startsWith(AGENT_CHANNEL_PREFIX)) {
45
+ return null;
46
+ }
47
+ const agentName = channelName.slice(AGENT_CHANNEL_PREFIX.length);
48
+ // Basic validation - must have a non-empty name
49
+ if (!agentName || agentName.length === 0) {
50
+ return null;
51
+ }
52
+ return agentName;
53
+ }
54
+ // ============================================================================
55
+ // Agent Registry Implementation
56
+ // ============================================================================
57
+ /**
58
+ * Implementation of the Agent Registry service.
59
+ *
60
+ * This implementation uses the QuarryAPI for storage operations,
61
+ * storing agent information as Entity elements with specialized metadata.
62
+ */
63
+ export class AgentRegistryImpl {
64
+ api;
65
+ constructor(api) {
66
+ this.api = api;
67
+ }
68
+ // ----------------------------------------
69
+ // Agent Registration
70
+ // ----------------------------------------
71
+ async registerAgent(input) {
72
+ switch (input.role) {
73
+ case 'director':
74
+ return this.registerDirector(input);
75
+ case 'worker':
76
+ return this.registerWorker(input);
77
+ case 'steward':
78
+ return this.registerSteward(input);
79
+ default:
80
+ throw new Error(`Unknown agent role: ${input.role}`);
81
+ }
82
+ }
83
+ async registerDirector(input) {
84
+ const existing = await this.getAgentByName(input.name);
85
+ if (existing) {
86
+ throw duplicateName(input.name, 'agent', { existingId: existing.id });
87
+ }
88
+ const agentMetadata = {
89
+ agentRole: 'director',
90
+ sessionStatus: 'idle',
91
+ maxConcurrentTasks: input.maxConcurrentTasks,
92
+ roleDefinitionRef: input.roleDefinitionRef,
93
+ provider: input.provider,
94
+ model: input.model,
95
+ };
96
+ const entity = await createEntity({
97
+ name: input.name,
98
+ entityType: EntityTypeValue.AGENT,
99
+ createdBy: input.createdBy,
100
+ tags: input.tags,
101
+ metadata: { [AGENT_META_KEY]: agentMetadata },
102
+ });
103
+ return this.registerAgentWithRollback(entity, input.name, input.createdBy);
104
+ }
105
+ async registerWorker(input) {
106
+ const existing = await this.getAgentByName(input.name);
107
+ if (existing) {
108
+ throw duplicateName(input.name, 'agent', { existingId: existing.id });
109
+ }
110
+ const agentMetadata = {
111
+ agentRole: 'worker',
112
+ workerMode: input.workerMode,
113
+ sessionStatus: 'idle',
114
+ maxConcurrentTasks: input.maxConcurrentTasks,
115
+ roleDefinitionRef: input.roleDefinitionRef,
116
+ provider: input.provider,
117
+ model: input.model,
118
+ };
119
+ const entity = await createEntity({
120
+ name: input.name,
121
+ entityType: EntityTypeValue.AGENT,
122
+ createdBy: input.createdBy,
123
+ tags: input.tags,
124
+ metadata: { [AGENT_META_KEY]: agentMetadata },
125
+ reportsTo: input.reportsTo,
126
+ });
127
+ return this.registerAgentWithRollback(entity, input.name, input.createdBy);
128
+ }
129
+ async registerSteward(input) {
130
+ const existing = await this.getAgentByName(input.name);
131
+ if (existing) {
132
+ throw duplicateName(input.name, 'agent', { existingId: existing.id });
133
+ }
134
+ const agentMetadata = {
135
+ agentRole: 'steward',
136
+ stewardFocus: input.stewardFocus,
137
+ triggers: input.triggers,
138
+ sessionStatus: 'idle',
139
+ maxConcurrentTasks: input.maxConcurrentTasks,
140
+ roleDefinitionRef: input.roleDefinitionRef,
141
+ provider: input.provider,
142
+ model: input.model,
143
+ };
144
+ const entity = await createEntity({
145
+ name: input.name,
146
+ entityType: EntityTypeValue.AGENT,
147
+ createdBy: input.createdBy,
148
+ tags: input.tags,
149
+ metadata: { [AGENT_META_KEY]: agentMetadata },
150
+ reportsTo: input.reportsTo,
151
+ });
152
+ return this.registerAgentWithRollback(entity, input.name, input.createdBy);
153
+ }
154
+ // ----------------------------------------
155
+ // Agent Queries
156
+ // ----------------------------------------
157
+ async getAgent(entityId) {
158
+ // Cast EntityId to ElementId - they are both branded string types
159
+ const entity = await this.api.get(asElementId(entityId));
160
+ if (!entity || entity.type !== 'entity' || !isAgentEntity(entity)) {
161
+ return undefined;
162
+ }
163
+ return entity;
164
+ }
165
+ async getAgentByName(name) {
166
+ const entity = await this.api.lookupEntityByName(name);
167
+ if (!entity || !isAgentEntity(entity)) {
168
+ return undefined;
169
+ }
170
+ return entity;
171
+ }
172
+ async listAgents(filter) {
173
+ // Get all entities
174
+ const entities = await this.api.list({ type: 'entity' });
175
+ // Filter to only agent-type entities with valid agent metadata
176
+ let agents = entities.filter((e) => e.entityType === EntityTypeValue.AGENT && isAgentEntity(e));
177
+ // Apply additional filters
178
+ if (filter) {
179
+ agents = this.applyFilters(agents, filter);
180
+ }
181
+ return agents;
182
+ }
183
+ async getAgentsByRole(role) {
184
+ return this.listAgents({ role });
185
+ }
186
+ async getAvailableWorkers() {
187
+ const workers = await this.listAgents({ role: 'worker' });
188
+ return workers.filter((w) => {
189
+ const meta = getAgentMetadata(w);
190
+ const status = meta?.sessionStatus;
191
+ // Consider idle or undefined (never started) as available
192
+ return status === 'idle' || status === undefined;
193
+ });
194
+ }
195
+ async getStewards() {
196
+ return this.listAgents({ role: 'steward' });
197
+ }
198
+ async getDirector() {
199
+ const directors = await this.listAgents({ role: 'director' });
200
+ return directors[0];
201
+ }
202
+ // ----------------------------------------
203
+ // Agent Session Management
204
+ // ----------------------------------------
205
+ async updateAgentSession(entityId, sessionId, status) {
206
+ const agent = await this.getAgent(entityId);
207
+ if (!agent) {
208
+ throw new Error(`Agent not found: ${entityId}`);
209
+ }
210
+ const currentMeta = getAgentMetadata(agent);
211
+ if (!currentMeta) {
212
+ throw new Error(`Entity is not an agent: ${entityId}`);
213
+ }
214
+ const updatedAgentMeta = {
215
+ ...currentMeta,
216
+ sessionId,
217
+ sessionStatus: status,
218
+ lastActivityAt: createTimestamp(),
219
+ };
220
+ // Cast EntityId to ElementId for update
221
+ const updated = await this.api.update(asElementId(entityId), {
222
+ metadata: { ...agent.metadata, [AGENT_META_KEY]: updatedAgentMeta },
223
+ });
224
+ return updated;
225
+ }
226
+ async updateAgentMetadata(entityId, updates) {
227
+ const agent = await this.getAgent(entityId);
228
+ if (!agent) {
229
+ throw new Error(`Agent not found: ${entityId}`);
230
+ }
231
+ const currentMeta = getAgentMetadata(agent);
232
+ if (!currentMeta) {
233
+ throw new Error(`Entity is not an agent: ${entityId}`);
234
+ }
235
+ const updatedAgentMeta = {
236
+ ...currentMeta,
237
+ ...updates,
238
+ };
239
+ // Cast EntityId to ElementId for update
240
+ const updated = await this.api.update(asElementId(entityId), {
241
+ metadata: { ...agent.metadata, [AGENT_META_KEY]: updatedAgentMeta },
242
+ });
243
+ return updated;
244
+ }
245
+ async updateAgent(entityId, updates) {
246
+ const agent = await this.getAgent(entityId);
247
+ if (!agent) {
248
+ throw new Error(`Agent not found: ${entityId}`);
249
+ }
250
+ // Build update object with only provided fields
251
+ const updateData = {};
252
+ if (updates.name !== undefined) {
253
+ updateData.name = updates.name;
254
+ }
255
+ // Cast EntityId to ElementId for update, explicitly type as Entity
256
+ const updated = await this.api.update(asElementId(entityId), updateData);
257
+ return updated;
258
+ }
259
+ async deleteAgent(entityId) {
260
+ const agent = await this.getAgent(entityId);
261
+ if (!agent) {
262
+ throw new Error(`Agent not found: ${entityId}`);
263
+ }
264
+ // Get the agent's channel ID from metadata
265
+ const meta = getAgentMetadata(agent);
266
+ const channelId = meta?.channelId;
267
+ // Delete the agent's channel if it exists
268
+ if (channelId) {
269
+ try {
270
+ await this.api.delete(asElementId(channelId));
271
+ }
272
+ catch {
273
+ // Best-effort channel deletion - continue even if it fails
274
+ }
275
+ }
276
+ // Delete the agent entity
277
+ await this.api.delete(asElementId(entityId));
278
+ }
279
+ // ----------------------------------------
280
+ // Agent Channel Operations (TB-O7a)
281
+ // ----------------------------------------
282
+ async getAgentChannel(agentId) {
283
+ // First try to get the channel ID from the agent's metadata (fast path)
284
+ const channelId = await this.getAgentChannelId(agentId);
285
+ if (channelId) {
286
+ const channel = await this.api.get(asElementId(channelId));
287
+ if (channel && channel.type === 'channel') {
288
+ return channel;
289
+ }
290
+ }
291
+ // Fallback: look up agent to get createdBy, then search for the direct channel
292
+ const agent = await this.getAgent(agentId);
293
+ if (!agent) {
294
+ return undefined;
295
+ }
296
+ // Direct channel name is based on sorted entity IDs
297
+ const channelName = generateDirectChannelName(agent.createdBy, agentId);
298
+ const channels = await this.api.searchChannels(channelName, {
299
+ channelType: 'direct',
300
+ });
301
+ // Find exact match (searchChannels does pattern matching)
302
+ const agentChannel = channels.find((c) => c.name === channelName);
303
+ return agentChannel;
304
+ }
305
+ async getAgentChannelId(agentId) {
306
+ const agent = await this.getAgent(agentId);
307
+ if (!agent) {
308
+ return undefined;
309
+ }
310
+ const meta = getAgentMetadata(agent);
311
+ return meta?.channelId;
312
+ }
313
+ // ----------------------------------------
314
+ // Private Helpers
315
+ // ----------------------------------------
316
+ /**
317
+ * Creates an agent entity, its channel, and links them via metadata.
318
+ * Rolls back on partial failure to prevent orphaned resources.
319
+ */
320
+ async registerAgentWithRollback(entityData, agentName, createdBy) {
321
+ const saved = await this.api.create(entityData);
322
+ const agentEntity = saved;
323
+ const agentEntityId = asEntityId(agentEntity.id);
324
+ let channel;
325
+ try {
326
+ channel = await this.createAgentChannel(agentName, agentEntityId, createdBy);
327
+ }
328
+ catch (channelError) {
329
+ try {
330
+ await this.api.delete(agentEntity.id);
331
+ }
332
+ catch { /* best-effort rollback */ }
333
+ throw channelError;
334
+ }
335
+ try {
336
+ return await this.updateAgentMetadata(agentEntityId, {
337
+ channelId: channel.id,
338
+ });
339
+ }
340
+ catch (metadataError) {
341
+ try {
342
+ await this.api.delete(channel.id);
343
+ }
344
+ catch { /* best-effort */ }
345
+ try {
346
+ await this.api.delete(agentEntity.id);
347
+ }
348
+ catch { /* best-effort */ }
349
+ throw metadataError;
350
+ }
351
+ }
352
+ /**
353
+ * Creates a dedicated channel for an agent and updates the agent's metadata
354
+ * with the channel ID.
355
+ *
356
+ * @param agentName - The name of the agent (used for channel naming)
357
+ * @param agentId - The ID of the agent entity (used for membership)
358
+ * @param createdBy - The entity that created the agent (will be a channel member)
359
+ * @returns The created channel
360
+ */
361
+ async createAgentChannel(agentName, agentId, createdBy) {
362
+ // Look up the creator entity name for the channel display name
363
+ const creatorEntity = await this.api.get(asElementId(createdBy));
364
+ const creatorName = creatorEntity?.name ?? 'operator';
365
+ // Create a direct channel between the agent and the operator
366
+ const channel = await createDirectChannel({
367
+ entityA: createdBy, // Operator (el-0000)
368
+ entityB: agentId, // The new agent
369
+ entityAName: creatorName,
370
+ entityBName: agentName,
371
+ createdBy: createdBy,
372
+ tags: ['agent-channel'],
373
+ metadata: {
374
+ agentId,
375
+ agentName,
376
+ purpose: 'Agent direct messaging channel',
377
+ },
378
+ });
379
+ // Save the channel
380
+ const savedChannel = await this.api.create(channel);
381
+ return savedChannel;
382
+ }
383
+ applyFilters(agents, filter) {
384
+ let result = agents;
385
+ if (filter.role !== undefined) {
386
+ result = result.filter((a) => {
387
+ const meta = getAgentMetadata(a);
388
+ return meta?.agentRole === filter.role;
389
+ });
390
+ }
391
+ if (filter.workerMode !== undefined) {
392
+ result = result.filter((a) => {
393
+ const meta = getAgentMetadata(a);
394
+ return (meta?.agentRole === 'worker' &&
395
+ meta.workerMode === filter.workerMode);
396
+ });
397
+ }
398
+ if (filter.stewardFocus !== undefined) {
399
+ result = result.filter((a) => {
400
+ const meta = getAgentMetadata(a);
401
+ return (meta?.agentRole === 'steward' &&
402
+ meta.stewardFocus === filter.stewardFocus);
403
+ });
404
+ }
405
+ if (filter.sessionStatus !== undefined) {
406
+ result = result.filter((a) => {
407
+ const meta = getAgentMetadata(a);
408
+ return meta?.sessionStatus === filter.sessionStatus;
409
+ });
410
+ }
411
+ if (filter.reportsTo !== undefined) {
412
+ result = result.filter((a) => a.reportsTo === filter.reportsTo);
413
+ }
414
+ if (filter.hasSession !== undefined) {
415
+ result = result.filter((a) => {
416
+ const meta = getAgentMetadata(a);
417
+ return (meta?.sessionId !== undefined) === filter.hasSession;
418
+ });
419
+ }
420
+ return result;
421
+ }
422
+ }
423
+ // ============================================================================
424
+ // Factory Function
425
+ // ============================================================================
426
+ /**
427
+ * Creates an AgentRegistry instance
428
+ */
429
+ export function createAgentRegistry(api) {
430
+ return new AgentRegistryImpl(api);
431
+ }
432
+ //# sourceMappingURL=agent-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/services/agent-registry.ts"],"names":[],"mappings":"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"}