@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,289 @@
1
+ /**
2
+ * Role Definition Service
3
+ *
4
+ * This service provides methods for managing agent role definitions.
5
+ * Role definitions store system prompts and behavioral configurations
6
+ * for agents, enabling consistent agent behavior across the workspace.
7
+ *
8
+ * Key features:
9
+ * - Create role definitions with system prompts stored as Documents
10
+ * - Update role definitions (creates new Document versions for prompt changes)
11
+ * - Query role definitions by various criteria
12
+ * - Link role definitions to agents
13
+ *
14
+ * @module
15
+ */
16
+ import { ContentType, createDocument, createTimestamp } from '@stoneforge/core';
17
+ import { isAgentRoleDefinition, ROLE_DEFINITION_TAGS, generateRoleDefinitionTags, } from '../types/index.js';
18
+ // ============================================================================
19
+ // Constants
20
+ // ============================================================================
21
+ /**
22
+ * Metadata key for storing role definition data in the Document
23
+ */
24
+ const ROLE_DEF_META_KEY = 'roleDefinition';
25
+ /**
26
+ * Content type used for role definition storage
27
+ */
28
+ const ROLE_DEF_CONTENT_TYPE = ContentType.JSON;
29
+ // ============================================================================
30
+ // Role Definition Service Implementation
31
+ // ============================================================================
32
+ /**
33
+ * Implementation of the Role Definition Service
34
+ */
35
+ export class RoleDefinitionServiceImpl {
36
+ api;
37
+ constructor(api) {
38
+ this.api = api;
39
+ }
40
+ async createRoleDefinition(input) {
41
+ const now = createTimestamp();
42
+ // Create the system prompt document first
43
+ const systemPromptDoc = await createDocument({
44
+ contentType: ContentType.MARKDOWN,
45
+ content: input.systemPrompt,
46
+ createdBy: input.createdBy,
47
+ tags: [
48
+ ROLE_DEFINITION_TAGS.AGENT_PROMPT,
49
+ `${ROLE_DEFINITION_TAGS.ROLE_PREFIX}${input.role}`,
50
+ ],
51
+ metadata: {
52
+ purpose: 'agent-system-prompt',
53
+ role: input.role,
54
+ },
55
+ });
56
+ // Save the system prompt document
57
+ const savedPromptDoc = await this.api.create(systemPromptDoc);
58
+ // Build the role definition based on role type
59
+ let definition;
60
+ const baseDefinition = {
61
+ name: input.name,
62
+ description: input.description,
63
+ systemPromptRef: savedPromptDoc.id,
64
+ maxConcurrentTasks: input.maxConcurrentTasks ?? 1,
65
+ behaviors: input.behaviors,
66
+ tags: input.tags,
67
+ createdAt: now,
68
+ createdBy: input.createdBy,
69
+ updatedAt: now,
70
+ };
71
+ switch (input.role) {
72
+ case 'director':
73
+ definition = {
74
+ ...baseDefinition,
75
+ role: 'director',
76
+ };
77
+ break;
78
+ case 'worker':
79
+ definition = {
80
+ ...baseDefinition,
81
+ role: 'worker',
82
+ workerMode: input.workerMode,
83
+ };
84
+ break;
85
+ case 'steward':
86
+ definition = {
87
+ ...baseDefinition,
88
+ role: 'steward',
89
+ stewardFocus: input.stewardFocus,
90
+ };
91
+ break;
92
+ default:
93
+ throw new Error(`Unknown role type: ${input.role}`);
94
+ }
95
+ // Create the role definition document
96
+ const roleDefDoc = await createDocument({
97
+ contentType: ROLE_DEF_CONTENT_TYPE,
98
+ content: JSON.stringify(definition, null, 2),
99
+ createdBy: input.createdBy,
100
+ tags: generateRoleDefinitionTags(input.role, input.tags),
101
+ metadata: {
102
+ [ROLE_DEF_META_KEY]: definition,
103
+ systemPromptDocId: savedPromptDoc.id,
104
+ },
105
+ });
106
+ // Save the role definition document
107
+ const savedRoleDefDoc = await this.api.create(roleDefDoc);
108
+ return {
109
+ id: savedRoleDefDoc.id,
110
+ definition,
111
+ };
112
+ }
113
+ async getRoleDefinition(id) {
114
+ const doc = await this.api.get(id);
115
+ if (!doc || doc.type !== 'document') {
116
+ return undefined;
117
+ }
118
+ // Check if the document has been soft-deleted
119
+ // Soft-deleted documents have a deletedAt timestamp in their data
120
+ const docAny = doc;
121
+ if (docAny.deletedAt !== undefined && docAny.deletedAt !== null) {
122
+ return undefined;
123
+ }
124
+ // Try to extract from metadata first (faster)
125
+ const metaDef = doc.metadata?.[ROLE_DEF_META_KEY];
126
+ if (metaDef && isAgentRoleDefinition(metaDef)) {
127
+ return {
128
+ id: doc.id,
129
+ definition: metaDef,
130
+ };
131
+ }
132
+ // Fall back to parsing the content
133
+ if (doc.contentType === ROLE_DEF_CONTENT_TYPE) {
134
+ try {
135
+ const parsed = JSON.parse(doc.content);
136
+ if (isAgentRoleDefinition(parsed)) {
137
+ return {
138
+ id: doc.id,
139
+ definition: parsed,
140
+ };
141
+ }
142
+ }
143
+ catch {
144
+ // Content is not valid JSON, ignore
145
+ }
146
+ }
147
+ return undefined;
148
+ }
149
+ async getSystemPrompt(id) {
150
+ const stored = await this.getRoleDefinition(id);
151
+ if (!stored) {
152
+ return undefined;
153
+ }
154
+ return this.getSystemPromptFromRef(stored.definition.systemPromptRef);
155
+ }
156
+ async getSystemPromptFromRef(documentId) {
157
+ const doc = await this.api.get(documentId);
158
+ if (!doc || doc.type !== 'document') {
159
+ return undefined;
160
+ }
161
+ return doc.content;
162
+ }
163
+ async updateRoleDefinition(id, updates) {
164
+ const existing = await this.getRoleDefinition(id);
165
+ if (!existing) {
166
+ throw new Error(`Role definition not found: ${id}`);
167
+ }
168
+ const now = createTimestamp();
169
+ let newSystemPromptRef = existing.definition.systemPromptRef;
170
+ // If system prompt is being updated, create a new version
171
+ if (updates.systemPrompt !== undefined) {
172
+ const currentPromptDoc = await this.api.get(existing.definition.systemPromptRef);
173
+ if (!currentPromptDoc) {
174
+ throw new Error(`System prompt document not found: ${existing.definition.systemPromptRef}`);
175
+ }
176
+ // Create new version of the system prompt document
177
+ const updatedPromptDoc = await this.api.update(existing.definition.systemPromptRef, { content: updates.systemPrompt });
178
+ newSystemPromptRef = updatedPromptDoc.id;
179
+ }
180
+ // Determine maxConcurrentTasks
181
+ const newMaxConcurrentTasks = updates.maxConcurrentTasks ?? existing.definition.maxConcurrentTasks ?? 1;
182
+ // Merge behaviors
183
+ const newBehaviors = updates.behaviors || existing.definition.behaviors
184
+ ? {
185
+ ...existing.definition.behaviors,
186
+ ...updates.behaviors,
187
+ }
188
+ : undefined;
189
+ // Build updated definition
190
+ const updatedDefinition = {
191
+ ...existing.definition,
192
+ name: updates.name ?? existing.definition.name,
193
+ description: updates.description ?? existing.definition.description,
194
+ systemPromptRef: newSystemPromptRef,
195
+ maxConcurrentTasks: newMaxConcurrentTasks,
196
+ behaviors: newBehaviors,
197
+ tags: updates.tags ?? existing.definition.tags,
198
+ updatedAt: now,
199
+ };
200
+ // Update the role definition document
201
+ await this.api.update(id, {
202
+ content: JSON.stringify(updatedDefinition, null, 2),
203
+ metadata: {
204
+ [ROLE_DEF_META_KEY]: updatedDefinition,
205
+ systemPromptDocId: newSystemPromptRef,
206
+ },
207
+ });
208
+ return {
209
+ id,
210
+ definition: updatedDefinition,
211
+ };
212
+ }
213
+ async listRoleDefinitions(filter) {
214
+ // Get all documents with the role-definition tag
215
+ const docs = await this.api.list({ type: 'document' });
216
+ // Filter to role definition documents
217
+ const roleDefDocs = docs.filter((doc) => doc.tags.includes(ROLE_DEFINITION_TAGS.ROLE_DEFINITION));
218
+ // Extract role definitions
219
+ const results = [];
220
+ for (const doc of roleDefDocs) {
221
+ const stored = await this.getRoleDefinition(doc.id);
222
+ if (stored) {
223
+ results.push(stored);
224
+ }
225
+ }
226
+ // Apply filters
227
+ let filtered = results;
228
+ if (filter) {
229
+ if (filter.role !== undefined) {
230
+ filtered = filtered.filter((r) => r.definition.role === filter.role);
231
+ }
232
+ if (filter.workerMode !== undefined) {
233
+ filtered = filtered.filter((r) => {
234
+ if (r.definition.role !== 'worker')
235
+ return false;
236
+ const workerDef = r.definition;
237
+ return workerDef.workerMode === filter.workerMode;
238
+ });
239
+ }
240
+ if (filter.stewardFocus !== undefined) {
241
+ filtered = filtered.filter((r) => {
242
+ if (r.definition.role !== 'steward')
243
+ return false;
244
+ const stewardDef = r.definition;
245
+ return stewardDef.stewardFocus === filter.stewardFocus;
246
+ });
247
+ }
248
+ if (filter.tags && filter.tags.length > 0) {
249
+ filtered = filtered.filter((r) => {
250
+ const defTags = r.definition.tags ?? [];
251
+ return filter.tags.every((tag) => defTags.includes(tag));
252
+ });
253
+ }
254
+ if (filter.nameContains !== undefined) {
255
+ const searchTerm = filter.nameContains.toLowerCase();
256
+ filtered = filtered.filter((r) => r.definition.name.toLowerCase().includes(searchTerm));
257
+ }
258
+ }
259
+ return filtered;
260
+ }
261
+ async getRoleDefinitionsByRole(role) {
262
+ return this.listRoleDefinitions({ role });
263
+ }
264
+ async getDefaultRoleDefinition(role) {
265
+ const definitions = await this.getRoleDefinitionsByRole(role);
266
+ return definitions[0];
267
+ }
268
+ async deleteRoleDefinition(id) {
269
+ const existing = await this.getRoleDefinition(id);
270
+ if (!existing) {
271
+ return false;
272
+ }
273
+ // Delete the role definition document
274
+ await this.api.delete(id);
275
+ // Note: We don't delete the system prompt document as it may be
276
+ // referenced by other role definitions or historical records
277
+ return true;
278
+ }
279
+ }
280
+ // ============================================================================
281
+ // Factory Function
282
+ // ============================================================================
283
+ /**
284
+ * Creates a RoleDefinitionService instance
285
+ */
286
+ export function createRoleDefinitionService(api) {
287
+ return new RoleDefinitionServiceImpl(api);
288
+ }
289
+ //# sourceMappingURL=role-definition-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-definition-service.js","sourceRoot":"","sources":["../../src/services/role-definition-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Steward Scheduler Service
3
+ *
4
+ * This service executes stewards on schedule (cron) or in response to events.
5
+ * It manages the lifecycle of scheduled steward executions and tracks execution history.
6
+ *
7
+ * Key features:
8
+ * - Cron-based scheduling using node-cron
9
+ * - Event-driven triggers with condition evaluation
10
+ * - Execution history tracking
11
+ * - Graceful shutdown support
12
+ *
13
+ * TB-O23: Steward Scheduler Service
14
+ *
15
+ * @module
16
+ */
17
+ import type { EntityId, Timestamp } from '@stoneforge/core';
18
+ import type { StewardTrigger, CronTrigger, EventTrigger } from '../types/index.js';
19
+ import type { AgentRegistry, AgentEntity } from './agent-registry.js';
20
+ /**
21
+ * Result of a steward execution
22
+ */
23
+ export interface StewardExecutionResult {
24
+ /** Whether the execution succeeded */
25
+ readonly success: boolean;
26
+ /** Error message if execution failed */
27
+ readonly error?: string;
28
+ /** Output from the steward (summary or relevant data) */
29
+ readonly output?: string;
30
+ /** Duration of execution in ms */
31
+ readonly durationMs: number;
32
+ /** Items processed (if applicable) */
33
+ readonly itemsProcessed?: number;
34
+ }
35
+ /**
36
+ * Entry in the execution history
37
+ */
38
+ export interface StewardExecutionEntry {
39
+ /** Unique execution ID */
40
+ readonly executionId: string;
41
+ /** The steward entity ID */
42
+ readonly stewardId: EntityId;
43
+ /** Steward name for convenience */
44
+ readonly stewardName: string;
45
+ /** The trigger that caused the execution */
46
+ readonly trigger: StewardTrigger;
47
+ /** Whether this was a manual execution */
48
+ readonly manual: boolean;
49
+ /** Timestamp when execution started */
50
+ readonly startedAt: Timestamp;
51
+ /** Timestamp when execution completed */
52
+ readonly completedAt?: Timestamp;
53
+ /** Execution result (set when completed) */
54
+ readonly result?: StewardExecutionResult;
55
+ /** Event context if triggered by event */
56
+ readonly eventContext?: Record<string, unknown>;
57
+ }
58
+ /**
59
+ * Filter options for querying execution history
60
+ */
61
+ export interface ExecutionHistoryFilter {
62
+ /** Filter by steward ID */
63
+ readonly stewardId?: EntityId;
64
+ /** Filter by trigger type */
65
+ readonly triggerType?: 'cron' | 'event';
66
+ /** Filter by success/failure */
67
+ readonly success?: boolean;
68
+ /** Filter by date range (start) */
69
+ readonly startedAfter?: Timestamp;
70
+ /** Filter by date range (end) */
71
+ readonly startedBefore?: Timestamp;
72
+ /** Maximum number of entries to return */
73
+ readonly limit?: number;
74
+ }
75
+ /**
76
+ * Configuration for the scheduler
77
+ */
78
+ export interface StewardSchedulerConfig {
79
+ /** Maximum execution history entries to keep per steward */
80
+ readonly maxHistoryPerSteward?: number;
81
+ /** Default timeout for steward execution in ms */
82
+ readonly defaultTimeoutMs?: number;
83
+ /** Whether to start scheduled stewards immediately */
84
+ readonly startImmediately?: boolean;
85
+ }
86
+ /**
87
+ * Information about a scheduled job
88
+ */
89
+ export interface ScheduledJobInfo {
90
+ /** The steward entity ID */
91
+ readonly stewardId: EntityId;
92
+ /** Steward name */
93
+ readonly stewardName: string;
94
+ /** The cron trigger */
95
+ readonly trigger: CronTrigger;
96
+ /** Whether the job is currently running */
97
+ readonly isRunning: boolean;
98
+ /** Next scheduled execution time (if available) */
99
+ readonly nextRunAt?: Date;
100
+ /** Last execution time */
101
+ readonly lastRunAt?: Timestamp;
102
+ }
103
+ /**
104
+ * Event subscription info
105
+ */
106
+ export interface EventSubscriptionInfo {
107
+ /** The steward entity ID */
108
+ readonly stewardId: EntityId;
109
+ /** Steward name */
110
+ readonly stewardName: string;
111
+ /** The event trigger */
112
+ readonly trigger: EventTrigger;
113
+ /** Whether currently listening */
114
+ readonly isActive: boolean;
115
+ }
116
+ /**
117
+ * Steward execution function type
118
+ * This is what actually runs the steward's logic
119
+ */
120
+ export type StewardExecutor = (steward: AgentEntity, context: {
121
+ trigger: StewardTrigger;
122
+ eventContext?: Record<string, unknown>;
123
+ }) => Promise<StewardExecutionResult>;
124
+ /**
125
+ * Steward Scheduler Service interface for executing stewards on schedule or events.
126
+ *
127
+ * The service provides methods for:
128
+ * - Starting/stopping scheduled executions
129
+ * - Publishing events for event-triggered stewards
130
+ * - Manual steward execution
131
+ * - Execution history queries
132
+ */
133
+ export interface StewardScheduler {
134
+ /**
135
+ * Starts the scheduler, activating all cron jobs and event listeners
136
+ * for registered stewards.
137
+ */
138
+ start(): Promise<void>;
139
+ /**
140
+ * Stops the scheduler, cleaning up all cron jobs and event listeners.
141
+ * Running executions are allowed to complete.
142
+ */
143
+ stop(): Promise<void>;
144
+ /**
145
+ * Whether the scheduler is currently running
146
+ */
147
+ isRunning(): boolean;
148
+ /**
149
+ * Registers a steward with the scheduler.
150
+ * This sets up cron jobs and event subscriptions based on the steward's triggers.
151
+ *
152
+ * @param stewardId - The steward entity ID
153
+ * @returns True if registered successfully
154
+ */
155
+ registerSteward(stewardId: EntityId): Promise<boolean>;
156
+ /**
157
+ * Unregisters a steward from the scheduler.
158
+ * This removes cron jobs and event subscriptions.
159
+ *
160
+ * @param stewardId - The steward entity ID
161
+ * @returns True if unregistered successfully
162
+ */
163
+ unregisterSteward(stewardId: EntityId): Promise<boolean>;
164
+ /**
165
+ * Refreshes a steward's registration (useful if triggers changed).
166
+ *
167
+ * @param stewardId - The steward entity ID
168
+ */
169
+ refreshSteward(stewardId: EntityId): Promise<void>;
170
+ /**
171
+ * Registers all stewards from the agent registry.
172
+ */
173
+ registerAllStewards(): Promise<number>;
174
+ /**
175
+ * Manually triggers a steward execution.
176
+ *
177
+ * @param stewardId - The steward to execute
178
+ * @param context - Optional context data
179
+ * @returns The execution result
180
+ */
181
+ executeSteward(stewardId: EntityId, context?: Record<string, unknown>): Promise<StewardExecutionResult>;
182
+ /**
183
+ * Publishes an event that may trigger stewards.
184
+ * Stewards with matching event triggers will be executed.
185
+ *
186
+ * @param eventName - The event name (e.g., 'task_completed')
187
+ * @param eventData - Event data for condition evaluation
188
+ * @returns Number of stewards triggered
189
+ */
190
+ publishEvent(eventName: string, eventData: Record<string, unknown>): Promise<number>;
191
+ /**
192
+ * Gets scheduled job information for a steward.
193
+ */
194
+ getScheduledJobs(stewardId?: EntityId): ScheduledJobInfo[];
195
+ /**
196
+ * Gets event subscription information.
197
+ */
198
+ getEventSubscriptions(stewardId?: EntityId): EventSubscriptionInfo[];
199
+ /**
200
+ * Gets execution history.
201
+ */
202
+ getExecutionHistory(filter?: ExecutionHistoryFilter): StewardExecutionEntry[];
203
+ /**
204
+ * Gets the last execution for a steward.
205
+ */
206
+ getLastExecution(stewardId: EntityId): StewardExecutionEntry | undefined;
207
+ /**
208
+ * Gets statistics about steward executions.
209
+ */
210
+ getStats(): StewardSchedulerStats;
211
+ /**
212
+ * Subscribe to scheduler events.
213
+ */
214
+ on(event: 'execution:started', listener: (entry: StewardExecutionEntry) => void): void;
215
+ on(event: 'execution:completed', listener: (entry: StewardExecutionEntry) => void): void;
216
+ on(event: 'execution:failed', listener: (entry: StewardExecutionEntry) => void): void;
217
+ on(event: 'steward:registered', listener: (stewardId: EntityId) => void): void;
218
+ on(event: 'steward:unregistered', listener: (stewardId: EntityId) => void): void;
219
+ /**
220
+ * Unsubscribe from scheduler events.
221
+ */
222
+ off(event: string, listener: (...args: unknown[]) => void): void;
223
+ }
224
+ /**
225
+ * Statistics about steward executions
226
+ */
227
+ export interface StewardSchedulerStats {
228
+ /** Number of registered stewards */
229
+ readonly registeredStewards: number;
230
+ /** Number of active cron jobs */
231
+ readonly activeCronJobs: number;
232
+ /** Number of active event subscriptions */
233
+ readonly activeEventSubscriptions: number;
234
+ /** Total executions */
235
+ readonly totalExecutions: number;
236
+ /** Successful executions */
237
+ readonly successfulExecutions: number;
238
+ /** Failed executions */
239
+ readonly failedExecutions: number;
240
+ /** Currently running executions */
241
+ readonly runningExecutions: number;
242
+ }
243
+ /**
244
+ * Validates a cron expression.
245
+ * This is a basic validation - we check the format but not all edge cases.
246
+ */
247
+ export declare function isValidCronExpression(schedule: string): boolean;
248
+ /**
249
+ * Calculates the next run time for a cron expression.
250
+ * This is a simplified implementation - for production use node-cron handles this.
251
+ */
252
+ export declare function getNextCronRunTime(_schedule: string): Date | undefined;
253
+ /**
254
+ * Evaluates a simple condition expression against event data.
255
+ * Supports basic JavaScript-like expressions with property access.
256
+ *
257
+ * Examples:
258
+ * - "task.status === 'closed'"
259
+ * - "task.assignedAgent?.role === 'worker'"
260
+ * - "branch.tests === 'passing'"
261
+ */
262
+ export declare function evaluateCondition(condition: string, context: Record<string, unknown>): boolean;
263
+ /**
264
+ * Implementation of the Steward Scheduler Service.
265
+ */
266
+ export declare class StewardSchedulerImpl implements StewardScheduler {
267
+ private readonly agentRegistry;
268
+ private readonly config;
269
+ private readonly executor;
270
+ private readonly emitter;
271
+ private running;
272
+ private cronJobs;
273
+ private eventSubscriptions;
274
+ private executionHistory;
275
+ private runningExecutions;
276
+ private executionCounter;
277
+ constructor(agentRegistry: AgentRegistry, executor: StewardExecutor, config?: StewardSchedulerConfig);
278
+ start(): Promise<void>;
279
+ stop(): Promise<void>;
280
+ isRunning(): boolean;
281
+ registerSteward(stewardId: EntityId): Promise<boolean>;
282
+ unregisterSteward(stewardId: EntityId): Promise<boolean>;
283
+ refreshSteward(stewardId: EntityId): Promise<void>;
284
+ registerAllStewards(): Promise<number>;
285
+ executeSteward(stewardId: EntityId, context?: Record<string, unknown>): Promise<StewardExecutionResult>;
286
+ publishEvent(eventName: string, eventData: Record<string, unknown>): Promise<number>;
287
+ getScheduledJobs(stewardId?: EntityId): ScheduledJobInfo[];
288
+ getEventSubscriptions(stewardId?: EntityId): EventSubscriptionInfo[];
289
+ getExecutionHistory(filter?: ExecutionHistoryFilter): StewardExecutionEntry[];
290
+ getLastExecution(stewardId: EntityId): StewardExecutionEntry | undefined;
291
+ getStats(): StewardSchedulerStats;
292
+ on(event: 'execution:started', listener: (entry: StewardExecutionEntry) => void): void;
293
+ on(event: 'execution:completed', listener: (entry: StewardExecutionEntry) => void): void;
294
+ on(event: 'execution:failed', listener: (entry: StewardExecutionEntry) => void): void;
295
+ on(event: 'steward:registered', listener: (stewardId: EntityId) => void): void;
296
+ on(event: 'steward:unregistered', listener: (stewardId: EntityId) => void): void;
297
+ off(event: string, listener: (...args: unknown[]) => void): void;
298
+ private startCronJob;
299
+ private scheduleNextRun;
300
+ private stopCronJob;
301
+ /**
302
+ * Calculates the next fire time for a cron expression after the given date.
303
+ * Supports 5-field cron (minute hour dom month dow) with optional 6th seconds field (ignored).
304
+ * Supports: *, specific values, step (* /N), range (N-M), and lists (N,M).
305
+ * Returns null for invalid expressions.
306
+ */
307
+ getNextCronTime(schedule: string, after?: Date): Date | null;
308
+ /**
309
+ * Parses a single cron field into a set of valid values.
310
+ * Supports: *, N, N-M, N,M, * /N, N-M/S
311
+ */
312
+ private parseCronField;
313
+ private runExecution;
314
+ private addHistoryEntry;
315
+ private updateHistoryEntry;
316
+ private pruneHistory;
317
+ }
318
+ /**
319
+ * Creates a StewardScheduler instance
320
+ *
321
+ * @param agentRegistry - The agent registry for looking up stewards
322
+ * @param executor - Function to execute steward logic
323
+ * @param config - Optional configuration
324
+ */
325
+ export declare function createStewardScheduler(agentRegistry: AgentRegistry, executor: StewardExecutor, config?: StewardSchedulerConfig): StewardScheduler;
326
+ /**
327
+ * Creates a default steward executor that delegates to the appropriate
328
+ * service based on the steward's focus.
329
+ *
330
+ * This is a placeholder - the actual executor would integrate with:
331
+ * - MergeStewardService for 'merge' focus
332
+ * - HealthStewardService for 'health' focus (TB-O24)
333
+ * - etc.
334
+ */
335
+ export declare function createDefaultStewardExecutor(): StewardExecutor;
336
+ //# sourceMappingURL=steward-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steward-scheduler.d.ts","sourceRoot":"","sources":["../../src/services/steward-scheduler.ts"],"names":[],"mappings":"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"}