@provos/ironcurtain 0.10.0 → 0.12.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 (660) hide show
  1. package/README.md +68 -14
  2. package/dist/auth/oauth-provider.js +1 -4
  3. package/dist/auth/oauth-provider.js.map +1 -1
  4. package/dist/cli-help.d.ts +12 -0
  5. package/dist/cli-help.js +21 -0
  6. package/dist/cli-help.js.map +1 -1
  7. package/dist/cli.js +46 -6
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/agent-model-guard.d.ts +14 -0
  10. package/dist/config/agent-model-guard.js +24 -0
  11. package/dist/config/agent-model-guard.js.map +1 -0
  12. package/dist/config/config-command.js +277 -7
  13. package/dist/config/config-command.js.map +1 -1
  14. package/dist/config/first-start.js +62 -7
  15. package/dist/config/first-start.js.map +1 -1
  16. package/dist/config/generated/compiled-policy.json +528 -161
  17. package/dist/config/generated/test-scenarios.json +4810 -170
  18. package/dist/config/generated/tool-annotations.json +34 -47
  19. package/dist/config/index.d.ts +58 -0
  20. package/dist/config/index.js +97 -15
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/mcp-servers.json +2 -2
  23. package/dist/config/model-provider.d.ts +9 -0
  24. package/dist/config/model-provider.js +13 -0
  25. package/dist/config/model-provider.js.map +1 -1
  26. package/dist/config/paths.d.ts +217 -0
  27. package/dist/config/paths.js +363 -14
  28. package/dist/config/paths.js.map +1 -1
  29. package/dist/config/types.d.ts +7 -1
  30. package/dist/config/user-config.d.ts +101 -6
  31. package/dist/config/user-config.js +145 -31
  32. package/dist/config/user-config.js.map +1 -1
  33. package/dist/config/validate-policy-dir.d.ts +10 -0
  34. package/dist/config/validate-policy-dir.js +59 -0
  35. package/dist/config/validate-policy-dir.js.map +1 -0
  36. package/dist/cron/job-commands.js +22 -2
  37. package/dist/cron/job-commands.js.map +1 -1
  38. package/dist/cron/types.d.ts +16 -2
  39. package/dist/cron/types.js +1 -3
  40. package/dist/cron/types.js.map +1 -1
  41. package/dist/daemon/daemon-command.js +30 -7
  42. package/dist/daemon/daemon-command.js.map +1 -1
  43. package/dist/daemon/ironcurtain-daemon.d.ts +62 -1
  44. package/dist/daemon/ironcurtain-daemon.js +231 -8
  45. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  46. package/dist/daemon-client/daemon-client.d.ts +123 -0
  47. package/dist/daemon-client/daemon-client.js +324 -0
  48. package/dist/daemon-client/daemon-client.js.map +1 -0
  49. package/dist/docker/adapters/claude-code.js +194 -20
  50. package/dist/docker/adapters/claude-code.js.map +1 -1
  51. package/dist/docker/adapters/codex.d.ts +9 -0
  52. package/dist/docker/adapters/codex.js +297 -0
  53. package/dist/docker/adapters/codex.js.map +1 -0
  54. package/dist/docker/adapters/goose.d.ts +12 -11
  55. package/dist/docker/adapters/goose.js +80 -27
  56. package/dist/docker/adapters/goose.js.map +1 -1
  57. package/dist/docker/agent-adapter.d.ts +183 -5
  58. package/dist/docker/agent-adapter.js +16 -0
  59. package/dist/docker/agent-adapter.js.map +1 -1
  60. package/dist/docker/agent-registry.js +5 -0
  61. package/dist/docker/agent-registry.js.map +1 -1
  62. package/dist/docker/apple-container-manager.d.ts +49 -0
  63. package/dist/docker/apple-container-manager.js +464 -0
  64. package/dist/docker/apple-container-manager.js.map +1 -0
  65. package/dist/docker/code-mode-proxy.d.ts +38 -0
  66. package/dist/docker/code-mode-proxy.js +6 -1
  67. package/dist/docker/code-mode-proxy.js.map +1 -1
  68. package/dist/docker/container-lifecycle.d.ts +2 -2
  69. package/dist/docker/container-lifecycle.js.map +1 -1
  70. package/dist/docker/container-runtime.d.ts +29 -0
  71. package/dist/docker/container-runtime.js +76 -0
  72. package/dist/docker/container-runtime.js.map +1 -0
  73. package/dist/docker/docker-agent-session.d.ts +113 -62
  74. package/dist/docker/docker-agent-session.js +271 -294
  75. package/dist/docker/docker-agent-session.js.map +1 -1
  76. package/dist/docker/docker-infrastructure.d.ts +428 -26
  77. package/dist/docker/docker-infrastructure.js +1005 -70
  78. package/dist/docker/docker-infrastructure.js.map +1 -1
  79. package/dist/docker/docker-manager.d.ts +58 -3
  80. package/dist/docker/docker-manager.js +378 -33
  81. package/dist/docker/docker-manager.js.map +1 -1
  82. package/dist/docker/docker-probe.d.ts +45 -0
  83. package/dist/docker/docker-probe.js +86 -0
  84. package/dist/docker/docker-probe.js.map +1 -0
  85. package/dist/docker/docker-progress-sink.d.ts +43 -0
  86. package/dist/docker/docker-progress-sink.js +299 -0
  87. package/dist/docker/docker-progress-sink.js.map +1 -0
  88. package/dist/docker/mitm-proxy.d.ts +135 -1
  89. package/dist/docker/mitm-proxy.js +611 -25
  90. package/dist/docker/mitm-proxy.js.map +1 -1
  91. package/dist/docker/network-topology.d.ts +81 -0
  92. package/dist/docker/network-topology.js +160 -0
  93. package/dist/docker/network-topology.js.map +1 -0
  94. package/dist/docker/oauth-credentials.d.ts +59 -3
  95. package/dist/docker/oauth-credentials.js +181 -14
  96. package/dist/docker/oauth-credentials.js.map +1 -1
  97. package/dist/docker/oauth-token-manager.js +2 -2
  98. package/dist/docker/oauth-token-manager.js.map +1 -1
  99. package/dist/docker/orientation.d.ts +1 -1
  100. package/dist/docker/package-types.d.ts +1 -1
  101. package/dist/docker/provider-config.d.ts +78 -3
  102. package/dist/docker/provider-config.js +295 -31
  103. package/dist/docker/provider-config.js.map +1 -1
  104. package/dist/docker/provision-lock.d.ts +46 -0
  105. package/dist/docker/provision-lock.js +152 -0
  106. package/dist/docker/provision-lock.js.map +1 -0
  107. package/dist/docker/proxy-tools.d.ts +0 -2
  108. package/dist/docker/proxy-tools.js +2 -7
  109. package/dist/docker/proxy-tools.js.map +1 -1
  110. package/dist/docker/pty-session.d.ts +64 -1
  111. package/dist/docker/pty-session.js +306 -104
  112. package/dist/docker/pty-session.js.map +1 -1
  113. package/dist/docker/pty-types.d.ts +0 -2
  114. package/dist/docker/pty-types.js +0 -2
  115. package/dist/docker/pty-types.js.map +1 -1
  116. package/dist/docker/registry-proxy.d.ts +46 -0
  117. package/dist/docker/registry-proxy.js +255 -1
  118. package/dist/docker/registry-proxy.js.map +1 -1
  119. package/dist/docker/resource-limits.d.ts +134 -0
  120. package/dist/docker/resource-limits.js +203 -0
  121. package/dist/docker/resource-limits.js.map +1 -0
  122. package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
  123. package/dist/docker/spawn-with-idle-timeout.js +152 -0
  124. package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
  125. package/dist/docker/sse-extractor.d.ts +51 -0
  126. package/dist/docker/sse-extractor.js +303 -0
  127. package/dist/docker/sse-extractor.js.map +1 -0
  128. package/dist/docker/token-stream-bus.d.ts +83 -0
  129. package/dist/docker/token-stream-bus.js +98 -0
  130. package/dist/docker/token-stream-bus.js.map +1 -0
  131. package/dist/docker/token-stream-types.d.ts +71 -0
  132. package/dist/docker/token-stream-types.js +8 -0
  133. package/dist/docker/token-stream-types.js.map +1 -0
  134. package/dist/docker/trajectory-capture.d.ts +79 -0
  135. package/dist/docker/trajectory-capture.js +521 -0
  136. package/dist/docker/trajectory-capture.js.map +1 -0
  137. package/dist/docker/trajectory-reassembler.d.ts +286 -0
  138. package/dist/docker/trajectory-reassembler.js +990 -0
  139. package/dist/docker/trajectory-reassembler.js.map +1 -0
  140. package/dist/docker/trajectory-tap.d.ts +100 -0
  141. package/dist/docker/trajectory-tap.js +410 -0
  142. package/dist/docker/trajectory-tap.js.map +1 -0
  143. package/dist/docker/trajectory-types.d.ts +187 -0
  144. package/dist/docker/trajectory-types.js +43 -0
  145. package/dist/docker/trajectory-types.js.map +1 -0
  146. package/dist/docker/types.d.ts +105 -12
  147. package/dist/doctor/checks.d.ts +171 -0
  148. package/dist/doctor/checks.js +598 -0
  149. package/dist/doctor/checks.js.map +1 -0
  150. package/dist/doctor/doctor-command.d.ts +29 -0
  151. package/dist/doctor/doctor-command.js +190 -0
  152. package/dist/doctor/doctor-command.js.map +1 -0
  153. package/dist/doctor/mcp-liveness.d.ts +28 -0
  154. package/dist/doctor/mcp-liveness.js +92 -0
  155. package/dist/doctor/mcp-liveness.js.map +1 -0
  156. package/dist/doctor/oauth-checks.d.ts +23 -0
  157. package/dist/doctor/oauth-checks.js +157 -0
  158. package/dist/doctor/oauth-checks.js.map +1 -0
  159. package/dist/doctor/output.d.ts +26 -0
  160. package/dist/doctor/output.js +82 -0
  161. package/dist/doctor/output.js.map +1 -0
  162. package/dist/escalation/listener-command.js +0 -3
  163. package/dist/escalation/listener-command.js.map +1 -1
  164. package/dist/event-bus/typed-event-bus.d.ts +26 -0
  165. package/dist/event-bus/typed-event-bus.js +35 -0
  166. package/dist/event-bus/typed-event-bus.js.map +1 -0
  167. package/dist/index.js +54 -21
  168. package/dist/index.js.map +1 -1
  169. package/dist/logger.js +31 -2
  170. package/dist/logger.js.map +1 -1
  171. package/dist/memory/auto-save.d.ts +18 -4
  172. package/dist/memory/auto-save.js +46 -6
  173. package/dist/memory/auto-save.js.map +1 -1
  174. package/dist/memory/memory-policy.d.ts +41 -0
  175. package/dist/memory/memory-policy.js +36 -0
  176. package/dist/memory/memory-policy.js.map +1 -0
  177. package/dist/mux/mux-app.d.ts +2 -0
  178. package/dist/mux/mux-app.js +1 -0
  179. package/dist/mux/mux-app.js.map +1 -1
  180. package/dist/mux/mux-command.d.ts +10 -1
  181. package/dist/mux/mux-command.js +74 -40
  182. package/dist/mux/mux-command.js.map +1 -1
  183. package/dist/mux/mux-renderer.js +2 -12
  184. package/dist/mux/mux-renderer.js.map +1 -1
  185. package/dist/mux/pty-bridge.d.ts +2 -0
  186. package/dist/mux/pty-bridge.js +3 -0
  187. package/dist/mux/pty-bridge.js.map +1 -1
  188. package/dist/mux/session-scanner.js +1 -2
  189. package/dist/mux/session-scanner.js.map +1 -1
  190. package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
  191. package/dist/{pipeline → observability}/llm-logger.js +8 -3
  192. package/dist/observability/llm-logger.js.map +1 -0
  193. package/dist/observe/observe-command.d.ts +12 -0
  194. package/dist/observe/observe-command.js +285 -0
  195. package/dist/observe/observe-command.js.map +1 -0
  196. package/dist/observe/observe-renderer.d.ts +24 -0
  197. package/dist/observe/observe-renderer.js +87 -0
  198. package/dist/observe/observe-renderer.js.map +1 -0
  199. package/dist/observe/observe-tui-rain.d.ts +42 -0
  200. package/dist/observe/observe-tui-rain.js +531 -0
  201. package/dist/observe/observe-tui-rain.js.map +1 -0
  202. package/dist/observe/observe-tui-text-panel.d.ts +46 -0
  203. package/dist/observe/observe-tui-text-panel.js +525 -0
  204. package/dist/observe/observe-tui-text-panel.js.map +1 -0
  205. package/dist/observe/observe-tui-types.d.ts +270 -0
  206. package/dist/observe/observe-tui-types.js +200 -0
  207. package/dist/observe/observe-tui-types.js.map +1 -0
  208. package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
  209. package/dist/observe/observe-tui-word-scorer.js +572 -0
  210. package/dist/observe/observe-tui-word-scorer.js.map +1 -0
  211. package/dist/observe/observe-tui.d.ts +59 -0
  212. package/dist/observe/observe-tui.js +592 -0
  213. package/dist/observe/observe-tui.js.map +1 -0
  214. package/dist/persona/broad-policy-validator.d.ts +95 -0
  215. package/dist/persona/broad-policy-validator.js +171 -0
  216. package/dist/persona/broad-policy-validator.js.map +1 -0
  217. package/dist/persona/compile-persona-policy.d.ts +54 -2
  218. package/dist/persona/compile-persona-policy.js +29 -4
  219. package/dist/persona/compile-persona-policy.js.map +1 -1
  220. package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
  221. package/dist/persona/event-bus-progress-reporter.js +66 -0
  222. package/dist/persona/event-bus-progress-reporter.js.map +1 -0
  223. package/dist/persona/memory-gate.d.ts +19 -0
  224. package/dist/persona/memory-gate.js +33 -0
  225. package/dist/persona/memory-gate.js.map +1 -0
  226. package/dist/persona/persona-command.js +77 -72
  227. package/dist/persona/persona-command.js.map +1 -1
  228. package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
  229. package/dist/persona/persona-compile-orchestrator.js +504 -0
  230. package/dist/persona/persona-compile-orchestrator.js.map +1 -0
  231. package/dist/persona/persona-service.d.ts +137 -0
  232. package/dist/persona/persona-service.js +263 -0
  233. package/dist/persona/persona-service.js.map +1 -0
  234. package/dist/persona/policy-mutation-audit.d.ts +109 -0
  235. package/dist/persona/policy-mutation-audit.js +179 -0
  236. package/dist/persona/policy-mutation-audit.js.map +1 -0
  237. package/dist/persona/resolve.d.ts +22 -0
  238. package/dist/persona/resolve.js +45 -2
  239. package/dist/persona/resolve.js.map +1 -1
  240. package/dist/persona/rule-delta.d.ts +30 -0
  241. package/dist/persona/rule-delta.js +82 -0
  242. package/dist/persona/rule-delta.js.map +1 -0
  243. package/dist/persona/types.d.ts +28 -0
  244. package/dist/pipeline/annotate.js +10 -2
  245. package/dist/pipeline/annotate.js.map +1 -1
  246. package/dist/pipeline/compile.js +14 -2
  247. package/dist/pipeline/compile.js.map +1 -1
  248. package/dist/pipeline/constitution-compiler.d.ts +25 -14
  249. package/dist/pipeline/constitution-compiler.js +107 -38
  250. package/dist/pipeline/constitution-compiler.js.map +1 -1
  251. package/dist/pipeline/dynamic-list-types.d.ts +3 -6
  252. package/dist/pipeline/dynamic-list-types.js +3 -16
  253. package/dist/pipeline/dynamic-list-types.js.map +1 -1
  254. package/dist/pipeline/pipeline-runner.d.ts +63 -4
  255. package/dist/pipeline/pipeline-runner.js +242 -94
  256. package/dist/pipeline/pipeline-runner.js.map +1 -1
  257. package/dist/pipeline/pipeline-shared.d.ts +33 -4
  258. package/dist/pipeline/pipeline-shared.js +79 -19
  259. package/dist/pipeline/pipeline-shared.js.map +1 -1
  260. package/dist/pipeline/policy-verifier.js +16 -3
  261. package/dist/pipeline/policy-verifier.js.map +1 -1
  262. package/dist/pipeline/proxy-mcp-connections.js +17 -2
  263. package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
  264. package/dist/pipeline/refresh-lists.js +3 -5
  265. package/dist/pipeline/refresh-lists.js.map +1 -1
  266. package/dist/pipeline/scenario-generator.d.ts +4 -8
  267. package/dist/pipeline/scenario-generator.js +13 -46
  268. package/dist/pipeline/scenario-generator.js.map +1 -1
  269. package/dist/sandbox/index.d.ts +29 -0
  270. package/dist/sandbox/index.js +351 -119
  271. package/dist/sandbox/index.js.map +1 -1
  272. package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
  273. package/dist/sandbox/ironcurtain-protocol.js +185 -0
  274. package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
  275. package/dist/session/agent-session.d.ts +6 -0
  276. package/dist/session/agent-session.js +16 -5
  277. package/dist/session/agent-session.js.map +1 -1
  278. package/dist/session/cli-transport.js +0 -6
  279. package/dist/session/cli-transport.js.map +1 -1
  280. package/dist/session/index.d.ts +35 -14
  281. package/dist/session/index.js +333 -130
  282. package/dist/session/index.js.map +1 -1
  283. package/dist/session/preflight.d.ts +21 -13
  284. package/dist/session/preflight.js +227 -88
  285. package/dist/session/preflight.js.map +1 -1
  286. package/dist/session/prompts.d.ts +2 -5
  287. package/dist/session/prompts.js.map +1 -1
  288. package/dist/session/session-manager.d.ts +61 -6
  289. package/dist/session/session-manager.js +72 -10
  290. package/dist/session/session-manager.js.map +1 -1
  291. package/dist/session/session-metadata.d.ts +21 -5
  292. package/dist/session/session-metadata.js +34 -12
  293. package/dist/session/session-metadata.js.map +1 -1
  294. package/dist/session/types.d.ts +320 -5
  295. package/dist/session/types.js +57 -1
  296. package/dist/session/types.js.map +1 -1
  297. package/dist/signal/bot-command.js +6 -1
  298. package/dist/signal/bot-command.js.map +1 -1
  299. package/dist/signal/setup-signal.js +13 -21
  300. package/dist/signal/setup-signal.js.map +1 -1
  301. package/dist/signal/signal-bot-daemon.d.ts +16 -1
  302. package/dist/signal/signal-bot-daemon.js +39 -27
  303. package/dist/signal/signal-bot-daemon.js.map +1 -1
  304. package/dist/signal/signal-container.d.ts +3 -3
  305. package/dist/signal/signal-container.js +9 -3
  306. package/dist/signal/signal-container.js.map +1 -1
  307. package/dist/skills/discovery.d.ts +77 -0
  308. package/dist/skills/discovery.js +206 -0
  309. package/dist/skills/discovery.js.map +1 -0
  310. package/dist/skills/index.d.ts +4 -0
  311. package/dist/skills/index.js +3 -0
  312. package/dist/skills/index.js.map +1 -0
  313. package/dist/skills/staging.d.ts +28 -0
  314. package/dist/skills/staging.js +68 -0
  315. package/dist/skills/staging.js.map +1 -0
  316. package/dist/skills/types.d.ts +46 -0
  317. package/dist/skills/types.js +2 -0
  318. package/dist/skills/types.js.map +1 -0
  319. package/dist/trusted-process/approval-whitelist.d.ts +0 -2
  320. package/dist/trusted-process/approval-whitelist.js +17 -17
  321. package/dist/trusted-process/approval-whitelist.js.map +1 -1
  322. package/dist/trusted-process/async-mutex.d.ts +32 -0
  323. package/dist/trusted-process/async-mutex.js +50 -0
  324. package/dist/trusted-process/async-mutex.js.map +1 -0
  325. package/dist/trusted-process/audit-log.d.ts +38 -1
  326. package/dist/trusted-process/audit-log.js +82 -13
  327. package/dist/trusted-process/audit-log.js.map +1 -1
  328. package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
  329. package/dist/trusted-process/call-circuit-breaker.js +23 -3
  330. package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
  331. package/dist/trusted-process/container-command.d.ts +35 -0
  332. package/dist/trusted-process/container-command.js +49 -0
  333. package/dist/trusted-process/container-command.js.map +1 -0
  334. package/dist/trusted-process/control-server.d.ts +101 -0
  335. package/dist/trusted-process/control-server.js +282 -0
  336. package/dist/trusted-process/control-server.js.map +1 -0
  337. package/dist/trusted-process/domain-utils.d.ts +6 -6
  338. package/dist/trusted-process/domain-utils.js +7 -23
  339. package/dist/trusted-process/domain-utils.js.map +1 -1
  340. package/dist/trusted-process/error-prefixes.d.ts +16 -0
  341. package/dist/trusted-process/error-prefixes.js +17 -0
  342. package/dist/trusted-process/error-prefixes.js.map +1 -0
  343. package/dist/trusted-process/index.d.ts +40 -23
  344. package/dist/trusted-process/index.js +131 -225
  345. package/dist/trusted-process/index.js.map +1 -1
  346. package/dist/trusted-process/list-matcher.d.ts +17 -0
  347. package/dist/trusted-process/list-matcher.js +31 -0
  348. package/dist/trusted-process/list-matcher.js.map +1 -0
  349. package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
  350. package/dist/trusted-process/mcp-client-manager.js +40 -45
  351. package/dist/trusted-process/mcp-client-manager.js.map +1 -1
  352. package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
  353. package/dist/trusted-process/mcp-proxy-server.js +201 -660
  354. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  355. package/dist/trusted-process/policy-engine.d.ts +16 -4
  356. package/dist/trusted-process/policy-engine.js +103 -47
  357. package/dist/trusted-process/policy-engine.js.map +1 -1
  358. package/dist/trusted-process/policy-roots.d.ts +6 -0
  359. package/dist/trusted-process/policy-roots.js +20 -0
  360. package/dist/trusted-process/policy-roots.js.map +1 -1
  361. package/dist/trusted-process/sandbox-integration.d.ts +12 -0
  362. package/dist/trusted-process/sandbox-integration.js +18 -0
  363. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  364. package/dist/trusted-process/tcp-server-transport.d.ts +12 -1
  365. package/dist/trusted-process/tcp-server-transport.js +9 -1
  366. package/dist/trusted-process/tcp-server-transport.js.map +1 -1
  367. package/dist/trusted-process/tool-call-coordinator.d.ts +283 -0
  368. package/dist/trusted-process/tool-call-coordinator.js +592 -0
  369. package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
  370. package/dist/trusted-process/tool-call-pipeline.d.ts +213 -0
  371. package/dist/trusted-process/tool-call-pipeline.js +832 -0
  372. package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
  373. package/dist/trusted-process/tool-description-hints.d.ts +1 -1
  374. package/dist/types/argument-roles.d.ts +1 -1
  375. package/dist/types/argument-roles.js +14 -1
  376. package/dist/types/argument-roles.js.map +1 -1
  377. package/dist/types/audit.d.ts +9 -0
  378. package/dist/{session → types}/errors.d.ts +8 -2
  379. package/dist/{session → types}/errors.js +8 -2
  380. package/dist/types/errors.js.map +1 -0
  381. package/dist/types/reserved-servers.d.ts +11 -0
  382. package/dist/types/reserved-servers.js +12 -0
  383. package/dist/types/reserved-servers.js.map +1 -0
  384. package/dist/types/server-listing.d.ts +14 -0
  385. package/dist/types/server-listing.js +2 -0
  386. package/dist/types/server-listing.js.map +1 -0
  387. package/dist/types/slug.d.ts +2 -0
  388. package/dist/types/slug.js +2 -0
  389. package/dist/types/slug.js.map +1 -1
  390. package/dist/types/url-normalize.d.ts +16 -0
  391. package/dist/types/url-normalize.js +33 -0
  392. package/dist/types/url-normalize.js.map +1 -0
  393. package/dist/util/atomic-write.d.ts +31 -0
  394. package/dist/util/atomic-write.js +43 -0
  395. package/dist/util/atomic-write.js.map +1 -0
  396. package/dist/utils/error-message.d.ts +8 -0
  397. package/dist/utils/error-message.js +11 -0
  398. package/dist/utils/error-message.js.map +1 -0
  399. package/dist/utils/exec-error.d.ts +19 -0
  400. package/dist/utils/exec-error.js +16 -0
  401. package/dist/utils/exec-error.js.map +1 -0
  402. package/dist/utils/is-plain-object.d.ts +7 -0
  403. package/dist/utils/is-plain-object.js +12 -0
  404. package/dist/utils/is-plain-object.js.map +1 -0
  405. package/dist/utils/preflight-checks.d.ts +16 -0
  406. package/dist/utils/preflight-checks.js +178 -0
  407. package/dist/utils/preflight-checks.js.map +1 -0
  408. package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
  409. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
  410. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
  411. package/dist/web-ui/conn-registry.d.ts +14 -0
  412. package/dist/web-ui/conn-registry.js +25 -0
  413. package/dist/web-ui/conn-registry.js.map +1 -0
  414. package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
  415. package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
  416. package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
  417. package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
  418. package/dist/web-ui/dispatch/job-dispatch.js +83 -0
  419. package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
  420. package/dist/web-ui/dispatch/persona-dispatch.d.ts +50 -0
  421. package/dist/web-ui/dispatch/persona-dispatch.js +269 -0
  422. package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
  423. package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
  424. package/dist/web-ui/dispatch/session-dispatch.js +219 -0
  425. package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
  426. package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
  427. package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
  428. package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
  429. package/dist/web-ui/dispatch/types.d.ts +54 -0
  430. package/dist/web-ui/dispatch/types.js +72 -0
  431. package/dist/web-ui/dispatch/types.js.map +1 -0
  432. package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
  433. package/dist/web-ui/dispatch/workflow-dispatch.js +1036 -0
  434. package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
  435. package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
  436. package/dist/web-ui/json-rpc-dispatch.js +34 -0
  437. package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
  438. package/dist/web-ui/state-graph.d.ts +13 -0
  439. package/dist/web-ui/state-graph.js +82 -0
  440. package/dist/web-ui/state-graph.js.map +1 -0
  441. package/dist/web-ui/token-stream-bridge.d.ts +76 -0
  442. package/dist/web-ui/token-stream-bridge.js +265 -0
  443. package/dist/web-ui/token-stream-bridge.js.map +1 -0
  444. package/dist/web-ui/web-event-bus.d.ts +176 -0
  445. package/dist/web-ui/web-event-bus.js +19 -0
  446. package/dist/web-ui/web-event-bus.js.map +1 -0
  447. package/dist/web-ui/web-session-transport.d.ts +31 -0
  448. package/dist/web-ui/web-session-transport.js +109 -0
  449. package/dist/web-ui/web-session-transport.js.map +1 -0
  450. package/dist/web-ui/web-ui-server.d.ts +90 -0
  451. package/dist/web-ui/web-ui-server.js +477 -0
  452. package/dist/web-ui/web-ui-server.js.map +1 -0
  453. package/dist/web-ui/web-ui-types.d.ts +418 -0
  454. package/dist/web-ui/web-ui-types.js +32 -0
  455. package/dist/web-ui/web-ui-types.js.map +1 -0
  456. package/dist/web-ui/ws-utils.d.ts +5 -0
  457. package/dist/web-ui/ws-utils.js +12 -0
  458. package/dist/web-ui/ws-utils.js.map +1 -0
  459. package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
  460. package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -0
  461. package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
  462. package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
  463. package/dist/web-ui-static/index.html +14 -0
  464. package/dist/workflow/artifacts.d.ts +59 -0
  465. package/dist/workflow/artifacts.js +188 -0
  466. package/dist/workflow/artifacts.js.map +1 -0
  467. package/dist/workflow/checkpoint-selection.d.ts +34 -0
  468. package/dist/workflow/checkpoint-selection.js +48 -0
  469. package/dist/workflow/checkpoint-selection.js.map +1 -0
  470. package/dist/workflow/checkpoint.d.ts +35 -0
  471. package/dist/workflow/checkpoint.js +84 -0
  472. package/dist/workflow/checkpoint.js.map +1 -0
  473. package/dist/workflow/cli-shared.d.ts +62 -0
  474. package/dist/workflow/cli-shared.js +117 -0
  475. package/dist/workflow/cli-shared.js.map +1 -0
  476. package/dist/workflow/cli-support.d.ts +92 -0
  477. package/dist/workflow/cli-support.js +421 -0
  478. package/dist/workflow/cli-support.js.map +1 -0
  479. package/dist/workflow/container-snapshots.d.ts +29 -0
  480. package/dist/workflow/container-snapshots.js +137 -0
  481. package/dist/workflow/container-snapshots.js.map +1 -0
  482. package/dist/workflow/daemon-gate-commands.d.ts +21 -0
  483. package/dist/workflow/daemon-gate-commands.js +599 -0
  484. package/dist/workflow/daemon-gate-commands.js.map +1 -0
  485. package/dist/workflow/definition-loader.d.ts +32 -0
  486. package/dist/workflow/definition-loader.js +56 -0
  487. package/dist/workflow/definition-loader.js.map +1 -0
  488. package/dist/workflow/discovery.d.ts +107 -0
  489. package/dist/workflow/discovery.js +263 -0
  490. package/dist/workflow/discovery.js.map +1 -0
  491. package/dist/workflow/errors.d.ts +66 -0
  492. package/dist/workflow/errors.js +49 -0
  493. package/dist/workflow/errors.js.map +1 -0
  494. package/dist/workflow/guards.d.ts +8 -0
  495. package/dist/workflow/guards.js +38 -0
  496. package/dist/workflow/guards.js.map +1 -0
  497. package/dist/workflow/lane-template.d.ts +89 -0
  498. package/dist/workflow/lane-template.js +141 -0
  499. package/dist/workflow/lane-template.js.map +1 -0
  500. package/dist/workflow/lint-integration.d.ts +64 -0
  501. package/dist/workflow/lint-integration.js +56 -0
  502. package/dist/workflow/lint-integration.js.map +1 -0
  503. package/dist/workflow/lint.d.ts +72 -0
  504. package/dist/workflow/lint.js +593 -0
  505. package/dist/workflow/lint.js.map +1 -0
  506. package/dist/workflow/machine-builder.d.ts +178 -0
  507. package/dist/workflow/machine-builder.js +678 -0
  508. package/dist/workflow/machine-builder.js.map +1 -0
  509. package/dist/workflow/message-log.d.ts +99 -0
  510. package/dist/workflow/message-log.js +40 -0
  511. package/dist/workflow/message-log.js.map +1 -0
  512. package/dist/workflow/orchestrator.d.ts +954 -0
  513. package/dist/workflow/orchestrator.js +3594 -0
  514. package/dist/workflow/orchestrator.js.map +1 -0
  515. package/dist/workflow/prompt-builder.d.ts +39 -0
  516. package/dist/workflow/prompt-builder.js +243 -0
  517. package/dist/workflow/prompt-builder.js.map +1 -0
  518. package/dist/workflow/run-state-command.d.ts +9 -0
  519. package/dist/workflow/run-state-command.js +414 -0
  520. package/dist/workflow/run-state-command.js.map +1 -0
  521. package/dist/workflow/run-state-debug-capture.d.ts +40 -0
  522. package/dist/workflow/run-state-debug-capture.js +101 -0
  523. package/dist/workflow/run-state-debug-capture.js.map +1 -0
  524. package/dist/workflow/status-parser.d.ts +68 -0
  525. package/dist/workflow/status-parser.js +274 -0
  526. package/dist/workflow/status-parser.js.map +1 -0
  527. package/dist/workflow/types.d.ts +598 -0
  528. package/dist/workflow/types.js +85 -0
  529. package/dist/workflow/types.js.map +1 -0
  530. package/dist/workflow/validate.d.ts +80 -0
  531. package/dist/workflow/validate.js +788 -0
  532. package/dist/workflow/validate.js.map +1 -0
  533. package/dist/workflow/workflow-command.d.ts +9 -0
  534. package/dist/workflow/workflow-command.js +670 -0
  535. package/dist/workflow/workflow-command.js.map +1 -0
  536. package/dist/workflow/workflow-discovery.d.ts +27 -0
  537. package/dist/workflow/workflow-discovery.js +121 -0
  538. package/dist/workflow/workflow-discovery.js.map +1 -0
  539. package/dist/workflow/workflow-manager.d.ts +156 -0
  540. package/dist/workflow/workflow-manager.js +359 -0
  541. package/dist/workflow/workflow-manager.js.map +1 -0
  542. package/dist/workflow/workflows/design-and-code/README.md +50 -0
  543. package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
  544. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  545. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  546. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  547. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  548. package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  549. package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  550. package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  551. package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
  552. package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
  553. package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  554. package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  555. package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
  556. package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  557. package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
  558. package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  559. package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  560. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  561. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  562. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  563. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  564. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  565. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  566. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  567. package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  568. package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  569. package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  570. package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  571. package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  572. package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  573. package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  574. package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  575. package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  576. package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  577. package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  578. package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  579. package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  580. package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
  581. package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  582. package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  583. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  584. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  585. package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  586. package/dist/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  587. package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  588. package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  589. package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  590. package/dist/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  591. package/dist/workflow/worktree.d.ts +43 -0
  592. package/dist/workflow/worktree.js +106 -0
  593. package/dist/workflow/worktree.js.map +1 -0
  594. package/docker/Dockerfile.base +31 -0
  595. package/docker/Dockerfile.base.arm64 +27 -0
  596. package/docker/Dockerfile.claude-code +3 -1
  597. package/docker/Dockerfile.codex +17 -0
  598. package/docker/Dockerfile.goose +3 -1
  599. package/docker/entrypoint-claude-code.sh +7 -0
  600. package/docker/entrypoint-codex.sh +42 -0
  601. package/docker/entrypoint-goose.sh +6 -0
  602. package/docker/entrypoint-uid-remap.sh +93 -0
  603. package/package.json +27 -11
  604. package/packages/web-ui/README.md +113 -0
  605. package/packages/web-ui/docs/workflow-state-machine.png +0 -0
  606. package/src/config/generated/compiled-policy.json +528 -161
  607. package/src/config/generated/test-scenarios.json +4810 -170
  608. package/src/config/generated/tool-annotations.json +34 -47
  609. package/src/config/mcp-servers.json +2 -2
  610. package/src/workflow/workflows/design-and-code/README.md +50 -0
  611. package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
  612. package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  613. package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  614. package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  615. package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  616. package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  617. package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  618. package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  619. package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
  620. package/src/workflow/workflows/evolve/scripts/README.md +314 -0
  621. package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  622. package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  623. package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
  624. package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  625. package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
  626. package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  627. package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  628. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  629. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  630. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  631. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  632. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  633. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  634. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  635. package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  636. package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  637. package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  638. package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  639. package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  640. package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  641. package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  642. package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  643. package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  644. package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  645. package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  646. package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  647. package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  648. package/src/workflow/workflows/evolve/workflow.yaml +646 -0
  649. package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  650. package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  651. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  652. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  653. package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  654. package/src/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  655. package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  656. package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  657. package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  658. package/src/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  659. package/dist/pipeline/llm-logger.js.map +0 -1
  660. package/dist/session/errors.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Shared CLI helpers used by both `workflow-command.ts` (the dispatcher) and
3
+ * `run-state-command.ts` (a subcommand handler).
4
+ *
5
+ * This module is a leaf: it depends only on other shared leaves
6
+ * (`./cli-support.js`, `./lint-integration.js`, `./definition-loader.js`,
7
+ * `./lint.js`, `./types.js`) and must NOT import from `workflow-command.ts`
8
+ * or `run-state-command.ts`. It exists to break the runtime import cycle
9
+ * those two modules would otherwise form.
10
+ */
11
+ import { parseArgs } from 'node:util';
12
+ import { runPreflight } from './lint-integration.js';
13
+ import { loadDefinition } from './definition-loader.js';
14
+ import { writeStderr, RED, CYAN, DIM, RESET } from './cli-support.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Lint helpers
17
+ // ---------------------------------------------------------------------------
18
+ export function formatDiagnostic(d) {
19
+ const sevColor = d.severity === 'error' ? RED : CYAN;
20
+ const location = d.stateId ? ` (state: ${d.stateId})` : '';
21
+ const lines = [`${DIM}[${d.code}]${RESET} ${sevColor}${d.severity}${RESET} ${d.message}${location}`];
22
+ if (d.hint)
23
+ lines.push(` ${DIM}hint: ${d.hint}${RESET}`);
24
+ return lines;
25
+ }
26
+ export function printDiagnostics(diagnostics) {
27
+ for (const d of diagnostics) {
28
+ for (const line of formatDiagnostic(d))
29
+ writeStderr(line);
30
+ }
31
+ }
32
+ /**
33
+ * Loads + validates a workflow definition from a path via the shared
34
+ * {@link loadDefinition} helper. Prints CLI-formatted errors and exits on
35
+ * any failure (parse or validate). Validation errors take precedence over
36
+ * lint diagnostics.
37
+ */
38
+ export function loadAndValidateDefinition(path) {
39
+ const result = loadDefinition(path);
40
+ if (result.ok)
41
+ return result.definition;
42
+ if (result.kind === 'validate' && result.issues) {
43
+ writeStderr(`${RED}Workflow validation failed:${RESET}`);
44
+ for (const issue of result.issues)
45
+ writeStderr(` ${RED}- ${issue}${RESET}`);
46
+ }
47
+ else {
48
+ writeStderr(`${RED}Failed to load workflow: ${result.message}${RESET}`);
49
+ }
50
+ process.exit(1);
51
+ }
52
+ /**
53
+ * Loads + lints a workflow definition file via the shared
54
+ * {@link runPreflight} helper. CLI-specific reporting: prints diagnostics
55
+ * to stderr and exits on any failure (load or lint). On success with
56
+ * warnings-only output, prints a short continue notice.
57
+ *
58
+ * Returns the loaded definition on success so callers can continue using it
59
+ * without re-parsing (start/resume have already routed through the same
60
+ * file before calling this).
61
+ */
62
+ export function runCliPreflightLint(definitionPath, mode) {
63
+ const result = runPreflight(definitionPath, mode);
64
+ if (result.ok) {
65
+ if (result.diagnostics.length > 0) {
66
+ printDiagnostics(result.diagnostics);
67
+ writeStderr(`${DIM}Lint: 0 errors, ${result.warnings} warning(s) — continuing.${RESET}`);
68
+ }
69
+ return result.definition;
70
+ }
71
+ if (result.kind === 'load') {
72
+ // Reuse `loadAndValidateDefinition`'s nicer per-issue formatting on
73
+ // validate failures by re-running it (cheap; reads the same file once
74
+ // more) — it owns the structured-issues bullet rendering. For parse
75
+ // failures it falls through and prints "Failed to load workflow:".
76
+ loadAndValidateDefinition(definitionPath);
77
+ // Unreachable: `loadAndValidateDefinition` always exits on failure.
78
+ process.exit(1);
79
+ }
80
+ // Lint failure (load succeeded). Match the previous output verbatim.
81
+ printDiagnostics(result.diagnostics);
82
+ writeStderr(`${RED}Lint failed: ${result.errors} error(s), ${result.warnings} warning(s).${RESET}`);
83
+ writeStderr(`${DIM}Rerun with --no-lint to bypass (not recommended).${RESET}`);
84
+ process.exit(1);
85
+ }
86
+ export function parseArgsStrict(opts) {
87
+ try {
88
+ return parseArgs({ ...opts, strict: true });
89
+ }
90
+ catch (err) {
91
+ const message = err instanceof Error ? err.message : String(err);
92
+ writeStderr(`${RED}${message}${RESET}`);
93
+ writeStderr(`${DIM}Run with --help to see available options.${RESET}`);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ /**
98
+ * Strict {@link parseArgs} that RETURNS a discriminated failure on an unknown/
99
+ * typo'd flag or a missing option value, instead of writing to stderr and
100
+ * calling `process.exit(1)` like {@link parseArgsStrict}.
101
+ *
102
+ * Kept as a separate sibling so the existing exit-on-error callers
103
+ * (`workflow-command`, `run-state-command`) are unaffected. Callers that own a
104
+ * structured output contract — e.g. the agent-facing daemon-gate commands,
105
+ * where every result must be a single JSON object on stdout with a
106
+ * usage-derived exit code — use this so a parse error can be reported on the
107
+ * right channel rather than crashing the process with a generic exit code.
108
+ */
109
+ export function parseArgsResult(opts) {
110
+ try {
111
+ return { ok: true, ...parseArgs({ ...opts, strict: true }) };
112
+ }
113
+ catch (err) {
114
+ return { ok: false, message: err instanceof Error ? err.message : String(err) };
115
+ }
116
+ }
117
+ //# sourceMappingURL=cli-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-shared.js","sourceRoot":"","sources":["../../src/workflow/cli-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Shared CLI helpers for the workflow system.
3
+ *
4
+ * Extracted from examples/workflow-real-spike.ts so both the CLI
5
+ * command and the spike script can reuse the same logic.
6
+ *
7
+ * Output convention: all functions use process.stdout.write() and
8
+ * process.stderr.write() — never console.log/warn/error. After
9
+ * logger.setup() hijacks console.*, those writes are redirected
10
+ * to the session log file and never reach the terminal.
11
+ */
12
+ import { createInterface } from 'node:readline/promises';
13
+ import type { Session, SessionOptions } from '../session/types.js';
14
+ import { type WorkflowId, type WorkflowCheckpoint, type HumanGateRequest, type HumanGateEventType } from './types.js';
15
+ import type { WorkflowOrchestrator, WorkflowLifecycleEvent, WorkflowTabHandle } from './orchestrator.js';
16
+ import { FileCheckpointStore, isCheckpointResumable } from './checkpoint.js';
17
+ export { isCheckpointResumable };
18
+ export declare const RESET = "\u001B[0m";
19
+ export declare const BOLD = "\u001B[1m";
20
+ export declare const DIM = "\u001B[2m";
21
+ export declare const GREEN = "\u001B[32m";
22
+ export declare const YELLOW = "\u001B[33m";
23
+ export declare const BLUE = "\u001B[34m";
24
+ export declare const MAGENTA = "\u001B[35m";
25
+ export declare const CYAN = "\u001B[36m";
26
+ export declare const RED = "\u001B[31m";
27
+ export declare const WHITE = "\u001B[37m";
28
+ export declare const BG_YELLOW = "\u001B[43m";
29
+ export declare const BLACK = "\u001B[30m";
30
+ export declare function writeStdout(msg: string): void;
31
+ export declare function writeStderr(msg: string): void;
32
+ /**
33
+ * Creates a session factory that loads config once and routes model
34
+ * selection through:
35
+ *
36
+ * `--model` CLI flag > per-call `agentModelOverride` > user config
37
+ *
38
+ * Resolution happens per call so per-state `SessionOptions.agentModelOverride`
39
+ * values are honored on each invocation.
40
+ *
41
+ * Persona `"global"` (GLOBAL_PERSONA) is stripped to undefined (uses global
42
+ * policy); any other value passes through for per-persona policy/memory.
43
+ */
44
+ export declare function createWorkflowSessionFactory(modelOverride?: string): (opts: SessionOptions) => Promise<Session>;
45
+ /** Creates a WorkflowTabHandle that writes to stdout. */
46
+ export declare function createConsoleTab(label: string): WorkflowTabHandle;
47
+ export interface GateHandler {
48
+ raiseGate: (gate: HumanGateRequest) => void;
49
+ dismissGate: (workflowId: string, gateId: string) => void;
50
+ waitForGate: () => Promise<HumanGateRequest>;
51
+ }
52
+ /** Creates a gate promise queue for interactive gate handling. */
53
+ export declare function createGateHandler(): GateHandler;
54
+ /** Prompts the user to resolve a human gate via readline. */
55
+ export declare function promptGateInteractive(gate: HumanGateRequest, rl: ReturnType<typeof createInterface>): Promise<{
56
+ type: HumanGateEventType;
57
+ prompt?: string;
58
+ }>;
59
+ /** Prints a workflow lifecycle event to stdout/stderr. */
60
+ export declare function printLifecycleEvent(event: WorkflowLifecycleEvent): void;
61
+ /** Prints end-of-workflow summary with phase, artifacts, and artifact dir. */
62
+ export declare function printSummary(orchestrator: WorkflowOrchestrator, workflowId: WorkflowId, artifactDir: string): void;
63
+ /** Prints checkpoint details before resume. */
64
+ export declare function printResumeInfo(baseDir: string, workflowId: WorkflowId, checkpoint: WorkflowCheckpoint): void;
65
+ /**
66
+ * Picks the most-recent resumable workflow from a checkpoint store.
67
+ *
68
+ * Delegates enumeration + filtering + sorting to
69
+ * {@link findResumableCheckpoints} (single source of truth shared with the
70
+ * daemon). Adds the CLI-specific banner that lists every candidate when
71
+ * more than one is present.
72
+ *
73
+ * Exits with code 1 if no resumable workflows are found.
74
+ */
75
+ export declare function selectResumableWorkflow(checkpointStore: FileCheckpointStore, baseDir: string): {
76
+ workflowId: WorkflowId;
77
+ checkpoint: WorkflowCheckpoint;
78
+ };
79
+ /**
80
+ * Synthesizes a checkpoint for a workflow that ran before checkpointing.
81
+ * Discovers the workflow ID from the directory structure, reads the task
82
+ * from the task artifact, builds minimal context, and writes a checkpoint.
83
+ */
84
+ export declare function synthesizeCheckpoint(baseDir: string, stateName: string, definitionPath: string, checkpointStore: FileCheckpointStore): {
85
+ workflowId: WorkflowId;
86
+ checkpoint: WorkflowCheckpoint;
87
+ };
88
+ /**
89
+ * Polls orchestrator status and dispatches gate prompts.
90
+ * Exits when the workflow reaches a terminal phase or the signal is aborted.
91
+ */
92
+ export declare function runEventLoop(orchestrator: WorkflowOrchestrator, workflowId: WorkflowId, rl: ReturnType<typeof createInterface>, signal?: AbortSignal): Promise<void>;
@@ -0,0 +1,421 @@
1
+ /**
2
+ * Shared CLI helpers for the workflow system.
3
+ *
4
+ * Extracted from examples/workflow-real-spike.ts so both the CLI
5
+ * command and the spike script can reuse the same logic.
6
+ *
7
+ * Output convention: all functions use process.stdout.write() and
8
+ * process.stderr.write() — never console.log/warn/error. After
9
+ * logger.setup() hijacks console.*, those writes are redirected
10
+ * to the session log file and never reach the terminal.
11
+ */
12
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
13
+ import { resolve } from 'node:path';
14
+ import { loadConfig } from '../config/index.js';
15
+ import { createSession } from '../session/index.js';
16
+ import { GLOBAL_PERSONA, } from './types.js';
17
+ import { isCheckpointResumable } from './checkpoint.js';
18
+ import { findResumableCheckpoints } from './checkpoint-selection.js';
19
+ // Re-export for backward compatibility — the canonical location is now
20
+ // `./checkpoint.js`, but external callers (e.g. `workflow-manager.ts`,
21
+ // the test suite) historically imported it from here.
22
+ export { isCheckpointResumable };
23
+ // ---------------------------------------------------------------------------
24
+ // ANSI colors
25
+ // ---------------------------------------------------------------------------
26
+ export const RESET = '\x1b[0m';
27
+ export const BOLD = '\x1b[1m';
28
+ export const DIM = '\x1b[2m';
29
+ export const GREEN = '\x1b[32m';
30
+ export const YELLOW = '\x1b[33m';
31
+ export const BLUE = '\x1b[34m';
32
+ export const MAGENTA = '\x1b[35m';
33
+ export const CYAN = '\x1b[36m';
34
+ export const RED = '\x1b[31m';
35
+ export const WHITE = '\x1b[37m';
36
+ export const BG_YELLOW = '\x1b[43m';
37
+ export const BLACK = '\x1b[30m';
38
+ // ---------------------------------------------------------------------------
39
+ // Safe output primitives
40
+ // ---------------------------------------------------------------------------
41
+ export function writeStdout(msg) {
42
+ process.stdout.write(`${msg}\n`);
43
+ }
44
+ export function writeStderr(msg) {
45
+ process.stderr.write(`${msg}\n`);
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // Session factory
49
+ // ---------------------------------------------------------------------------
50
+ /**
51
+ * Creates a session factory that loads config once and routes model
52
+ * selection through:
53
+ *
54
+ * `--model` CLI flag > per-call `agentModelOverride` > user config
55
+ *
56
+ * Resolution happens per call so per-state `SessionOptions.agentModelOverride`
57
+ * values are honored on each invocation.
58
+ *
59
+ * Persona `"global"` (GLOBAL_PERSONA) is stripped to undefined (uses global
60
+ * policy); any other value passes through for per-persona policy/memory.
61
+ */
62
+ export function createWorkflowSessionFactory(modelOverride) {
63
+ const baseConfig = loadConfig();
64
+ return async (opts) => {
65
+ const persona = opts.persona;
66
+ const personaStripped = persona === GLOBAL_PERSONA ? undefined : persona;
67
+ // Only rebuild the config when a model override is actually in play.
68
+ // The common case (no per-state and no --model) passes the base config
69
+ // through unchanged.
70
+ const override = modelOverride ?? opts.agentModelOverride;
71
+ const effectiveOpts = override
72
+ ? {
73
+ ...opts,
74
+ config: {
75
+ ...baseConfig,
76
+ agentModelId: override,
77
+ userConfig: { ...baseConfig.userConfig, agentModelId: override },
78
+ },
79
+ agentModelOverride: override,
80
+ persona: personaStripped,
81
+ }
82
+ : { ...opts, config: baseConfig, persona: personaStripped };
83
+ try {
84
+ // Narrow the options union for the typed overloads: the orchestrator
85
+ // supplies `agentConversationId` for every Docker invocation (see
86
+ // `executeAgentState` in orchestrator.ts), so the Docker branch is
87
+ // safe. Builtin mode ignores the field whether set or not.
88
+ if (effectiveOpts.mode?.kind === 'docker') {
89
+ if (!effectiveOpts.agentConversationId) {
90
+ throw new Error('workflow orchestrator must supply agentConversationId for docker sessions');
91
+ }
92
+ return await createSession({
93
+ ...effectiveOpts,
94
+ mode: effectiveOpts.mode,
95
+ agentConversationId: effectiveOpts.agentConversationId,
96
+ });
97
+ }
98
+ return await createSession({ ...effectiveOpts, mode: effectiveOpts.mode });
99
+ }
100
+ catch (err) {
101
+ const msg = err instanceof Error ? err.message : String(err);
102
+ writeStderr(`${RED}${BOLD}[session-factory] Failed to create session for "${persona ?? 'unknown'}":${RESET}`);
103
+ writeStderr(`${RED} ${msg}${RESET}`);
104
+ throw err;
105
+ }
106
+ };
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // Console tab handle
110
+ // ---------------------------------------------------------------------------
111
+ /** Creates a WorkflowTabHandle that writes to stdout. */
112
+ export function createConsoleTab(label) {
113
+ return {
114
+ write(text) {
115
+ writeStdout(`${DIM}[${label}]${RESET} ${text}`);
116
+ },
117
+ setLabel(newLabel) {
118
+ writeStdout(`${DIM}[tab] label: ${newLabel}${RESET}`);
119
+ },
120
+ close() {
121
+ writeStdout(`${DIM}[tab] ${label} closed${RESET}`);
122
+ },
123
+ };
124
+ }
125
+ /** Creates a gate promise queue for interactive gate handling. */
126
+ export function createGateHandler() {
127
+ const gatePromises = [];
128
+ let pendingGate;
129
+ function raiseGate(gate) {
130
+ pendingGate = gate;
131
+ const waiter = gatePromises.shift();
132
+ if (waiter)
133
+ waiter.resolve(gate);
134
+ }
135
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
136
+ function dismissGate(_workflowId, _gateId) {
137
+ pendingGate = undefined;
138
+ }
139
+ async function waitForGate() {
140
+ if (pendingGate)
141
+ return pendingGate;
142
+ return new Promise((resolve) => {
143
+ gatePromises.push({ resolve });
144
+ });
145
+ }
146
+ return { raiseGate, dismissGate, waitForGate };
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Interactive gate prompt
150
+ // ---------------------------------------------------------------------------
151
+ /** Prompts the user to resolve a human gate via readline. */
152
+ export async function promptGateInteractive(gate, rl) {
153
+ const bar = '='.repeat(50);
154
+ const presented = [...gate.presentedArtifacts.keys()].join(', ') || 'none';
155
+ writeStdout('');
156
+ writeStdout(`${BOLD}${YELLOW}${bar}${RESET}`);
157
+ writeStdout(`${BOLD}${BG_YELLOW}${BLACK} HUMAN GATE: ${gate.stateName} ${RESET}`);
158
+ if (gate.summary.includes('(error:')) {
159
+ const errorMatch = /\(error: (.+)\)$/.exec(gate.summary);
160
+ if (errorMatch) {
161
+ writeStderr(`${RED}${BOLD}ERROR: ${errorMatch[1]}${RESET}`);
162
+ }
163
+ }
164
+ writeStdout(`${DIM}${gate.summary}${RESET}`);
165
+ writeStdout(`${DIM}Presented artifacts: ${presented}${RESET}`);
166
+ writeStdout('');
167
+ writeStdout(`${WHITE}Options:${RESET}`);
168
+ const eventMap = new Map();
169
+ for (const evt of gate.acceptedEvents) {
170
+ switch (evt) {
171
+ case 'APPROVE':
172
+ writeStdout(` ${GREEN}[a]${RESET} APPROVE`);
173
+ eventMap.set('a', 'APPROVE');
174
+ break;
175
+ case 'FORCE_REVISION':
176
+ writeStdout(` ${YELLOW}[f]${RESET} FORCE_REVISION`);
177
+ eventMap.set('f', 'FORCE_REVISION');
178
+ break;
179
+ case 'REPLAN':
180
+ writeStdout(` ${MAGENTA}[r]${RESET} REPLAN`);
181
+ eventMap.set('r', 'REPLAN');
182
+ break;
183
+ case 'ABORT':
184
+ writeStdout(` ${RED}[x]${RESET} ABORT`);
185
+ eventMap.set('x', 'ABORT');
186
+ break;
187
+ }
188
+ }
189
+ writeStdout('');
190
+ const validKeys = [...eventMap.keys()].join('/');
191
+ for (;;) {
192
+ const answer = await rl.question(`${BOLD}Your choice (${validKeys}): ${RESET}`);
193
+ const key = answer.trim().toLowerCase();
194
+ const eventType = eventMap.get(key);
195
+ if (!eventType) {
196
+ writeStdout(`${RED}Invalid choice. Please enter one of: ${validKeys}${RESET}`);
197
+ continue;
198
+ }
199
+ if (eventType === 'FORCE_REVISION' || eventType === 'REPLAN') {
200
+ const feedback = await promptRequiredFeedback(rl, eventType);
201
+ return { type: eventType, prompt: feedback };
202
+ }
203
+ return { type: eventType };
204
+ }
205
+ }
206
+ /**
207
+ * FORCE_REVISION and REPLAN route the workflow back to an earlier state
208
+ * and the next agent's prompt references the feedback directly, so empty
209
+ * feedback would produce an incoherent re-entry prompt. When stdin is
210
+ * closed (piped invocation, EOF) we abort instead of spinning.
211
+ */
212
+ async function promptRequiredFeedback(rl, eventType) {
213
+ for (;;) {
214
+ if (process.stdin.readableEnded) {
215
+ throw new Error(`Feedback is required for ${eventType} but stdin was closed before a response was provided.`);
216
+ }
217
+ const answer = await rl.question(`${CYAN}Feedback: ${RESET}`);
218
+ const trimmed = answer.trim();
219
+ if (trimmed.length > 0) {
220
+ return trimmed;
221
+ }
222
+ writeStdout(`${RED}Feedback is required for ${eventType}. Please enter a non-empty response.${RESET}`);
223
+ }
224
+ }
225
+ // ---------------------------------------------------------------------------
226
+ // Lifecycle event printer
227
+ // ---------------------------------------------------------------------------
228
+ /** Prints a workflow lifecycle event to stdout/stderr. */
229
+ export function printLifecycleEvent(event) {
230
+ switch (event.kind) {
231
+ case 'state_entered':
232
+ writeStdout(`${BLUE}>>>${RESET} ${BOLD}State:${RESET} ${CYAN}${event.state}${RESET}`);
233
+ break;
234
+ case 'gate_raised':
235
+ writeStdout(`${YELLOW}>>>${RESET} ${BOLD}Gate raised:${RESET} ${event.gate.stateName}`);
236
+ break;
237
+ case 'gate_dismissed':
238
+ writeStdout(`${GREEN}[gate dismissed]${RESET} ${event.gateId}`);
239
+ break;
240
+ case 'completed':
241
+ writeStdout(`${GREEN}${BOLD}Workflow completed!${RESET}`);
242
+ break;
243
+ case 'failed': {
244
+ const errorBar = '-'.repeat(50);
245
+ writeStderr(`${RED}${errorBar}${RESET}`);
246
+ writeStderr(`${RED}${BOLD}WORKFLOW ERROR:${RESET} ${event.error}`);
247
+ writeStderr(`${RED}${errorBar}${RESET}`);
248
+ break;
249
+ }
250
+ }
251
+ }
252
+ // ---------------------------------------------------------------------------
253
+ // Summary printer
254
+ // ---------------------------------------------------------------------------
255
+ /** Prints end-of-workflow summary with phase, artifacts, and artifact dir. */
256
+ export function printSummary(orchestrator, workflowId, artifactDir) {
257
+ const status = orchestrator.getStatus(workflowId);
258
+ const bar = '='.repeat(50);
259
+ writeStdout('');
260
+ writeStdout(`${BOLD}${bar}${RESET}`);
261
+ writeStdout(`${BOLD}WORKFLOW SUMMARY${RESET}`);
262
+ writeStdout(bar);
263
+ if (!status) {
264
+ writeStdout(`${RED}No status available${RESET}`);
265
+ return;
266
+ }
267
+ writeStdout(`Phase: ${BOLD}${status.phase}${RESET}`);
268
+ if (status.phase === 'completed') {
269
+ writeStdout(`Final artifacts: ${Object.keys(status.result.finalArtifacts).join(', ') || 'none'}`);
270
+ }
271
+ else if (status.phase === 'aborted') {
272
+ writeStdout(`Reason: ${status.reason}`);
273
+ }
274
+ else if (status.phase === 'failed') {
275
+ writeStdout(`Error: ${status.error}`);
276
+ }
277
+ writeStdout(`Artifact directory: ${artifactDir}`);
278
+ if (existsSync(artifactDir)) {
279
+ const entries = readdirSync(artifactDir);
280
+ writeStdout(`Contents: ${entries.join(', ') || '(empty)'}`);
281
+ }
282
+ writeStdout(bar);
283
+ }
284
+ // ---------------------------------------------------------------------------
285
+ // Resume helpers
286
+ // ---------------------------------------------------------------------------
287
+ /** Prints checkpoint details before resume. */
288
+ export function printResumeInfo(baseDir, workflowId, checkpoint) {
289
+ const workspacePath = checkpoint.workspacePath ?? resolve(baseDir, workflowId, 'workspace');
290
+ const artifactDir = resolve(workspacePath, '.workflow');
291
+ const artifacts = existsSync(artifactDir) ? readdirSync(artifactDir).join(', ') : 'none';
292
+ const errorInfo = checkpoint.context.lastError ?? 'none';
293
+ writeStdout(`${BOLD}${CYAN}Resuming workflow from:${RESET} ${baseDir}`);
294
+ writeStdout(`${DIM}Workflow ID: ${workflowId}${RESET}`);
295
+ writeStdout(`${DIM}Last state: ${String(checkpoint.machineState)}${RESET}`);
296
+ writeStdout(`${DIM}Error: ${errorInfo}${RESET}`);
297
+ writeStdout(`${DIM}Checkpointed at: ${checkpoint.timestamp}${RESET}`);
298
+ writeStdout(`${DIM}Artifacts present: ${artifacts}${RESET}`);
299
+ writeStdout('');
300
+ }
301
+ /**
302
+ * Picks the most-recent resumable workflow from a checkpoint store.
303
+ *
304
+ * Delegates enumeration + filtering + sorting to
305
+ * {@link findResumableCheckpoints} (single source of truth shared with the
306
+ * daemon). Adds the CLI-specific banner that lists every candidate when
307
+ * more than one is present.
308
+ *
309
+ * Exits with code 1 if no resumable workflows are found.
310
+ */
311
+ export function selectResumableWorkflow(checkpointStore, baseDir) {
312
+ const candidates = findResumableCheckpoints(baseDir, checkpointStore);
313
+ if (candidates.length === 0) {
314
+ writeStderr(`${RED}No resumable workflows found in this directory.${RESET}`);
315
+ writeStderr(`${DIM}Expected checkpoint files at: <baseDir>/<workflowId>/checkpoint.json${RESET}`);
316
+ process.exit(1);
317
+ }
318
+ if (candidates.length === 1) {
319
+ return { workflowId: candidates[0].workflowId, checkpoint: candidates[0].checkpoint };
320
+ }
321
+ writeStdout(`${YELLOW}Found ${candidates.length} resumable workflows. Using most recent:${RESET}`);
322
+ for (const { workflowId, checkpoint } of candidates) {
323
+ const marker = workflowId === candidates[0].workflowId ? `${GREEN}>>` : `${DIM} `;
324
+ writeStdout(`${marker} ${workflowId} — state: ${String(checkpoint.machineState)}, saved: ${checkpoint.timestamp}${RESET}`);
325
+ }
326
+ writeStdout('');
327
+ return { workflowId: candidates[0].workflowId, checkpoint: candidates[0].checkpoint };
328
+ }
329
+ /**
330
+ * Synthesizes a checkpoint for a workflow that ran before checkpointing.
331
+ * Discovers the workflow ID from the directory structure, reads the task
332
+ * from the task artifact, builds minimal context, and writes a checkpoint.
333
+ */
334
+ export function synthesizeCheckpoint(baseDir, stateName, definitionPath, checkpointStore) {
335
+ const entries = readdirSync(baseDir).filter((e) => {
336
+ const full = resolve(baseDir, e);
337
+ return existsSync(resolve(full, 'workspace', '.workflow')) || existsSync(resolve(full, 'artifacts'));
338
+ });
339
+ if (entries.length === 0) {
340
+ writeStderr(`${RED}No workflow directory found in ${baseDir}${RESET}`);
341
+ process.exit(1);
342
+ }
343
+ const workflowId = entries[0];
344
+ const workspacePath = resolve(baseDir, workflowId, 'workspace');
345
+ const artifactDir = existsSync(resolve(workspacePath, '.workflow'))
346
+ ? resolve(workspacePath, '.workflow')
347
+ : resolve(baseDir, workflowId, 'artifacts');
348
+ let taskDescription = 'Unknown task (synthesized checkpoint)';
349
+ const taskDir = resolve(artifactDir, 'task');
350
+ if (existsSync(taskDir)) {
351
+ const taskFiles = readdirSync(taskDir).filter((f) => f.endsWith('.md'));
352
+ if (taskFiles.length > 0) {
353
+ taskDescription = readFileSync(resolve(taskDir, taskFiles[0]), 'utf-8').trim();
354
+ }
355
+ }
356
+ const artifacts = {};
357
+ for (const name of readdirSync(artifactDir)) {
358
+ const full = resolve(artifactDir, name);
359
+ if (existsSync(full)) {
360
+ artifacts[name] = full;
361
+ }
362
+ }
363
+ const context = {
364
+ taskDescription,
365
+ artifacts,
366
+ round: 0,
367
+ maxRounds: 3,
368
+ previousOutputHashes: {},
369
+ previousTestCount: null,
370
+ humanPrompt: null,
371
+ reviewHistory: [],
372
+ totalTokens: 0,
373
+ lastError: null,
374
+ agentConversationsByState: {},
375
+ previousAgentOutput: null,
376
+ previousAgentNotes: null,
377
+ previousStateName: null,
378
+ visitCounts: {},
379
+ };
380
+ const checkpoint = {
381
+ machineState: stateName,
382
+ context,
383
+ timestamp: new Date().toISOString(),
384
+ transitionHistory: [],
385
+ definitionPath,
386
+ workspacePath,
387
+ };
388
+ checkpointStore.save(workflowId, checkpoint);
389
+ writeStdout(`${YELLOW}Synthesized checkpoint at state "${stateName}" for workflow ${workflowId}${RESET}`);
390
+ writeStdout(`${DIM}Artifacts found: ${Object.keys(artifacts).join(', ')}${RESET}`);
391
+ writeStdout(`${DIM}Task: ${taskDescription.slice(0, 80)}...${RESET}`);
392
+ writeStdout('');
393
+ return { workflowId, checkpoint };
394
+ }
395
+ // ---------------------------------------------------------------------------
396
+ // Event loop
397
+ // ---------------------------------------------------------------------------
398
+ /**
399
+ * Polls orchestrator status and dispatches gate prompts.
400
+ * Exits when the workflow reaches a terminal phase or the signal is aborted.
401
+ */
402
+ export async function runEventLoop(orchestrator, workflowId, rl, signal) {
403
+ for (;;) {
404
+ if (signal?.aborted)
405
+ break;
406
+ const status = orchestrator.getStatus(workflowId);
407
+ if (!status)
408
+ break;
409
+ if (status.phase === 'completed' || status.phase === 'failed' || status.phase === 'aborted')
410
+ break;
411
+ if (status.phase === 'waiting_human') {
412
+ const gate = status.gate;
413
+ const event = await promptGateInteractive(gate, rl);
414
+ orchestrator.resolveGate(workflowId, event);
415
+ await new Promise((r) => setTimeout(r, 100));
416
+ continue;
417
+ }
418
+ await new Promise((r) => setTimeout(r, 200));
419
+ }
420
+ }
421
+ //# sourceMappingURL=cli-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-support.js","sourceRoot":"","sources":["../../src/workflow/cli-support.ts"],"names":[],"mappings":"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"}