@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,28 @@
1
+ interface TaskRunnerOptions {
2
+ agentId: string;
3
+ model: string;
4
+ provider?: string;
5
+ modelSpec?: object;
6
+ outputFormat?: string;
7
+ jsonSchema?: object;
8
+ cwd?: string;
9
+ isolation?: boolean;
10
+ }
11
+
12
+ interface TaskRunnerResult {
13
+ success: boolean;
14
+ output: string;
15
+ error: string | null;
16
+ taskId?: string;
17
+ }
18
+
19
+ /**
20
+ * TaskRunner - Strategy Pattern interface for executing provider tasks.
21
+ */
22
+ class TaskRunner {
23
+ run(_context: string, _options: TaskRunnerOptions): Promise<TaskRunnerResult> {
24
+ throw new Error('TaskRunner.run() not implemented');
25
+ }
26
+ }
27
+
28
+ export = TaskRunner;
@@ -1,68 +1,83 @@
1
+ "use strict";
1
2
  const TASK_STARTUP_ERROR_PREFIX = 'ZEROSHOT_TASK_STARTUP_ERROR:';
2
3
  const SUPPORTED_STARTUP_ERROR_CODES = new Set(['unsupported-capability']);
3
-
4
+ function hasTaskStartupErrorFields(value) {
5
+ return value !== null && (typeof value === 'object' || typeof value === 'function');
6
+ }
7
+ function isTaskStartupErrorCode(value) {
8
+ return typeof value === 'string' && SUPPORTED_STARTUP_ERROR_CODES.has(value);
9
+ }
10
+ function isOptionalString(value) {
11
+ return value === undefined || typeof value === 'string';
12
+ }
13
+ function isSerializedTaskStartupError(value) {
14
+ return Boolean(hasTaskStartupErrorFields(value) &&
15
+ value.version === 1 &&
16
+ isTaskStartupErrorCode(value.code) &&
17
+ value.permanent === true &&
18
+ typeof value.message === 'string' &&
19
+ value.message.length > 0 &&
20
+ isOptionalString(value.provider) &&
21
+ isOptionalString(value.capability));
22
+ }
4
23
  function createUnsupportedProviderCapabilityError(provider, capability, message) {
5
- const error = new Error(message);
6
- error.name = 'UnsupportedProviderCapabilityError';
7
- error.code = 'unsupported-capability';
8
- error.permanent = true;
9
- error.provider = provider;
10
- error.capability = capability;
11
- return error;
24
+ const error = new Error(message);
25
+ error.name = 'UnsupportedProviderCapabilityError';
26
+ const metadata = {
27
+ code: 'unsupported-capability',
28
+ permanent: true,
29
+ provider,
30
+ capability,
31
+ };
32
+ return Object.assign(error, metadata);
12
33
  }
13
-
14
34
  function serializeTaskStartupError(error) {
15
- if (
16
- !SUPPORTED_STARTUP_ERROR_CODES.has(error?.code) ||
17
- error?.permanent !== true
18
- ) {
19
- return null;
20
- }
21
- const payload = {
22
- version: 1,
23
- code: error.code,
24
- permanent: true,
25
- message: String(error.message || error.code),
26
- };
27
- if (typeof error.provider === 'string') payload.provider = error.provider;
28
- if (typeof error.capability === 'string') payload.capability = error.capability;
29
- return `${TASK_STARTUP_ERROR_PREFIX}${JSON.stringify(payload)}`;
35
+ if (!hasTaskStartupErrorFields(error) ||
36
+ !isTaskStartupErrorCode(error.code) ||
37
+ error.permanent !== true) {
38
+ return null;
39
+ }
40
+ const payload = {
41
+ version: 1,
42
+ code: error.code,
43
+ permanent: true,
44
+ message: String(error.message || error.code),
45
+ };
46
+ if (typeof error.provider === 'string')
47
+ payload.provider = error.provider;
48
+ if (typeof error.capability === 'string')
49
+ payload.capability = error.capability;
50
+ return `${TASK_STARTUP_ERROR_PREFIX}${JSON.stringify(payload)}`;
30
51
  }
31
-
32
52
  function parseTaskStartupError(stderr) {
33
- const lines = String(stderr || '').split(/\r?\n/);
34
- let line = lines.pop();
35
- while (line === '' && lines.length > 0) line = lines.pop();
36
- if (!line?.startsWith(TASK_STARTUP_ERROR_PREFIX)) return null;
37
-
38
- let parsed;
39
- try {
40
- parsed = JSON.parse(line.slice(TASK_STARTUP_ERROR_PREFIX.length));
41
- } catch {
42
- return null;
43
- }
44
- if (
45
- parsed?.version !== 1 ||
46
- !SUPPORTED_STARTUP_ERROR_CODES.has(parsed.code) ||
47
- parsed.permanent !== true ||
48
- typeof parsed.message !== 'string' ||
49
- parsed.message.length === 0 ||
50
- (parsed.provider !== undefined && typeof parsed.provider !== 'string') ||
51
- (parsed.capability !== undefined && typeof parsed.capability !== 'string')
52
- ) {
53
- return null;
54
- }
55
- const error = new Error(parsed.message);
56
- error.code = parsed.code;
57
- error.permanent = true;
58
- if (parsed.provider !== undefined) error.provider = parsed.provider;
59
- if (parsed.capability !== undefined) error.capability = parsed.capability;
60
- return error;
53
+ const lines = String(stderr || '').split(/\r?\n/);
54
+ let line = lines.pop();
55
+ while (line === '' && lines.length > 0)
56
+ line = lines.pop();
57
+ if (!line?.startsWith(TASK_STARTUP_ERROR_PREFIX))
58
+ return null;
59
+ let parsed;
60
+ try {
61
+ parsed = JSON.parse(line.slice(TASK_STARTUP_ERROR_PREFIX.length));
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ if (!isSerializedTaskStartupError(parsed))
67
+ return null;
68
+ const metadata = {
69
+ code: parsed.code,
70
+ permanent: true,
71
+ };
72
+ if (parsed.provider !== undefined)
73
+ metadata.provider = parsed.provider;
74
+ if (parsed.capability !== undefined)
75
+ metadata.capability = parsed.capability;
76
+ return Object.assign(new Error(parsed.message), metadata);
61
77
  }
62
-
63
78
  module.exports = {
64
- TASK_STARTUP_ERROR_PREFIX,
65
- createUnsupportedProviderCapabilityError,
66
- parseTaskStartupError,
67
- serializeTaskStartupError,
79
+ TASK_STARTUP_ERROR_PREFIX,
80
+ createUnsupportedProviderCapabilityError,
81
+ parseTaskStartupError,
82
+ serializeTaskStartupError,
68
83
  };
@@ -0,0 +1,126 @@
1
+ const TASK_STARTUP_ERROR_PREFIX = 'ZEROSHOT_TASK_STARTUP_ERROR:';
2
+ const SUPPORTED_STARTUP_ERROR_CODES = new Set<string>(['unsupported-capability']);
3
+
4
+ type TaskStartupErrorCode = 'unsupported-capability';
5
+
6
+ interface TaskStartupErrorFields {
7
+ version?: unknown;
8
+ code?: unknown;
9
+ permanent?: unknown;
10
+ message?: unknown;
11
+ provider?: unknown;
12
+ capability?: unknown;
13
+ }
14
+
15
+ interface TaskStartupError extends Error {
16
+ code: TaskStartupErrorCode;
17
+ permanent: true;
18
+ provider?: string;
19
+ capability?: string;
20
+ }
21
+
22
+ interface TaskStartupErrorMetadata {
23
+ code: TaskStartupErrorCode;
24
+ permanent: true;
25
+ provider?: string;
26
+ capability?: string;
27
+ }
28
+
29
+ interface SerializedTaskStartupError {
30
+ version: 1;
31
+ code: TaskStartupErrorCode;
32
+ permanent: true;
33
+ message: string;
34
+ provider?: string;
35
+ capability?: string;
36
+ }
37
+
38
+ function hasTaskStartupErrorFields(value: unknown): value is TaskStartupErrorFields {
39
+ return value !== null && (typeof value === 'object' || typeof value === 'function');
40
+ }
41
+
42
+ function isTaskStartupErrorCode(value: unknown): value is TaskStartupErrorCode {
43
+ return typeof value === 'string' && SUPPORTED_STARTUP_ERROR_CODES.has(value);
44
+ }
45
+
46
+ function isOptionalString(value: unknown): value is string | undefined {
47
+ return value === undefined || typeof value === 'string';
48
+ }
49
+
50
+ function isSerializedTaskStartupError(value: unknown): value is SerializedTaskStartupError {
51
+ return Boolean(
52
+ hasTaskStartupErrorFields(value) &&
53
+ value.version === 1 &&
54
+ isTaskStartupErrorCode(value.code) &&
55
+ value.permanent === true &&
56
+ typeof value.message === 'string' &&
57
+ value.message.length > 0 &&
58
+ isOptionalString(value.provider) &&
59
+ isOptionalString(value.capability)
60
+ );
61
+ }
62
+
63
+ function createUnsupportedProviderCapabilityError(
64
+ provider: string,
65
+ capability: string,
66
+ message: string
67
+ ): TaskStartupError {
68
+ const error = new Error(message);
69
+ error.name = 'UnsupportedProviderCapabilityError';
70
+ const metadata: TaskStartupErrorMetadata = {
71
+ code: 'unsupported-capability',
72
+ permanent: true,
73
+ provider,
74
+ capability,
75
+ };
76
+ return Object.assign(error, metadata);
77
+ }
78
+
79
+ function serializeTaskStartupError(error: unknown): string | null {
80
+ if (
81
+ !hasTaskStartupErrorFields(error) ||
82
+ !isTaskStartupErrorCode(error.code) ||
83
+ error.permanent !== true
84
+ ) {
85
+ return null;
86
+ }
87
+ const payload: SerializedTaskStartupError = {
88
+ version: 1,
89
+ code: error.code,
90
+ permanent: true,
91
+ message: String(error.message || error.code),
92
+ };
93
+ if (typeof error.provider === 'string') payload.provider = error.provider;
94
+ if (typeof error.capability === 'string') payload.capability = error.capability;
95
+ return `${TASK_STARTUP_ERROR_PREFIX}${JSON.stringify(payload)}`;
96
+ }
97
+
98
+ function parseTaskStartupError(stderr: unknown): TaskStartupError | null {
99
+ const lines = String(stderr || '').split(/\r?\n/);
100
+ let line = lines.pop();
101
+ while (line === '' && lines.length > 0) line = lines.pop();
102
+ if (!line?.startsWith(TASK_STARTUP_ERROR_PREFIX)) return null;
103
+
104
+ let parsed: unknown;
105
+ try {
106
+ parsed = JSON.parse(line.slice(TASK_STARTUP_ERROR_PREFIX.length));
107
+ } catch {
108
+ return null;
109
+ }
110
+ if (!isSerializedTaskStartupError(parsed)) return null;
111
+
112
+ const metadata: TaskStartupErrorMetadata = {
113
+ code: parsed.code,
114
+ permanent: true,
115
+ };
116
+ if (parsed.provider !== undefined) metadata.provider = parsed.provider;
117
+ if (parsed.capability !== undefined) metadata.capability = parsed.capability;
118
+ return Object.assign(new Error(parsed.message), metadata);
119
+ }
120
+
121
+ export = {
122
+ TASK_STARTUP_ERROR_PREFIX,
123
+ createUnsupportedProviderCapabilityError,
124
+ parseTaskStartupError,
125
+ serializeTaskStartupError,
126
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,70 @@
1
+ export type StageStartTopic = 'IMPLEMENTATION_READY' | 'QUICK_VALIDATION_PASSED';
2
+ export type TopicProducers = Map<string, Set<string>>;
3
+ export type ConsensusProducers = [string, string, ...string[]];
4
+
5
+ export interface RequiredQualityGate {
6
+ id: string;
7
+ scope?: string;
8
+ }
9
+
10
+ interface CompletionHook {
11
+ action?: string;
12
+ config?: { topic?: unknown };
13
+ }
14
+
15
+ export interface TemplateTrigger {
16
+ topic?: string;
17
+ action?: string;
18
+ logic?: { script?: string };
19
+ }
20
+
21
+ export interface TemplateAgent {
22
+ id: string;
23
+ role?: string;
24
+ requiredQualityGates?: RequiredQualityGate[];
25
+ triggers?: TemplateTrigger[];
26
+ hooks?: { onComplete?: CompletionHook };
27
+ }
28
+
29
+ export interface TemplateConfig {
30
+ agents?: TemplateAgent[];
31
+ }
32
+
33
+ export interface ConsensusSimulationOptions {
34
+ allowExternalTopics?: string[];
35
+ }
36
+
37
+ interface SimulationClusterAgent {
38
+ id: string;
39
+ role: string | undefined;
40
+ requiredQualityGates: RequiredQualityGate[];
41
+ }
42
+
43
+ export interface SimulationCluster {
44
+ id: string;
45
+ agents: SimulationClusterAgent[];
46
+ }
47
+
48
+ export interface SimulationContext {
49
+ agents: TemplateAgent[];
50
+ producersByTopic: TopicProducers;
51
+ allowExternalTopics: string[];
52
+ cluster: SimulationCluster;
53
+ }
54
+
55
+ export interface ScenarioContext {
56
+ agentId: string;
57
+ cluster: SimulationCluster;
58
+ topic: string;
59
+ script: string;
60
+ requiredQualityGates: RequiredQualityGate[];
61
+ producers: ConsensusProducers;
62
+ producersByTopic: TopicProducers;
63
+ requiredStageTopics: StageStartTopic[];
64
+ allowExternalTopics: string[];
65
+ }
66
+
67
+ export type ConsensusScenario =
68
+ | { failure: string }
69
+ | { failure: null }
70
+ | { failure: null; context: ScenarioContext };
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkDuplicateProducerScenario = checkDuplicateProducerScenario;
4
+ exports.checkDistinctProducerScenario = checkDistinctProducerScenario;
5
+ const simulationRuntime = require("./simulation-runtime");
6
+ const consensus_gate_stage_1 = require("./consensus-gate-stage");
7
+ function evaluateScenario({ agentId, cluster, topic, script, requiredQualityGates, producers, producersByTopic, requiredStageTopics, allowExternalTopics, publishMessages, }) {
8
+ const { ledger, messageBus, logicEngine } = simulationRuntime.createSimulationRuntime(cluster);
9
+ (0, consensus_gate_stage_1.publishStageStartMessages)({
10
+ messageBus,
11
+ clusterId: cluster.id,
12
+ producersByTopic,
13
+ requiredStageTopics,
14
+ allowExternalTopics,
15
+ });
16
+ publishMessages(messageBus, producers, cluster.id);
17
+ const result = logicEngine.evaluate(script, { id: agentId, cluster_id: cluster.id, requiredQualityGates }, { topic });
18
+ ledger.close();
19
+ return result;
20
+ }
21
+ function getPassingQualityGate(requiredGate) {
22
+ const scope = requiredGate.scope || 'template-sim';
23
+ return {
24
+ id: requiredGate.id,
25
+ status: 'PASS',
26
+ scope,
27
+ completedAt: Date.now(),
28
+ evidence: {
29
+ command: `quality-check --scope ${scope}`,
30
+ exitCode: 0,
31
+ output: 'template simulation quality pass',
32
+ },
33
+ };
34
+ }
35
+ function getApprovedResultData(context) {
36
+ const data = { approved: true };
37
+ const requiredQualityGates = Array.isArray(context.requiredQualityGates)
38
+ ? context.requiredQualityGates
39
+ : [];
40
+ if (context.agentId === 'git-pusher' &&
41
+ context.topic === 'VALIDATION_RESULT' &&
42
+ requiredQualityGates.length > 0) {
43
+ data.qualityGates = requiredQualityGates.map(getPassingQualityGate);
44
+ }
45
+ return data;
46
+ }
47
+ function checkDuplicateProducerScenario(context) {
48
+ return evaluateScenario({
49
+ ...context,
50
+ publishMessages(messageBus, producers, clusterId) {
51
+ const message = {
52
+ cluster_id: clusterId,
53
+ topic: context.topic,
54
+ sender: producers[0],
55
+ content: { data: getApprovedResultData(context) },
56
+ };
57
+ messageBus.publish(message);
58
+ messageBus.publish(message);
59
+ },
60
+ });
61
+ }
62
+ function checkDistinctProducerScenario(context) {
63
+ return evaluateScenario({
64
+ ...context,
65
+ publishMessages(messageBus, producers, clusterId) {
66
+ for (const producer of producers) {
67
+ messageBus.publish({
68
+ cluster_id: clusterId,
69
+ topic: context.topic,
70
+ sender: producer,
71
+ content: { data: getApprovedResultData(context) },
72
+ });
73
+ }
74
+ },
75
+ });
76
+ }
@@ -0,0 +1,130 @@
1
+ import simulationRuntime = require('./simulation-runtime');
2
+ import { publishStageStartMessages } from './consensus-gate-stage';
3
+ import type {
4
+ ConsensusProducers,
5
+ RequiredQualityGate,
6
+ ScenarioContext,
7
+ } from './consensus-gate-contracts';
8
+
9
+ interface SimulationMessageBus {
10
+ publish(message: unknown): unknown;
11
+ }
12
+
13
+ interface EvaluateScenarioOptions extends ScenarioContext {
14
+ publishMessages(
15
+ messageBus: SimulationMessageBus,
16
+ producers: ConsensusProducers,
17
+ clusterId: string
18
+ ): void;
19
+ }
20
+
21
+ interface PassingQualityGate {
22
+ id: string;
23
+ status: 'PASS';
24
+ scope: string;
25
+ completedAt: number;
26
+ evidence: {
27
+ command: string;
28
+ exitCode: 0;
29
+ output: string;
30
+ };
31
+ }
32
+
33
+ interface ApprovedResultData {
34
+ approved: true;
35
+ qualityGates?: PassingQualityGate[];
36
+ }
37
+
38
+ function evaluateScenario({
39
+ agentId,
40
+ cluster,
41
+ topic,
42
+ script,
43
+ requiredQualityGates,
44
+ producers,
45
+ producersByTopic,
46
+ requiredStageTopics,
47
+ allowExternalTopics,
48
+ publishMessages,
49
+ }: EvaluateScenarioOptions): boolean {
50
+ const { ledger, messageBus, logicEngine } = simulationRuntime.createSimulationRuntime(cluster);
51
+
52
+ publishStageStartMessages({
53
+ messageBus,
54
+ clusterId: cluster.id,
55
+ producersByTopic,
56
+ requiredStageTopics,
57
+ allowExternalTopics,
58
+ });
59
+ publishMessages(messageBus, producers, cluster.id);
60
+
61
+ const result = logicEngine.evaluate(
62
+ script,
63
+ { id: agentId, cluster_id: cluster.id, requiredQualityGates },
64
+ { topic }
65
+ );
66
+ ledger.close();
67
+ return result;
68
+ }
69
+
70
+ function getPassingQualityGate(requiredGate: RequiredQualityGate): PassingQualityGate {
71
+ const scope = requiredGate.scope || 'template-sim';
72
+ return {
73
+ id: requiredGate.id,
74
+ status: 'PASS',
75
+ scope,
76
+ completedAt: Date.now(),
77
+ evidence: {
78
+ command: `quality-check --scope ${scope}`,
79
+ exitCode: 0,
80
+ output: 'template simulation quality pass',
81
+ },
82
+ };
83
+ }
84
+
85
+ function getApprovedResultData(context: ScenarioContext): ApprovedResultData {
86
+ const data: ApprovedResultData = { approved: true };
87
+ const requiredQualityGates = Array.isArray(context.requiredQualityGates)
88
+ ? context.requiredQualityGates
89
+ : [];
90
+ if (
91
+ context.agentId === 'git-pusher' &&
92
+ context.topic === 'VALIDATION_RESULT' &&
93
+ requiredQualityGates.length > 0
94
+ ) {
95
+ data.qualityGates = requiredQualityGates.map(getPassingQualityGate);
96
+ }
97
+ return data;
98
+ }
99
+
100
+ export function checkDuplicateProducerScenario(context: ScenarioContext): boolean {
101
+ return evaluateScenario({
102
+ ...context,
103
+ publishMessages(messageBus, producers, clusterId) {
104
+ const message = {
105
+ cluster_id: clusterId,
106
+ topic: context.topic,
107
+ sender: producers[0],
108
+ content: { data: getApprovedResultData(context) },
109
+ };
110
+ messageBus.publish(message);
111
+ messageBus.publish(message);
112
+ },
113
+ });
114
+ }
115
+
116
+ export function checkDistinctProducerScenario(context: ScenarioContext): boolean {
117
+ return evaluateScenario({
118
+ ...context,
119
+ publishMessages(messageBus, producers, clusterId) {
120
+ for (const producer of producers) {
121
+ messageBus.publish({
122
+ cluster_id: clusterId,
123
+ topic: context.topic,
124
+ sender: producer,
125
+ content: { data: getApprovedResultData(context) },
126
+ });
127
+ }
128
+ },
129
+ });
130
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRequiredStageTopics = getRequiredStageTopics;
4
+ exports.publishStageStartMessages = publishStageStartMessages;
5
+ const STAGE_START_TOPICS = [
6
+ 'IMPLEMENTATION_READY',
7
+ 'QUICK_VALIDATION_PASSED',
8
+ ];
9
+ const EXTERNAL_STAGE_SENDERS = {
10
+ IMPLEMENTATION_READY: 'worker',
11
+ QUICK_VALIDATION_PASSED: 'consensus-coordinator',
12
+ };
13
+ function scriptReferencesTopic(logicScript, topic) {
14
+ return logicScript.includes(`topic: '${topic}'`) || logicScript.includes(`topic: "${topic}"`);
15
+ }
16
+ function getRequiredStageTopics(logicScript) {
17
+ return STAGE_START_TOPICS.filter((topic) => scriptReferencesTopic(logicScript, topic));
18
+ }
19
+ function publishStageStartMessages({ messageBus, clusterId, producersByTopic, requiredStageTopics, allowExternalTopics, }) {
20
+ let timestamp = Date.now();
21
+ for (const topic of requiredStageTopics) {
22
+ const producers = Array.from(producersByTopic.get(topic) || []);
23
+ const sender = producers.at(0) ??
24
+ (allowExternalTopics.includes(topic) ? EXTERNAL_STAGE_SENDERS[topic] : null);
25
+ if (!sender)
26
+ continue;
27
+ messageBus.publish({
28
+ cluster_id: clusterId,
29
+ topic,
30
+ sender,
31
+ timestamp: timestamp++,
32
+ });
33
+ }
34
+ }
@@ -0,0 +1,56 @@
1
+ import type { StageStartTopic, TopicProducers } from './consensus-gate-contracts';
2
+
3
+ const STAGE_START_TOPICS = [
4
+ 'IMPLEMENTATION_READY',
5
+ 'QUICK_VALIDATION_PASSED',
6
+ ] as const satisfies readonly StageStartTopic[];
7
+
8
+ const EXTERNAL_STAGE_SENDERS: Readonly<Record<StageStartTopic, string>> = {
9
+ IMPLEMENTATION_READY: 'worker',
10
+ QUICK_VALIDATION_PASSED: 'consensus-coordinator',
11
+ };
12
+
13
+ interface SimulationMessageBus {
14
+ publish(message: unknown): unknown;
15
+ }
16
+
17
+ interface PublishStageStartOptions {
18
+ messageBus: SimulationMessageBus;
19
+ clusterId: string;
20
+ producersByTopic: TopicProducers;
21
+ requiredStageTopics: StageStartTopic[];
22
+ allowExternalTopics: string[];
23
+ }
24
+
25
+ function scriptReferencesTopic(logicScript: string, topic: string): boolean {
26
+ return logicScript.includes(`topic: '${topic}'`) || logicScript.includes(`topic: "${topic}"`);
27
+ }
28
+
29
+ export function getRequiredStageTopics(logicScript: string): StageStartTopic[] {
30
+ return STAGE_START_TOPICS.filter((topic) => scriptReferencesTopic(logicScript, topic));
31
+ }
32
+
33
+ export function publishStageStartMessages({
34
+ messageBus,
35
+ clusterId,
36
+ producersByTopic,
37
+ requiredStageTopics,
38
+ allowExternalTopics,
39
+ }: PublishStageStartOptions): void {
40
+ let timestamp = Date.now();
41
+
42
+ for (const topic of requiredStageTopics) {
43
+ const producers = Array.from(producersByTopic.get(topic) || []);
44
+ const sender =
45
+ producers.at(0) ??
46
+ (allowExternalTopics.includes(topic) ? EXTERNAL_STAGE_SENDERS[topic] : null);
47
+ if (!sender) continue;
48
+
49
+ messageBus.publish({
50
+ cluster_id: clusterId,
51
+ topic,
52
+ sender,
53
+ timestamp: timestamp++,
54
+ });
55
+ }
56
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });