@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,169 +1,138 @@
1
- const { readRepoSettings } = require('../lib/repo-settings');
2
-
1
+ "use strict";
2
+ const repoSettingsAccess = require("./repo-settings-access");
3
+ const { propertyValue, readRepoSettingsValue, selectOwnProperty } = repoSettingsAccess;
3
4
  const PROOF_BLOCK_PATTERN = /^```zeroshot-command-proofs\s*\n([\s\S]*?)^```/m;
4
-
5
- function hasOwn(value, key) {
6
- return Object.prototype.hasOwnProperty.call(value || {}, key);
7
- }
8
-
9
5
  function trimString(value) {
10
- return typeof value === 'string' && value.trim() ? value.trim() : null;
6
+ return typeof value === 'string' && value.trim() ? value.trim() : null;
11
7
  }
12
-
13
8
  function setOptionalString(target, source, key) {
14
- const value = trimString(source[key]);
15
- if (value) {
16
- target[key] = value;
17
- }
9
+ const value = trimString(propertyValue(source, key));
10
+ if (value) {
11
+ target[key] = value;
12
+ }
18
13
  }
19
-
20
14
  function normalizeCommandProof(proof) {
21
- if (!proof || typeof proof !== 'object') {
22
- return null;
23
- }
24
-
25
- const id = trimString(proof.id || proof.name);
26
- const profile = trimString(proof.profile || proof.proofProfile);
27
- const command = trimString(proof.command);
28
- if (!id || !profile || !command) {
29
- return null;
30
- }
31
-
32
- const normalized = { id, profile, command };
33
- setOptionalString(normalized, proof, 'scope');
34
- setOptionalString(normalized, proof, 'description');
35
- return normalized;
15
+ if (!proof || typeof proof !== 'object') {
16
+ return null;
17
+ }
18
+ const id = trimString(propertyValue(proof, 'id') || propertyValue(proof, 'name'));
19
+ const profile = trimString(propertyValue(proof, 'profile') || propertyValue(proof, 'proofProfile'));
20
+ const command = trimString(propertyValue(proof, 'command'));
21
+ if (!id || !profile || !command) {
22
+ return null;
23
+ }
24
+ const normalized = { id, profile, command };
25
+ setOptionalString(normalized, proof, 'scope');
26
+ setOptionalString(normalized, proof, 'description');
27
+ return normalized;
28
+ }
29
+ function isCommandProof(proof) {
30
+ return proof !== null;
36
31
  }
37
-
38
32
  function normalizeCommandProofs(value) {
39
- if (!Array.isArray(value)) {
40
- return [];
41
- }
42
- return value.map(normalizeCommandProof).filter(Boolean);
33
+ if (!Array.isArray(value)) {
34
+ return [];
35
+ }
36
+ return value.map(normalizeCommandProof).filter(isCommandProof);
37
+ }
38
+ function errorMessage(error) {
39
+ return error instanceof Error ? error.message : String(error);
43
40
  }
44
-
45
41
  function parseCommandProofsFromText(text) {
46
- if (typeof text !== 'string' || text.trim() === '') {
47
- return [];
48
- }
49
-
50
- const match = text.match(PROOF_BLOCK_PATTERN);
51
- if (!match) {
52
- return [];
53
- }
54
-
55
- let parsed;
56
- try {
57
- parsed = JSON.parse(match[1]);
58
- } catch (error) {
59
- throw new Error(`Invalid zeroshot-command-proofs JSON: ${error.message}`);
60
- }
61
-
62
- return normalizeCommandProofs(parsed);
42
+ if (typeof text !== 'string' || text.trim() === '') {
43
+ return [];
44
+ }
45
+ const match = PROOF_BLOCK_PATTERN.exec(text);
46
+ const payload = match?.[1];
47
+ if (payload === undefined) {
48
+ return [];
49
+ }
50
+ let parsed;
51
+ try {
52
+ parsed = JSON.parse(payload);
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Invalid zeroshot-command-proofs JSON: ${errorMessage(error)}`);
56
+ }
57
+ return normalizeCommandProofs(parsed);
63
58
  }
64
-
65
59
  function mergeCommandProofs(...sources) {
66
- const byId = new Map();
67
- const order = [];
68
-
69
- for (const source of sources) {
70
- for (const proof of normalizeCommandProofs(source)) {
71
- if (!byId.has(proof.id)) {
72
- order.push(proof.id);
73
- }
74
- byId.set(proof.id, proof);
60
+ const byId = new Map();
61
+ const order = [];
62
+ for (const source of sources) {
63
+ for (const proof of normalizeCommandProofs(source)) {
64
+ if (!byId.has(proof.id)) {
65
+ order.push(proof.id);
66
+ }
67
+ byId.set(proof.id, proof);
68
+ }
69
+ }
70
+ const merged = [];
71
+ for (const id of order) {
72
+ const proof = byId.get(id);
73
+ if (proof) {
74
+ merged.push(proof);
75
+ }
75
76
  }
76
- }
77
-
78
- return order.map((id) => byId.get(id));
77
+ return merged;
79
78
  }
80
-
81
79
  function commandProofToQualityGate(proof) {
82
- const normalized = normalizeCommandProof(proof);
83
- if (!normalized) {
84
- return null;
85
- }
86
-
87
- const gate = {
88
- id: normalized.id,
89
- profile: normalized.profile,
90
- command: normalized.command,
91
- commandProof: true,
92
- };
93
- setOptionalString(gate, normalized, 'scope');
94
- setOptionalString(gate, normalized, 'description');
95
- return gate;
80
+ const normalized = normalizeCommandProof(proof);
81
+ if (!normalized) {
82
+ return null;
83
+ }
84
+ const gate = {
85
+ id: normalized.id,
86
+ profile: normalized.profile,
87
+ command: normalized.command,
88
+ commandProof: true,
89
+ };
90
+ setOptionalString(gate, normalized, 'scope');
91
+ setOptionalString(gate, normalized, 'description');
92
+ return gate;
96
93
  }
97
-
98
94
  function getCommandProofSource(options, repoSettings) {
99
- if (hasOwn(options, 'commandProofs')) {
100
- return options.commandProofs;
101
- }
102
-
103
- if (options.ship && typeof options.ship === 'object' && hasOwn(options.ship, 'commandProofs')) {
104
- return options.ship.commandProofs;
105
- }
106
-
107
- const settingsShip = repoSettings?.ship;
108
- if (settingsShip && typeof settingsShip === 'object' && hasOwn(settingsShip, 'commandProofs')) {
109
- return settingsShip.commandProofs;
110
- }
111
-
112
- if (hasOwn(repoSettings, 'commandProofs')) {
113
- return repoSettings.commandProofs;
114
- }
115
-
116
- return [];
95
+ const source = selectOwnProperty('commandProofs', [
96
+ options,
97
+ propertyValue(options, 'ship'),
98
+ propertyValue(repoSettings, 'ship'),
99
+ repoSettings,
100
+ ]);
101
+ return source === undefined ? [] : source;
117
102
  }
118
-
119
103
  function getClusterCommandProofSource(config, options) {
120
- if (hasOwn(options, 'commandProofs')) {
121
- return options.commandProofs;
122
- }
123
-
124
- if (options.ship && typeof options.ship === 'object' && hasOwn(options.ship, 'commandProofs')) {
125
- return options.ship.commandProofs;
126
- }
127
-
128
- if (config?.ship && typeof config.ship === 'object' && hasOwn(config.ship, 'commandProofs')) {
129
- return config.ship.commandProofs;
130
- }
131
-
132
- if (hasOwn(config, 'commandProofs')) {
133
- return config.commandProofs;
134
- }
135
-
136
- return undefined;
104
+ return selectOwnProperty('commandProofs', [
105
+ options,
106
+ propertyValue(options, 'ship'),
107
+ propertyValue(config, 'ship'),
108
+ config,
109
+ ]);
137
110
  }
138
-
139
111
  function resolveConfiguredCommandProofs(config = {}, options = {}) {
140
- const configuredSource = getClusterCommandProofSource(config, options);
141
- if (configuredSource !== undefined) {
142
- return normalizeCommandProofs(configuredSource);
143
- }
144
-
145
- const repoSettingsResult = readRepoSettings(options.cwd || process.cwd());
146
- const repoSettings = repoSettingsResult.settings || {};
147
- return normalizeCommandProofs(getCommandProofSource(options, repoSettings));
112
+ const configuredSource = getClusterCommandProofSource(config, options);
113
+ if (configuredSource !== undefined) {
114
+ return normalizeCommandProofs(configuredSource);
115
+ }
116
+ const repoSettings = readRepoSettingsValue(options.cwd || process.cwd());
117
+ return normalizeCommandProofs(getCommandProofSource(options, repoSettings));
148
118
  }
149
-
150
119
  function resolveClusterCommandProofs(config = {}, options = {}, inputText = '') {
151
- return mergeCommandProofs(
152
- resolveConfiguredCommandProofs(config, options),
153
- parseCommandProofsFromText(inputText)
154
- );
120
+ return mergeCommandProofs(resolveConfiguredCommandProofs(config, options), parseCommandProofsFromText(inputText));
121
+ }
122
+ function isCommandProofQualityGate(gate) {
123
+ return gate !== null;
155
124
  }
156
-
157
125
  function commandProofsToQualityGates(commandProofs) {
158
- return normalizeCommandProofs(commandProofs).map(commandProofToQualityGate).filter(Boolean);
126
+ return normalizeCommandProofs(commandProofs)
127
+ .map(commandProofToQualityGate)
128
+ .filter(isCommandProofQualityGate);
159
129
  }
160
-
161
130
  module.exports = {
162
- commandProofToQualityGate,
163
- commandProofsToQualityGates,
164
- mergeCommandProofs,
165
- normalizeCommandProofs,
166
- parseCommandProofsFromText,
167
- resolveClusterCommandProofs,
168
- resolveConfiguredCommandProofs,
131
+ commandProofToQualityGate,
132
+ commandProofsToQualityGates,
133
+ mergeCommandProofs,
134
+ normalizeCommandProofs,
135
+ parseCommandProofsFromText,
136
+ resolveClusterCommandProofs,
137
+ resolveConfiguredCommandProofs,
169
138
  };
@@ -0,0 +1,216 @@
1
+ import repoSettingsAccess = require('./repo-settings-access');
2
+
3
+ type ProofStringField = 'scope' | 'description';
4
+
5
+ interface CommandProof {
6
+ id: string;
7
+ profile: string;
8
+ command: string;
9
+ scope?: string;
10
+ description?: string;
11
+ }
12
+
13
+ interface CommandProofQualityGate {
14
+ id: string;
15
+ profile: string;
16
+ command: string;
17
+ commandProof: true;
18
+ scope?: string;
19
+ description?: string;
20
+ }
21
+
22
+ interface CommandProofOptions {
23
+ cwd?: string;
24
+ commandProofs?: unknown;
25
+ ship?: unknown;
26
+ [key: string]: unknown;
27
+ }
28
+
29
+ interface CommandProofConfig {
30
+ commandProofs?: unknown;
31
+ ship?: unknown;
32
+ [key: string]: unknown;
33
+ }
34
+
35
+ const { propertyValue, readRepoSettingsValue, selectOwnProperty } = repoSettingsAccess;
36
+
37
+ const PROOF_BLOCK_PATTERN = /^```zeroshot-command-proofs\s*\n([\s\S]*?)^```/m;
38
+
39
+ function trimString(value: unknown): string | null {
40
+ return typeof value === 'string' && value.trim() ? value.trim() : null;
41
+ }
42
+
43
+ function setOptionalString(
44
+ target: CommandProof | CommandProofQualityGate,
45
+ source: unknown,
46
+ key: ProofStringField
47
+ ): void {
48
+ const value = trimString(propertyValue(source, key));
49
+ if (value) {
50
+ target[key] = value;
51
+ }
52
+ }
53
+
54
+ function normalizeCommandProof(proof: unknown): CommandProof | null {
55
+ if (!proof || typeof proof !== 'object') {
56
+ return null;
57
+ }
58
+
59
+ const id = trimString(propertyValue(proof, 'id') || propertyValue(proof, 'name'));
60
+ const profile = trimString(
61
+ propertyValue(proof, 'profile') || propertyValue(proof, 'proofProfile')
62
+ );
63
+ const command = trimString(propertyValue(proof, 'command'));
64
+ if (!id || !profile || !command) {
65
+ return null;
66
+ }
67
+
68
+ const normalized: CommandProof = { id, profile, command };
69
+ setOptionalString(normalized, proof, 'scope');
70
+ setOptionalString(normalized, proof, 'description');
71
+ return normalized;
72
+ }
73
+
74
+ function isCommandProof(proof: CommandProof | null): proof is CommandProof {
75
+ return proof !== null;
76
+ }
77
+
78
+ function normalizeCommandProofs(value: unknown): CommandProof[] {
79
+ if (!Array.isArray(value)) {
80
+ return [];
81
+ }
82
+ return value.map(normalizeCommandProof).filter(isCommandProof);
83
+ }
84
+
85
+ function errorMessage(error: unknown): string {
86
+ return error instanceof Error ? error.message : String(error);
87
+ }
88
+
89
+ function parseCommandProofsFromText(text: unknown): CommandProof[] {
90
+ if (typeof text !== 'string' || text.trim() === '') {
91
+ return [];
92
+ }
93
+
94
+ const match = PROOF_BLOCK_PATTERN.exec(text);
95
+ const payload = match?.[1];
96
+ if (payload === undefined) {
97
+ return [];
98
+ }
99
+
100
+ let parsed: unknown;
101
+ try {
102
+ parsed = JSON.parse(payload);
103
+ } catch (error) {
104
+ throw new Error(`Invalid zeroshot-command-proofs JSON: ${errorMessage(error)}`);
105
+ }
106
+
107
+ return normalizeCommandProofs(parsed);
108
+ }
109
+
110
+ function mergeCommandProofs(...sources: unknown[]): CommandProof[] {
111
+ const byId = new Map<string, CommandProof>();
112
+ const order: string[] = [];
113
+
114
+ for (const source of sources) {
115
+ for (const proof of normalizeCommandProofs(source)) {
116
+ if (!byId.has(proof.id)) {
117
+ order.push(proof.id);
118
+ }
119
+ byId.set(proof.id, proof);
120
+ }
121
+ }
122
+
123
+ const merged: CommandProof[] = [];
124
+ for (const id of order) {
125
+ const proof = byId.get(id);
126
+ if (proof) {
127
+ merged.push(proof);
128
+ }
129
+ }
130
+ return merged;
131
+ }
132
+
133
+ function commandProofToQualityGate(proof: unknown): CommandProofQualityGate | null {
134
+ const normalized = normalizeCommandProof(proof);
135
+ if (!normalized) {
136
+ return null;
137
+ }
138
+
139
+ const gate: CommandProofQualityGate = {
140
+ id: normalized.id,
141
+ profile: normalized.profile,
142
+ command: normalized.command,
143
+ commandProof: true,
144
+ };
145
+ setOptionalString(gate, normalized, 'scope');
146
+ setOptionalString(gate, normalized, 'description');
147
+ return gate;
148
+ }
149
+
150
+ function getCommandProofSource(options: CommandProofOptions, repoSettings: unknown): unknown {
151
+ const source = selectOwnProperty('commandProofs', [
152
+ options,
153
+ propertyValue(options, 'ship'),
154
+ propertyValue(repoSettings, 'ship'),
155
+ repoSettings,
156
+ ]);
157
+ return source === undefined ? [] : source;
158
+ }
159
+
160
+ function getClusterCommandProofSource(
161
+ config: CommandProofConfig,
162
+ options: CommandProofOptions
163
+ ): unknown {
164
+ return selectOwnProperty('commandProofs', [
165
+ options,
166
+ propertyValue(options, 'ship'),
167
+ propertyValue(config, 'ship'),
168
+ config,
169
+ ]);
170
+ }
171
+
172
+ function resolveConfiguredCommandProofs(
173
+ config: CommandProofConfig = {},
174
+ options: CommandProofOptions = {}
175
+ ): CommandProof[] {
176
+ const configuredSource = getClusterCommandProofSource(config, options);
177
+ if (configuredSource !== undefined) {
178
+ return normalizeCommandProofs(configuredSource);
179
+ }
180
+
181
+ const repoSettings = readRepoSettingsValue(options.cwd || process.cwd());
182
+ return normalizeCommandProofs(getCommandProofSource(options, repoSettings));
183
+ }
184
+
185
+ function resolveClusterCommandProofs(
186
+ config: CommandProofConfig = {},
187
+ options: CommandProofOptions = {},
188
+ inputText: unknown = ''
189
+ ): CommandProof[] {
190
+ return mergeCommandProofs(
191
+ resolveConfiguredCommandProofs(config, options),
192
+ parseCommandProofsFromText(inputText)
193
+ );
194
+ }
195
+
196
+ function isCommandProofQualityGate(
197
+ gate: CommandProofQualityGate | null
198
+ ): gate is CommandProofQualityGate {
199
+ return gate !== null;
200
+ }
201
+
202
+ function commandProofsToQualityGates(commandProofs: unknown): CommandProofQualityGate[] {
203
+ return normalizeCommandProofs(commandProofs)
204
+ .map(commandProofToQualityGate)
205
+ .filter(isCommandProofQualityGate);
206
+ }
207
+
208
+ export = {
209
+ commandProofToQualityGate,
210
+ commandProofsToQualityGates,
211
+ mergeCommandProofs,
212
+ normalizeCommandProofs,
213
+ parseCommandProofsFromText,
214
+ resolveClusterCommandProofs,
215
+ resolveConfiguredCommandProofs,
216
+ };
@@ -1,89 +1,97 @@
1
+ "use strict";
1
2
  /**
2
3
  * Config Router - Maps 2D classification to parameterized templates
3
4
  *
4
5
  * Single source of truth for: Complexity × TaskType → { base, params }
5
6
  * Used by both logic-engine.js (trigger evaluation) and agent-wrapper.js (transform scripts)
6
7
  */
7
-
8
- const { DEFAULT_MAX_ITERATIONS } = require('./agent/agent-config');
9
-
8
+ function isAgentConfigModule(value) {
9
+ return (typeof value === 'object' &&
10
+ value !== null &&
11
+ 'DEFAULT_MAX_ITERATIONS' in value &&
12
+ typeof value.DEFAULT_MAX_ITERATIONS === 'number');
13
+ }
14
+ const agentConfig = require('./agent/agent-config');
15
+ if (!isAgentConfigModule(agentConfig)) {
16
+ throw new TypeError('agent-config must export a numeric DEFAULT_MAX_ITERATIONS');
17
+ }
18
+ const { DEFAULT_MAX_ITERATIONS } = agentConfig;
10
19
  /**
11
20
  * Get cluster config based on complexity and task type
12
- * @param {string} complexity - TRIVIAL, SIMPLE, STANDARD, CRITICAL
13
- * @param {string} taskType - INQUIRY, TASK, DEBUG
14
- * @param {object} [options]
15
- * @param {boolean} [options.autoPr] - Whether the cluster will inject git-pusher/PR flow
16
- * @returns {{ base: string, params: object }}
17
21
  */
18
22
  function getConfig(complexity, taskType, options = {}) {
19
- const isPrMode = options.autoPr === true || process.env.ZEROSHOT_PR === '1';
20
-
21
- const getBase = () => {
22
- if (taskType === 'DEBUG' && complexity !== 'TRIVIAL') {
23
- return 'debug-workflow';
23
+ const isPrMode = options.autoPr === true || process.env.ZEROSHOT_PR === '1';
24
+ const getBase = () => {
25
+ if (taskType === 'DEBUG' && complexity !== 'TRIVIAL') {
26
+ return 'debug-workflow';
27
+ }
28
+ if (complexity === 'TRIVIAL' && isPrMode && taskType !== 'INQUIRY') {
29
+ return 'worker-validator';
30
+ }
31
+ if (complexity === 'TRIVIAL') {
32
+ return 'single-worker';
33
+ }
34
+ if (complexity === 'SIMPLE') {
35
+ return 'worker-validator';
36
+ }
37
+ return 'full-workflow';
38
+ };
39
+ const getLevel = (role) => {
40
+ if (complexity === 'CRITICAL' && role === 'planner')
41
+ return 'level3';
42
+ if (complexity === 'TRIVIAL')
43
+ return 'level1';
44
+ return 'level2';
45
+ };
46
+ const getValidatorCount = () => {
47
+ if (complexity === 'TRIVIAL')
48
+ return 0;
49
+ if (complexity === 'SIMPLE')
50
+ return 1;
51
+ if (complexity === 'STANDARD')
52
+ return 2;
53
+ // CRITICAL uses two-stage validation pipeline (validators loaded dynamically via meta-coordinator)
54
+ // Setting validator_count=0 signals that inline validators should be skipped
55
+ if (complexity === 'CRITICAL')
56
+ return 0;
57
+ return 1;
58
+ };
59
+ const getMaxTokens = () => {
60
+ if (complexity === 'TRIVIAL')
61
+ return 50000;
62
+ if (complexity === 'SIMPLE')
63
+ return 100000;
64
+ if (complexity === 'STANDARD')
65
+ return 100000;
66
+ if (complexity === 'CRITICAL')
67
+ return 150000;
68
+ return 100000;
69
+ };
70
+ const base = getBase();
71
+ const params = {
72
+ task_type: taskType,
73
+ complexity,
74
+ max_tokens: getMaxTokens(),
75
+ max_iterations: DEFAULT_MAX_ITERATIONS,
76
+ };
77
+ if (base === 'single-worker') {
78
+ params.worker_level = getLevel('worker');
24
79
  }
25
- if (complexity === 'TRIVIAL' && isPrMode && taskType !== 'INQUIRY') {
26
- return 'worker-validator';
80
+ else if (base === 'worker-validator') {
81
+ params.worker_level = getLevel('worker');
82
+ params.validator_level = getLevel('validator');
27
83
  }
28
- if (complexity === 'TRIVIAL') {
29
- return 'single-worker';
84
+ else if (base === 'debug-workflow') {
85
+ params.investigator_level = getLevel('planner');
86
+ params.fixer_level = getLevel('worker');
87
+ params.tester_level = getLevel('validator');
30
88
  }
31
- if (complexity === 'SIMPLE') {
32
- return 'worker-validator';
89
+ else if (base === 'full-workflow') {
90
+ params.planner_level = getLevel('planner');
91
+ params.worker_level = getLevel('worker');
92
+ params.validator_level = getLevel('validator');
93
+ params.validator_count = getValidatorCount();
33
94
  }
34
- return 'full-workflow';
35
- };
36
-
37
- const getLevel = (role) => {
38
- if (complexity === 'CRITICAL' && role === 'planner') return 'level3';
39
- if (complexity === 'TRIVIAL') return 'level1';
40
- return 'level2';
41
- };
42
-
43
- const getValidatorCount = () => {
44
- if (complexity === 'TRIVIAL') return 0;
45
- if (complexity === 'SIMPLE') return 1;
46
- if (complexity === 'STANDARD') return 2;
47
- // CRITICAL uses two-stage validation pipeline (validators loaded dynamically via meta-coordinator)
48
- // Setting validator_count=0 signals that inline validators should be skipped
49
- if (complexity === 'CRITICAL') return 0;
50
- return 1;
51
- };
52
-
53
- const getMaxTokens = () => {
54
- if (complexity === 'TRIVIAL') return 50000;
55
- if (complexity === 'SIMPLE') return 100000;
56
- if (complexity === 'STANDARD') return 100000;
57
- if (complexity === 'CRITICAL') return 150000;
58
- return 100000;
59
- };
60
-
61
- const base = getBase();
62
-
63
- const params = {
64
- task_type: taskType,
65
- complexity,
66
- max_tokens: getMaxTokens(),
67
- max_iterations: DEFAULT_MAX_ITERATIONS,
68
- };
69
-
70
- if (base === 'single-worker') {
71
- params.worker_level = getLevel('worker');
72
- } else if (base === 'worker-validator') {
73
- params.worker_level = getLevel('worker');
74
- params.validator_level = getLevel('validator');
75
- } else if (base === 'debug-workflow') {
76
- params.investigator_level = getLevel('planner');
77
- params.fixer_level = getLevel('worker');
78
- params.tester_level = getLevel('validator');
79
- } else if (base === 'full-workflow') {
80
- params.planner_level = getLevel('planner');
81
- params.worker_level = getLevel('worker');
82
- params.validator_level = getLevel('validator');
83
- params.validator_count = getValidatorCount();
84
- }
85
-
86
- return { base, params };
95
+ return { base, params };
87
96
  }
88
-
89
97
  module.exports = { getConfig };