@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
@@ -1847,16 +1847,31 @@ class Orchestrator {
1847
1847
  },
1848
1848
  },
1849
1849
  });
1850
+ const boundary = this._clusterRunBoundaries.get(clusterId);
1851
+ const complete = messageBus.query({
1852
+ cluster_id: clusterId,
1853
+ topic: 'CLUSTER_COMPLETE',
1854
+ limit: 1,
1855
+ ...(boundary === null || boundary === undefined ? {} : { afterId: boundary }),
1856
+ })[0];
1857
+ const failed = this._findCurrentRunClusterFailure(messageBus, clusterId);
1858
+ if (!complete && !failed) {
1859
+ messageBus.publish({
1860
+ cluster_id: clusterId,
1861
+ topic: 'CLUSTER_FAILED',
1862
+ sender: 'orchestrator',
1863
+ content: {
1864
+ text: `Operation chain failed: ${err.message}`,
1865
+ data: { reason: 'cluster_operations_failed' },
1866
+ },
1867
+ });
1868
+ }
1850
1869
 
1851
1870
  this._log(`\n${'='.repeat(80)}`);
1852
1871
  this._log(`❌ CLUSTER_OPERATIONS FAILED - STOPPING CLUSTER`);
1853
1872
  this._log(`${'='.repeat(80)}`);
1854
1873
  this._log(`Error: ${err.message}`);
1855
1874
  this._log(`${'='.repeat(80)}\n`);
1856
-
1857
- this.stop(clusterId).catch((stopErr) => {
1858
- console.error(`Failed to stop cluster after operation failure:`, stopErr.message);
1859
- });
1860
1875
  });
1861
1876
  });
1862
1877
  }
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
3
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1
4
  const { createProviderClass } = require('..');
2
-
3
5
  module.exports = createProviderClass('claude');
@@ -0,0 +1,13 @@
1
+ interface ProviderConstructor {
2
+ new (): { readonly name: string };
3
+ }
4
+
5
+ interface ProvidersFacade {
6
+ createProviderClass(name: string): ProviderConstructor;
7
+ }
8
+
9
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
11
+ const { createProviderClass }: ProvidersFacade = require('..');
12
+
13
+ export = createProviderClass('claude');
@@ -1,33 +1,25 @@
1
- const {
2
- PROVIDER_CAPABILITIES,
3
- normalizeProviderName,
4
- providerSupportsCapability,
5
- } = require('../../lib/provider-names');
6
-
7
- const CAPABILITIES = Object.freeze(
8
- Object.fromEntries(
9
- Object.entries(PROVIDER_CAPABILITIES).map(([provider, capabilities]) => [
10
- provider,
11
- Object.freeze({ ...capabilities }),
12
- ])
13
- )
14
- );
15
-
1
+ "use strict";
2
+ // The generated CommonJS facade resolves the built provider registry through lib/.
3
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
4
+ const { PROVIDER_CAPABILITIES, normalizeProviderName, providerSupportsCapability } = require('../../lib/provider-names');
5
+ const CAPABILITIES = Object.freeze(Object.fromEntries(Object.entries(PROVIDER_CAPABILITIES).map(([provider, capabilities]) => [
6
+ provider,
7
+ Object.freeze({ ...capabilities }),
8
+ ])));
16
9
  function checkCapability(provider, capability) {
17
- if (!provider) return false;
18
- return providerSupportsCapability(provider, capability);
10
+ if (!provider)
11
+ return false;
12
+ return providerSupportsCapability(provider, capability);
19
13
  }
20
-
21
14
  function warnIfExperimental(provider, capability) {
22
- const normalized = normalizeProviderName(provider);
23
- const caps = CAPABILITIES[normalized];
24
- if (caps?.[capability] === 'experimental') {
25
- console.warn(`⚠️ ${capability} is experimental for ${normalized} and may not work reliably`);
26
- }
15
+ const normalized = normalizeProviderName(provider);
16
+ const caps = CAPABILITIES[normalized];
17
+ if (caps?.[capability] === 'experimental') {
18
+ console.warn(`⚠️ ${capability} is experimental for ${normalized} and may not work reliably`);
19
+ }
27
20
  }
28
-
29
21
  module.exports = {
30
- CAPABILITIES,
31
- checkCapability,
32
- warnIfExperimental,
22
+ CAPABILITIES,
23
+ checkCapability,
24
+ warnIfExperimental,
33
25
  };
@@ -0,0 +1,44 @@
1
+ type ProviderCapabilityState = boolean | 'experimental';
2
+ type ProviderCapabilities = Readonly<Record<string, ProviderCapabilityState>>;
3
+
4
+ interface ProviderNamesFacade {
5
+ readonly PROVIDER_CAPABILITIES: Readonly<Record<string, ProviderCapabilities>>;
6
+ normalizeProviderName(provider: string): string;
7
+ providerSupportsCapability(provider: string, capability: string): boolean;
8
+ }
9
+
10
+ // The generated CommonJS facade resolves the built provider registry through lib/.
11
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
12
+ const { PROVIDER_CAPABILITIES, normalizeProviderName, providerSupportsCapability }:
13
+ ProviderNamesFacade = require('../../lib/provider-names');
14
+
15
+ const CAPABILITIES: Readonly<Record<string, ProviderCapabilities>> = Object.freeze(
16
+ Object.fromEntries(
17
+ Object.entries(PROVIDER_CAPABILITIES).map(([provider, capabilities]) => [
18
+ provider,
19
+ Object.freeze({ ...capabilities }),
20
+ ])
21
+ )
22
+ );
23
+
24
+ function checkCapability(
25
+ provider: string | null | undefined,
26
+ capability: string
27
+ ): boolean {
28
+ if (!provider) return false;
29
+ return providerSupportsCapability(provider, capability);
30
+ }
31
+
32
+ function warnIfExperimental(provider: string, capability: string): void {
33
+ const normalized = normalizeProviderName(provider);
34
+ const caps = CAPABILITIES[normalized];
35
+ if (caps?.[capability] === 'experimental') {
36
+ console.warn(`⚠️ ${capability} is experimental for ${normalized} and may not work reliably`);
37
+ }
38
+ }
39
+
40
+ export = {
41
+ CAPABILITIES,
42
+ checkCapability,
43
+ warnIfExperimental,
44
+ };
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
3
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1
4
  const { createProviderClass } = require('..');
2
-
3
5
  module.exports = createProviderClass('gemini');
@@ -0,0 +1,13 @@
1
+ interface ProviderConstructor {
2
+ new (): { readonly name: string };
3
+ }
4
+
5
+ interface ProvidersFacade {
6
+ createProviderClass(name: string): ProviderConstructor;
7
+ }
8
+
9
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
11
+ const { createProviderClass }: ProvidersFacade = require('..');
12
+
13
+ export = createProviderClass('gemini');
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
3
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1
4
  const { createProviderClass } = require('..');
2
-
3
5
  module.exports = createProviderClass('codex');
@@ -0,0 +1,13 @@
1
+ interface ProviderConstructor {
2
+ new (): { readonly name: string };
3
+ }
4
+
5
+ interface ProvidersFacade {
6
+ createProviderClass(name: string): ProviderConstructor;
7
+ }
8
+
9
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
11
+ const { createProviderClass }: ProvidersFacade = require('..');
12
+
13
+ export = createProviderClass('codex');
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
3
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1
4
  const { createProviderClass } = require('..');
2
-
3
5
  module.exports = createProviderClass('opencode');
@@ -0,0 +1,13 @@
1
+ interface ProviderConstructor {
2
+ new (): { readonly name: string };
3
+ }
4
+
5
+ interface ProvidersFacade {
6
+ createProviderClass(name: string): ProviderConstructor;
7
+ }
8
+
9
+ // The generated CommonJS entrypoint resolves the maintained provider facade one directory up.
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
11
+ const { createProviderClass }: ProvidersFacade = require('..');
12
+
13
+ export = createProviderClass('opencode');
@@ -1,148 +1,88 @@
1
- const { readRepoSettings } = require('../lib/repo-settings');
2
-
3
- function hasOwn(value, key) {
4
- return Object.prototype.hasOwnProperty.call(value || {}, key);
5
- }
6
-
7
- function hasDefinedOwn(value, key) {
8
- return hasOwn(value, key) && value[key] !== undefined;
9
- }
10
-
1
+ "use strict";
2
+ const repoSettingsAccess = require("./repo-settings-access");
3
+ const { isRecord, propertyValue, readRepoSettingsValue, selectOwnProperty } = repoSettingsAccess;
11
4
  function getGateId(gate) {
12
- if (typeof gate.id === 'string' && gate.id.trim()) {
13
- return gate.id.trim();
14
- }
15
-
16
- if (typeof gate.name === 'string' && gate.name.trim()) {
17
- return gate.name.trim();
18
- }
19
-
20
- return null;
5
+ if (typeof gate.id === 'string' && gate.id.trim()) {
6
+ return gate.id.trim();
7
+ }
8
+ if (typeof gate.name === 'string' && gate.name.trim()) {
9
+ return gate.name.trim();
10
+ }
11
+ return null;
21
12
  }
22
-
23
13
  function normalizeStringGate(gate) {
24
- const id = gate.trim();
25
- return id ? { id } : null;
14
+ const id = gate.trim();
15
+ return id ? { id } : null;
26
16
  }
27
-
28
17
  function setOptionalString(target, source, key) {
29
- if (typeof source[key] === 'string' && source[key].trim()) {
30
- target[key] = source[key].trim();
31
- }
18
+ const value = source[key];
19
+ if (typeof value === 'string' && value.trim()) {
20
+ target[key] = value.trim();
21
+ }
32
22
  }
33
-
34
23
  function normalizeObjectGate(gate) {
35
- if (!gate || typeof gate !== 'object') {
36
- return null;
37
- }
38
-
39
- const id = getGateId(gate);
40
- if (!id) {
41
- return null;
42
- }
43
-
44
- const normalized = { id };
45
- setOptionalString(normalized, gate, 'scope');
46
- setOptionalString(normalized, gate, 'description');
47
- setOptionalString(normalized, gate, 'command');
48
- setOptionalString(normalized, gate, 'profile');
49
- setOptionalString(normalized, gate, 'proofProfile');
50
- if (gate.commandProof === true) {
51
- normalized.commandProof = true;
52
- }
53
- return normalized;
24
+ if (!isRecord(gate)) {
25
+ return null;
26
+ }
27
+ const id = getGateId(gate);
28
+ if (!id) {
29
+ return null;
30
+ }
31
+ const normalized = { id };
32
+ setOptionalString(normalized, gate, 'scope');
33
+ setOptionalString(normalized, gate, 'description');
34
+ setOptionalString(normalized, gate, 'command');
35
+ setOptionalString(normalized, gate, 'profile');
36
+ setOptionalString(normalized, gate, 'proofProfile');
37
+ if (gate.commandProof === true) {
38
+ normalized.commandProof = true;
39
+ }
40
+ return normalized;
41
+ }
42
+ function isRequiredQualityGate(gate) {
43
+ return gate !== null;
54
44
  }
55
-
56
45
  function normalizeRequiredQualityGates(value) {
57
- if (!Array.isArray(value)) {
58
- return [];
59
- }
60
-
61
- return value
62
- .map((gate) => {
63
- if (typeof gate === 'string') {
64
- return normalizeStringGate(gate);
65
- }
66
- return normalizeObjectGate(gate);
46
+ if (!Array.isArray(value)) {
47
+ return [];
48
+ }
49
+ return value
50
+ .map((gate) => {
51
+ if (typeof gate === 'string') {
52
+ return normalizeStringGate(gate);
53
+ }
54
+ return normalizeObjectGate(gate);
67
55
  })
68
- .filter(Boolean);
56
+ .filter(isRequiredQualityGate);
69
57
  }
70
-
71
58
  function getRequiredQualityGateSource(options, repoSettings) {
72
- if (hasDefinedOwn(options, 'requiredQualityGates')) {
73
- return options.requiredQualityGates;
74
- }
75
-
76
- if (
77
- options.ship &&
78
- typeof options.ship === 'object' &&
79
- hasDefinedOwn(options.ship, 'requiredQualityGates')
80
- ) {
81
- return options.ship.requiredQualityGates;
82
- }
83
-
84
- const settingsShip = repoSettings?.ship;
85
- if (
86
- settingsShip &&
87
- typeof settingsShip === 'object' &&
88
- hasOwn(settingsShip, 'requiredQualityGates')
89
- ) {
90
- return settingsShip.requiredQualityGates;
91
- }
92
-
93
- if (hasOwn(repoSettings, 'requiredQualityGates')) {
94
- return repoSettings.requiredQualityGates;
95
- }
96
-
97
- return [];
59
+ const explicitSource = selectOwnProperty('requiredQualityGates', [options, propertyValue(options, 'ship')], { skipUndefined: true });
60
+ if (explicitSource !== undefined) {
61
+ return explicitSource;
62
+ }
63
+ const repoSource = selectOwnProperty('requiredQualityGates', [
64
+ propertyValue(repoSettings, 'ship'),
65
+ repoSettings,
66
+ ]);
67
+ return repoSource === undefined ? [] : repoSource;
98
68
  }
99
-
100
69
  function resolveRequiredQualityGates(options = {}) {
101
- const repoSettingsResult = readRepoSettings(options.cwd || process.cwd());
102
- const repoSettings = repoSettingsResult.settings || {};
103
- const source = getRequiredQualityGateSource(options, repoSettings);
104
- return normalizeRequiredQualityGates(source);
70
+ const repoSettings = readRepoSettingsValue(options.cwd || process.cwd());
71
+ const source = getRequiredQualityGateSource(options, repoSettings);
72
+ return normalizeRequiredQualityGates(source);
105
73
  }
106
-
107
74
  function getClusterRequiredQualityGateSource(config, options) {
108
- if (hasDefinedOwn(options, 'requiredQualityGates')) {
109
- return options.requiredQualityGates;
110
- }
111
-
112
- if (
113
- options.ship &&
114
- typeof options.ship === 'object' &&
115
- hasDefinedOwn(options.ship, 'requiredQualityGates')
116
- ) {
117
- return options.ship.requiredQualityGates;
118
- }
119
-
120
- if (
121
- config?.ship &&
122
- typeof config.ship === 'object' &&
123
- hasDefinedOwn(config.ship, 'requiredQualityGates')
124
- ) {
125
- return config.ship.requiredQualityGates;
126
- }
127
-
128
- if (hasDefinedOwn(config, 'requiredQualityGates')) {
129
- return config.requiredQualityGates;
130
- }
131
-
132
- return undefined;
75
+ return selectOwnProperty('requiredQualityGates', [options, propertyValue(options, 'ship'), propertyValue(config, 'ship'), config], { skipUndefined: true });
133
76
  }
134
-
135
77
  function resolveClusterRequiredQualityGates(config = {}, options = {}) {
136
- const configuredSource = getClusterRequiredQualityGateSource(config, options);
137
- if (configuredSource !== undefined) {
138
- return normalizeRequiredQualityGates(configuredSource);
139
- }
140
-
141
- return resolveRequiredQualityGates({ ...options, cwd: options.cwd || process.cwd() });
78
+ const configuredSource = getClusterRequiredQualityGateSource(config, options);
79
+ if (configuredSource !== undefined) {
80
+ return normalizeRequiredQualityGates(configuredSource);
81
+ }
82
+ return resolveRequiredQualityGates({ ...options, cwd: options.cwd || process.cwd() });
142
83
  }
143
-
144
84
  module.exports = {
145
- normalizeRequiredQualityGates,
146
- resolveRequiredQualityGates,
147
- resolveClusterRequiredQualityGates,
85
+ normalizeRequiredQualityGates,
86
+ resolveRequiredQualityGates,
87
+ resolveClusterRequiredQualityGates,
148
88
  };
@@ -0,0 +1,149 @@
1
+ import repoSettingsAccess = require('./repo-settings-access');
2
+
3
+ type StringGateField = 'scope' | 'description' | 'command' | 'profile' | 'proofProfile';
4
+
5
+ interface RequiredQualityGate {
6
+ id: string;
7
+ scope?: string;
8
+ description?: string;
9
+ command?: string;
10
+ profile?: string;
11
+ proofProfile?: string;
12
+ commandProof?: true;
13
+ }
14
+
15
+ interface QualityGateOptions {
16
+ cwd?: string;
17
+ requiredQualityGates?: unknown;
18
+ ship?: unknown;
19
+ [key: string]: unknown;
20
+ }
21
+
22
+ interface QualityGateConfig {
23
+ requiredQualityGates?: unknown;
24
+ ship?: unknown;
25
+ [key: string]: unknown;
26
+ }
27
+
28
+ const { isRecord, propertyValue, readRepoSettingsValue, selectOwnProperty } = repoSettingsAccess;
29
+
30
+ function getGateId(gate: Record<string, unknown>): string | null {
31
+ if (typeof gate.id === 'string' && gate.id.trim()) {
32
+ return gate.id.trim();
33
+ }
34
+
35
+ if (typeof gate.name === 'string' && gate.name.trim()) {
36
+ return gate.name.trim();
37
+ }
38
+
39
+ return null;
40
+ }
41
+
42
+ function normalizeStringGate(gate: string): RequiredQualityGate | null {
43
+ const id = gate.trim();
44
+ return id ? { id } : null;
45
+ }
46
+
47
+ function setOptionalString(
48
+ target: RequiredQualityGate,
49
+ source: Record<string, unknown>,
50
+ key: StringGateField
51
+ ): void {
52
+ const value = source[key];
53
+ if (typeof value === 'string' && value.trim()) {
54
+ target[key] = value.trim();
55
+ }
56
+ }
57
+
58
+ function normalizeObjectGate(gate: unknown): RequiredQualityGate | null {
59
+ if (!isRecord(gate)) {
60
+ return null;
61
+ }
62
+
63
+ const id = getGateId(gate);
64
+ if (!id) {
65
+ return null;
66
+ }
67
+
68
+ const normalized: RequiredQualityGate = { id };
69
+ setOptionalString(normalized, gate, 'scope');
70
+ setOptionalString(normalized, gate, 'description');
71
+ setOptionalString(normalized, gate, 'command');
72
+ setOptionalString(normalized, gate, 'profile');
73
+ setOptionalString(normalized, gate, 'proofProfile');
74
+ if (gate.commandProof === true) {
75
+ normalized.commandProof = true;
76
+ }
77
+ return normalized;
78
+ }
79
+
80
+ function isRequiredQualityGate(gate: RequiredQualityGate | null): gate is RequiredQualityGate {
81
+ return gate !== null;
82
+ }
83
+
84
+ function normalizeRequiredQualityGates(value: unknown): RequiredQualityGate[] {
85
+ if (!Array.isArray(value)) {
86
+ return [];
87
+ }
88
+
89
+ return value
90
+ .map((gate) => {
91
+ if (typeof gate === 'string') {
92
+ return normalizeStringGate(gate);
93
+ }
94
+ return normalizeObjectGate(gate);
95
+ })
96
+ .filter(isRequiredQualityGate);
97
+ }
98
+
99
+ function getRequiredQualityGateSource(options: QualityGateOptions, repoSettings: unknown): unknown {
100
+ const explicitSource = selectOwnProperty(
101
+ 'requiredQualityGates',
102
+ [options, propertyValue(options, 'ship')],
103
+ { skipUndefined: true }
104
+ );
105
+ if (explicitSource !== undefined) {
106
+ return explicitSource;
107
+ }
108
+
109
+ const repoSource = selectOwnProperty('requiredQualityGates', [
110
+ propertyValue(repoSettings, 'ship'),
111
+ repoSettings,
112
+ ]);
113
+ return repoSource === undefined ? [] : repoSource;
114
+ }
115
+
116
+ function resolveRequiredQualityGates(options: QualityGateOptions = {}): RequiredQualityGate[] {
117
+ const repoSettings = readRepoSettingsValue(options.cwd || process.cwd());
118
+ const source = getRequiredQualityGateSource(options, repoSettings);
119
+ return normalizeRequiredQualityGates(source);
120
+ }
121
+
122
+ function getClusterRequiredQualityGateSource(
123
+ config: QualityGateConfig,
124
+ options: QualityGateOptions
125
+ ): unknown {
126
+ return selectOwnProperty(
127
+ 'requiredQualityGates',
128
+ [options, propertyValue(options, 'ship'), propertyValue(config, 'ship'), config],
129
+ { skipUndefined: true }
130
+ );
131
+ }
132
+
133
+ function resolveClusterRequiredQualityGates(
134
+ config: QualityGateConfig = {},
135
+ options: QualityGateOptions = {}
136
+ ): RequiredQualityGate[] {
137
+ const configuredSource = getClusterRequiredQualityGateSource(config, options);
138
+ if (configuredSource !== undefined) {
139
+ return normalizeRequiredQualityGates(configuredSource);
140
+ }
141
+
142
+ return resolveRequiredQualityGates({ ...options, cwd: options.cwd || process.cwd() });
143
+ }
144
+
145
+ export = {
146
+ normalizeRequiredQualityGates,
147
+ resolveRequiredQualityGates,
148
+ resolveClusterRequiredQualityGates,
149
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ function isRepoSettingsModule(value) {
3
+ return (typeof value === 'object' &&
4
+ value !== null &&
5
+ 'readRepoSettings' in value &&
6
+ typeof value.readRepoSettings === 'function');
7
+ }
8
+ const repoSettingsModule = require('../lib/repo-settings');
9
+ if (!isRepoSettingsModule(repoSettingsModule)) {
10
+ throw new TypeError('repo-settings must export readRepoSettings');
11
+ }
12
+ const readRepoSettings = repoSettingsModule.readRepoSettings;
13
+ function isRecord(value) {
14
+ return typeof value === 'object' && value !== null;
15
+ }
16
+ function propertyValue(value, key) {
17
+ return isRecord(value) ? value[key] : undefined;
18
+ }
19
+ function selectOwnProperty(key, candidates, options = {}) {
20
+ for (const candidate of candidates) {
21
+ if (!Object.prototype.hasOwnProperty.call(candidate || {}, key)) {
22
+ continue;
23
+ }
24
+ const value = propertyValue(candidate, key);
25
+ if (options.skipUndefined && value === undefined) {
26
+ continue;
27
+ }
28
+ return value;
29
+ }
30
+ return undefined;
31
+ }
32
+ function readRepoSettingsValue(startDir) {
33
+ return readRepoSettings(startDir).settings || {};
34
+ }
35
+ module.exports = {
36
+ isRecord,
37
+ propertyValue,
38
+ readRepoSettingsValue,
39
+ selectOwnProperty,
40
+ };