@the-open-engine/zeroshot 6.38.1 → 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 (377) 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/cluster/generated/protocol-schema.cjs +1 -1
  13. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  14. package/lib/cluster/generated/protocol.d.cts +8 -0
  15. package/lib/cluster/generated/protocol.d.mts +8 -0
  16. package/lib/cluster/generated/protocol.d.ts +8 -0
  17. package/lib/clusters-registry.d.ts +23 -0
  18. package/lib/clusters-registry.js +17 -29
  19. package/lib/completion.d.ts +12 -0
  20. package/lib/completion.js +84 -94
  21. package/lib/compose-utils.d.ts +32 -0
  22. package/lib/compose-utils.js +57 -72
  23. package/lib/detached-startup.d.ts +83 -0
  24. package/lib/detached-startup.js +231 -302
  25. package/lib/docker-config.d.ts +43 -0
  26. package/lib/docker-config.js +150 -325
  27. package/lib/docker-env-auth.d.ts +17 -0
  28. package/lib/docker-env-auth.js +75 -0
  29. package/lib/git-remote-utils.d.ts +48 -0
  30. package/lib/git-remote-utils.js +147 -213
  31. package/lib/id-detector.d.ts +15 -0
  32. package/lib/id-detector.js +37 -41
  33. package/lib/path-check.d.ts +30 -0
  34. package/lib/path-check.js +42 -45
  35. package/lib/process-liveness.d.ts +16 -0
  36. package/lib/process-liveness.js +19 -12
  37. package/lib/provider-credential-path.d.ts +16 -0
  38. package/lib/provider-credential-path.js +31 -29
  39. package/lib/provider-defaults.d.ts +30 -0
  40. package/lib/provider-defaults.js +47 -42
  41. package/lib/provider-detection.d.ts +11 -0
  42. package/lib/provider-detection.js +91 -54
  43. package/lib/provider-names.d.ts +38 -0
  44. package/lib/provider-names.js +56 -64
  45. package/lib/repo-settings.d.ts +28 -0
  46. package/lib/repo-settings.js +83 -59
  47. package/lib/run-mode.d.ts +21 -0
  48. package/lib/run-mode.js +21 -20
  49. package/lib/run-plan.d.ts +28 -0
  50. package/lib/run-plan.js +17 -16
  51. package/lib/settings/claude-auth.d.ts +35 -0
  52. package/lib/settings/claude-auth.js +30 -47
  53. package/lib/settings-defaults.d.ts +20 -0
  54. package/lib/settings-defaults.js +149 -0
  55. package/lib/settings-error.d.ts +7 -0
  56. package/lib/settings-error.js +8 -0
  57. package/lib/settings-issue-providers.d.ts +10 -0
  58. package/lib/settings-issue-providers.js +12 -0
  59. package/lib/settings-models.d.ts +22 -0
  60. package/lib/settings-models.js +93 -0
  61. package/lib/settings-storage.d.ts +23 -0
  62. package/lib/settings-storage.js +205 -0
  63. package/lib/settings-validation.d.ts +7 -0
  64. package/lib/settings-validation.js +182 -0
  65. package/lib/settings.d.ts +29 -0
  66. package/lib/settings.js +41 -736
  67. package/lib/setup-apply-types.d.ts +66 -0
  68. package/lib/setup-apply-types.js +2 -0
  69. package/lib/setup-apply.d.ts +39 -0
  70. package/lib/setup-apply.js +267 -264
  71. package/lib/setup-journal.d.ts +41 -0
  72. package/lib/setup-journal.js +119 -76
  73. package/lib/setup-plan-types.d.ts +102 -0
  74. package/lib/setup-plan-types.js +2 -0
  75. package/lib/setup-plan.d.ts +30 -0
  76. package/lib/setup-plan.js +300 -324
  77. package/lib/setup-undo.d.ts +44 -0
  78. package/lib/setup-undo.js +61 -74
  79. package/lib/start-cluster-config.d.ts +26 -0
  80. package/lib/start-cluster-config.js +56 -0
  81. package/lib/start-cluster-environment.d.ts +40 -0
  82. package/lib/start-cluster-environment.js +134 -0
  83. package/lib/start-cluster-run-options.d.ts +53 -0
  84. package/lib/start-cluster-run-options.js +147 -0
  85. package/lib/start-cluster.d.ts +64 -0
  86. package/lib/start-cluster.js +98 -454
  87. package/lib/stream-json-parser.d.ts +17 -0
  88. package/lib/stream-json-parser.js +51 -52
  89. package/npm-shrinkwrap.json +2 -2
  90. package/package.json +12 -6
  91. package/scripts/postinstall.js +27 -0
  92. package/scripts/rust-distribution.js +23 -14
  93. package/src/agent/agent-command-proofs-context.js +35 -45
  94. package/src/agent/agent-command-proofs-context.ts +87 -0
  95. package/src/agent/agent-config-settings.js +19 -0
  96. package/src/agent/agent-config-settings.ts +41 -0
  97. package/src/agent/agent-config.js +122 -231
  98. package/src/agent/agent-config.ts +285 -0
  99. package/src/agent/agent-context-builder.js +38 -273
  100. package/src/agent/agent-context-builder.ts +51 -0
  101. package/src/agent/agent-context-environment-sections.js +105 -0
  102. package/src/agent/agent-context-environment-sections.ts +134 -0
  103. package/src/agent/agent-context-packs.js +165 -0
  104. package/src/agent/agent-context-packs.ts +296 -0
  105. package/src/agent/agent-context-prompt-sections.js +100 -0
  106. package/src/agent/agent-context-prompt-sections.ts +148 -0
  107. package/src/agent/agent-context-sections.js +25 -334
  108. package/src/agent/agent-context-sections.ts +36 -0
  109. package/src/agent/agent-context-sources.js +96 -149
  110. package/src/agent/agent-context-sources.ts +253 -0
  111. package/src/agent/agent-context-types.js +2 -0
  112. package/src/agent/agent-context-types.ts +132 -0
  113. package/src/agent/agent-context-validation-sections.js +73 -0
  114. package/src/agent/agent-context-validation-sections.ts +129 -0
  115. package/src/agent/agent-input-injector.js +99 -118
  116. package/src/agent/agent-input-injector.ts +195 -0
  117. package/src/agent/agent-liveness-poll.js +74 -78
  118. package/src/agent/agent-liveness-poll.ts +163 -0
  119. package/src/agent/agent-quality-gate-schema.js +77 -86
  120. package/src/agent/agent-quality-gate-schema.ts +135 -0
  121. package/src/agent/agent-quality-gates-context.js +44 -50
  122. package/src/agent/agent-quality-gates-context.ts +91 -0
  123. package/src/agent/agent-stuck-detector.js +171 -239
  124. package/src/agent/agent-stuck-detector.ts +288 -0
  125. package/src/agent/agent-trigger-evaluator.js +29 -46
  126. package/src/agent/agent-trigger-evaluator.ts +98 -0
  127. package/src/agent/context-metrics.js +110 -141
  128. package/src/agent/context-metrics.ts +261 -0
  129. package/src/agent/context-pack-builder.js +72 -358
  130. package/src/agent/context-pack-builder.ts +105 -0
  131. package/src/agent/context-pack-core.js +70 -0
  132. package/src/agent/context-pack-core.ts +96 -0
  133. package/src/agent/context-pack-selection.js +119 -0
  134. package/src/agent/context-pack-selection.ts +187 -0
  135. package/src/agent/context-pack-truncation.js +139 -0
  136. package/src/agent/context-pack-truncation.ts +208 -0
  137. package/src/agent/context-pack-types.js +2 -0
  138. package/src/agent/context-pack-types.ts +98 -0
  139. package/src/agent/context-replay-policy.js +30 -39
  140. package/src/agent/context-replay-policy.ts +71 -0
  141. package/src/agent/critical-agent-policy.js +6 -10
  142. package/src/agent/critical-agent-policy.ts +20 -0
  143. package/src/agent/guidance-queue.js +74 -87
  144. package/src/agent/guidance-queue.ts +166 -0
  145. package/src/agent/output-extraction-error-detail.js +45 -0
  146. package/src/agent/output-extraction-error-detail.ts +49 -0
  147. package/src/agent/output-extraction-failures.js +125 -0
  148. package/src/agent/output-extraction-failures.ts +149 -0
  149. package/src/agent/output-extraction-json.js +234 -0
  150. package/src/agent/output-extraction-json.ts +235 -0
  151. package/src/agent/output-extraction-pi.js +124 -0
  152. package/src/agent/output-extraction-pi.ts +137 -0
  153. package/src/agent/output-extraction-types.js +2 -0
  154. package/src/agent/output-extraction-types.ts +49 -0
  155. package/src/agent/output-extraction.js +17 -617
  156. package/src/agent/output-extraction.ts +30 -0
  157. package/src/agent/output-reformatter-errors.js +83 -0
  158. package/src/agent/output-reformatter-errors.ts +106 -0
  159. package/src/agent/output-reformatter-types.js +2 -0
  160. package/src/agent/output-reformatter-types.ts +86 -0
  161. package/src/agent/output-reformatter.js +140 -185
  162. package/src/agent/output-reformatter.ts +238 -0
  163. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  164. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  165. package/src/agent/pi-terminal-lifecycle.js +186 -206
  166. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  167. package/src/agent/provider-control-plane.js +22 -21
  168. package/src/agent/provider-control-plane.ts +52 -0
  169. package/src/agent/provider-terminal-failure-types.js +2 -0
  170. package/src/agent/provider-terminal-failure-types.ts +60 -0
  171. package/src/agent/provider-terminal-failure.js +194 -191
  172. package/src/agent/provider-terminal-failure.ts +262 -0
  173. package/src/agent/rate-limit-backoff.js +31 -74
  174. package/src/agent/rate-limit-backoff.ts +71 -0
  175. package/src/agent/schema-utils.js +85 -125
  176. package/src/agent/schema-utils.ts +148 -0
  177. package/src/agent/structured-output-error.js +34 -33
  178. package/src/agent/structured-output-error.ts +105 -0
  179. package/src/agent/validation-platform.js +27 -27
  180. package/src/agent/validation-platform.ts +49 -0
  181. package/src/attach/attach-client.js +232 -405
  182. package/src/attach/attach-client.ts +300 -0
  183. package/src/attach/attach-server-cleanup.js +43 -0
  184. package/src/attach/attach-server-cleanup.ts +39 -0
  185. package/src/attach/attach-server-clients.js +117 -0
  186. package/src/attach/attach-server-clients.ts +122 -0
  187. package/src/attach/attach-server-events.js +38 -0
  188. package/src/attach/attach-server-events.ts +36 -0
  189. package/src/attach/attach-server-pty.js +45 -0
  190. package/src/attach/attach-server-pty.ts +64 -0
  191. package/src/attach/attach-server-runtime.js +73 -0
  192. package/src/attach/attach-server-runtime.ts +62 -0
  193. package/src/attach/attach-server-socket.js +28 -0
  194. package/src/attach/attach-server-socket.ts +23 -0
  195. package/src/attach/attach-server-types.js +2 -0
  196. package/src/attach/attach-server-types.ts +82 -0
  197. package/src/attach/attach-server.js +106 -523
  198. package/src/attach/attach-server.ts +158 -0
  199. package/src/attach/index.js +18 -35
  200. package/src/attach/index.ts +18 -0
  201. package/src/attach/protocol.js +95 -184
  202. package/src/attach/protocol.ts +181 -0
  203. package/src/attach/ring-buffer.js +76 -102
  204. package/src/attach/ring-buffer.ts +109 -0
  205. package/src/attach/send-input.js +64 -75
  206. package/src/attach/send-input.ts +94 -0
  207. package/src/attach/socket-discovery.js +164 -218
  208. package/src/attach/socket-discovery.ts +230 -0
  209. package/src/attach/socket-paths.js +42 -61
  210. package/src/attach/socket-paths.ts +81 -0
  211. package/src/claude-credentials.js +51 -54
  212. package/src/claude-credentials.ts +89 -0
  213. package/src/cluster/generated/protocol-schema.ts +1 -1
  214. package/src/cluster/generated/protocol.ts +2 -1
  215. package/src/command-proofs.js +110 -141
  216. package/src/command-proofs.ts +216 -0
  217. package/src/config-router.js +81 -73
  218. package/src/config-router.ts +131 -0
  219. package/src/copy-worker.js +53 -29
  220. package/src/copy-worker.ts +75 -0
  221. package/src/darwin-keychain-boundary.js +80 -111
  222. package/src/darwin-keychain-boundary.ts +148 -0
  223. package/src/guidance-topics.js +4 -5
  224. package/src/guidance-topics.ts +10 -0
  225. package/src/input-helpers.js +33 -54
  226. package/src/input-helpers.ts +58 -0
  227. package/src/ledger-sequence.js +45 -48
  228. package/src/ledger-sequence.ts +63 -0
  229. package/src/legacy-lib/clusters-registry.ts +40 -0
  230. package/src/legacy-lib/completion.ts +148 -0
  231. package/src/legacy-lib/compose-utils.ts +102 -0
  232. package/src/legacy-lib/detached-startup.ts +449 -0
  233. package/src/legacy-lib/docker-config.ts +282 -0
  234. package/src/legacy-lib/docker-env-auth.ts +116 -0
  235. package/src/legacy-lib/git-remote-utils.ts +244 -0
  236. package/src/legacy-lib/id-detector.ts +57 -0
  237. package/src/legacy-lib/js-yaml.d.ts +3 -0
  238. package/src/legacy-lib/omelette.d.ts +15 -0
  239. package/src/legacy-lib/path-check.ts +89 -0
  240. package/src/legacy-lib/process-liveness.ts +36 -0
  241. package/src/legacy-lib/provider-credential-path.ts +57 -0
  242. package/src/legacy-lib/provider-defaults.ts +114 -0
  243. package/src/legacy-lib/provider-detection.ts +67 -0
  244. package/src/legacy-lib/provider-names.ts +126 -0
  245. package/src/legacy-lib/repo-settings.ts +88 -0
  246. package/src/legacy-lib/run-mode.ts +58 -0
  247. package/src/legacy-lib/run-plan.ts +49 -0
  248. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  249. package/src/legacy-lib/settings-defaults.ts +212 -0
  250. package/src/legacy-lib/settings-error.ts +8 -0
  251. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  252. package/src/legacy-lib/settings-models.ts +124 -0
  253. package/src/legacy-lib/settings-storage.ts +277 -0
  254. package/src/legacy-lib/settings-validation.ts +220 -0
  255. package/src/legacy-lib/settings.ts +87 -0
  256. package/src/legacy-lib/setup-apply-types.ts +70 -0
  257. package/src/legacy-lib/setup-apply.ts +456 -0
  258. package/src/legacy-lib/setup-journal.ts +185 -0
  259. package/src/legacy-lib/setup-plan-types.ts +96 -0
  260. package/src/legacy-lib/setup-plan.ts +500 -0
  261. package/src/legacy-lib/setup-undo.ts +142 -0
  262. package/src/legacy-lib/start-cluster-config.ts +124 -0
  263. package/src/legacy-lib/start-cluster-environment.ts +165 -0
  264. package/src/legacy-lib/start-cluster-run-options.ts +279 -0
  265. package/src/legacy-lib/start-cluster.ts +237 -0
  266. package/src/legacy-lib/stream-json-parser.ts +88 -0
  267. package/src/message-buffer.js +55 -71
  268. package/src/message-buffer.ts +107 -0
  269. package/src/message-bus-bridge.js +92 -133
  270. package/src/message-bus-bridge.ts +149 -0
  271. package/src/name-generator-shared.js +220 -0
  272. package/src/name-generator-shared.ts +231 -0
  273. package/src/name-generator.js +8 -217
  274. package/src/name-generator.ts +27 -0
  275. package/src/omp-blob-root.js +83 -64
  276. package/src/omp-blob-root.ts +116 -0
  277. package/src/omp-config-overlay.js +65 -38
  278. package/src/omp-config-overlay.ts +110 -0
  279. package/src/omp-execution-fingerprint.js +38 -43
  280. package/src/omp-execution-fingerprint.ts +92 -0
  281. package/src/omp-session-limits.js +10 -15
  282. package/src/omp-session-limits.ts +53 -0
  283. package/src/omp-session-partition.js +2 -2
  284. package/src/omp-session-verifier.js +1 -1
  285. package/src/orchestrator.js +19 -4
  286. package/src/providers/anthropic/index.js +3 -1
  287. package/src/providers/anthropic/index.ts +13 -0
  288. package/src/providers/capabilities.js +19 -27
  289. package/src/providers/capabilities.ts +44 -0
  290. package/src/providers/google/index.js +3 -1
  291. package/src/providers/google/index.ts +13 -0
  292. package/src/providers/openai/index.js +3 -1
  293. package/src/providers/openai/index.ts +13 -0
  294. package/src/providers/opencode/index.js +3 -1
  295. package/src/providers/opencode/index.ts +13 -0
  296. package/src/quality-gates.js +67 -127
  297. package/src/quality-gates.ts +149 -0
  298. package/src/repo-settings-access.js +40 -0
  299. package/src/repo-settings-access.ts +64 -0
  300. package/src/schemas/sub-cluster.js +127 -183
  301. package/src/schemas/sub-cluster.ts +238 -0
  302. package/src/state-snapshot-normalization.js +224 -0
  303. package/src/state-snapshot-normalization.ts +222 -0
  304. package/src/state-snapshot.js +192 -359
  305. package/src/state-snapshot.ts +291 -0
  306. package/src/state-snapshotter.js +118 -130
  307. package/src/state-snapshotter.ts +167 -0
  308. package/src/sub-cluster-wrapper.js +4 -13
  309. package/src/task-run-model-args.js +87 -124
  310. package/src/task-run-model-args.ts +204 -0
  311. package/src/task-runner.js +5 -25
  312. package/src/task-runner.ts +28 -0
  313. package/src/task-startup-error.js +73 -58
  314. package/src/task-startup-error.ts +126 -0
  315. package/src/template-validation/consensus-gate-contracts.js +2 -0
  316. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  317. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  318. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  319. package/src/template-validation/consensus-gate-stage.js +34 -0
  320. package/src/template-validation/consensus-gate-stage.ts +56 -0
  321. package/src/template-validation/random-topology-contracts.js +2 -0
  322. package/src/template-validation/random-topology-contracts.ts +54 -0
  323. package/src/template-validation/random-topology-dispatch.js +25 -0
  324. package/src/template-validation/random-topology-dispatch.ts +33 -0
  325. package/src/template-validation/random-topology-message-loop.js +53 -0
  326. package/src/template-validation/random-topology-message-loop.ts +73 -0
  327. package/src/template-validation/random-topology-operations.js +79 -0
  328. package/src/template-validation/random-topology-operations.ts +101 -0
  329. package/src/template-validation/random-topology-runtime.js +25 -0
  330. package/src/template-validation/random-topology-runtime.ts +43 -0
  331. package/src/template-validation/random-topology-scenario.js +52 -0
  332. package/src/template-validation/random-topology-scenario.ts +57 -0
  333. package/src/template-validation/random-topology-schema.js +159 -0
  334. package/src/template-validation/random-topology-schema.ts +190 -0
  335. package/src/template-validation/random-topology-state.js +28 -0
  336. package/src/template-validation/random-topology-state.ts +30 -0
  337. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  338. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  339. package/src/template-validation/random-topology-trigger.js +75 -0
  340. package/src/template-validation/random-topology-trigger.ts +88 -0
  341. package/src/template-validation/report-formatter.js +40 -46
  342. package/src/template-validation/report-formatter.ts +101 -0
  343. package/src/template-validation/simulate-consensus-gates.js +111 -302
  344. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  345. package/src/template-validation/simulate-random-topology.js +26 -519
  346. package/src/template-validation/simulate-random-topology.ts +57 -0
  347. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  348. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  349. package/src/template-validation/simulation-agent-runtime.js +25 -0
  350. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  351. package/src/template-validation/simulation-agent.js +29 -0
  352. package/src/template-validation/simulation-agent.ts +73 -0
  353. package/src/template-validation/simulation-runtime.js +34 -0
  354. package/src/template-validation/simulation-runtime.ts +72 -0
  355. package/src/template-validation/two-stage-contracts.js +2 -0
  356. package/src/template-validation/two-stage-contracts.ts +41 -0
  357. package/src/template-validation/two-stage-inputs.js +21 -0
  358. package/src/template-validation/two-stage-inputs.ts +29 -0
  359. package/src/template-validation/two-stage-results.js +30 -0
  360. package/src/template-validation/two-stage-results.ts +40 -0
  361. package/src/template-validation/two-stage-scenario.js +86 -0
  362. package/src/template-validation/two-stage-scenario.ts +120 -0
  363. package/src/worktree-claude-config.js +182 -220
  364. package/src/worktree-claude-config.ts +272 -0
  365. package/src/worktree-tooling-env.js +103 -125
  366. package/src/worktree-tooling-env.ts +142 -0
  367. package/task-lib/completion.js +2 -3
  368. package/task-lib/completion.ts +9 -0
  369. package/task-lib/config.js +1 -4
  370. package/task-lib/config.ts +11 -0
  371. package/task-lib/name-generator.js +4 -226
  372. package/task-lib/name-generator.ts +11 -0
  373. package/task-lib/omp-session-cleanup.js +1 -1
  374. package/task-lib/omp-storage-root.js +8 -12
  375. package/task-lib/omp-storage-root.ts +62 -0
  376. package/task-lib/process-termination.js +143 -166
  377. 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.0",
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.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
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.0",
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": [
@@ -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
  };
@@ -849,13 +849,7 @@ function run() {
849
849
  }
850
850
  if (command === 'smoke') {
851
851
  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
- }
852
+ smokeExecutable(binaryPath, 'RUST_BINARY_SMOKE_FAILED');
859
853
  process.stdout.write(`Rust release executable exited 0: ${binaryPath}\n`);
860
854
  return;
861
855
  }
@@ -871,13 +865,7 @@ function run() {
871
865
  declaration.executable
872
866
  );
873
867
  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
- }
868
+ smokeExecutable(binaryPath, 'RUST_ARCHIVE_SMOKE_FAILED');
881
869
  } finally {
882
870
  fs.rmSync(directory, { recursive: true, force: true });
883
871
  }
@@ -903,6 +891,26 @@ function run() {
903
891
  );
904
892
  }
905
893
 
894
+ const SMOKE_GREETING = Buffer.from('zeroshot release smoke\n');
895
+
896
+ function smokeExecutable(binaryPath, failureCode) {
897
+ const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'zeroshot-rust-executable-smoke-'));
898
+ try {
899
+ fs.writeFileSync(path.join(directory, 'greeting.txt'), SMOKE_GREETING);
900
+ const result = childProcess.spawnSync(binaryPath, ['--native-validate-greeting'], {
901
+ cwd: directory,
902
+ input: SMOKE_GREETING,
903
+ stdio: ['pipe', 'inherit', 'inherit'],
904
+ });
905
+ if (result.error) throw result.error;
906
+ if (result.signal || result.status !== 0) {
907
+ throw new Error(`${failureCode}: status=${result.status} signal=${result.signal || 'none'}`);
908
+ }
909
+ } finally {
910
+ fs.rmSync(directory, { recursive: true, force: true });
911
+ }
912
+ }
913
+
906
914
  if (require.main === module) {
907
915
  try {
908
916
  run();
@@ -926,6 +934,7 @@ module.exports = {
926
934
  packageTarget,
927
935
  parseChecksumManifest,
928
936
  sha256,
937
+ smokeExecutable,
929
938
  targetForHost,
930
939
  stageVersion,
931
940
  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
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ function isRecord(value) {
3
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
4
+ }
5
+ function isStringArray(value) {
6
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
7
+ }
8
+ function isSettingsFacade(value) {
9
+ return (isRecord(value) &&
10
+ typeof value.loadSettings === 'function' &&
11
+ typeof value.validateModelAgainstMax === 'function' &&
12
+ isStringArray(value.VALID_MODELS));
13
+ }
14
+ const rawSettings = require('../../lib/settings');
15
+ if (!isSettingsFacade(rawSettings)) {
16
+ throw new TypeError('settings module must expose model validation');
17
+ }
18
+ const verifiedSettings = rawSettings;
19
+ module.exports = verifiedSettings;
@@ -0,0 +1,41 @@
1
+ interface SettingsRecord extends Record<string, unknown> {
2
+ maxModel: string;
3
+ minModel?: string | null;
4
+ strictSchema?: boolean;
5
+ }
6
+
7
+ interface SettingsFacade {
8
+ loadSettings(): SettingsRecord;
9
+ validateModelAgainstMax(
10
+ requestedModel: string | null | undefined,
11
+ maxModel: string,
12
+ minModel?: string | null
13
+ ): string;
14
+ VALID_MODELS: readonly string[];
15
+ }
16
+
17
+ function isRecord(value: unknown): value is Record<string, unknown> {
18
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
19
+ }
20
+
21
+ function isStringArray(value: unknown): value is readonly string[] {
22
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
23
+ }
24
+
25
+ function isSettingsFacade(value: unknown): value is SettingsFacade {
26
+ return (
27
+ isRecord(value) &&
28
+ typeof value.loadSettings === 'function' &&
29
+ typeof value.validateModelAgainstMax === 'function' &&
30
+ isStringArray(value.VALID_MODELS)
31
+ );
32
+ }
33
+
34
+ const rawSettings: unknown = require('../../lib/settings');
35
+ if (!isSettingsFacade(rawSettings)) {
36
+ throw new TypeError('settings module must expose model validation');
37
+ }
38
+
39
+ const verifiedSettings: SettingsFacade = rawSettings;
40
+
41
+ export = verifiedSettings;