@the-open-engine/zeroshot 6.38.0 → 6.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/cli/event-copy.js +8 -7
  2. package/cli/event-copy.ts +12 -0
  3. package/cli/index.js +7 -31
  4. package/cli/json-export.js +61 -64
  5. package/cli/json-export.ts +112 -0
  6. package/cli/message-formatter-utils.js +68 -56
  7. package/cli/message-formatter-utils.ts +121 -0
  8. package/cli/message-formatters-normal.js +124 -259
  9. package/cli/message-formatters-normal.ts +250 -0
  10. package/cli/message-formatters-watch.js +81 -84
  11. package/cli/message-formatters-watch.ts +189 -0
  12. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
  13. package/lib/agent-cli-provider/adapters/codex.js +3 -1
  14. package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
  15. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  16. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  17. package/lib/cluster/generated/protocol.d.cts +8 -0
  18. package/lib/cluster/generated/protocol.d.mts +8 -0
  19. package/lib/cluster/generated/protocol.d.ts +8 -0
  20. package/lib/clusters-registry.d.ts +23 -0
  21. package/lib/clusters-registry.js +17 -29
  22. package/lib/completion.d.ts +12 -0
  23. package/lib/completion.js +84 -94
  24. package/lib/compose-utils.d.ts +32 -0
  25. package/lib/compose-utils.js +57 -72
  26. package/lib/detached-startup.d.ts +83 -0
  27. package/lib/detached-startup.js +231 -302
  28. package/lib/docker-config.d.ts +43 -0
  29. package/lib/docker-config.js +150 -325
  30. package/lib/docker-env-auth.d.ts +17 -0
  31. package/lib/docker-env-auth.js +75 -0
  32. package/lib/git-remote-utils.d.ts +48 -0
  33. package/lib/git-remote-utils.js +147 -213
  34. package/lib/id-detector.d.ts +15 -0
  35. package/lib/id-detector.js +37 -41
  36. package/lib/path-check.d.ts +30 -0
  37. package/lib/path-check.js +42 -45
  38. package/lib/process-liveness.d.ts +16 -0
  39. package/lib/process-liveness.js +19 -12
  40. package/lib/provider-credential-path.d.ts +16 -0
  41. package/lib/provider-credential-path.js +31 -29
  42. package/lib/provider-defaults.d.ts +30 -0
  43. package/lib/provider-defaults.js +47 -42
  44. package/lib/provider-detection.d.ts +11 -0
  45. package/lib/provider-detection.js +91 -54
  46. package/lib/provider-names.d.ts +38 -0
  47. package/lib/provider-names.js +56 -64
  48. package/lib/repo-settings.d.ts +28 -0
  49. package/lib/repo-settings.js +83 -59
  50. package/lib/run-mode.d.ts +21 -0
  51. package/lib/run-mode.js +21 -20
  52. package/lib/run-plan.d.ts +28 -0
  53. package/lib/run-plan.js +17 -16
  54. package/lib/settings/claude-auth.d.ts +35 -0
  55. package/lib/settings/claude-auth.js +30 -47
  56. package/lib/settings-defaults.d.ts +20 -0
  57. package/lib/settings-defaults.js +149 -0
  58. package/lib/settings-error.d.ts +7 -0
  59. package/lib/settings-error.js +8 -0
  60. package/lib/settings-issue-providers.d.ts +10 -0
  61. package/lib/settings-issue-providers.js +12 -0
  62. package/lib/settings-models.d.ts +22 -0
  63. package/lib/settings-models.js +93 -0
  64. package/lib/settings-storage.d.ts +23 -0
  65. package/lib/settings-storage.js +205 -0
  66. package/lib/settings-validation.d.ts +7 -0
  67. package/lib/settings-validation.js +182 -0
  68. package/lib/settings.d.ts +29 -0
  69. package/lib/settings.js +41 -736
  70. package/lib/setup-apply-types.d.ts +66 -0
  71. package/lib/setup-apply-types.js +2 -0
  72. package/lib/setup-apply.d.ts +39 -0
  73. package/lib/setup-apply.js +267 -264
  74. package/lib/setup-journal.d.ts +41 -0
  75. package/lib/setup-journal.js +119 -76
  76. package/lib/setup-plan-types.d.ts +102 -0
  77. package/lib/setup-plan-types.js +2 -0
  78. package/lib/setup-plan.d.ts +30 -0
  79. package/lib/setup-plan.js +300 -324
  80. package/lib/setup-undo.d.ts +44 -0
  81. package/lib/setup-undo.js +61 -74
  82. package/lib/start-cluster-config.d.ts +26 -0
  83. package/lib/start-cluster-config.js +56 -0
  84. package/lib/start-cluster-environment.d.ts +40 -0
  85. package/lib/start-cluster-environment.js +134 -0
  86. package/lib/start-cluster-run-options.d.ts +53 -0
  87. package/lib/start-cluster-run-options.js +147 -0
  88. package/lib/start-cluster.d.ts +64 -0
  89. package/lib/start-cluster.js +98 -454
  90. package/lib/stream-json-parser.d.ts +17 -0
  91. package/lib/stream-json-parser.js +51 -52
  92. package/npm-shrinkwrap.json +2 -2
  93. package/package.json +12 -6
  94. package/scripts/postinstall.js +27 -0
  95. package/scripts/rust-distribution.js +23 -14
  96. package/src/agent/agent-command-proofs-context.js +35 -45
  97. package/src/agent/agent-command-proofs-context.ts +87 -0
  98. package/src/agent/agent-config-settings.js +19 -0
  99. package/src/agent/agent-config-settings.ts +41 -0
  100. package/src/agent/agent-config.js +122 -231
  101. package/src/agent/agent-config.ts +285 -0
  102. package/src/agent/agent-context-builder.js +38 -273
  103. package/src/agent/agent-context-builder.ts +51 -0
  104. package/src/agent/agent-context-environment-sections.js +105 -0
  105. package/src/agent/agent-context-environment-sections.ts +134 -0
  106. package/src/agent/agent-context-packs.js +165 -0
  107. package/src/agent/agent-context-packs.ts +296 -0
  108. package/src/agent/agent-context-prompt-sections.js +100 -0
  109. package/src/agent/agent-context-prompt-sections.ts +148 -0
  110. package/src/agent/agent-context-sections.js +25 -334
  111. package/src/agent/agent-context-sections.ts +36 -0
  112. package/src/agent/agent-context-sources.js +96 -149
  113. package/src/agent/agent-context-sources.ts +253 -0
  114. package/src/agent/agent-context-types.js +2 -0
  115. package/src/agent/agent-context-types.ts +132 -0
  116. package/src/agent/agent-context-validation-sections.js +73 -0
  117. package/src/agent/agent-context-validation-sections.ts +129 -0
  118. package/src/agent/agent-input-injector.js +99 -118
  119. package/src/agent/agent-input-injector.ts +195 -0
  120. package/src/agent/agent-liveness-poll.js +74 -78
  121. package/src/agent/agent-liveness-poll.ts +163 -0
  122. package/src/agent/agent-quality-gate-schema.js +77 -86
  123. package/src/agent/agent-quality-gate-schema.ts +135 -0
  124. package/src/agent/agent-quality-gates-context.js +44 -50
  125. package/src/agent/agent-quality-gates-context.ts +91 -0
  126. package/src/agent/agent-stuck-detector.js +171 -239
  127. package/src/agent/agent-stuck-detector.ts +288 -0
  128. package/src/agent/agent-trigger-evaluator.js +29 -46
  129. package/src/agent/agent-trigger-evaluator.ts +98 -0
  130. package/src/agent/context-metrics.js +110 -141
  131. package/src/agent/context-metrics.ts +261 -0
  132. package/src/agent/context-pack-builder.js +72 -358
  133. package/src/agent/context-pack-builder.ts +105 -0
  134. package/src/agent/context-pack-core.js +70 -0
  135. package/src/agent/context-pack-core.ts +96 -0
  136. package/src/agent/context-pack-selection.js +119 -0
  137. package/src/agent/context-pack-selection.ts +187 -0
  138. package/src/agent/context-pack-truncation.js +139 -0
  139. package/src/agent/context-pack-truncation.ts +208 -0
  140. package/src/agent/context-pack-types.js +2 -0
  141. package/src/agent/context-pack-types.ts +98 -0
  142. package/src/agent/context-replay-policy.js +30 -39
  143. package/src/agent/context-replay-policy.ts +71 -0
  144. package/src/agent/critical-agent-policy.js +6 -10
  145. package/src/agent/critical-agent-policy.ts +20 -0
  146. package/src/agent/guidance-queue.js +74 -87
  147. package/src/agent/guidance-queue.ts +166 -0
  148. package/src/agent/output-extraction-error-detail.js +45 -0
  149. package/src/agent/output-extraction-error-detail.ts +49 -0
  150. package/src/agent/output-extraction-failures.js +125 -0
  151. package/src/agent/output-extraction-failures.ts +149 -0
  152. package/src/agent/output-extraction-json.js +234 -0
  153. package/src/agent/output-extraction-json.ts +235 -0
  154. package/src/agent/output-extraction-pi.js +124 -0
  155. package/src/agent/output-extraction-pi.ts +137 -0
  156. package/src/agent/output-extraction-types.js +2 -0
  157. package/src/agent/output-extraction-types.ts +49 -0
  158. package/src/agent/output-extraction.js +17 -617
  159. package/src/agent/output-extraction.ts +30 -0
  160. package/src/agent/output-reformatter-errors.js +83 -0
  161. package/src/agent/output-reformatter-errors.ts +106 -0
  162. package/src/agent/output-reformatter-types.js +2 -0
  163. package/src/agent/output-reformatter-types.ts +86 -0
  164. package/src/agent/output-reformatter.js +140 -185
  165. package/src/agent/output-reformatter.ts +238 -0
  166. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  167. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  168. package/src/agent/pi-terminal-lifecycle.js +186 -206
  169. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  170. package/src/agent/provider-control-plane.js +22 -21
  171. package/src/agent/provider-control-plane.ts +52 -0
  172. package/src/agent/provider-terminal-failure-types.js +2 -0
  173. package/src/agent/provider-terminal-failure-types.ts +60 -0
  174. package/src/agent/provider-terminal-failure.js +194 -191
  175. package/src/agent/provider-terminal-failure.ts +262 -0
  176. package/src/agent/rate-limit-backoff.js +31 -74
  177. package/src/agent/rate-limit-backoff.ts +71 -0
  178. package/src/agent/schema-utils.js +85 -125
  179. package/src/agent/schema-utils.ts +148 -0
  180. package/src/agent/structured-output-error.js +34 -33
  181. package/src/agent/structured-output-error.ts +105 -0
  182. package/src/agent/validation-platform.js +27 -27
  183. package/src/agent/validation-platform.ts +49 -0
  184. package/src/agent-cli-provider/adapters/codex.ts +3 -1
  185. package/src/attach/attach-client.js +232 -405
  186. package/src/attach/attach-client.ts +300 -0
  187. package/src/attach/attach-server-cleanup.js +43 -0
  188. package/src/attach/attach-server-cleanup.ts +39 -0
  189. package/src/attach/attach-server-clients.js +117 -0
  190. package/src/attach/attach-server-clients.ts +122 -0
  191. package/src/attach/attach-server-events.js +38 -0
  192. package/src/attach/attach-server-events.ts +36 -0
  193. package/src/attach/attach-server-pty.js +45 -0
  194. package/src/attach/attach-server-pty.ts +64 -0
  195. package/src/attach/attach-server-runtime.js +73 -0
  196. package/src/attach/attach-server-runtime.ts +62 -0
  197. package/src/attach/attach-server-socket.js +28 -0
  198. package/src/attach/attach-server-socket.ts +23 -0
  199. package/src/attach/attach-server-types.js +2 -0
  200. package/src/attach/attach-server-types.ts +82 -0
  201. package/src/attach/attach-server.js +106 -523
  202. package/src/attach/attach-server.ts +158 -0
  203. package/src/attach/index.js +18 -35
  204. package/src/attach/index.ts +18 -0
  205. package/src/attach/protocol.js +95 -184
  206. package/src/attach/protocol.ts +181 -0
  207. package/src/attach/ring-buffer.js +76 -102
  208. package/src/attach/ring-buffer.ts +109 -0
  209. package/src/attach/send-input.js +64 -75
  210. package/src/attach/send-input.ts +94 -0
  211. package/src/attach/socket-discovery.js +164 -218
  212. package/src/attach/socket-discovery.ts +230 -0
  213. package/src/attach/socket-paths.js +42 -61
  214. package/src/attach/socket-paths.ts +81 -0
  215. package/src/claude-credentials.js +51 -54
  216. package/src/claude-credentials.ts +89 -0
  217. package/src/cluster/generated/protocol-schema.ts +1 -1
  218. package/src/cluster/generated/protocol.ts +2 -1
  219. package/src/command-proofs.js +110 -141
  220. package/src/command-proofs.ts +216 -0
  221. package/src/config-router.js +81 -73
  222. package/src/config-router.ts +131 -0
  223. package/src/copy-worker.js +53 -29
  224. package/src/copy-worker.ts +75 -0
  225. package/src/darwin-keychain-boundary.js +80 -111
  226. package/src/darwin-keychain-boundary.ts +148 -0
  227. package/src/guidance-topics.js +4 -5
  228. package/src/guidance-topics.ts +10 -0
  229. package/src/input-helpers.js +33 -54
  230. package/src/input-helpers.ts +58 -0
  231. package/src/ledger-sequence.js +45 -48
  232. package/src/ledger-sequence.ts +63 -0
  233. package/src/legacy-lib/clusters-registry.ts +40 -0
  234. package/src/legacy-lib/completion.ts +148 -0
  235. package/src/legacy-lib/compose-utils.ts +102 -0
  236. package/src/legacy-lib/detached-startup.ts +449 -0
  237. package/src/legacy-lib/docker-config.ts +282 -0
  238. package/src/legacy-lib/docker-env-auth.ts +116 -0
  239. package/src/legacy-lib/git-remote-utils.ts +244 -0
  240. package/src/legacy-lib/id-detector.ts +57 -0
  241. package/src/legacy-lib/js-yaml.d.ts +3 -0
  242. package/src/legacy-lib/omelette.d.ts +15 -0
  243. package/src/legacy-lib/path-check.ts +89 -0
  244. package/src/legacy-lib/process-liveness.ts +36 -0
  245. package/src/legacy-lib/provider-credential-path.ts +57 -0
  246. package/src/legacy-lib/provider-defaults.ts +114 -0
  247. package/src/legacy-lib/provider-detection.ts +67 -0
  248. package/src/legacy-lib/provider-names.ts +126 -0
  249. package/src/legacy-lib/repo-settings.ts +88 -0
  250. package/src/legacy-lib/run-mode.ts +58 -0
  251. package/src/legacy-lib/run-plan.ts +49 -0
  252. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  253. package/src/legacy-lib/settings-defaults.ts +212 -0
  254. package/src/legacy-lib/settings-error.ts +8 -0
  255. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  256. package/src/legacy-lib/settings-models.ts +124 -0
  257. package/src/legacy-lib/settings-storage.ts +277 -0
  258. package/src/legacy-lib/settings-validation.ts +220 -0
  259. package/src/legacy-lib/settings.ts +87 -0
  260. package/src/legacy-lib/setup-apply-types.ts +70 -0
  261. package/src/legacy-lib/setup-apply.ts +456 -0
  262. package/src/legacy-lib/setup-journal.ts +185 -0
  263. package/src/legacy-lib/setup-plan-types.ts +96 -0
  264. package/src/legacy-lib/setup-plan.ts +500 -0
  265. package/src/legacy-lib/setup-undo.ts +142 -0
  266. package/src/legacy-lib/start-cluster-config.ts +124 -0
  267. package/src/legacy-lib/start-cluster-environment.ts +165 -0
  268. package/src/legacy-lib/start-cluster-run-options.ts +279 -0
  269. package/src/legacy-lib/start-cluster.ts +237 -0
  270. package/src/legacy-lib/stream-json-parser.ts +88 -0
  271. package/src/message-buffer.js +55 -71
  272. package/src/message-buffer.ts +107 -0
  273. package/src/message-bus-bridge.js +92 -133
  274. package/src/message-bus-bridge.ts +149 -0
  275. package/src/name-generator-shared.js +220 -0
  276. package/src/name-generator-shared.ts +231 -0
  277. package/src/name-generator.js +8 -217
  278. package/src/name-generator.ts +27 -0
  279. package/src/omp-blob-root.js +83 -64
  280. package/src/omp-blob-root.ts +116 -0
  281. package/src/omp-config-overlay.js +65 -38
  282. package/src/omp-config-overlay.ts +110 -0
  283. package/src/omp-execution-fingerprint.js +38 -43
  284. package/src/omp-execution-fingerprint.ts +92 -0
  285. package/src/omp-session-limits.js +10 -15
  286. package/src/omp-session-limits.ts +53 -0
  287. package/src/omp-session-partition.js +2 -2
  288. package/src/omp-session-verifier.js +1 -1
  289. package/src/orchestrator.js +19 -4
  290. package/src/providers/anthropic/index.js +3 -1
  291. package/src/providers/anthropic/index.ts +13 -0
  292. package/src/providers/capabilities.js +19 -27
  293. package/src/providers/capabilities.ts +44 -0
  294. package/src/providers/google/index.js +3 -1
  295. package/src/providers/google/index.ts +13 -0
  296. package/src/providers/openai/index.js +3 -1
  297. package/src/providers/openai/index.ts +13 -0
  298. package/src/providers/opencode/index.js +3 -1
  299. package/src/providers/opencode/index.ts +13 -0
  300. package/src/quality-gates.js +67 -127
  301. package/src/quality-gates.ts +149 -0
  302. package/src/repo-settings-access.js +40 -0
  303. package/src/repo-settings-access.ts +64 -0
  304. package/src/schemas/sub-cluster.js +127 -183
  305. package/src/schemas/sub-cluster.ts +238 -0
  306. package/src/state-snapshot-normalization.js +224 -0
  307. package/src/state-snapshot-normalization.ts +222 -0
  308. package/src/state-snapshot.js +192 -359
  309. package/src/state-snapshot.ts +291 -0
  310. package/src/state-snapshotter.js +118 -130
  311. package/src/state-snapshotter.ts +167 -0
  312. package/src/sub-cluster-wrapper.js +4 -13
  313. package/src/task-run-model-args.js +87 -124
  314. package/src/task-run-model-args.ts +204 -0
  315. package/src/task-runner.js +5 -25
  316. package/src/task-runner.ts +28 -0
  317. package/src/task-startup-error.js +73 -58
  318. package/src/task-startup-error.ts +126 -0
  319. package/src/template-validation/consensus-gate-contracts.js +2 -0
  320. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  321. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  322. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  323. package/src/template-validation/consensus-gate-stage.js +34 -0
  324. package/src/template-validation/consensus-gate-stage.ts +56 -0
  325. package/src/template-validation/random-topology-contracts.js +2 -0
  326. package/src/template-validation/random-topology-contracts.ts +54 -0
  327. package/src/template-validation/random-topology-dispatch.js +25 -0
  328. package/src/template-validation/random-topology-dispatch.ts +33 -0
  329. package/src/template-validation/random-topology-message-loop.js +53 -0
  330. package/src/template-validation/random-topology-message-loop.ts +73 -0
  331. package/src/template-validation/random-topology-operations.js +79 -0
  332. package/src/template-validation/random-topology-operations.ts +101 -0
  333. package/src/template-validation/random-topology-runtime.js +25 -0
  334. package/src/template-validation/random-topology-runtime.ts +43 -0
  335. package/src/template-validation/random-topology-scenario.js +52 -0
  336. package/src/template-validation/random-topology-scenario.ts +57 -0
  337. package/src/template-validation/random-topology-schema.js +159 -0
  338. package/src/template-validation/random-topology-schema.ts +190 -0
  339. package/src/template-validation/random-topology-state.js +28 -0
  340. package/src/template-validation/random-topology-state.ts +30 -0
  341. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  342. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  343. package/src/template-validation/random-topology-trigger.js +75 -0
  344. package/src/template-validation/random-topology-trigger.ts +88 -0
  345. package/src/template-validation/report-formatter.js +40 -46
  346. package/src/template-validation/report-formatter.ts +101 -0
  347. package/src/template-validation/simulate-consensus-gates.js +111 -302
  348. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  349. package/src/template-validation/simulate-random-topology.js +26 -519
  350. package/src/template-validation/simulate-random-topology.ts +57 -0
  351. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  352. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  353. package/src/template-validation/simulation-agent-runtime.js +25 -0
  354. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  355. package/src/template-validation/simulation-agent.js +29 -0
  356. package/src/template-validation/simulation-agent.ts +73 -0
  357. package/src/template-validation/simulation-runtime.js +34 -0
  358. package/src/template-validation/simulation-runtime.ts +72 -0
  359. package/src/template-validation/two-stage-contracts.js +2 -0
  360. package/src/template-validation/two-stage-contracts.ts +41 -0
  361. package/src/template-validation/two-stage-inputs.js +21 -0
  362. package/src/template-validation/two-stage-inputs.ts +29 -0
  363. package/src/template-validation/two-stage-results.js +30 -0
  364. package/src/template-validation/two-stage-results.ts +40 -0
  365. package/src/template-validation/two-stage-scenario.js +86 -0
  366. package/src/template-validation/two-stage-scenario.ts +120 -0
  367. package/src/worktree-claude-config.js +182 -220
  368. package/src/worktree-claude-config.ts +272 -0
  369. package/src/worktree-tooling-env.js +103 -125
  370. package/src/worktree-tooling-env.ts +142 -0
  371. package/task-lib/completion.js +2 -3
  372. package/task-lib/completion.ts +9 -0
  373. package/task-lib/config.js +1 -4
  374. package/task-lib/config.ts +11 -0
  375. package/task-lib/name-generator.js +4 -226
  376. package/task-lib/name-generator.ts +11 -0
  377. package/task-lib/omp-session-cleanup.js +1 -1
  378. package/task-lib/omp-storage-root.js +8 -12
  379. package/task-lib/omp-storage-root.ts +62 -0
  380. package/task-lib/process-termination.js +143 -166
  381. package/task-lib/process-termination.ts +268 -0
@@ -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.0",
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.0",
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.0",
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;