@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
@@ -1,69 +1,68 @@
1
+ "use strict";
1
2
  /**
2
3
  * Provider-agnostic stream-json parser for `zeroshot logs`.
3
4
  *
4
5
  * Provider parsing is delegated to the helper-backed runtime provider facade.
5
6
  */
6
-
7
+ // The runtime facade is maintained JavaScript; keep its original emitted require path.
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
7
9
  const { getProvider, listProviders } = require('../src/providers');
8
-
9
10
  function createProviderParsers() {
10
- return listProviders().map((name) => getProvider(name));
11
+ return listProviders().map((name) => getProvider(name));
11
12
  }
12
-
13
13
  function stripTimestampPrefix(line) {
14
- if (!line || typeof line !== 'string') return '';
15
- let trimmed = line.trim().replace(/\r$/, '');
16
- if (!trimmed) return '';
17
-
18
- const tsMatch = trimmed.match(/^\[(\d{13})\](.*)$/);
19
- if (tsMatch) trimmed = (tsMatch[2] || '').trimStart();
20
-
21
- if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
22
- const pipeMatch = trimmed.match(/^[^|]{1,40}\|\s*(.*)$/);
23
- if (pipeMatch) {
24
- const afterPipe = (pipeMatch[1] || '').trimStart();
25
- if (afterPipe.startsWith('{') || afterPipe.startsWith('[')) return afterPipe;
14
+ if (!line || typeof line !== 'string')
15
+ return '';
16
+ let trimmed = line.trim().replace(/\r$/, '');
17
+ if (!trimmed)
18
+ return '';
19
+ const tsMatch = /^\[(\d{13})\](.*)$/.exec(trimmed);
20
+ if (tsMatch)
21
+ trimmed = (tsMatch[2] || '').trimStart();
22
+ if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
23
+ const pipeMatch = /^[^|]{1,40}\|\s*(.*)$/.exec(trimmed);
24
+ if (pipeMatch) {
25
+ const afterPipe = (pipeMatch[1] || '').trimStart();
26
+ if (afterPipe.startsWith('{') || afterPipe.startsWith('['))
27
+ return afterPipe;
28
+ }
26
29
  }
27
- }
28
-
29
- return trimmed;
30
+ return trimmed;
30
31
  }
31
-
32
+ // The provider protocol intentionally permits one event, an event batch, or no event.
33
+ // eslint-disable-next-line sonarjs/function-return-type
32
34
  function parseEvent(line, providerParsers = createProviderParsers()) {
33
- const content = stripTimestampPrefix(line);
34
- if (!content) return null;
35
-
36
- for (const provider of providerParsers) {
37
- const event = provider.parseEvent(content);
38
- if (event) return event;
39
- }
40
-
41
- return null;
35
+ const content = stripTimestampPrefix(line);
36
+ let result = null;
37
+ if (content) {
38
+ for (const provider of providerParsers) {
39
+ const event = provider.parseEvent(content);
40
+ if (event) {
41
+ result = event;
42
+ break;
43
+ }
44
+ }
45
+ }
46
+ return result;
42
47
  }
43
-
44
48
  function collectEvent(events, event) {
45
- if (!event) return;
46
- if (Array.isArray(event)) {
47
- events.push(...event);
48
- return;
49
- }
50
- events.push(event);
49
+ if (!event)
50
+ return;
51
+ if (Array.isArray(event)) {
52
+ events.push(...event);
53
+ return;
54
+ }
55
+ events.push(event);
51
56
  }
52
-
53
57
  function parseChunk(chunk) {
54
- const events = [];
55
- const lines = String(chunk || '').split('\n');
56
- const providerParsers = createProviderParsers();
57
-
58
- for (const line of lines) {
59
- if (!line.trim()) continue;
60
- collectEvent(events, parseEvent(line, providerParsers));
61
- }
62
-
63
- return events;
58
+ const events = [];
59
+ const lines = String(chunk || '').split('\n');
60
+ const providerParsers = createProviderParsers();
61
+ for (const line of lines) {
62
+ if (!line.trim())
63
+ continue;
64
+ collectEvent(events, parseEvent(line, providerParsers));
65
+ }
66
+ return events;
64
67
  }
65
-
66
- module.exports = {
67
- parseEvent,
68
- parseChunk,
69
- };
68
+ module.exports = { parseEvent, parseChunk };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@the-open-engine/zeroshot",
3
- "version": "6.38.1",
3
+ "version": "6.39.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@the-open-engine/zeroshot",
9
- "version": "6.38.1",
9
+ "version": "6.39.1",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
@@ -17,6 +17,7 @@
17
17
  "bun": "1.3.14",
18
18
  "chalk": "^4.1.2",
19
19
  "commander": "^14.0.2",
20
+ "js-yaml": "^4.3.1",
20
21
  "node-pty": "^1.1.0",
21
22
  "omelette": "^0.4.17",
22
23
  "open": "^10.1.0",
@@ -43,7 +44,6 @@
43
44
  "eslint-plugin-sonarjs": "^3.0.5",
44
45
  "eslint-plugin-unused-imports": "^4.3.0",
45
46
  "husky": "^9.1.7",
46
- "js-yaml": "^4.2.0",
47
47
  "jscpd": "^3.5.10",
48
48
  "lint-staged": "^16.2.7",
49
49
  "mocha": "^11.7.5",
@@ -5155,7 +5155,6 @@
5155
5155
  "version": "2.0.1",
5156
5156
  "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
5157
5157
  "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
5158
- "dev": true,
5159
5158
  "license": "Python-2.0"
5160
5159
  },
5161
5160
  "node_modules/argv-formatter": {
@@ -9177,10 +9176,9 @@
9177
9176
  "license": "MIT"
9178
9177
  },
9179
9178
  "node_modules/js-yaml": {
9180
- "version": "4.2.0",
9181
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
9182
- "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==",
9183
- "dev": true,
9179
+ "version": "4.3.1",
9180
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
9181
+ "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
9184
9182
  "funding": [
9185
9183
  {
9186
9184
  "type": "github",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@the-open-engine/zeroshot",
3
- "version": "6.38.1",
3
+ "version": "6.39.1",
4
4
  "description": "Independent executor–verifier orchestration for software changes.",
5
5
  "main": "src/orchestrator.js",
6
6
  "bin": {
@@ -29,7 +29,7 @@
29
29
  ]
30
30
  },
31
31
  "scripts": {
32
- "pretest": "npm run build:agent-cli-provider && npm run build:target",
32
+ "pretest": "npm run build:agent-cli-provider && npm run build:target && npm run build:legacy-lib && npm run build:legacy-runtime && npm run build:task-lib",
33
33
  "test": "node tests/run-tests.js",
34
34
  "test:unit": "node tests/run-tests.js",
35
35
  "test:e2e": "mocha 'tests/e2e/**/*.test.js' --timeout 120000",
@@ -40,8 +40,11 @@
40
40
  "test:coverage:report": "c8 --reporter=html npm run test:unit && echo 'Coverage report generated at coverage/index.html'",
41
41
  "postinstall": "node scripts/postinstall.js",
42
42
  "start": "node cli/index.js",
43
- "typecheck": "tsc --noEmit && npm run typecheck:cluster && npm run typecheck:hosted-target && npm run typecheck:hosted-session && npm run typecheck:target",
43
+ "typecheck": "tsc --noEmit && npm run typecheck:legacy-lib && npm run typecheck:legacy-runtime && npm run typecheck:task-lib && npm run typecheck:cluster && npm run typecheck:hosted-target && npm run typecheck:hosted-session && npm run typecheck:target",
44
44
  "typecheck:agent-cli-provider": "tsc --project tsconfig.agent-cli-provider.json",
45
+ "typecheck:legacy-lib": "tsc --project tsconfig.legacy-lib.json",
46
+ "typecheck:legacy-runtime": "tsc --project tsconfig.legacy-runtime.json",
47
+ "typecheck:task-lib": "tsc --project tsconfig.task-lib.json",
45
48
  "typecheck:hosted-target": "tsc --project tsconfig.hosted-target.json",
46
49
  "typecheck:hosted-session": "tsc --project tsconfig.hosted-session.json",
47
50
  "test:hosted": "npm run build:cluster && node --test tests/private-hosted-cli/*.test.js && npm run test:hosted-target",
@@ -51,10 +54,13 @@
51
54
  "typecheck:cluster": "tsc --project tsconfig.cluster.json",
52
55
  "lint:agent-cli-provider": "eslint \"src/agent-cli-provider/**/*.ts\" \"tests/agent-cli-provider/**/*.ts\"",
53
56
  "build:agent-cli-provider": "tsc --project tsconfig.agent-cli-provider.build.json",
57
+ "build:legacy-lib": "tsc --project tsconfig.legacy-lib.build.json",
58
+ "build:legacy-runtime": "tsc --project tsconfig.legacy-runtime.build.json",
59
+ "build:task-lib": "tsc --project tsconfig.task-lib.build.json",
54
60
  "build:target": "tsc --project tsconfig.target.build.json",
55
61
  "build:cluster": "npm run protocol:generate && tsc --project tsconfig.cluster.cjs.json && tsc --project tsconfig.cluster.esm.json && tsc --project tsconfig.hosted-target.cjs.json && tsc --project tsconfig.hosted-target.esm.json && tsc --project tsconfig.hosted-session.cjs.json && tsc --project tsconfig.hosted-session.esm.json && node scripts/build-cluster.js",
56
62
  "test:agent-cli-provider": "node --test tests/agent-cli-provider/*.test.js",
57
- "test:omp": "npm run build:agent-cli-provider && node --test tests/agent-cli-provider/omp-*.test.js && node tests/run-tests.js 'tests/omp-rpc-watcher*.test.js' tests/omp-isolation-capability.test.js tests/omp-docker-auth.test.js tests/omp-docker-fresh-only.test.js",
63
+ "test:omp": "npm run build:agent-cli-provider && npm run build:task-lib && node --test tests/agent-cli-provider/omp-*.test.js && node tests/run-tests.js 'tests/omp-rpc-watcher*.test.js' tests/omp-isolation-capability.test.js tests/omp-docker-auth.test.js tests/omp-docker-fresh-only.test.js",
58
64
  "test:providers:live": "npm run build:agent-cli-provider && node scripts/live-provider-smoke.js",
59
65
  "check:agent-cli-provider": "npm run check:agent-cli-provider:ci",
60
66
  "check:agent-cli-provider:ci": "npm run typecheck:agent-cli-provider && npm run lint:agent-cli-provider && npm run build:agent-cli-provider && npm run test:agent-cli-provider",
@@ -90,9 +96,9 @@
90
96
  "release:preflight": "node scripts/release-preflight.js",
91
97
  "release:recover": "node scripts/release-recovery.js",
92
98
  "release:assert-published": "node scripts/assert-release-published.js",
93
- "prepack": "npm run build:cluster && npm run build:target",
99
+ "prepack": "npm run build:cluster && npm run build:target && npm run build:legacy-lib && npm run build:legacy-runtime && npm run build:task-lib",
94
100
  "prepublishOnly": "npm run lint && npm run typecheck && npm run check:agent-cli-provider:ci",
95
- "prepare": "npm run build:agent-cli-provider && npm run build:target && husky"
101
+ "prepare": "npm run build:agent-cli-provider && npm run build:target && npm run build:legacy-lib && npm run build:legacy-runtime && npm run build:task-lib && husky"
96
102
  },
97
103
  "c8": {
98
104
  "reporter": [
@@ -198,6 +204,7 @@
198
204
  "bun": "1.3.14",
199
205
  "chalk": "^4.1.2",
200
206
  "commander": "^14.0.2",
207
+ "js-yaml": "^4.3.1",
201
208
  "node-pty": "^1.1.0",
202
209
  "omelette": "^0.4.17",
203
210
  "open": "^10.1.0",
@@ -223,7 +230,6 @@
223
230
  "eslint-plugin-sonarjs": "^3.0.5",
224
231
  "eslint-plugin-unused-imports": "^4.3.0",
225
232
  "husky": "^9.1.7",
226
- "js-yaml": "^4.2.0",
227
233
  "jscpd": "^3.5.10",
228
234
  "lint-staged": "^16.2.7",
229
235
  "mocha": "^11.7.5",
@@ -238,7 +244,7 @@
238
244
  },
239
245
  "overrides": {
240
246
  "cosmiconfig": {
241
- "js-yaml": "4.2.0"
247
+ "js-yaml": "4.3.1"
242
248
  },
243
249
  "adm-zip": "0.6.0",
244
250
  "sharp": "0.35.3",
@@ -1,8 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ const fs = require('fs');
3
4
  const path = require('path');
4
5
  const { spawnSync } = require('child_process');
5
6
 
7
+ const REPOSITORY_ROOT = path.join(__dirname, '..');
8
+ const LEGACY_LIB_OUTPUT = path.join(REPOSITORY_ROOT, 'lib', 'path-check.js');
9
+ const LEGACY_LIB_PROJECT = path.join(REPOSITORY_ROOT, 'tsconfig.legacy-lib.build.json');
6
10
  const LIFECYCLE_SCRIPTS = ['fix-node-pty-permissions.js', 'check-path.js'];
7
11
  const SETUP_INVITATION = 'Run zeroshot to finish setup.\n';
8
12
 
@@ -16,6 +20,22 @@ function shouldPrintSetupInvitation(env) {
16
20
  return globalInstall && !isTruthyEnvironmentFlag(env.CI);
17
21
  }
18
22
 
23
+ function ensureLegacyLibBuild({
24
+ outputExists = fs.existsSync,
25
+ resolveCompiler = () => require.resolve('typescript/bin/tsc'),
26
+ runCompiler = spawnSync,
27
+ } = {}) {
28
+ if (outputExists(LEGACY_LIB_OUTPUT)) return 0;
29
+
30
+ const result = runCompiler(
31
+ process.execPath,
32
+ [resolveCompiler(), '--project', LEGACY_LIB_PROJECT],
33
+ { stdio: 'inherit' }
34
+ );
35
+ if (result.error) throw result.error;
36
+ return result.status ?? 1;
37
+ }
38
+
19
39
  function runLifecycleScript(scriptName) {
20
40
  const result = spawnSync(process.execPath, [path.join(__dirname, scriptName)], {
21
41
  stdio: 'inherit',
@@ -27,8 +47,12 @@ function runLifecycleScript(scriptName) {
27
47
  function runPostinstall({
28
48
  env = process.env,
29
49
  stdout = process.stdout,
50
+ ensureBuild = ensureLegacyLibBuild,
30
51
  runScript = runLifecycleScript,
31
52
  } = {}) {
53
+ const buildStatus = ensureBuild();
54
+ if (buildStatus !== 0) return buildStatus;
55
+
32
56
  for (const scriptName of LIFECYCLE_SCRIPTS) {
33
57
  const status = runScript(scriptName);
34
58
  if (status !== 0) return status;
@@ -47,8 +71,11 @@ if (require.main === module) {
47
71
  }
48
72
 
49
73
  module.exports = {
74
+ LEGACY_LIB_OUTPUT,
75
+ LEGACY_LIB_PROJECT,
50
76
  LIFECYCLE_SCRIPTS,
51
77
  SETUP_INVITATION,
78
+ ensureLegacyLibBuild,
52
79
  runPostinstall,
53
80
  shouldPrintSetupInvitation,
54
81
  };
@@ -325,10 +325,7 @@ function stagedLockDependencies(cargoLock, workspaceCargoToml) {
325
325
 
326
326
  function stageCargoLock(cargoLock, version, workspaceCargoToml) {
327
327
  const targetPackage = workspaceLockPackage(cargoLock);
328
- let stagedPackage = targetPackage.text.replace(
329
- /^(version = ")[^"]+(")$/m,
330
- `$1${version}$2`
331
- );
328
+ let stagedPackage = targetPackage.text.replace(/^(version = ")[^"]+(")$/m, `$1${version}$2`);
332
329
  for (const dependency of stagedLockDependencies(cargoLock, workspaceCargoToml)) {
333
330
  const dependencyPattern = new RegExp(
334
331
  `^(\\s*")${escapeRegExp(dependency.name)}(?: [^"]+)?(",\\r?)$`,
@@ -339,10 +336,7 @@ function stageCargoLock(cargoLock, version, workspaceCargoToml) {
339
336
  `RUST_VERSION_STAGE_FAILED: Cargo.lock zeroshot-rust entry has no ${dependency.name} dependency`
340
337
  );
341
338
  }
342
- stagedPackage = stagedPackage.replace(
343
- dependencyPattern,
344
- `$1${dependency.reference}$2`
345
- );
339
+ stagedPackage = stagedPackage.replace(dependencyPattern, `$1${dependency.reference}$2`);
346
340
  }
347
341
  return (
348
342
  cargoLock.slice(0, targetPackage.start) +
@@ -359,10 +353,7 @@ function verifyStagedCargoLock(cargoLock, version, workspaceCargoToml) {
359
353
  );
360
354
  }
361
355
  for (const dependency of stagedLockDependencies(cargoLock, workspaceCargoToml)) {
362
- const dependencyPattern = new RegExp(
363
- `^\\s*"${escapeRegExp(dependency.reference)}",\\r?$`,
364
- 'm'
365
- );
356
+ const dependencyPattern = new RegExp(`^\\s*"${escapeRegExp(dependency.reference)}",\\r?$`, 'm');
366
357
  if (!dependencyPattern.test(targetPackage.text)) {
367
358
  throw new Error(
368
359
  `${VERSION_ERROR}: Cargo.lock zeroshot-rust dependency ${dependency.name} is not coupled to ${dependency.version}`
@@ -400,8 +391,7 @@ function stageVersion(
400
391
  function checkVersionCoupling(tag, cargoToml, cargoLock, workspaceCargoToml) {
401
392
  const useRepositoryFiles = cargoToml === undefined;
402
393
  const manifest =
403
- cargoToml ??
404
- fs.readFileSync(path.join(repositoryRoot, 'zeroshot-rust', 'Cargo.toml'), 'utf8');
394
+ cargoToml ?? fs.readFileSync(path.join(repositoryRoot, 'zeroshot-rust', 'Cargo.toml'), 'utf8');
405
395
  const releaseVersion = normalizeVersion(tag);
406
396
  const manifestVersion = cargoVersion(manifest);
407
397
  if (releaseVersion !== manifestVersion) {
@@ -416,8 +406,7 @@ function checkVersionCoupling(tag, cargoToml, cargoLock, workspaceCargoToml) {
416
406
  : undefined);
417
407
  if (lock !== undefined) {
418
408
  const workspace =
419
- workspaceCargoToml ??
420
- fs.readFileSync(path.join(repositoryRoot, 'Cargo.toml'), 'utf8');
409
+ workspaceCargoToml ?? fs.readFileSync(path.join(repositoryRoot, 'Cargo.toml'), 'utf8');
421
410
  verifyStagedCargoLock(lock, releaseVersion, workspace);
422
411
  }
423
412
  return releaseVersion;
@@ -483,9 +472,7 @@ const SCRIPT_INSTALL_CONTRACTS = Object.freeze([
483
472
  ]);
484
473
 
485
474
  function invokesRustDistribution(step) {
486
- return (
487
- typeof step.run === 'string' && RUST_DISTRIBUTION_INVOCATION.test(step.run)
488
- );
475
+ return typeof step.run === 'string' && RUST_DISTRIBUTION_INVOCATION.test(step.run);
489
476
  }
490
477
 
491
478
  function checkScriptInstall(job, { jobName, installName, command, checkoutRef }) {
@@ -507,9 +494,7 @@ function checkScriptInstall(job, { jobName, installName, command, checkoutRef })
507
494
  checkout.with.repository !== '${{ github.repository }}') ||
508
495
  checkout.with?.ref !== checkoutRef
509
496
  ) {
510
- failIntegrity(
511
- `${jobName} must checkout expected current repository source at workspace root`
512
- );
497
+ failIntegrity(`${jobName} must checkout expected current repository source at workspace root`);
513
498
  }
514
499
  const installIndex = job.steps.indexOf(install);
515
500
  const checkoutIndex = job.steps.indexOf(checkout);
@@ -745,11 +730,12 @@ function hasValidSri(integrity) {
745
730
  }
746
731
 
747
732
  function checkScriptDependencies(packageManifest, packageLock) {
748
- const directSpec = packageManifest.devDependencies?.['js-yaml'];
733
+ // js-yaml is a runtime dependency: lib/compose-utils.js requires it from the published package.
734
+ const directSpec = packageManifest.dependencies?.['js-yaml'];
749
735
  if (typeof directSpec !== 'string' || directSpec.length === 0) {
750
- failIntegrity('rust-distribution.js requires a direct js-yaml devDependency');
736
+ failIntegrity('rust-distribution.js requires a direct js-yaml dependency');
751
737
  }
752
- const lockSpec = packageLock.packages?.['']?.devDependencies?.['js-yaml'];
738
+ const lockSpec = packageLock.packages?.['']?.dependencies?.['js-yaml'];
753
739
  if (lockSpec !== directSpec) {
754
740
  failIntegrity('package-lock root js-yaml spec must match package.json');
755
741
  }
@@ -773,12 +759,8 @@ function checkRepository(
773
759
  shimTargets = JSON.parse(
774
760
  fs.readFileSync(path.join(repositoryRoot, 'npm', 'zeroshot-rust', 'targets.json'), 'utf8')
775
761
  ),
776
- packageManifest = JSON.parse(
777
- fs.readFileSync(path.join(repositoryRoot, 'package.json'), 'utf8')
778
- ),
779
- packageLock = JSON.parse(
780
- fs.readFileSync(path.join(repositoryRoot, 'package-lock.json'), 'utf8')
781
- )
762
+ packageManifest = JSON.parse(fs.readFileSync(path.join(repositoryRoot, 'package.json'), 'utf8')),
763
+ packageLock = JSON.parse(fs.readFileSync(path.join(repositoryRoot, 'package-lock.json'), 'utf8'))
782
764
  ) {
783
765
  let document;
784
766
  try {
@@ -849,13 +831,7 @@ function run() {
849
831
  }
850
832
  if (command === 'smoke') {
851
833
  const binaryPath = path.resolve(argument('binary'));
852
- const result = childProcess.spawnSync(binaryPath, [], { stdio: 'inherit' });
853
- if (result.error) throw result.error;
854
- if (result.signal || result.status !== 0) {
855
- throw new Error(
856
- `RUST_BINARY_SMOKE_FAILED: status=${result.status} signal=${result.signal || 'none'}`
857
- );
858
- }
834
+ smokeExecutable(binaryPath, 'RUST_BINARY_SMOKE_FAILED');
859
835
  process.stdout.write(`Rust release executable exited 0: ${binaryPath}\n`);
860
836
  return;
861
837
  }
@@ -871,13 +847,7 @@ function run() {
871
847
  declaration.executable
872
848
  );
873
849
  fs.writeFileSync(binaryPath, executable, { mode: 0o755 });
874
- const result = childProcess.spawnSync(binaryPath, [], { stdio: 'inherit' });
875
- if (result.error) throw result.error;
876
- if (result.signal || result.status !== 0) {
877
- throw new Error(
878
- `RUST_ARCHIVE_SMOKE_FAILED: status=${result.status} signal=${result.signal || 'none'}`
879
- );
880
- }
850
+ smokeExecutable(binaryPath, 'RUST_ARCHIVE_SMOKE_FAILED');
881
851
  } finally {
882
852
  fs.rmSync(directory, { recursive: true, force: true });
883
853
  }
@@ -903,6 +873,26 @@ function run() {
903
873
  );
904
874
  }
905
875
 
876
+ const SMOKE_GREETING = Buffer.from('zeroshot release smoke\n');
877
+
878
+ function smokeExecutable(binaryPath, failureCode) {
879
+ const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'zeroshot-rust-executable-smoke-'));
880
+ try {
881
+ fs.writeFileSync(path.join(directory, 'greeting.txt'), SMOKE_GREETING);
882
+ const result = childProcess.spawnSync(binaryPath, ['--native-validate-greeting'], {
883
+ cwd: directory,
884
+ input: SMOKE_GREETING,
885
+ stdio: ['pipe', 'inherit', 'inherit'],
886
+ });
887
+ if (result.error) throw result.error;
888
+ if (result.signal || result.status !== 0) {
889
+ throw new Error(`${failureCode}: status=${result.status} signal=${result.signal || 'none'}`);
890
+ }
891
+ } finally {
892
+ fs.rmSync(directory, { recursive: true, force: true });
893
+ }
894
+ }
895
+
906
896
  if (require.main === module) {
907
897
  try {
908
898
  run();
@@ -926,6 +916,7 @@ module.exports = {
926
916
  packageTarget,
927
917
  parseChecksumManifest,
928
918
  sha256,
919
+ smokeExecutable,
929
920
  targetForHost,
930
921
  stageVersion,
931
922
  targets,
@@ -1,55 +1,45 @@
1
- const { normalizeCommandProofs } = require('../command-proofs');
2
-
1
+ "use strict";
2
+ function isCommandProofsModule(value) {
3
+ return (typeof value === 'object' &&
4
+ value !== null &&
5
+ 'normalizeCommandProofs' in value &&
6
+ typeof value.normalizeCommandProofs === 'function');
7
+ }
8
+ const commandProofsModule = require('../command-proofs');
9
+ if (!isCommandProofsModule(commandProofsModule)) {
10
+ throw new TypeError('command-proofs must export normalizeCommandProofs');
11
+ }
12
+ const normalizeCommandProofs = commandProofsModule.normalizeCommandProofs;
3
13
  function appendProofDetails(lines, proof, index) {
4
- const scope = proof.scope ? `, scope: ${proof.scope}` : '';
5
- lines.push(`${index + 1}. id: ${proof.id}, profile: ${proof.profile}${scope}`);
6
- if (proof.description) {
7
- lines.push(` description: ${proof.description}`);
8
- }
9
- lines.push(` command: ${proof.command}`);
10
- lines.push(` helper: zeroshot cmdproof check ${proof.id}`);
14
+ const scope = proof.scope ? `, scope: ${proof.scope}` : '';
15
+ lines.push(`${index + 1}. id: ${proof.id}, profile: ${proof.profile}${scope}`);
16
+ if (proof.description) {
17
+ lines.push(` description: ${proof.description}`);
18
+ }
19
+ lines.push(` command: ${proof.command}`);
20
+ lines.push(` helper: zeroshot cmdproof check ${proof.id}`);
11
21
  }
12
-
13
22
  function buildWorkerInstructions(lines) {
14
- lines.push(
15
- '',
16
- 'For these exact commands:',
17
- '- Run `zeroshot cmdproof check <id>` instead of the raw command.',
18
- '- Treat the helper exit code as the command exit code.',
19
- '- If you need to mention evidence, include the helper output and the configured command id.',
20
- ''
21
- );
23
+ lines.push('', 'For these exact commands:', '- Run `zeroshot cmdproof check <id>` instead of the raw command.', '- Treat the helper exit code as the command exit code.', '- If you need to mention evidence, include the helper output and the configured command id.', '');
22
24
  }
23
-
24
25
  function buildValidatorInstructions(lines) {
25
- lines.push(
26
- '',
27
- 'For proof-backed validation:',
28
- '- Run `zeroshot cmdproof check <id>` before considering the raw command.',
29
- '- Use the helper output as quality-gate evidence.',
30
- '- Only run the raw command directly if the helper itself is unavailable.',
31
- ''
32
- );
26
+ lines.push('', 'For proof-backed validation:', '- Run `zeroshot cmdproof check <id>` before considering the raw command.', '- Use the helper output as quality-gate evidence.', '- Only run the raw command directly if the helper itself is unavailable.', '');
33
27
  }
34
-
35
28
  function buildCommandProofsSection(config) {
36
- const proofs = normalizeCommandProofs(config.commandProofs);
37
- if (proofs.length === 0) {
38
- return '';
39
- }
40
-
41
- const lines = ['## Reusable Command Proofs', '', 'Configured proof-backed commands:'];
42
- proofs.forEach((proof, index) => appendProofDetails(lines, proof, index));
43
-
44
- if (config.role === 'validator') {
45
- buildValidatorInstructions(lines);
46
- } else {
47
- buildWorkerInstructions(lines);
48
- }
49
-
50
- return lines.join('\n');
29
+ const proofs = normalizeCommandProofs(config.commandProofs);
30
+ if (proofs.length === 0) {
31
+ return '';
32
+ }
33
+ const lines = ['## Reusable Command Proofs', '', 'Configured proof-backed commands:'];
34
+ proofs.forEach((proof, index) => appendProofDetails(lines, proof, index));
35
+ if (config.role === 'validator') {
36
+ buildValidatorInstructions(lines);
37
+ }
38
+ else {
39
+ buildWorkerInstructions(lines);
40
+ }
41
+ return lines.join('\n');
51
42
  }
52
-
53
43
  module.exports = {
54
- buildCommandProofsSection,
44
+ buildCommandProofsSection,
55
45
  };
@@ -0,0 +1,87 @@
1
+ type StringList = string[];
2
+
3
+ interface CommandProof {
4
+ id: string;
5
+ profile: string;
6
+ command: string;
7
+ scope?: string;
8
+ description?: string;
9
+ }
10
+
11
+ interface AgentCommandProofConfig {
12
+ role?: string;
13
+ commandProofs?: unknown;
14
+ }
15
+
16
+ interface CommandProofsModule {
17
+ normalizeCommandProofs(value: unknown): CommandProof[];
18
+ }
19
+
20
+ function isCommandProofsModule(value: unknown): value is CommandProofsModule {
21
+ return (
22
+ typeof value === 'object' &&
23
+ value !== null &&
24
+ 'normalizeCommandProofs' in value &&
25
+ typeof value.normalizeCommandProofs === 'function'
26
+ );
27
+ }
28
+
29
+ const commandProofsModule: unknown = require('../command-proofs');
30
+ if (!isCommandProofsModule(commandProofsModule)) {
31
+ throw new TypeError('command-proofs must export normalizeCommandProofs');
32
+ }
33
+ const normalizeCommandProofs = commandProofsModule.normalizeCommandProofs;
34
+
35
+ function appendProofDetails(lines: StringList, proof: CommandProof, index: number): void {
36
+ const scope = proof.scope ? `, scope: ${proof.scope}` : '';
37
+ lines.push(`${index + 1}. id: ${proof.id}, profile: ${proof.profile}${scope}`);
38
+ if (proof.description) {
39
+ lines.push(` description: ${proof.description}`);
40
+ }
41
+ lines.push(` command: ${proof.command}`);
42
+ lines.push(` helper: zeroshot cmdproof check ${proof.id}`);
43
+ }
44
+
45
+ function buildWorkerInstructions(lines: StringList): void {
46
+ lines.push(
47
+ '',
48
+ 'For these exact commands:',
49
+ '- Run `zeroshot cmdproof check <id>` instead of the raw command.',
50
+ '- Treat the helper exit code as the command exit code.',
51
+ '- If you need to mention evidence, include the helper output and the configured command id.',
52
+ ''
53
+ );
54
+ }
55
+
56
+ function buildValidatorInstructions(lines: StringList): void {
57
+ lines.push(
58
+ '',
59
+ 'For proof-backed validation:',
60
+ '- Run `zeroshot cmdproof check <id>` before considering the raw command.',
61
+ '- Use the helper output as quality-gate evidence.',
62
+ '- Only run the raw command directly if the helper itself is unavailable.',
63
+ ''
64
+ );
65
+ }
66
+
67
+ function buildCommandProofsSection(config: AgentCommandProofConfig): string {
68
+ const proofs = normalizeCommandProofs(config.commandProofs);
69
+ if (proofs.length === 0) {
70
+ return '';
71
+ }
72
+
73
+ const lines = ['## Reusable Command Proofs', '', 'Configured proof-backed commands:'];
74
+ proofs.forEach((proof, index) => appendProofDetails(lines, proof, index));
75
+
76
+ if (config.role === 'validator') {
77
+ buildValidatorInstructions(lines);
78
+ } else {
79
+ buildWorkerInstructions(lines);
80
+ }
81
+
82
+ return lines.join('\n');
83
+ }
84
+
85
+ export = {
86
+ buildCommandProofsSection,
87
+ };