@the-open-engine/zeroshot 6.38.1 → 6.39.1

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 (383) hide show
  1. package/README.md +6 -0
  2. package/cli/event-copy.js +8 -7
  3. package/cli/event-copy.ts +12 -0
  4. package/cli/index.js +67 -48
  5. package/cli/json-export.js +61 -64
  6. package/cli/json-export.ts +112 -0
  7. package/cli/message-formatter-utils.js +68 -56
  8. package/cli/message-formatter-utils.ts +121 -0
  9. package/cli/message-formatters-normal.js +124 -259
  10. package/cli/message-formatters-normal.ts +250 -0
  11. package/cli/message-formatters-watch.js +81 -84
  12. package/cli/message-formatters-watch.ts +189 -0
  13. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  14. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  15. package/lib/cluster/generated/protocol.d.cts +8 -0
  16. package/lib/cluster/generated/protocol.d.mts +8 -0
  17. package/lib/cluster/generated/protocol.d.ts +8 -0
  18. package/lib/clusters-registry.d.ts +23 -0
  19. package/lib/clusters-registry.js +17 -29
  20. package/lib/completion.d.ts +12 -0
  21. package/lib/completion.js +84 -94
  22. package/lib/compose-utils.d.ts +32 -0
  23. package/lib/compose-utils.js +57 -72
  24. package/lib/detached-startup.d.ts +84 -0
  25. package/lib/detached-startup.js +232 -302
  26. package/lib/docker-config.d.ts +43 -0
  27. package/lib/docker-config.js +150 -325
  28. package/lib/docker-env-auth.d.ts +17 -0
  29. package/lib/docker-env-auth.js +75 -0
  30. package/lib/git-remote-utils.d.ts +48 -0
  31. package/lib/git-remote-utils.js +147 -213
  32. package/lib/id-detector.d.ts +15 -0
  33. package/lib/id-detector.js +37 -41
  34. package/lib/path-check.d.ts +30 -0
  35. package/lib/path-check.js +42 -45
  36. package/lib/process-liveness.d.ts +16 -0
  37. package/lib/process-liveness.js +19 -12
  38. package/lib/provider-credential-path.d.ts +16 -0
  39. package/lib/provider-credential-path.js +31 -29
  40. package/lib/provider-defaults.d.ts +30 -0
  41. package/lib/provider-defaults.js +47 -42
  42. package/lib/provider-detection.d.ts +11 -0
  43. package/lib/provider-detection.js +91 -54
  44. package/lib/provider-names.d.ts +38 -0
  45. package/lib/provider-names.js +56 -64
  46. package/lib/repo-settings.d.ts +28 -0
  47. package/lib/repo-settings.js +83 -59
  48. package/lib/run-mode.d.ts +21 -0
  49. package/lib/run-mode.js +21 -20
  50. package/lib/run-plan.d.ts +28 -0
  51. package/lib/run-plan.js +17 -16
  52. package/lib/settings/claude-auth.d.ts +35 -0
  53. package/lib/settings/claude-auth.js +30 -47
  54. package/lib/settings-defaults.d.ts +20 -0
  55. package/lib/settings-defaults.js +149 -0
  56. package/lib/settings-error.d.ts +7 -0
  57. package/lib/settings-error.js +8 -0
  58. package/lib/settings-issue-providers.d.ts +10 -0
  59. package/lib/settings-issue-providers.js +12 -0
  60. package/lib/settings-models.d.ts +22 -0
  61. package/lib/settings-models.js +93 -0
  62. package/lib/settings-storage.d.ts +23 -0
  63. package/lib/settings-storage.js +205 -0
  64. package/lib/settings-validation.d.ts +7 -0
  65. package/lib/settings-validation.js +182 -0
  66. package/lib/settings.d.ts +29 -0
  67. package/lib/settings.js +41 -736
  68. package/lib/setup-apply-types.d.ts +66 -0
  69. package/lib/setup-apply-types.js +2 -0
  70. package/lib/setup-apply.d.ts +39 -0
  71. package/lib/setup-apply.js +267 -264
  72. package/lib/setup-journal.d.ts +41 -0
  73. package/lib/setup-journal.js +119 -76
  74. package/lib/setup-plan-types.d.ts +102 -0
  75. package/lib/setup-plan-types.js +2 -0
  76. package/lib/setup-plan.d.ts +30 -0
  77. package/lib/setup-plan.js +300 -324
  78. package/lib/setup-undo.d.ts +44 -0
  79. package/lib/setup-undo.js +61 -74
  80. package/lib/start-cluster-config.d.ts +26 -0
  81. package/lib/start-cluster-config.js +56 -0
  82. package/lib/start-cluster-environment.d.ts +41 -0
  83. package/lib/start-cluster-environment.js +134 -0
  84. package/lib/start-cluster-run-options.d.ts +54 -0
  85. package/lib/start-cluster-run-options.js +148 -0
  86. package/lib/start-cluster.d.ts +64 -0
  87. package/lib/start-cluster.js +98 -454
  88. package/lib/stream-json-parser.d.ts +17 -0
  89. package/lib/stream-json-parser.js +51 -52
  90. package/npm-shrinkwrap.json +6 -8
  91. package/package.json +14 -8
  92. package/scripts/postinstall.js +27 -0
  93. package/scripts/rust-distribution.js +36 -45
  94. package/src/agent/agent-command-proofs-context.js +35 -45
  95. package/src/agent/agent-command-proofs-context.ts +87 -0
  96. package/src/agent/agent-config-settings.js +19 -0
  97. package/src/agent/agent-config-settings.ts +41 -0
  98. package/src/agent/agent-config.js +122 -231
  99. package/src/agent/agent-config.ts +285 -0
  100. package/src/agent/agent-context-builder.js +38 -273
  101. package/src/agent/agent-context-builder.ts +51 -0
  102. package/src/agent/agent-context-environment-sections.js +105 -0
  103. package/src/agent/agent-context-environment-sections.ts +134 -0
  104. package/src/agent/agent-context-packs.js +165 -0
  105. package/src/agent/agent-context-packs.ts +296 -0
  106. package/src/agent/agent-context-prompt-sections.js +100 -0
  107. package/src/agent/agent-context-prompt-sections.ts +148 -0
  108. package/src/agent/agent-context-sections.js +25 -334
  109. package/src/agent/agent-context-sections.ts +36 -0
  110. package/src/agent/agent-context-sources.js +96 -149
  111. package/src/agent/agent-context-sources.ts +253 -0
  112. package/src/agent/agent-context-types.js +2 -0
  113. package/src/agent/agent-context-types.ts +132 -0
  114. package/src/agent/agent-context-validation-sections.js +73 -0
  115. package/src/agent/agent-context-validation-sections.ts +129 -0
  116. package/src/agent/agent-input-injector.js +99 -118
  117. package/src/agent/agent-input-injector.ts +195 -0
  118. package/src/agent/agent-liveness-poll.js +74 -78
  119. package/src/agent/agent-liveness-poll.ts +163 -0
  120. package/src/agent/agent-quality-gate-schema.js +77 -86
  121. package/src/agent/agent-quality-gate-schema.ts +135 -0
  122. package/src/agent/agent-quality-gates-context.js +44 -50
  123. package/src/agent/agent-quality-gates-context.ts +91 -0
  124. package/src/agent/agent-stuck-detector.js +171 -239
  125. package/src/agent/agent-stuck-detector.ts +288 -0
  126. package/src/agent/agent-trigger-evaluator.js +29 -46
  127. package/src/agent/agent-trigger-evaluator.ts +98 -0
  128. package/src/agent/context-metrics.js +110 -141
  129. package/src/agent/context-metrics.ts +261 -0
  130. package/src/agent/context-pack-builder.js +72 -358
  131. package/src/agent/context-pack-builder.ts +105 -0
  132. package/src/agent/context-pack-core.js +70 -0
  133. package/src/agent/context-pack-core.ts +96 -0
  134. package/src/agent/context-pack-selection.js +119 -0
  135. package/src/agent/context-pack-selection.ts +187 -0
  136. package/src/agent/context-pack-truncation.js +139 -0
  137. package/src/agent/context-pack-truncation.ts +208 -0
  138. package/src/agent/context-pack-types.js +2 -0
  139. package/src/agent/context-pack-types.ts +98 -0
  140. package/src/agent/context-replay-policy.js +30 -39
  141. package/src/agent/context-replay-policy.ts +71 -0
  142. package/src/agent/critical-agent-policy.js +6 -10
  143. package/src/agent/critical-agent-policy.ts +20 -0
  144. package/src/agent/guidance-queue.js +74 -87
  145. package/src/agent/guidance-queue.ts +166 -0
  146. package/src/agent/output-extraction-error-detail.js +45 -0
  147. package/src/agent/output-extraction-error-detail.ts +49 -0
  148. package/src/agent/output-extraction-failures.js +125 -0
  149. package/src/agent/output-extraction-failures.ts +149 -0
  150. package/src/agent/output-extraction-json.js +234 -0
  151. package/src/agent/output-extraction-json.ts +235 -0
  152. package/src/agent/output-extraction-pi.js +124 -0
  153. package/src/agent/output-extraction-pi.ts +137 -0
  154. package/src/agent/output-extraction-types.js +2 -0
  155. package/src/agent/output-extraction-types.ts +49 -0
  156. package/src/agent/output-extraction.js +17 -617
  157. package/src/agent/output-extraction.ts +30 -0
  158. package/src/agent/output-reformatter-errors.js +83 -0
  159. package/src/agent/output-reformatter-errors.ts +106 -0
  160. package/src/agent/output-reformatter-types.js +2 -0
  161. package/src/agent/output-reformatter-types.ts +86 -0
  162. package/src/agent/output-reformatter.js +140 -185
  163. package/src/agent/output-reformatter.ts +238 -0
  164. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  165. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  166. package/src/agent/pi-terminal-lifecycle.js +186 -206
  167. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  168. package/src/agent/provider-control-plane.js +22 -21
  169. package/src/agent/provider-control-plane.ts +52 -0
  170. package/src/agent/provider-terminal-failure-types.js +2 -0
  171. package/src/agent/provider-terminal-failure-types.ts +60 -0
  172. package/src/agent/provider-terminal-failure.js +194 -191
  173. package/src/agent/provider-terminal-failure.ts +262 -0
  174. package/src/agent/rate-limit-backoff.js +31 -74
  175. package/src/agent/rate-limit-backoff.ts +71 -0
  176. package/src/agent/schema-utils.js +85 -125
  177. package/src/agent/schema-utils.ts +148 -0
  178. package/src/agent/structured-output-error.js +34 -33
  179. package/src/agent/structured-output-error.ts +105 -0
  180. package/src/agent/validation-platform.js +27 -27
  181. package/src/agent/validation-platform.ts +49 -0
  182. package/src/agents/git-pusher-template.js +17 -34
  183. package/src/attach/attach-client.js +232 -405
  184. package/src/attach/attach-client.ts +300 -0
  185. package/src/attach/attach-server-cleanup.js +43 -0
  186. package/src/attach/attach-server-cleanup.ts +39 -0
  187. package/src/attach/attach-server-clients.js +117 -0
  188. package/src/attach/attach-server-clients.ts +122 -0
  189. package/src/attach/attach-server-events.js +38 -0
  190. package/src/attach/attach-server-events.ts +36 -0
  191. package/src/attach/attach-server-pty.js +45 -0
  192. package/src/attach/attach-server-pty.ts +64 -0
  193. package/src/attach/attach-server-runtime.js +73 -0
  194. package/src/attach/attach-server-runtime.ts +62 -0
  195. package/src/attach/attach-server-socket.js +28 -0
  196. package/src/attach/attach-server-socket.ts +23 -0
  197. package/src/attach/attach-server-types.js +2 -0
  198. package/src/attach/attach-server-types.ts +82 -0
  199. package/src/attach/attach-server.js +106 -523
  200. package/src/attach/attach-server.ts +158 -0
  201. package/src/attach/index.js +18 -35
  202. package/src/attach/index.ts +18 -0
  203. package/src/attach/protocol.js +95 -184
  204. package/src/attach/protocol.ts +181 -0
  205. package/src/attach/ring-buffer.js +76 -102
  206. package/src/attach/ring-buffer.ts +109 -0
  207. package/src/attach/send-input.js +64 -75
  208. package/src/attach/send-input.ts +94 -0
  209. package/src/attach/socket-discovery.js +164 -218
  210. package/src/attach/socket-discovery.ts +230 -0
  211. package/src/attach/socket-paths.js +42 -61
  212. package/src/attach/socket-paths.ts +81 -0
  213. package/src/claude-credentials.js +51 -54
  214. package/src/claude-credentials.ts +89 -0
  215. package/src/cluster/generated/protocol-schema.ts +1 -1
  216. package/src/cluster/generated/protocol.ts +2 -1
  217. package/src/command-proofs.js +110 -141
  218. package/src/command-proofs.ts +216 -0
  219. package/src/config-router.js +81 -73
  220. package/src/config-router.ts +131 -0
  221. package/src/copy-containment.js +191 -0
  222. package/src/copy-containment.ts +259 -0
  223. package/src/copy-worker.js +53 -30
  224. package/src/copy-worker.ts +88 -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/isolation-manager.js +59 -20
  232. package/src/ledger-sequence.js +45 -48
  233. package/src/ledger-sequence.ts +63 -0
  234. package/src/legacy-lib/clusters-registry.ts +40 -0
  235. package/src/legacy-lib/completion.ts +148 -0
  236. package/src/legacy-lib/compose-utils.ts +102 -0
  237. package/src/legacy-lib/detached-startup.ts +451 -0
  238. package/src/legacy-lib/docker-config.ts +282 -0
  239. package/src/legacy-lib/docker-env-auth.ts +116 -0
  240. package/src/legacy-lib/git-remote-utils.ts +244 -0
  241. package/src/legacy-lib/id-detector.ts +57 -0
  242. package/src/legacy-lib/js-yaml.d.ts +3 -0
  243. package/src/legacy-lib/omelette.d.ts +15 -0
  244. package/src/legacy-lib/path-check.ts +89 -0
  245. package/src/legacy-lib/process-liveness.ts +36 -0
  246. package/src/legacy-lib/provider-credential-path.ts +57 -0
  247. package/src/legacy-lib/provider-defaults.ts +114 -0
  248. package/src/legacy-lib/provider-detection.ts +67 -0
  249. package/src/legacy-lib/provider-names.ts +126 -0
  250. package/src/legacy-lib/repo-settings.ts +88 -0
  251. package/src/legacy-lib/run-mode.ts +58 -0
  252. package/src/legacy-lib/run-plan.ts +49 -0
  253. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  254. package/src/legacy-lib/settings-defaults.ts +212 -0
  255. package/src/legacy-lib/settings-error.ts +8 -0
  256. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  257. package/src/legacy-lib/settings-models.ts +124 -0
  258. package/src/legacy-lib/settings-storage.ts +277 -0
  259. package/src/legacy-lib/settings-validation.ts +220 -0
  260. package/src/legacy-lib/settings.ts +87 -0
  261. package/src/legacy-lib/setup-apply-types.ts +70 -0
  262. package/src/legacy-lib/setup-apply.ts +456 -0
  263. package/src/legacy-lib/setup-journal.ts +185 -0
  264. package/src/legacy-lib/setup-plan-types.ts +96 -0
  265. package/src/legacy-lib/setup-plan.ts +500 -0
  266. package/src/legacy-lib/setup-undo.ts +142 -0
  267. package/src/legacy-lib/start-cluster-config.ts +124 -0
  268. package/src/legacy-lib/start-cluster-environment.ts +166 -0
  269. package/src/legacy-lib/start-cluster-run-options.ts +281 -0
  270. package/src/legacy-lib/start-cluster.ts +237 -0
  271. package/src/legacy-lib/stream-json-parser.ts +88 -0
  272. package/src/message-buffer.js +55 -71
  273. package/src/message-buffer.ts +107 -0
  274. package/src/message-bus-bridge.js +92 -133
  275. package/src/message-bus-bridge.ts +149 -0
  276. package/src/name-generator-shared.js +220 -0
  277. package/src/name-generator-shared.ts +231 -0
  278. package/src/name-generator.js +8 -217
  279. package/src/name-generator.ts +27 -0
  280. package/src/omp-blob-root.js +83 -64
  281. package/src/omp-blob-root.ts +116 -0
  282. package/src/omp-config-overlay.js +65 -38
  283. package/src/omp-config-overlay.ts +110 -0
  284. package/src/omp-execution-fingerprint.js +38 -43
  285. package/src/omp-execution-fingerprint.ts +92 -0
  286. package/src/omp-session-limits.js +10 -15
  287. package/src/omp-session-limits.ts +53 -0
  288. package/src/omp-session-partition.js +2 -2
  289. package/src/omp-session-verifier.js +1 -1
  290. package/src/orchestrator.js +32 -7
  291. package/src/pr-body-template.js +71 -0
  292. package/src/providers/anthropic/index.js +3 -1
  293. package/src/providers/anthropic/index.ts +13 -0
  294. package/src/providers/capabilities.js +19 -27
  295. package/src/providers/capabilities.ts +44 -0
  296. package/src/providers/google/index.js +3 -1
  297. package/src/providers/google/index.ts +13 -0
  298. package/src/providers/openai/index.js +3 -1
  299. package/src/providers/openai/index.ts +13 -0
  300. package/src/providers/opencode/index.js +3 -1
  301. package/src/providers/opencode/index.ts +13 -0
  302. package/src/quality-gates.js +67 -127
  303. package/src/quality-gates.ts +149 -0
  304. package/src/repo-settings-access.js +40 -0
  305. package/src/repo-settings-access.ts +64 -0
  306. package/src/schemas/sub-cluster.js +127 -183
  307. package/src/schemas/sub-cluster.ts +238 -0
  308. package/src/state-snapshot-normalization.js +224 -0
  309. package/src/state-snapshot-normalization.ts +222 -0
  310. package/src/state-snapshot.js +192 -359
  311. package/src/state-snapshot.ts +291 -0
  312. package/src/state-snapshotter.js +118 -130
  313. package/src/state-snapshotter.ts +167 -0
  314. package/src/sub-cluster-wrapper.js +4 -13
  315. package/src/task-run-model-args.js +87 -124
  316. package/src/task-run-model-args.ts +204 -0
  317. package/src/task-runner.js +5 -25
  318. package/src/task-runner.ts +28 -0
  319. package/src/task-startup-error.js +73 -58
  320. package/src/task-startup-error.ts +126 -0
  321. package/src/template-validation/consensus-gate-contracts.js +2 -0
  322. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  323. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  324. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  325. package/src/template-validation/consensus-gate-stage.js +34 -0
  326. package/src/template-validation/consensus-gate-stage.ts +56 -0
  327. package/src/template-validation/random-topology-contracts.js +2 -0
  328. package/src/template-validation/random-topology-contracts.ts +54 -0
  329. package/src/template-validation/random-topology-dispatch.js +25 -0
  330. package/src/template-validation/random-topology-dispatch.ts +33 -0
  331. package/src/template-validation/random-topology-message-loop.js +53 -0
  332. package/src/template-validation/random-topology-message-loop.ts +73 -0
  333. package/src/template-validation/random-topology-operations.js +79 -0
  334. package/src/template-validation/random-topology-operations.ts +101 -0
  335. package/src/template-validation/random-topology-runtime.js +25 -0
  336. package/src/template-validation/random-topology-runtime.ts +43 -0
  337. package/src/template-validation/random-topology-scenario.js +52 -0
  338. package/src/template-validation/random-topology-scenario.ts +57 -0
  339. package/src/template-validation/random-topology-schema.js +159 -0
  340. package/src/template-validation/random-topology-schema.ts +190 -0
  341. package/src/template-validation/random-topology-state.js +28 -0
  342. package/src/template-validation/random-topology-state.ts +30 -0
  343. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  344. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  345. package/src/template-validation/random-topology-trigger.js +75 -0
  346. package/src/template-validation/random-topology-trigger.ts +88 -0
  347. package/src/template-validation/report-formatter.js +40 -46
  348. package/src/template-validation/report-formatter.ts +101 -0
  349. package/src/template-validation/simulate-consensus-gates.js +111 -302
  350. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  351. package/src/template-validation/simulate-random-topology.js +26 -519
  352. package/src/template-validation/simulate-random-topology.ts +57 -0
  353. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  354. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  355. package/src/template-validation/simulation-agent-runtime.js +25 -0
  356. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  357. package/src/template-validation/simulation-agent.js +29 -0
  358. package/src/template-validation/simulation-agent.ts +73 -0
  359. package/src/template-validation/simulation-runtime.js +34 -0
  360. package/src/template-validation/simulation-runtime.ts +72 -0
  361. package/src/template-validation/two-stage-contracts.js +2 -0
  362. package/src/template-validation/two-stage-contracts.ts +41 -0
  363. package/src/template-validation/two-stage-inputs.js +21 -0
  364. package/src/template-validation/two-stage-inputs.ts +29 -0
  365. package/src/template-validation/two-stage-results.js +30 -0
  366. package/src/template-validation/two-stage-results.ts +40 -0
  367. package/src/template-validation/two-stage-scenario.js +86 -0
  368. package/src/template-validation/two-stage-scenario.ts +120 -0
  369. package/src/worktree-claude-config.js +182 -220
  370. package/src/worktree-claude-config.ts +272 -0
  371. package/src/worktree-tooling-env.js +103 -125
  372. package/src/worktree-tooling-env.ts +142 -0
  373. package/task-lib/completion.js +2 -3
  374. package/task-lib/completion.ts +9 -0
  375. package/task-lib/config.js +1 -4
  376. package/task-lib/config.ts +11 -0
  377. package/task-lib/name-generator.js +4 -226
  378. package/task-lib/name-generator.ts +11 -0
  379. package/task-lib/omp-session-cleanup.js +1 -1
  380. package/task-lib/omp-storage-root.js +8 -12
  381. package/task-lib/omp-storage-root.ts +62 -0
  382. package/task-lib/process-termination.js +143 -166
  383. package/task-lib/process-termination.ts +268 -0
@@ -0,0 +1,64 @@
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
+ interface ProviderOverrideOptions {
12
+ provider?: string | null;
13
+ envProvider?: string | null;
14
+ validateProvider?: unknown;
15
+ }
16
+ interface StartClusterArgs extends Record<string, unknown> {
17
+ orchestrator?: OrchestratorFacade;
18
+ config?: ClusterConfig | null;
19
+ configPath?: string | null;
20
+ configName?: string | null;
21
+ settings?: Settings;
22
+ providerOverride?: string | null;
23
+ modelOverride?: unknown;
24
+ forceProvider?: unknown;
25
+ clusterId?: unknown;
26
+ options?: Record<string, unknown>;
27
+ text: string;
28
+ issue: string;
29
+ file: string;
30
+ }
31
+ declare function buildTextInput(text: string): ClusterInput;
32
+ declare function buildIssueInput(issue: string): ClusterInput;
33
+ declare function buildFileInput(file: string): ClusterInput;
34
+ declare function detectRunInput(inputArg: string, settings?: Settings, forceProvider?: string | null): ClusterInput;
35
+ declare function isStdinInput(inputArg: string): boolean;
36
+ declare function readStdinText(stream?: AsyncIterable<string | Uint8Array>): Promise<string>;
37
+ declare function encodeStdinEnv(text: string): string;
38
+ declare function decodeStdinEnv(value: string): string;
39
+ declare function resolveProviderOverride(options?: ProviderOverrideOptions): string | null;
40
+ declare function startClusterFromText(args: StartClusterArgs): unknown;
41
+ declare function startClusterFromIssue(args: StartClusterArgs): unknown;
42
+ declare function startClusterFromFile(args: StartClusterArgs): unknown;
43
+ declare const _default: {
44
+ buildTextInput: typeof buildTextInput;
45
+ buildIssueInput: typeof buildIssueInput;
46
+ buildFileInput: typeof buildFileInput;
47
+ detectRunInput: typeof detectRunInput;
48
+ isStdinInput: typeof isStdinInput;
49
+ readStdinText: typeof readStdinText;
50
+ encodeStdinEnv: typeof encodeStdinEnv;
51
+ decodeStdinEnv: typeof decodeStdinEnv;
52
+ resolveProviderOverride: typeof resolveProviderOverride;
53
+ resolveConfigPath: (configName: string) => string;
54
+ prepareClusterConfig: (config: ClusterConfig, settings?: Settings, providerOverride?: string | null) => ClusterConfig;
55
+ loadClusterConfig: (orchestrator: OrchestratorFacade, configPath: string, settings?: Settings, providerOverride?: string | null) => ClusterConfig;
56
+ buildStartOptions: (args: Record<string, unknown>) => unknown;
57
+ buildTrustedStartOptions: (args: Record<string, unknown>) => unknown;
58
+ resolveEffectiveRunPlan: (options?: Record<string, unknown>, settings?: Settings) => unknown;
59
+ startClusterFromText: typeof startClusterFromText;
60
+ startClusterFromIssue: typeof startClusterFromIssue;
61
+ startClusterFromFile: typeof startClusterFromFile;
62
+ detectGitRepoRoot: () => string;
63
+ };
64
+ export = _default;
@@ -1,485 +1,129 @@
1
- const path = require('path');
2
- const { spawnSync } = require('child_process');
3
- const chalk = require('chalk');
4
- const { normalizeProviderName, getDefaultProviderId } = require('./provider-names');
5
- const { getProvider } = require('../src/providers');
6
- const { detectProvider } = require('../src/issue-providers');
7
- const TemplateResolver = require('../src/template-resolver');
8
- const { runModeFromPlan } = require('./run-mode');
9
- const { resolveRunPlan } = require('./run-plan');
10
-
11
- const PACKAGE_ROOT = path.resolve(__dirname, '..');
12
-
13
- function firstTruthy(...values) {
14
- return values.find(Boolean);
15
- }
16
- function anyTruthy(...values) {
17
- return values.some(Boolean);
18
- }
19
- function optionalValue(value) {
20
- return value || undefined;
21
- }
22
- function resolveTargetCwd() {
23
- return firstTruthy(process.env.ZEROSHOT_CWD, detectGitRepoRoot());
24
- }
25
-
26
- function detectGitRepoRoot() {
27
- try {
28
- const result = spawnSync('git', ['rev-parse', '--show-toplevel'], {
29
- encoding: 'utf8',
30
- stdio: ['pipe', 'pipe', 'pipe'],
31
- });
32
- if (result.status !== 0) {
33
- return process.cwd();
34
- }
35
- return result.stdout.trim();
36
- } catch {
37
- return process.cwd();
38
- }
39
- }
40
-
41
- function resolveOptionalString(value) {
42
- if (typeof value !== 'string') return undefined;
43
- const trimmed = value.trim();
44
- return trimmed.length > 0 ? trimmed : undefined;
45
- }
46
-
47
- function resolveEnvBool(value) {
48
- if (typeof value !== 'string') return undefined;
49
- const trimmed = value.trim().toLowerCase();
50
- if (trimmed === '1' || trimmed === 'true' || trimmed === 'yes') return true;
51
- if (trimmed === '0' || trimmed === 'false' || trimmed === 'no') return false;
52
- return undefined;
53
- }
54
-
55
- function resolveCloseIssueMode(value) {
56
- const trimmed = resolveOptionalString(value);
57
- if (!trimmed) return undefined;
58
- const normalized = trimmed.toLowerCase();
59
- if (normalized === 'auto' || normalized === 'always' || normalized === 'never') {
60
- return normalized;
61
- }
62
- return undefined;
63
- }
64
-
65
- function parseRunOptionsEnv() {
66
- const raw = resolveOptionalString(process.env.ZEROSHOT_RUN_OPTIONS);
67
- if (!raw) return null;
68
- try {
69
- const parsed = JSON.parse(raw);
70
- if (!parsed || typeof parsed !== 'object') {
71
- return null;
72
- }
73
- return parsed;
74
- } catch {
75
- return null;
76
- }
77
- }
78
-
79
- function parseMountSpecs(specs) {
80
- return specs.map((spec) => {
81
- const parts = spec.split(':');
82
- if (parts.length < 2) {
83
- throw new Error(`Invalid mount spec: "${spec}". Format: host:container[:ro]`);
84
- }
85
- const host = parts[0];
86
- const container = parts[1];
87
- const readonly = parts[2] === 'ro';
88
- return { host, container, readonly };
89
- });
90
- }
91
-
1
+ "use strict";
2
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
3
+ const providerNames = require('./provider-names');
4
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
5
+ const providers = require('../src/providers');
6
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
7
+ const issueProviders = require('../src/issue-providers');
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
9
+ const configHelpers = require('./start-cluster-config');
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
11
+ const runOptionsHelpers = require('./start-cluster-run-options');
12
+ const { normalizeProviderName } = providerNames;
13
+ const { getProvider } = providers;
14
+ const { detectProvider } = issueProviders;
15
+ const { resolveConfigPath, prepareClusterConfig, loadClusterConfig } = configHelpers;
16
+ const { buildStartOptions, buildTrustedStartOptions, resolveEffectiveRunPlan, detectGitRepoRoot } = runOptionsHelpers;
92
17
  function buildTextInput(text) {
93
- return { text };
18
+ return { text };
94
19
  }
95
20
  function buildIssueInput(issue) {
96
- return { issue };
21
+ return { issue };
97
22
  }
98
23
  function buildFileInput(file) {
99
- return { file };
24
+ return { file };
100
25
  }
101
-
102
26
  function detectRunInput(inputArg, settings = {}, forceProvider = null) {
103
- const isMarkdownFile = /\.(md|markdown)$/i.test(inputArg);
104
- if (isMarkdownFile) {
105
- return buildFileInput(inputArg);
106
- }
107
-
108
- const ProviderClass = detectProvider(inputArg, settings, forceProvider);
109
- if (ProviderClass) {
110
- return buildIssueInput(inputArg);
111
- }
112
-
113
- return buildTextInput(inputArg);
27
+ const isMarkdownFile = /\.(md|markdown)$/i.test(inputArg);
28
+ if (isMarkdownFile) {
29
+ return buildFileInput(inputArg);
30
+ }
31
+ const ProviderClass = detectProvider(inputArg, settings, forceProvider);
32
+ if (ProviderClass) {
33
+ return buildIssueInput(inputArg);
34
+ }
35
+ return buildTextInput(inputArg);
114
36
  }
115
-
116
37
  const STDIN_MARKER = '-';
117
-
118
38
  function isStdinInput(inputArg) {
119
- return inputArg === STDIN_MARKER;
39
+ return inputArg === STDIN_MARKER;
120
40
  }
121
-
122
41
  async function readStdinText(stream = process.stdin) {
123
- const chunks = [];
124
- for await (const chunk of stream) {
125
- chunks.push(chunk);
126
- }
127
- return Buffer.concat(chunks.map((chunk) => (Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))))
128
- .toString('utf8')
129
- .trim();
42
+ const chunks = [];
43
+ for await (const chunk of stream) {
44
+ chunks.push(chunk);
45
+ }
46
+ return Buffer.concat(chunks.map((chunk) => (Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))))
47
+ .toString('utf8')
48
+ .trim();
130
49
  }
131
-
132
50
  function encodeStdinEnv(text) {
133
- return Buffer.from(text, 'utf8').toString('base64');
51
+ return Buffer.from(text, 'utf8').toString('base64');
134
52
  }
135
-
136
53
  function decodeStdinEnv(value) {
137
- return Buffer.from(value, 'base64').toString('utf8');
54
+ return Buffer.from(value, 'base64').toString('utf8');
138
55
  }
139
-
140
56
  function resolveProviderOverride(options = {}) {
141
- const override = options.provider || options.envProvider || process.env.ZEROSHOT_PROVIDER;
142
- if (!override || (typeof override === 'string' && !override.trim())) {
143
- return null;
144
- }
145
- const normalized = normalizeProviderName(override);
146
- if (options.validateProvider) {
147
- getProvider(normalized);
148
- }
149
- return normalized;
150
- }
151
-
152
- function resolveConfigPath(configName) {
153
- if (path.isAbsolute(configName) || configName.startsWith('./') || configName.startsWith('../')) {
154
- return path.resolve(process.cwd(), configName);
155
- }
156
- if (configName.endsWith('.json')) {
157
- return path.join(PACKAGE_ROOT, 'cluster-templates', configName);
158
- }
159
- return path.join(PACKAGE_ROOT, 'cluster-templates', `${configName}.json`);
160
- }
161
-
162
- function ensureConfigProviderDefaults(config, settings) {
163
- if (!config.defaultProvider) {
164
- config.defaultProvider = settings.defaultProvider || getDefaultProviderId();
165
- }
166
- config.defaultProvider = normalizeProviderName(config.defaultProvider) || getDefaultProviderId();
167
- }
168
-
169
- function applyProviderOverrideToConfig(config, providerOverride, settings) {
170
- const provider = getProvider(providerOverride);
171
- const providerSettings = settings.providerSettings?.[providerOverride] || {};
172
- config.forceProvider = providerOverride;
173
- config.defaultProvider = providerOverride;
174
- config.forceLevel = providerSettings.defaultLevel || provider.getDefaultLevel();
175
- config.defaultLevel = config.forceLevel;
176
- console.log(chalk.dim(`Provider override: ${providerOverride} (all agents)`));
177
- }
178
-
179
- function resolveParameterizedConfigFile(config) {
180
- if (!config?.params || Object.keys(config.params).length === 0) {
181
- return config;
182
- }
183
-
184
- const resolver = new TemplateResolver(path.join(PACKAGE_ROOT, 'cluster-templates'));
185
- return resolver.resolveTemplate(config, {});
186
- }
187
-
188
- function prepareClusterConfig(config, settings = {}, providerOverride) {
189
- const prepared = resolveParameterizedConfigFile(config);
190
- ensureConfigProviderDefaults(prepared, settings);
191
- if (providerOverride) {
192
- applyProviderOverrideToConfig(prepared, providerOverride, settings);
193
- }
194
- return prepared;
195
- }
196
-
197
- function loadClusterConfig(orchestrator, configPath, settings = {}, providerOverride) {
198
- return prepareClusterConfig(orchestrator.loadConfig(configPath), settings, providerOverride);
199
- }
200
-
201
- const RUN_MODE_KEYS = ['docker', 'worktree', 'pr', 'ship', 'noIsolation', 'isolation'];
202
-
203
- function hasExplicitRunMode(options) {
204
- return RUN_MODE_KEYS.some(
205
- (key) => options[key] === true || (key === 'isolation' && options[key] === false)
206
- );
207
- }
208
-
209
- function mergeRunOptions(options) {
210
- const envRunOptions = parseRunOptionsEnv();
211
- if (!envRunOptions) return options;
212
- if (!hasExplicitRunMode(options)) return { ...envRunOptions, ...options };
213
- const withoutEnvMode = { ...envRunOptions };
214
- for (const key of RUN_MODE_KEYS) delete withoutEnvMode[key];
215
- return { ...withoutEnvMode, ...options };
216
- }
217
-
218
- function validateSavedRunModes(settings) {
219
- const isolation = settings.defaultIsolation || 'none';
220
- const delivery = settings.defaultDelivery || 'none';
221
- if (!['none', 'worktree', 'docker'].includes(isolation)) {
222
- throw new Error(`Invalid saved isolation mode: ${isolation}`);
223
- }
224
- if (!['none', 'pr', 'ship'].includes(delivery)) {
225
- throw new Error(`Invalid saved delivery mode: ${delivery}`);
226
- }
227
- return { isolation, delivery };
228
- }
229
-
230
- function resolveEffectiveIsolation(options, savedIsolation) {
231
- if (options.noIsolation === true || options.isolation === false) return 'none';
232
- if (options.docker === true) return 'docker';
233
- if (options.worktree === true || options.pr === true || options.ship === true) return 'worktree';
234
- if (resolveEnvBool(process.env.ZEROSHOT_DOCKER) === true) return 'docker';
235
- if (resolveEnvBool(process.env.ZEROSHOT_WORKTREE) === true) return 'worktree';
236
- return savedIsolation;
237
- }
238
-
239
- function resolveEffectiveDelivery(options, savedDelivery) {
240
- if (options.ship === true || options.autoMerge === true) return 'ship';
241
- if (options.pr === true || resolveEnvBool(process.env.ZEROSHOT_PR) === true) return 'pr';
242
- return savedDelivery;
243
- }
244
-
245
- function resolveEffectiveRunPlan(options = {}, settings = {}) {
246
- const mergedOptions = mergeRunOptions(options);
247
- const noIsolation = mergedOptions.noIsolation === true || mergedOptions.isolation === false;
248
- const conflicts = ['docker', 'worktree', 'pr', 'ship'].filter(
249
- (key) => mergedOptions[key] === true
250
- );
251
- if (noIsolation && conflicts.length > 0) {
252
- throw new Error(`--no-isolation conflicts with --${conflicts.join(', --')}`);
253
- }
254
-
255
- const saved = validateSavedRunModes(settings);
256
- let isolation = resolveEffectiveIsolation(mergedOptions, saved.isolation);
257
- const delivery = resolveEffectiveDelivery(mergedOptions, saved.delivery);
258
- if (delivery !== 'none' && isolation === 'none') {
259
- if (noIsolation) {
260
- throw new Error(`--no-isolation conflicts with saved delivery mode "${delivery}"`);
57
+ const override = options.provider || options.envProvider || process.env.ZEROSHOT_PROVIDER;
58
+ if (!override || !override.trim()) {
59
+ return null;
261
60
  }
262
- isolation = 'worktree';
263
- }
264
- return resolveRunPlan({
265
- docker: isolation === 'docker',
266
- worktree: isolation === 'worktree',
267
- pr: delivery === 'pr',
268
- ship: delivery === 'ship',
269
- });
270
- }
271
-
272
- function resolveMergeQueue(mergedOptions) {
273
- if (typeof mergedOptions.mergeQueue === 'boolean') {
274
- return mergedOptions.mergeQueue;
275
- }
276
- return resolveEnvBool(process.env.ZEROSHOT_MERGE_QUEUE);
277
- }
278
-
279
- function resolvePrBase(mergedOptions) {
280
- return (
281
- resolveOptionalString(mergedOptions.prBase) ||
282
- resolveOptionalString(process.env.ZEROSHOT_PR_BASE) ||
283
- undefined
284
- );
285
- }
286
-
287
- function resolveCloseIssue(mergedOptions) {
288
- return (
289
- resolveCloseIssueMode(mergedOptions.closeIssue) ||
290
- resolveCloseIssueMode(process.env.ZEROSHOT_CLOSE_ISSUE) ||
291
- undefined
292
- );
293
- }
294
-
295
- function resolveMounts(mergedOptions) {
296
- return mergedOptions.mount ? parseMountSpecs(mergedOptions.mount) : undefined;
297
- }
298
-
299
- function buildStartOptions({
300
- clusterId,
301
- options = {},
302
- settings = {},
303
- providerOverride,
304
- modelOverride,
305
- forceProvider,
306
- }) {
307
- const mergedOptions = mergeRunOptions(options);
308
- const plan = resolveEffectiveRunPlan(options, settings);
309
- return buildStartOptionsFromPlan({
310
- clusterId,
311
- plan,
312
- options: mergedOptions,
313
- settings,
314
- providerOverride,
315
- modelOverride,
316
- forceProvider,
317
- environment: true,
318
- });
319
- }
320
-
321
- function buildStartOptionsFromPlan({
322
- clusterId,
323
- plan,
324
- options,
325
- settings,
326
- providerOverride,
327
- modelOverride,
328
- forceProvider,
329
- preparedWorktree,
330
- environment,
331
- }) {
332
- const targetCwd = environment ? resolveTargetCwd() : options.cwd;
333
- return Object.freeze({
334
- clusterId,
335
- cwd: targetCwd,
336
- isolation: plan.isolation === 'docker',
337
- isolationImage: environment
338
- ? firstTruthy(options.dockerImage, process.env.ZEROSHOT_DOCKER_IMAGE)
339
- : optionalValue(options.dockerImage),
340
- worktree: plan.isolation === 'worktree',
341
- preparedWorktree: preparedWorktree || undefined,
342
- autoPr: plan.delivery !== 'none',
343
- autoMerge: plan.autoMerge,
344
- autoPush: environment ? process.env.ZEROSHOT_PUSH === '1' : options.autoPush === true,
345
- modelOverride: optionalValue(modelOverride),
346
- providerOverride: optionalValue(providerOverride),
347
- noMounts: anyTruthy(options.mounts === false, options.noMounts === true),
348
- mounts: resolveMounts(options),
349
- containerHome: optionalValue(options.containerHome),
350
- forceProvider: optionalValue(forceProvider),
351
- prBase: environment ? resolvePrBase(options) : optionalValue(options.prBase),
352
- mergeQueue: environment ? resolveMergeQueue(options) : optionalValue(options.mergeQueue),
353
- closeIssue: environment ? resolveCloseIssue(options) : optionalValue(options.closeIssue),
354
- ship: plan.delivery === 'ship',
355
- runMode: runModeFromPlan(plan),
356
- requiredQualityGates: options.requiredQualityGates,
357
- settings,
358
- });
359
- }
360
-
361
- /**
362
- * Build start options from a registry-owned canonical plan. Unlike the CLI
363
- * builder, this function never reads ZEROSHOT_RUN_OPTIONS or mode-related
364
- * environment variables. The caller must resolve and validate the deployment
365
- * profile before invoking it.
366
- */
367
- function buildTrustedStartOptions({
368
- clusterId,
369
- plan,
370
- options = {},
371
- settings = {},
372
- providerOverride,
373
- modelOverride,
374
- forceProvider,
375
- }) {
376
- if (!plan || !Object.isFrozen(plan)) {
377
- throw new Error('Trusted start requires a frozen canonical run plan');
378
- }
379
- const canonical = resolveRunPlan({
380
- docker: plan.isolation === 'docker',
381
- worktree: plan.isolation === 'worktree',
382
- pr: plan.delivery === 'pr',
383
- ship: plan.delivery === 'ship',
384
- });
385
- if (
386
- canonical.isolation !== plan.isolation ||
387
- canonical.delivery !== plan.delivery ||
388
- canonical.autoMerge !== plan.autoMerge
389
- ) {
390
- throw new Error('Trusted start plan is not canonical');
391
- }
392
- if (canonical.isolation === 'none') {
393
- throw new Error('Trusted worker start requires worktree or docker isolation');
394
- }
395
- if (options.preparedWorktree && canonical.isolation !== 'worktree') {
396
- throw new Error('Prepared worktree requires canonical worktree isolation');
397
- }
398
- return buildStartOptionsFromPlan({
399
- clusterId,
400
- plan: canonical,
401
- options,
402
- settings,
403
- providerOverride,
404
- modelOverride,
405
- forceProvider,
406
- preparedWorktree: options.preparedWorktree,
407
- environment: false,
408
- });
61
+ const normalized = normalizeProviderName(override);
62
+ if (options.validateProvider) {
63
+ getProvider(normalized);
64
+ }
65
+ return normalized;
409
66
  }
410
-
411
- function resolveConfigOrThrow({
412
- orchestrator,
413
- config,
414
- configPath,
415
- configName,
416
- settings,
417
- providerOverride,
418
- }) {
419
- if (config) {
420
- return config;
421
- }
422
- const resolvedPath = configPath || (configName ? resolveConfigPath(configName) : null);
423
- if (!resolvedPath) {
424
- throw new Error('configPath or configName is required when config is not provided');
425
- }
426
- return loadClusterConfig(orchestrator, resolvedPath, settings, providerOverride);
67
+ function resolveConfigOrThrow({ orchestrator, config, configPath, configName, settings, providerOverride, }) {
68
+ if (config) {
69
+ return config;
70
+ }
71
+ const resolvedPath = configPath || (configName ? resolveConfigPath(configName) : null);
72
+ if (!resolvedPath) {
73
+ throw new Error('configPath or configName is required when config is not provided');
74
+ }
75
+ return loadClusterConfig(orchestrator, resolvedPath, settings, providerOverride);
427
76
  }
428
-
429
77
  function startClusterWithInput(args, input) {
430
- const { orchestrator, config, configPath, configName, settings, providerOverride } = args;
431
- if (!orchestrator) {
432
- throw new Error('orchestrator is required');
433
- }
434
- const resolvedConfig = resolveConfigOrThrow({
435
- orchestrator,
436
- config,
437
- configPath,
438
- configName,
439
- settings,
440
- providerOverride,
441
- });
442
- const startOptions = buildStartOptions({
443
- clusterId: args.clusterId,
444
- options: args.options || {},
445
- settings,
446
- providerOverride,
447
- modelOverride: args.modelOverride,
448
- forceProvider: args.forceProvider,
449
- });
450
- return orchestrator.start(resolvedConfig, input, startOptions);
78
+ const { orchestrator, config, configPath, configName, settings, providerOverride } = args;
79
+ if (!orchestrator) {
80
+ throw new Error('orchestrator is required');
81
+ }
82
+ const resolvedConfig = resolveConfigOrThrow({
83
+ orchestrator,
84
+ config,
85
+ configPath,
86
+ configName,
87
+ settings,
88
+ providerOverride,
89
+ });
90
+ const startOptions = buildStartOptions({
91
+ clusterId: args.clusterId,
92
+ options: args.options || {},
93
+ settings,
94
+ providerOverride,
95
+ modelOverride: args.modelOverride,
96
+ forceProvider: args.forceProvider,
97
+ });
98
+ return orchestrator.start(resolvedConfig, input, startOptions);
451
99
  }
452
-
453
100
  function startClusterFromText(args) {
454
- return startClusterWithInput(args, buildTextInput(args.text));
101
+ return startClusterWithInput(args, buildTextInput(args.text));
455
102
  }
456
-
457
103
  function startClusterFromIssue(args) {
458
- return startClusterWithInput(args, buildIssueInput(args.issue));
104
+ return startClusterWithInput(args, buildIssueInput(args.issue));
459
105
  }
460
-
461
106
  function startClusterFromFile(args) {
462
- return startClusterWithInput(args, buildFileInput(args.file));
107
+ return startClusterWithInput(args, buildFileInput(args.file));
463
108
  }
464
-
465
109
  module.exports = {
466
- buildTextInput,
467
- buildIssueInput,
468
- buildFileInput,
469
- detectRunInput,
470
- isStdinInput,
471
- readStdinText,
472
- encodeStdinEnv,
473
- decodeStdinEnv,
474
- resolveProviderOverride,
475
- resolveConfigPath,
476
- prepareClusterConfig,
477
- loadClusterConfig,
478
- buildStartOptions,
479
- buildTrustedStartOptions,
480
- resolveEffectiveRunPlan,
481
- startClusterFromText,
482
- startClusterFromIssue,
483
- startClusterFromFile,
484
- detectGitRepoRoot,
110
+ buildTextInput,
111
+ buildIssueInput,
112
+ buildFileInput,
113
+ detectRunInput,
114
+ isStdinInput,
115
+ readStdinText,
116
+ encodeStdinEnv,
117
+ decodeStdinEnv,
118
+ resolveProviderOverride,
119
+ resolveConfigPath,
120
+ prepareClusterConfig,
121
+ loadClusterConfig,
122
+ buildStartOptions,
123
+ buildTrustedStartOptions,
124
+ resolveEffectiveRunPlan,
125
+ startClusterFromText,
126
+ startClusterFromIssue,
127
+ startClusterFromFile,
128
+ detectGitRepoRoot,
485
129
  };
@@ -0,0 +1,17 @@
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
+ type ParsedEvent = Readonly<Record<string, unknown>>;
7
+ type ProviderEvent = ParsedEvent | ParsedEvent[] | null;
8
+ interface ProviderParser {
9
+ parseEvent(line: string): ProviderEvent;
10
+ }
11
+ declare function parseEvent(line: unknown, providerParsers?: readonly ProviderParser[]): ProviderEvent;
12
+ declare function parseChunk(chunk: unknown): ParsedEvent[];
13
+ declare const _default: {
14
+ parseEvent: typeof parseEvent;
15
+ parseChunk: typeof parseChunk;
16
+ };
17
+ export = _default;