@the-open-engine/zeroshot 6.38.0 → 6.39.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 (381) hide show
  1. package/cli/event-copy.js +8 -7
  2. package/cli/event-copy.ts +12 -0
  3. package/cli/index.js +7 -31
  4. package/cli/json-export.js +61 -64
  5. package/cli/json-export.ts +112 -0
  6. package/cli/message-formatter-utils.js +68 -56
  7. package/cli/message-formatter-utils.ts +121 -0
  8. package/cli/message-formatters-normal.js +124 -259
  9. package/cli/message-formatters-normal.ts +250 -0
  10. package/cli/message-formatters-watch.js +81 -84
  11. package/cli/message-formatters-watch.ts +189 -0
  12. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
  13. package/lib/agent-cli-provider/adapters/codex.js +3 -1
  14. package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
  15. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  16. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  17. package/lib/cluster/generated/protocol.d.cts +8 -0
  18. package/lib/cluster/generated/protocol.d.mts +8 -0
  19. package/lib/cluster/generated/protocol.d.ts +8 -0
  20. package/lib/clusters-registry.d.ts +23 -0
  21. package/lib/clusters-registry.js +17 -29
  22. package/lib/completion.d.ts +12 -0
  23. package/lib/completion.js +84 -94
  24. package/lib/compose-utils.d.ts +32 -0
  25. package/lib/compose-utils.js +57 -72
  26. package/lib/detached-startup.d.ts +83 -0
  27. package/lib/detached-startup.js +231 -302
  28. package/lib/docker-config.d.ts +43 -0
  29. package/lib/docker-config.js +150 -325
  30. package/lib/docker-env-auth.d.ts +17 -0
  31. package/lib/docker-env-auth.js +75 -0
  32. package/lib/git-remote-utils.d.ts +48 -0
  33. package/lib/git-remote-utils.js +147 -213
  34. package/lib/id-detector.d.ts +15 -0
  35. package/lib/id-detector.js +37 -41
  36. package/lib/path-check.d.ts +30 -0
  37. package/lib/path-check.js +42 -45
  38. package/lib/process-liveness.d.ts +16 -0
  39. package/lib/process-liveness.js +19 -12
  40. package/lib/provider-credential-path.d.ts +16 -0
  41. package/lib/provider-credential-path.js +31 -29
  42. package/lib/provider-defaults.d.ts +30 -0
  43. package/lib/provider-defaults.js +47 -42
  44. package/lib/provider-detection.d.ts +11 -0
  45. package/lib/provider-detection.js +91 -54
  46. package/lib/provider-names.d.ts +38 -0
  47. package/lib/provider-names.js +56 -64
  48. package/lib/repo-settings.d.ts +28 -0
  49. package/lib/repo-settings.js +83 -59
  50. package/lib/run-mode.d.ts +21 -0
  51. package/lib/run-mode.js +21 -20
  52. package/lib/run-plan.d.ts +28 -0
  53. package/lib/run-plan.js +17 -16
  54. package/lib/settings/claude-auth.d.ts +35 -0
  55. package/lib/settings/claude-auth.js +30 -47
  56. package/lib/settings-defaults.d.ts +20 -0
  57. package/lib/settings-defaults.js +149 -0
  58. package/lib/settings-error.d.ts +7 -0
  59. package/lib/settings-error.js +8 -0
  60. package/lib/settings-issue-providers.d.ts +10 -0
  61. package/lib/settings-issue-providers.js +12 -0
  62. package/lib/settings-models.d.ts +22 -0
  63. package/lib/settings-models.js +93 -0
  64. package/lib/settings-storage.d.ts +23 -0
  65. package/lib/settings-storage.js +205 -0
  66. package/lib/settings-validation.d.ts +7 -0
  67. package/lib/settings-validation.js +182 -0
  68. package/lib/settings.d.ts +29 -0
  69. package/lib/settings.js +41 -736
  70. package/lib/setup-apply-types.d.ts +66 -0
  71. package/lib/setup-apply-types.js +2 -0
  72. package/lib/setup-apply.d.ts +39 -0
  73. package/lib/setup-apply.js +267 -264
  74. package/lib/setup-journal.d.ts +41 -0
  75. package/lib/setup-journal.js +119 -76
  76. package/lib/setup-plan-types.d.ts +102 -0
  77. package/lib/setup-plan-types.js +2 -0
  78. package/lib/setup-plan.d.ts +30 -0
  79. package/lib/setup-plan.js +300 -324
  80. package/lib/setup-undo.d.ts +44 -0
  81. package/lib/setup-undo.js +61 -74
  82. package/lib/start-cluster-config.d.ts +26 -0
  83. package/lib/start-cluster-config.js +56 -0
  84. package/lib/start-cluster-environment.d.ts +40 -0
  85. package/lib/start-cluster-environment.js +134 -0
  86. package/lib/start-cluster-run-options.d.ts +53 -0
  87. package/lib/start-cluster-run-options.js +147 -0
  88. package/lib/start-cluster.d.ts +64 -0
  89. package/lib/start-cluster.js +98 -454
  90. package/lib/stream-json-parser.d.ts +17 -0
  91. package/lib/stream-json-parser.js +51 -52
  92. package/npm-shrinkwrap.json +2 -2
  93. package/package.json +12 -6
  94. package/scripts/postinstall.js +27 -0
  95. package/scripts/rust-distribution.js +23 -14
  96. package/src/agent/agent-command-proofs-context.js +35 -45
  97. package/src/agent/agent-command-proofs-context.ts +87 -0
  98. package/src/agent/agent-config-settings.js +19 -0
  99. package/src/agent/agent-config-settings.ts +41 -0
  100. package/src/agent/agent-config.js +122 -231
  101. package/src/agent/agent-config.ts +285 -0
  102. package/src/agent/agent-context-builder.js +38 -273
  103. package/src/agent/agent-context-builder.ts +51 -0
  104. package/src/agent/agent-context-environment-sections.js +105 -0
  105. package/src/agent/agent-context-environment-sections.ts +134 -0
  106. package/src/agent/agent-context-packs.js +165 -0
  107. package/src/agent/agent-context-packs.ts +296 -0
  108. package/src/agent/agent-context-prompt-sections.js +100 -0
  109. package/src/agent/agent-context-prompt-sections.ts +148 -0
  110. package/src/agent/agent-context-sections.js +25 -334
  111. package/src/agent/agent-context-sections.ts +36 -0
  112. package/src/agent/agent-context-sources.js +96 -149
  113. package/src/agent/agent-context-sources.ts +253 -0
  114. package/src/agent/agent-context-types.js +2 -0
  115. package/src/agent/agent-context-types.ts +132 -0
  116. package/src/agent/agent-context-validation-sections.js +73 -0
  117. package/src/agent/agent-context-validation-sections.ts +129 -0
  118. package/src/agent/agent-input-injector.js +99 -118
  119. package/src/agent/agent-input-injector.ts +195 -0
  120. package/src/agent/agent-liveness-poll.js +74 -78
  121. package/src/agent/agent-liveness-poll.ts +163 -0
  122. package/src/agent/agent-quality-gate-schema.js +77 -86
  123. package/src/agent/agent-quality-gate-schema.ts +135 -0
  124. package/src/agent/agent-quality-gates-context.js +44 -50
  125. package/src/agent/agent-quality-gates-context.ts +91 -0
  126. package/src/agent/agent-stuck-detector.js +171 -239
  127. package/src/agent/agent-stuck-detector.ts +288 -0
  128. package/src/agent/agent-trigger-evaluator.js +29 -46
  129. package/src/agent/agent-trigger-evaluator.ts +98 -0
  130. package/src/agent/context-metrics.js +110 -141
  131. package/src/agent/context-metrics.ts +261 -0
  132. package/src/agent/context-pack-builder.js +72 -358
  133. package/src/agent/context-pack-builder.ts +105 -0
  134. package/src/agent/context-pack-core.js +70 -0
  135. package/src/agent/context-pack-core.ts +96 -0
  136. package/src/agent/context-pack-selection.js +119 -0
  137. package/src/agent/context-pack-selection.ts +187 -0
  138. package/src/agent/context-pack-truncation.js +139 -0
  139. package/src/agent/context-pack-truncation.ts +208 -0
  140. package/src/agent/context-pack-types.js +2 -0
  141. package/src/agent/context-pack-types.ts +98 -0
  142. package/src/agent/context-replay-policy.js +30 -39
  143. package/src/agent/context-replay-policy.ts +71 -0
  144. package/src/agent/critical-agent-policy.js +6 -10
  145. package/src/agent/critical-agent-policy.ts +20 -0
  146. package/src/agent/guidance-queue.js +74 -87
  147. package/src/agent/guidance-queue.ts +166 -0
  148. package/src/agent/output-extraction-error-detail.js +45 -0
  149. package/src/agent/output-extraction-error-detail.ts +49 -0
  150. package/src/agent/output-extraction-failures.js +125 -0
  151. package/src/agent/output-extraction-failures.ts +149 -0
  152. package/src/agent/output-extraction-json.js +234 -0
  153. package/src/agent/output-extraction-json.ts +235 -0
  154. package/src/agent/output-extraction-pi.js +124 -0
  155. package/src/agent/output-extraction-pi.ts +137 -0
  156. package/src/agent/output-extraction-types.js +2 -0
  157. package/src/agent/output-extraction-types.ts +49 -0
  158. package/src/agent/output-extraction.js +17 -617
  159. package/src/agent/output-extraction.ts +30 -0
  160. package/src/agent/output-reformatter-errors.js +83 -0
  161. package/src/agent/output-reformatter-errors.ts +106 -0
  162. package/src/agent/output-reformatter-types.js +2 -0
  163. package/src/agent/output-reformatter-types.ts +86 -0
  164. package/src/agent/output-reformatter.js +140 -185
  165. package/src/agent/output-reformatter.ts +238 -0
  166. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  167. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  168. package/src/agent/pi-terminal-lifecycle.js +186 -206
  169. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  170. package/src/agent/provider-control-plane.js +22 -21
  171. package/src/agent/provider-control-plane.ts +52 -0
  172. package/src/agent/provider-terminal-failure-types.js +2 -0
  173. package/src/agent/provider-terminal-failure-types.ts +60 -0
  174. package/src/agent/provider-terminal-failure.js +194 -191
  175. package/src/agent/provider-terminal-failure.ts +262 -0
  176. package/src/agent/rate-limit-backoff.js +31 -74
  177. package/src/agent/rate-limit-backoff.ts +71 -0
  178. package/src/agent/schema-utils.js +85 -125
  179. package/src/agent/schema-utils.ts +148 -0
  180. package/src/agent/structured-output-error.js +34 -33
  181. package/src/agent/structured-output-error.ts +105 -0
  182. package/src/agent/validation-platform.js +27 -27
  183. package/src/agent/validation-platform.ts +49 -0
  184. package/src/agent-cli-provider/adapters/codex.ts +3 -1
  185. package/src/attach/attach-client.js +232 -405
  186. package/src/attach/attach-client.ts +300 -0
  187. package/src/attach/attach-server-cleanup.js +43 -0
  188. package/src/attach/attach-server-cleanup.ts +39 -0
  189. package/src/attach/attach-server-clients.js +117 -0
  190. package/src/attach/attach-server-clients.ts +122 -0
  191. package/src/attach/attach-server-events.js +38 -0
  192. package/src/attach/attach-server-events.ts +36 -0
  193. package/src/attach/attach-server-pty.js +45 -0
  194. package/src/attach/attach-server-pty.ts +64 -0
  195. package/src/attach/attach-server-runtime.js +73 -0
  196. package/src/attach/attach-server-runtime.ts +62 -0
  197. package/src/attach/attach-server-socket.js +28 -0
  198. package/src/attach/attach-server-socket.ts +23 -0
  199. package/src/attach/attach-server-types.js +2 -0
  200. package/src/attach/attach-server-types.ts +82 -0
  201. package/src/attach/attach-server.js +106 -523
  202. package/src/attach/attach-server.ts +158 -0
  203. package/src/attach/index.js +18 -35
  204. package/src/attach/index.ts +18 -0
  205. package/src/attach/protocol.js +95 -184
  206. package/src/attach/protocol.ts +181 -0
  207. package/src/attach/ring-buffer.js +76 -102
  208. package/src/attach/ring-buffer.ts +109 -0
  209. package/src/attach/send-input.js +64 -75
  210. package/src/attach/send-input.ts +94 -0
  211. package/src/attach/socket-discovery.js +164 -218
  212. package/src/attach/socket-discovery.ts +230 -0
  213. package/src/attach/socket-paths.js +42 -61
  214. package/src/attach/socket-paths.ts +81 -0
  215. package/src/claude-credentials.js +51 -54
  216. package/src/claude-credentials.ts +89 -0
  217. package/src/cluster/generated/protocol-schema.ts +1 -1
  218. package/src/cluster/generated/protocol.ts +2 -1
  219. package/src/command-proofs.js +110 -141
  220. package/src/command-proofs.ts +216 -0
  221. package/src/config-router.js +81 -73
  222. package/src/config-router.ts +131 -0
  223. package/src/copy-worker.js +53 -29
  224. package/src/copy-worker.ts +75 -0
  225. package/src/darwin-keychain-boundary.js +80 -111
  226. package/src/darwin-keychain-boundary.ts +148 -0
  227. package/src/guidance-topics.js +4 -5
  228. package/src/guidance-topics.ts +10 -0
  229. package/src/input-helpers.js +33 -54
  230. package/src/input-helpers.ts +58 -0
  231. package/src/ledger-sequence.js +45 -48
  232. package/src/ledger-sequence.ts +63 -0
  233. package/src/legacy-lib/clusters-registry.ts +40 -0
  234. package/src/legacy-lib/completion.ts +148 -0
  235. package/src/legacy-lib/compose-utils.ts +102 -0
  236. package/src/legacy-lib/detached-startup.ts +449 -0
  237. package/src/legacy-lib/docker-config.ts +282 -0
  238. package/src/legacy-lib/docker-env-auth.ts +116 -0
  239. package/src/legacy-lib/git-remote-utils.ts +244 -0
  240. package/src/legacy-lib/id-detector.ts +57 -0
  241. package/src/legacy-lib/js-yaml.d.ts +3 -0
  242. package/src/legacy-lib/omelette.d.ts +15 -0
  243. package/src/legacy-lib/path-check.ts +89 -0
  244. package/src/legacy-lib/process-liveness.ts +36 -0
  245. package/src/legacy-lib/provider-credential-path.ts +57 -0
  246. package/src/legacy-lib/provider-defaults.ts +114 -0
  247. package/src/legacy-lib/provider-detection.ts +67 -0
  248. package/src/legacy-lib/provider-names.ts +126 -0
  249. package/src/legacy-lib/repo-settings.ts +88 -0
  250. package/src/legacy-lib/run-mode.ts +58 -0
  251. package/src/legacy-lib/run-plan.ts +49 -0
  252. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  253. package/src/legacy-lib/settings-defaults.ts +212 -0
  254. package/src/legacy-lib/settings-error.ts +8 -0
  255. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  256. package/src/legacy-lib/settings-models.ts +124 -0
  257. package/src/legacy-lib/settings-storage.ts +277 -0
  258. package/src/legacy-lib/settings-validation.ts +220 -0
  259. package/src/legacy-lib/settings.ts +87 -0
  260. package/src/legacy-lib/setup-apply-types.ts +70 -0
  261. package/src/legacy-lib/setup-apply.ts +456 -0
  262. package/src/legacy-lib/setup-journal.ts +185 -0
  263. package/src/legacy-lib/setup-plan-types.ts +96 -0
  264. package/src/legacy-lib/setup-plan.ts +500 -0
  265. package/src/legacy-lib/setup-undo.ts +142 -0
  266. package/src/legacy-lib/start-cluster-config.ts +124 -0
  267. package/src/legacy-lib/start-cluster-environment.ts +165 -0
  268. package/src/legacy-lib/start-cluster-run-options.ts +279 -0
  269. package/src/legacy-lib/start-cluster.ts +237 -0
  270. package/src/legacy-lib/stream-json-parser.ts +88 -0
  271. package/src/message-buffer.js +55 -71
  272. package/src/message-buffer.ts +107 -0
  273. package/src/message-bus-bridge.js +92 -133
  274. package/src/message-bus-bridge.ts +149 -0
  275. package/src/name-generator-shared.js +220 -0
  276. package/src/name-generator-shared.ts +231 -0
  277. package/src/name-generator.js +8 -217
  278. package/src/name-generator.ts +27 -0
  279. package/src/omp-blob-root.js +83 -64
  280. package/src/omp-blob-root.ts +116 -0
  281. package/src/omp-config-overlay.js +65 -38
  282. package/src/omp-config-overlay.ts +110 -0
  283. package/src/omp-execution-fingerprint.js +38 -43
  284. package/src/omp-execution-fingerprint.ts +92 -0
  285. package/src/omp-session-limits.js +10 -15
  286. package/src/omp-session-limits.ts +53 -0
  287. package/src/omp-session-partition.js +2 -2
  288. package/src/omp-session-verifier.js +1 -1
  289. package/src/orchestrator.js +19 -4
  290. package/src/providers/anthropic/index.js +3 -1
  291. package/src/providers/anthropic/index.ts +13 -0
  292. package/src/providers/capabilities.js +19 -27
  293. package/src/providers/capabilities.ts +44 -0
  294. package/src/providers/google/index.js +3 -1
  295. package/src/providers/google/index.ts +13 -0
  296. package/src/providers/openai/index.js +3 -1
  297. package/src/providers/openai/index.ts +13 -0
  298. package/src/providers/opencode/index.js +3 -1
  299. package/src/providers/opencode/index.ts +13 -0
  300. package/src/quality-gates.js +67 -127
  301. package/src/quality-gates.ts +149 -0
  302. package/src/repo-settings-access.js +40 -0
  303. package/src/repo-settings-access.ts +64 -0
  304. package/src/schemas/sub-cluster.js +127 -183
  305. package/src/schemas/sub-cluster.ts +238 -0
  306. package/src/state-snapshot-normalization.js +224 -0
  307. package/src/state-snapshot-normalization.ts +222 -0
  308. package/src/state-snapshot.js +192 -359
  309. package/src/state-snapshot.ts +291 -0
  310. package/src/state-snapshotter.js +118 -130
  311. package/src/state-snapshotter.ts +167 -0
  312. package/src/sub-cluster-wrapper.js +4 -13
  313. package/src/task-run-model-args.js +87 -124
  314. package/src/task-run-model-args.ts +204 -0
  315. package/src/task-runner.js +5 -25
  316. package/src/task-runner.ts +28 -0
  317. package/src/task-startup-error.js +73 -58
  318. package/src/task-startup-error.ts +126 -0
  319. package/src/template-validation/consensus-gate-contracts.js +2 -0
  320. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  321. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  322. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  323. package/src/template-validation/consensus-gate-stage.js +34 -0
  324. package/src/template-validation/consensus-gate-stage.ts +56 -0
  325. package/src/template-validation/random-topology-contracts.js +2 -0
  326. package/src/template-validation/random-topology-contracts.ts +54 -0
  327. package/src/template-validation/random-topology-dispatch.js +25 -0
  328. package/src/template-validation/random-topology-dispatch.ts +33 -0
  329. package/src/template-validation/random-topology-message-loop.js +53 -0
  330. package/src/template-validation/random-topology-message-loop.ts +73 -0
  331. package/src/template-validation/random-topology-operations.js +79 -0
  332. package/src/template-validation/random-topology-operations.ts +101 -0
  333. package/src/template-validation/random-topology-runtime.js +25 -0
  334. package/src/template-validation/random-topology-runtime.ts +43 -0
  335. package/src/template-validation/random-topology-scenario.js +52 -0
  336. package/src/template-validation/random-topology-scenario.ts +57 -0
  337. package/src/template-validation/random-topology-schema.js +159 -0
  338. package/src/template-validation/random-topology-schema.ts +190 -0
  339. package/src/template-validation/random-topology-state.js +28 -0
  340. package/src/template-validation/random-topology-state.ts +30 -0
  341. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  342. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  343. package/src/template-validation/random-topology-trigger.js +75 -0
  344. package/src/template-validation/random-topology-trigger.ts +88 -0
  345. package/src/template-validation/report-formatter.js +40 -46
  346. package/src/template-validation/report-formatter.ts +101 -0
  347. package/src/template-validation/simulate-consensus-gates.js +111 -302
  348. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  349. package/src/template-validation/simulate-random-topology.js +26 -519
  350. package/src/template-validation/simulate-random-topology.ts +57 -0
  351. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  352. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  353. package/src/template-validation/simulation-agent-runtime.js +25 -0
  354. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  355. package/src/template-validation/simulation-agent.js +29 -0
  356. package/src/template-validation/simulation-agent.ts +73 -0
  357. package/src/template-validation/simulation-runtime.js +34 -0
  358. package/src/template-validation/simulation-runtime.ts +72 -0
  359. package/src/template-validation/two-stage-contracts.js +2 -0
  360. package/src/template-validation/two-stage-contracts.ts +41 -0
  361. package/src/template-validation/two-stage-inputs.js +21 -0
  362. package/src/template-validation/two-stage-inputs.ts +29 -0
  363. package/src/template-validation/two-stage-results.js +30 -0
  364. package/src/template-validation/two-stage-results.ts +40 -0
  365. package/src/template-validation/two-stage-scenario.js +86 -0
  366. package/src/template-validation/two-stage-scenario.ts +120 -0
  367. package/src/worktree-claude-config.js +182 -220
  368. package/src/worktree-claude-config.ts +272 -0
  369. package/src/worktree-tooling-env.js +103 -125
  370. package/src/worktree-tooling-env.ts +142 -0
  371. package/task-lib/completion.js +2 -3
  372. package/task-lib/completion.ts +9 -0
  373. package/task-lib/config.js +1 -4
  374. package/task-lib/config.ts +11 -0
  375. package/task-lib/name-generator.js +4 -226
  376. package/task-lib/name-generator.ts +11 -0
  377. package/task-lib/omp-session-cleanup.js +1 -1
  378. package/task-lib/omp-storage-root.js +8 -12
  379. package/task-lib/omp-storage-root.ts +62 -0
  380. package/task-lib/process-termination.js +143 -166
  381. package/task-lib/process-termination.ts +268 -0
@@ -0,0 +1,237 @@
1
+ interface Settings extends Record<string, unknown> {}
2
+
3
+ interface ClusterConfig extends Record<string, unknown> {}
4
+
5
+ interface ClusterInput extends Record<string, string> {}
6
+
7
+ interface OrchestratorFacade {
8
+ loadConfig(configPath: string): ClusterConfig;
9
+ start(config: ClusterConfig, input: ClusterInput, options: unknown): unknown;
10
+ }
11
+
12
+ interface ProviderNamesFacade {
13
+ normalizeProviderName(name: string): string;
14
+ }
15
+
16
+ interface ProvidersFacade {
17
+ getProvider(providerId: string): unknown;
18
+ }
19
+
20
+ interface IssueProvidersFacade {
21
+ detectProvider(input: string, settings: Settings, forceProvider: string | null): unknown;
22
+ }
23
+
24
+ interface ConfigHelpersFacade {
25
+ resolveConfigPath(configName: string): string;
26
+ prepareClusterConfig(
27
+ config: ClusterConfig,
28
+ settings?: Settings,
29
+ providerOverride?: string | null
30
+ ): ClusterConfig;
31
+ loadClusterConfig(
32
+ orchestrator: OrchestratorFacade,
33
+ configPath: string,
34
+ settings?: Settings,
35
+ providerOverride?: string | null
36
+ ): ClusterConfig;
37
+ }
38
+
39
+ interface RunOptionsHelpersFacade {
40
+ buildStartOptions(args: Record<string, unknown>): unknown;
41
+ buildTrustedStartOptions(args: Record<string, unknown>): unknown;
42
+ resolveEffectiveRunPlan(options?: Record<string, unknown>, settings?: Settings): unknown;
43
+ detectGitRepoRoot(): string;
44
+ }
45
+
46
+ interface ProviderOverrideOptions {
47
+ provider?: string | null;
48
+ envProvider?: string | null;
49
+ validateProvider?: unknown;
50
+ }
51
+
52
+ interface StartClusterArgs extends Record<string, unknown> {
53
+ orchestrator?: OrchestratorFacade;
54
+ config?: ClusterConfig | null;
55
+ configPath?: string | null;
56
+ configName?: string | null;
57
+ settings?: Settings;
58
+ providerOverride?: string | null;
59
+ modelOverride?: unknown;
60
+ forceProvider?: unknown;
61
+ clusterId?: unknown;
62
+ options?: Record<string, unknown>;
63
+ text: string;
64
+ issue: string;
65
+ file: string;
66
+ }
67
+
68
+ interface ResolveConfigArgs {
69
+ orchestrator: OrchestratorFacade;
70
+ config?: ClusterConfig | null | undefined;
71
+ configPath?: string | null | undefined;
72
+ configName?: string | null | undefined;
73
+ settings?: Settings | undefined;
74
+ providerOverride?: string | null | undefined;
75
+ }
76
+
77
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
78
+ const providerNames: ProviderNamesFacade = require('./provider-names');
79
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
80
+ const providers: ProvidersFacade = require('../src/providers');
81
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
82
+ const issueProviders: IssueProvidersFacade = require('../src/issue-providers');
83
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
84
+ const configHelpers: ConfigHelpersFacade = require('./start-cluster-config');
85
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
86
+ const runOptionsHelpers: RunOptionsHelpersFacade = require('./start-cluster-run-options');
87
+
88
+ const { normalizeProviderName } = providerNames;
89
+ const { getProvider } = providers;
90
+ const { detectProvider } = issueProviders;
91
+ const { resolveConfigPath, prepareClusterConfig, loadClusterConfig } = configHelpers;
92
+ const { buildStartOptions, buildTrustedStartOptions, resolveEffectiveRunPlan, detectGitRepoRoot } =
93
+ runOptionsHelpers;
94
+
95
+ function buildTextInput(text: string): ClusterInput {
96
+ return { text };
97
+ }
98
+
99
+ function buildIssueInput(issue: string): ClusterInput {
100
+ return { issue };
101
+ }
102
+
103
+ function buildFileInput(file: string): ClusterInput {
104
+ return { file };
105
+ }
106
+
107
+ function detectRunInput(
108
+ inputArg: string,
109
+ settings: Settings = {},
110
+ forceProvider: string | null = null
111
+ ): ClusterInput {
112
+ const isMarkdownFile = /\.(md|markdown)$/i.test(inputArg);
113
+ if (isMarkdownFile) {
114
+ return buildFileInput(inputArg);
115
+ }
116
+
117
+ const ProviderClass = detectProvider(inputArg, settings, forceProvider);
118
+ if (ProviderClass) {
119
+ return buildIssueInput(inputArg);
120
+ }
121
+
122
+ return buildTextInput(inputArg);
123
+ }
124
+
125
+ const STDIN_MARKER = '-';
126
+
127
+ function isStdinInput(inputArg: string): boolean {
128
+ return inputArg === STDIN_MARKER;
129
+ }
130
+
131
+ async function readStdinText(
132
+ stream: AsyncIterable<string | Uint8Array> = process.stdin
133
+ ): Promise<string> {
134
+ const chunks: Array<string | Uint8Array> = [];
135
+ for await (const chunk of stream) {
136
+ chunks.push(chunk);
137
+ }
138
+ return Buffer.concat(chunks.map((chunk) => (Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))))
139
+ .toString('utf8')
140
+ .trim();
141
+ }
142
+
143
+ function encodeStdinEnv(text: string): string {
144
+ return Buffer.from(text, 'utf8').toString('base64');
145
+ }
146
+
147
+ function decodeStdinEnv(value: string): string {
148
+ return Buffer.from(value, 'base64').toString('utf8');
149
+ }
150
+
151
+ function resolveProviderOverride(options: ProviderOverrideOptions = {}): string | null {
152
+ const override = options.provider || options.envProvider || process.env.ZEROSHOT_PROVIDER;
153
+ if (!override || !override.trim()) {
154
+ return null;
155
+ }
156
+ const normalized = normalizeProviderName(override);
157
+ if (options.validateProvider) {
158
+ getProvider(normalized);
159
+ }
160
+ return normalized;
161
+ }
162
+
163
+ function resolveConfigOrThrow({
164
+ orchestrator,
165
+ config,
166
+ configPath,
167
+ configName,
168
+ settings,
169
+ providerOverride,
170
+ }: ResolveConfigArgs): ClusterConfig {
171
+ if (config) {
172
+ return config;
173
+ }
174
+ const resolvedPath = configPath || (configName ? resolveConfigPath(configName) : null);
175
+ if (!resolvedPath) {
176
+ throw new Error('configPath or configName is required when config is not provided');
177
+ }
178
+ return loadClusterConfig(orchestrator, resolvedPath, settings, providerOverride);
179
+ }
180
+
181
+ function startClusterWithInput(args: StartClusterArgs, input: ClusterInput): unknown {
182
+ const { orchestrator, config, configPath, configName, settings, providerOverride } = args;
183
+ if (!orchestrator) {
184
+ throw new Error('orchestrator is required');
185
+ }
186
+ const resolvedConfig = resolveConfigOrThrow({
187
+ orchestrator,
188
+ config,
189
+ configPath,
190
+ configName,
191
+ settings,
192
+ providerOverride,
193
+ });
194
+ const startOptions = buildStartOptions({
195
+ clusterId: args.clusterId,
196
+ options: args.options || {},
197
+ settings,
198
+ providerOverride,
199
+ modelOverride: args.modelOverride,
200
+ forceProvider: args.forceProvider,
201
+ });
202
+ return orchestrator.start(resolvedConfig, input, startOptions);
203
+ }
204
+
205
+ function startClusterFromText(args: StartClusterArgs): unknown {
206
+ return startClusterWithInput(args, buildTextInput(args.text));
207
+ }
208
+
209
+ function startClusterFromIssue(args: StartClusterArgs): unknown {
210
+ return startClusterWithInput(args, buildIssueInput(args.issue));
211
+ }
212
+
213
+ function startClusterFromFile(args: StartClusterArgs): unknown {
214
+ return startClusterWithInput(args, buildFileInput(args.file));
215
+ }
216
+
217
+ export = {
218
+ buildTextInput,
219
+ buildIssueInput,
220
+ buildFileInput,
221
+ detectRunInput,
222
+ isStdinInput,
223
+ readStdinText,
224
+ encodeStdinEnv,
225
+ decodeStdinEnv,
226
+ resolveProviderOverride,
227
+ resolveConfigPath,
228
+ prepareClusterConfig,
229
+ loadClusterConfig,
230
+ buildStartOptions,
231
+ buildTrustedStartOptions,
232
+ resolveEffectiveRunPlan,
233
+ startClusterFromText,
234
+ startClusterFromIssue,
235
+ startClusterFromFile,
236
+ detectGitRepoRoot,
237
+ };
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Provider-agnostic stream-json parser for `zeroshot logs`.
3
+ *
4
+ * Provider parsing is delegated to the helper-backed runtime provider facade.
5
+ */
6
+
7
+ type ParsedEvent = Readonly<Record<string, unknown>>;
8
+ type ProviderEvent = ParsedEvent | ParsedEvent[] | null;
9
+
10
+ interface ProviderParser {
11
+ parseEvent(line: string): ProviderEvent;
12
+ }
13
+
14
+ interface ProviderFacade {
15
+ getProvider(name: string): ProviderParser;
16
+ listProviders(): string[];
17
+ }
18
+
19
+ // The runtime facade is maintained JavaScript; keep its original emitted require path.
20
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
21
+ const { getProvider, listProviders }: ProviderFacade = require('../src/providers');
22
+
23
+ function createProviderParsers(): ProviderParser[] {
24
+ return listProviders().map((name) => getProvider(name));
25
+ }
26
+
27
+ function stripTimestampPrefix(line: unknown): string {
28
+ if (!line || typeof line !== 'string') return '';
29
+ let trimmed = line.trim().replace(/\r$/, '');
30
+ if (!trimmed) return '';
31
+
32
+ const tsMatch = /^\[(\d{13})\](.*)$/.exec(trimmed);
33
+ if (tsMatch) trimmed = (tsMatch[2] || '').trimStart();
34
+
35
+ if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
36
+ const pipeMatch = /^[^|]{1,40}\|\s*(.*)$/.exec(trimmed);
37
+ if (pipeMatch) {
38
+ const afterPipe = (pipeMatch[1] || '').trimStart();
39
+ if (afterPipe.startsWith('{') || afterPipe.startsWith('[')) return afterPipe;
40
+ }
41
+ }
42
+
43
+ return trimmed;
44
+ }
45
+
46
+ // The provider protocol intentionally permits one event, an event batch, or no event.
47
+ // eslint-disable-next-line sonarjs/function-return-type
48
+ function parseEvent(
49
+ line: unknown,
50
+ providerParsers: readonly ProviderParser[] = createProviderParsers()
51
+ ): ProviderEvent {
52
+ const content = stripTimestampPrefix(line);
53
+ let result: ProviderEvent = null;
54
+ if (content) {
55
+ for (const provider of providerParsers) {
56
+ const event = provider.parseEvent(content);
57
+ if (event) {
58
+ result = event;
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+
66
+ function collectEvent(events: ParsedEvent[], event: ProviderEvent): void {
67
+ if (!event) return;
68
+ if (Array.isArray(event)) {
69
+ events.push(...event);
70
+ return;
71
+ }
72
+ events.push(event);
73
+ }
74
+
75
+ function parseChunk(chunk: unknown): ParsedEvent[] {
76
+ const events: ParsedEvent[] = [];
77
+ const lines = String(chunk || '').split('\n');
78
+ const providerParsers = createProviderParsers();
79
+
80
+ for (const line of lines) {
81
+ if (!line.trim()) continue;
82
+ collectEvent(events, parseEvent(line, providerParsers));
83
+ }
84
+
85
+ return events;
86
+ }
87
+
88
+ export = { parseEvent, parseChunk };
@@ -1,81 +1,65 @@
1
+ "use strict";
1
2
  /**
2
- * Message buffering helper
3
- *
4
- * Ensures trigger-matching messages are never dropped just because an agent/subcluster is busy.
5
- * Dropped workflow signals (e.g. VALIDATION_RESULT) can wedge clusters in "running" state.
3
+ * Ensures trigger-matching messages are never dropped just because an
4
+ * agent or subcluster is busy.
6
5
  */
7
-
8
6
  function bufferMessage(target, message, options = {}) {
9
- const maxBuffered = options.maxBuffered ?? 200;
10
-
11
- if (!target._bufferedMessages) {
12
- target._bufferedMessages = [];
13
- }
14
-
15
- if (target._bufferedMessages.length >= maxBuffered) {
16
- target._bufferedMessages.shift();
17
- }
18
-
19
- target._bufferedMessages.push(message);
7
+ const maxBuffered = options.maxBuffered ?? 200;
8
+ if (!target._bufferedMessages) {
9
+ target._bufferedMessages = [];
10
+ }
11
+ if (target._bufferedMessages.length >= maxBuffered) {
12
+ target._bufferedMessages.shift();
13
+ }
14
+ target._bufferedMessages.push(message);
20
15
  }
21
-
22
16
  function scheduleDrain(target, drainFn, options = {}) {
23
- if (target._bufferDrainScheduled) {
24
- return;
25
- }
26
-
27
- target._bufferDrainScheduled = true;
28
-
29
- const label = options.label || 'MessageBuffer';
30
- const id = target.id || 'unknown';
31
-
32
- const run = () => {
33
- target._bufferDrainScheduled = false;
34
- drainFn().catch((error) => {
35
- console.error(`\n${'='.repeat(80)}`);
36
- console.error(`🔴 FATAL: ${label} drain crashed (${id})`);
37
- console.error(`${'='.repeat(80)}`);
38
- console.error(`Error: ${error.message}`);
39
- console.error(`Stack: ${error.stack}`);
40
- console.error(`${'='.repeat(80)}\n`);
41
- setImmediate(() => {
42
- throw error;
43
- });
44
- });
45
- };
46
-
47
- const current = target._currentExecution;
48
- if (current && typeof current.finally === 'function') {
49
- current.finally(() => setImmediate(run));
50
- return;
51
- }
52
-
53
- setImmediate(run);
17
+ if (target._bufferDrainScheduled) {
18
+ return;
19
+ }
20
+ target._bufferDrainScheduled = true;
21
+ const label = options.label || 'MessageBuffer';
22
+ const id = target.id || 'unknown';
23
+ const run = () => {
24
+ target._bufferDrainScheduled = false;
25
+ drainFn().catch((error) => {
26
+ console.error(`\n${'='.repeat(80)}`);
27
+ console.error(`🔴 FATAL: ${label} drain crashed (${id})`);
28
+ console.error(`${'='.repeat(80)}`);
29
+ console.error(`Error: ${error.message}`);
30
+ console.error(`Stack: ${error.stack}`);
31
+ console.error(`${'='.repeat(80)}\n`);
32
+ setImmediate(() => {
33
+ throw error;
34
+ });
35
+ });
36
+ };
37
+ const current = target._currentExecution;
38
+ if (current && typeof current.finally === 'function') {
39
+ current.finally(() => setImmediate(run));
40
+ return;
41
+ }
42
+ setImmediate(run);
54
43
  }
55
-
56
44
  async function drainBufferedMessages(target, handleFn, options = {}) {
57
- if (!target.running) {
58
- return;
59
- }
60
-
61
- const buffer = target._bufferedMessages;
62
- if (!buffer || buffer.length === 0) {
63
- return;
64
- }
65
-
66
- if (target.state !== 'idle') {
67
- scheduleDrain(target, () => drainBufferedMessages(target, handleFn, options), options);
68
- return;
69
- }
70
-
71
- while (target.running && target.state === 'idle' && buffer.length > 0) {
72
- const next = buffer.shift();
73
- await handleFn(next);
74
- }
45
+ if (!target.running) {
46
+ return;
47
+ }
48
+ const buffer = target._bufferedMessages;
49
+ if (!buffer || buffer.length === 0) {
50
+ return;
51
+ }
52
+ if (target.state !== 'idle') {
53
+ scheduleDrain(target, () => drainBufferedMessages(target, handleFn, options), options);
54
+ return;
55
+ }
56
+ while (target.running && target.state === 'idle' && buffer.length > 0) {
57
+ const next = buffer.shift();
58
+ await handleFn(next);
59
+ }
75
60
  }
76
-
77
61
  module.exports = {
78
- bufferMessage,
79
- scheduleDrain,
80
- drainBufferedMessages,
62
+ bufferMessage,
63
+ scheduleDrain,
64
+ drainBufferedMessages,
81
65
  };
@@ -0,0 +1,107 @@
1
+ interface MessageBufferTarget {
2
+ _bufferedMessages?: unknown[];
3
+ _bufferDrainScheduled?: boolean;
4
+ _currentExecution?: Promise<unknown> | null;
5
+ id?: string;
6
+ running: boolean;
7
+ state: string;
8
+ }
9
+
10
+ interface MessageBufferOptions {
11
+ maxBuffered?: number;
12
+ label?: string;
13
+ }
14
+
15
+ type DrainFunction = () => Promise<unknown>;
16
+ type MessageHandler = (message: unknown) => Promise<unknown> | unknown;
17
+
18
+ /**
19
+ * Ensures trigger-matching messages are never dropped just because an
20
+ * agent or subcluster is busy.
21
+ */
22
+ function bufferMessage(
23
+ target: MessageBufferTarget,
24
+ message: unknown,
25
+ options: MessageBufferOptions = {}
26
+ ): void {
27
+ const maxBuffered = options.maxBuffered ?? 200;
28
+
29
+ if (!target._bufferedMessages) {
30
+ target._bufferedMessages = [];
31
+ }
32
+
33
+ if (target._bufferedMessages.length >= maxBuffered) {
34
+ target._bufferedMessages.shift();
35
+ }
36
+
37
+ target._bufferedMessages.push(message);
38
+ }
39
+
40
+ function scheduleDrain(
41
+ target: MessageBufferTarget,
42
+ drainFn: DrainFunction,
43
+ options: MessageBufferOptions = {}
44
+ ): void {
45
+ if (target._bufferDrainScheduled) {
46
+ return;
47
+ }
48
+
49
+ target._bufferDrainScheduled = true;
50
+
51
+ const label = options.label || 'MessageBuffer';
52
+ const id = target.id || 'unknown';
53
+
54
+ const run = (): void => {
55
+ target._bufferDrainScheduled = false;
56
+ drainFn().catch((error: Error) => {
57
+ console.error(`\n${'='.repeat(80)}`);
58
+ console.error(`🔴 FATAL: ${label} drain crashed (${id})`);
59
+ console.error(`${'='.repeat(80)}`);
60
+ console.error(`Error: ${error.message}`);
61
+ console.error(`Stack: ${error.stack}`);
62
+ console.error(`${'='.repeat(80)}\n`);
63
+ setImmediate(() => {
64
+ throw error;
65
+ });
66
+ });
67
+ };
68
+
69
+ const current = target._currentExecution;
70
+ if (current && typeof current.finally === 'function') {
71
+ current.finally(() => setImmediate(run));
72
+ return;
73
+ }
74
+
75
+ setImmediate(run);
76
+ }
77
+
78
+ async function drainBufferedMessages(
79
+ target: MessageBufferTarget,
80
+ handleFn: MessageHandler,
81
+ options: MessageBufferOptions = {}
82
+ ): Promise<void> {
83
+ if (!target.running) {
84
+ return;
85
+ }
86
+
87
+ const buffer = target._bufferedMessages;
88
+ if (!buffer || buffer.length === 0) {
89
+ return;
90
+ }
91
+
92
+ if (target.state !== 'idle') {
93
+ scheduleDrain(target, () => drainBufferedMessages(target, handleFn, options), options);
94
+ return;
95
+ }
96
+
97
+ while (target.running && target.state === 'idle' && buffer.length > 0) {
98
+ const next = buffer.shift();
99
+ await handleFn(next);
100
+ }
101
+ }
102
+
103
+ export = {
104
+ bufferMessage,
105
+ scheduleDrain,
106
+ drainBufferedMessages,
107
+ };