@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,338 +1,29 @@
1
- const { readFileSync } = require('fs');
2
- const { join, resolve } = require('path');
3
-
4
- const { isPlatformMismatchReason } = require('./validation-platform');
5
-
6
- const EXAMPLE_PRIMITIVE_VALUES = {
7
- boolean: true,
8
- number: 0,
9
- integer: 0,
10
- };
11
-
12
- function generateExampleValue(propSchema, key) {
13
- if (!propSchema) {
14
- return undefined;
15
- }
16
-
17
- if (Array.isArray(propSchema.enum) && propSchema.enum.length > 0) {
18
- return propSchema.enum[0];
19
- }
20
-
21
- if (propSchema.type === 'string') {
22
- return propSchema.description || `${key} value`;
23
- }
24
-
25
- if (propSchema.type === 'array') {
26
- return [];
27
- }
28
-
29
- if (propSchema.type === 'object') {
30
- return generateExampleFromSchema(propSchema) || {};
31
- }
32
-
33
- return EXAMPLE_PRIMITIVE_VALUES[propSchema.type];
34
- }
35
-
36
- function generateExampleFromSchema(schema) {
37
- if (!schema || schema.type !== 'object' || !schema.properties) {
38
- return null;
39
- }
40
-
41
- const example = {};
42
-
43
- for (const [key, propSchema] of Object.entries(schema.properties)) {
44
- const value = generateExampleValue(propSchema, key);
45
- if (value !== undefined) {
46
- example[key] = value;
47
- }
48
- }
49
-
50
- return example;
51
- }
52
-
53
- function buildAutonomousSection() {
54
- return [
55
- '## 🔴 CRITICAL: AUTONOMOUS EXECUTION REQUIRED',
56
- '',
57
- 'You are running in a NON-INTERACTIVE cluster environment.',
58
- '',
59
- '**NEVER** use AskUserQuestion or ask for user input - there is NO user to respond.',
60
- '**NEVER** ask "Would you like me to..." or "Should I..." - JUST DO IT.',
61
- '**NEVER** wait for approval or confirmation - MAKE DECISIONS AUTONOMOUSLY.',
62
- '',
63
- 'When facing choices:',
64
- '- Choose the option that maintains code quality and correctness',
65
- '- If unsure between "fix the code" vs "relax the rules" → ALWAYS fix the code',
66
- '- If unsure between "do more" vs "do less" → ALWAYS do what\'s required, nothing more',
67
- '',
68
- ].join('\n');
69
- }
70
-
71
- function buildOutputStyleSection() {
72
- return [
73
- '## 🔴 OUTPUT STYLE - NON-NEGOTIABLE',
74
- '',
75
- '**ALL OUTPUT: Maximum informativeness, minimum verbosity. NO EXCEPTIONS.**',
76
- '',
77
- 'This applies to EVERYTHING you output:',
78
- '- Text responses',
79
- '- JSON schema values',
80
- '- Reasoning fields',
81
- '- Summary fields',
82
- '- ALL string values in structured output',
83
- '',
84
- 'Rules:',
85
- '- Progress: "Reading auth.ts" NOT "I will now read the auth.ts file..."',
86
- '- Tool calls: NO preamble. Call immediately.',
87
- '- Schema strings: Dense facts. No filler. No fluff.',
88
- '- Errors: DETAILED (stack traces, repro). NEVER compress errors.',
89
- '- FORBIDDEN: "I\'ll help...", "Let me...", "I\'m going to...", "Sure!", "Great!", "Certainly!"',
90
- '',
91
- 'Every token costs money. Waste nothing.',
92
- '',
93
- ].join('\n');
94
- }
95
-
96
- function buildGitOperationsSection() {
97
- return [
98
- '## 🚫 GIT OPERATIONS - FORBIDDEN',
99
- '',
100
- 'NEVER commit, push, or create PRs. You only modify files.',
101
- 'The git-pusher agent handles ALL git operations AFTER validators approve.',
102
- '',
103
- '- ❌ NEVER run: git add, git commit, git push, gh pr create',
104
- '- ❌ NEVER suggest committing changes',
105
- '- ✅ Only modify files and publish your completion message when done',
106
- '',
107
- ].join('\n');
108
- }
109
-
110
- function buildHeaderContext({ id, role, iteration, isIsolated }) {
111
- return [
112
- `You are agent "${id}" with role "${role}".`,
113
- '',
114
- `Iteration: ${iteration}`,
115
- '',
116
- buildAutonomousSection(),
117
- buildOutputStyleSection(),
118
- isIsolated ? '' : buildGitOperationsSection(),
119
- ]
120
- .filter(Boolean)
121
- .join('\n');
122
- }
123
-
124
- function buildInstructionsSection({ config, selectedPrompt, id }) {
125
- const promptText =
126
- selectedPrompt || (typeof config.prompt === 'string' ? config.prompt : config.prompt?.system);
127
-
128
- if (promptText) {
129
- return `## Instructions\n\n${promptText}\n\n`;
130
- }
131
-
132
- if (config.prompt && typeof config.prompt !== 'string' && !config.prompt?.system) {
133
- throw new Error(
134
- `Agent "${id}" has invalid prompt format. ` +
135
- `Expected string or object with .system property, got: ${JSON.stringify(config.prompt).slice(0, 100)}...`
136
- );
137
- }
138
-
139
- return '';
140
- }
141
-
142
- function hasIgnoredRepoToolingError(error) {
143
- return (
144
- typeof error === 'object' &&
145
- error !== null &&
146
- 'code' in error &&
147
- ['ENOENT', 'ENOTDIR', 'EACCES', 'EPERM'].includes(error.code)
148
- );
149
- }
150
-
151
- function resolveRepoToolingRoots({ config, worktree }) {
152
- return Array.from(
153
- new Set(
154
- [worktree?.path, config?.cwd, process.cwd()]
155
- .filter((value) => typeof value === 'string' && value.trim() !== '')
156
- .map((value) => resolve(value))
157
- )
158
- );
159
- }
160
-
161
- function buildRepoToolingSection({ config, worktree }) {
162
- for (const root of resolveRepoToolingRoots({ config, worktree })) {
163
- const skillPath = join(root, '.claude', 'skills', 'repo-tooling', 'SKILL.md');
164
-
165
- try {
166
- const content = readFileSync(skillPath, 'utf8').trim();
167
- if (content !== '') {
168
- return `${content}\n\n`;
169
- }
170
- } catch (error) {
171
- if (!hasIgnoredRepoToolingError(error)) {
172
- throw error;
173
- }
174
- }
175
- }
176
-
177
- return '';
178
- }
179
-
180
- function buildLegacyOutputSchemaSection(config) {
181
- if (!config.prompt?.outputFormat) {
182
- return '';
183
- }
184
-
185
- const rules = (config.prompt.outputFormat.rules || []).map((rule) => `- ${rule}`).join('\n');
186
-
187
- return [
188
- '## Output Schema (REQUIRED)',
189
- '',
190
- '```json',
191
- JSON.stringify(config.prompt.outputFormat.example, null, 2),
192
- '```',
193
- '',
194
- 'STRING VALUES IN THIS SCHEMA: Dense. Factual. No filler words. No pleasantries.',
195
- rules,
196
- '',
197
- ]
198
- .filter(Boolean)
199
- .join('\n');
200
- }
201
-
202
- function buildJsonSchemaSection(config) {
203
- if (!config.jsonSchema || config.outputFormat !== 'json') {
204
- return '';
205
- }
206
-
207
- const lines = [
208
- '## 🔴 OUTPUT FORMAT - JSON ONLY',
209
- '',
210
- 'Your response must be ONLY valid JSON. No other text before or after.',
211
- 'Start with { and end with }. Nothing else.',
212
- '',
213
- 'Required schema:',
214
- '```json',
215
- JSON.stringify(config.jsonSchema, null, 2),
216
- '```',
217
- '',
218
- ];
219
-
220
- const example = generateExampleFromSchema(config.jsonSchema);
221
- if (example) {
222
- lines.push('Example output:', '```json', JSON.stringify(example, null, 2), '```', '');
223
- }
224
-
225
- lines.push(
226
- 'CRITICAL RULES:',
227
- '- Output ONLY the JSON object - no explanation, no thinking, no preamble',
228
- '- Use EXACTLY the enum values specified (case-sensitive)',
229
- '- Include ALL required fields',
230
- ''
231
- );
232
-
233
- return lines.join('\n');
234
- }
235
-
236
- function shouldKeepCannotValidate(criteria, ignoreReason, seenIds) {
237
- if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
238
- return false;
239
- }
240
-
241
- if (ignoreReason && ignoreReason(criteria.reason)) {
242
- return false;
243
- }
244
-
245
- if (seenIds.has(criteria.id)) {
246
- return false;
247
- }
248
-
249
- return true;
250
- }
251
-
252
- function collectCannotValidateCriteria(prevValidations, options = {}) {
253
- const cannotValidateCriteria = [];
254
- const seenIds = new Set();
255
- const ignoreReason = options.ignoreReason;
256
-
257
- for (const msg of prevValidations) {
258
- const criteriaResults = msg.content?.data?.criteriaResults;
259
- if (!Array.isArray(criteriaResults)) {
260
- continue;
261
- }
262
-
263
- for (const criteria of criteriaResults) {
264
- if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
265
- continue;
266
- }
267
-
268
- seenIds.add(criteria.id);
269
- cannotValidateCriteria.push({
270
- id: criteria.id,
271
- reason: criteria.reason || 'No reason provided',
272
- });
273
- }
274
- }
275
-
276
- return cannotValidateCriteria;
277
- }
278
-
279
- function buildCannotValidateSection(cannotValidateCriteria) {
280
- if (cannotValidateCriteria.length === 0) {
281
- return '';
282
- }
283
-
284
- return [
285
- '',
286
- '## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
287
- '',
288
- 'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
289
- 'These limitations have not changed. Do NOT re-attempt verification.',
290
- 'Mark these as CANNOT_VALIDATE again with the same reason.',
291
- '',
292
- ...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
293
- '',
294
- ].join('\n');
295
- }
296
-
297
- function buildValidatorSkipSection({ role, messageBus, cluster, isolation }) {
298
- if (role !== 'validator') {
299
- return '';
300
- }
301
-
302
- const prevValidations = messageBus.query({
303
- cluster_id: cluster.id,
304
- topic: 'VALIDATION_RESULT',
305
- since: cluster.createdAt,
306
- limit: 50,
307
- });
308
- const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
309
- const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
310
-
311
- return buildCannotValidateSection(cannotValidateCriteria);
312
- }
313
-
1
+ "use strict";
2
+ const environmentSections = require("./agent-context-environment-sections");
3
+ const promptSections = require("./agent-context-prompt-sections");
4
+ const validationSections = require("./agent-context-validation-sections");
5
+ const { buildHeaderContext, buildRepoToolingSection } = environmentSections;
6
+ const { buildInstructionsSection, buildJsonSchemaSection, buildLegacyOutputSchemaSection } = promptSections;
7
+ const { buildValidatorSkipSection } = validationSections;
314
8
  function buildTriggeringMessageSection(triggeringMessage) {
315
- const lines = [
316
- '',
317
- '## Triggering Message',
318
- '',
319
- `Topic: ${triggeringMessage.topic}`,
320
- `Sender: ${triggeringMessage.sender}`,
321
- ];
322
-
323
- if (triggeringMessage.content?.text) {
324
- lines.push('', triggeringMessage.content.text);
325
- }
326
-
327
- return `${lines.join('\n')}\n`;
9
+ const lines = [
10
+ '',
11
+ '## Triggering Message',
12
+ '',
13
+ `Topic: ${triggeringMessage.topic}`,
14
+ `Sender: ${triggeringMessage.sender}`,
15
+ ];
16
+ if (triggeringMessage.content?.text) {
17
+ lines.push('', triggeringMessage.content.text);
18
+ }
19
+ return `${lines.join('\n')}\n`;
328
20
  }
329
-
330
21
  module.exports = {
331
- buildHeaderContext,
332
- buildInstructionsSection,
333
- buildJsonSchemaSection,
334
- buildLegacyOutputSchemaSection,
335
- buildRepoToolingSection,
336
- buildTriggeringMessageSection,
337
- buildValidatorSkipSection,
22
+ buildHeaderContext,
23
+ buildInstructionsSection,
24
+ buildJsonSchemaSection,
25
+ buildLegacyOutputSchemaSection,
26
+ buildRepoToolingSection,
27
+ buildTriggeringMessageSection,
28
+ buildValidatorSkipSection,
338
29
  };
@@ -0,0 +1,36 @@
1
+ import environmentSections = require('./agent-context-environment-sections');
2
+ import promptSections = require('./agent-context-prompt-sections');
3
+ import validationSections = require('./agent-context-validation-sections');
4
+
5
+ import type { TriggeringMessage } from './agent-context-types';
6
+
7
+ const { buildHeaderContext, buildRepoToolingSection } = environmentSections;
8
+ const { buildInstructionsSection, buildJsonSchemaSection, buildLegacyOutputSchemaSection } =
9
+ promptSections;
10
+ const { buildValidatorSkipSection } = validationSections;
11
+
12
+ function buildTriggeringMessageSection(triggeringMessage: TriggeringMessage): string {
13
+ const lines = [
14
+ '',
15
+ '## Triggering Message',
16
+ '',
17
+ `Topic: ${triggeringMessage.topic}`,
18
+ `Sender: ${triggeringMessage.sender}`,
19
+ ];
20
+
21
+ if (triggeringMessage.content?.text) {
22
+ lines.push('', triggeringMessage.content.text);
23
+ }
24
+
25
+ return `${lines.join('\n')}\n`;
26
+ }
27
+
28
+ export = {
29
+ buildHeaderContext,
30
+ buildInstructionsSection,
31
+ buildJsonSchemaSection,
32
+ buildLegacyOutputSchemaSection,
33
+ buildRepoToolingSection,
34
+ buildTriggeringMessageSection,
35
+ buildValidatorSkipSection,
36
+ };
@@ -1,165 +1,112 @@
1
- const { isReplayableMessage } = require('./context-replay-policy');
2
-
1
+ "use strict";
2
+ const replayPolicy = require("./context-replay-policy");
3
+ const { isReplayableMessage } = replayPolicy;
3
4
  function resolveSourceSince(source, cluster, lastTaskEndTime, lastAgentStartTime) {
4
- const sinceValue = source.since;
5
-
6
- if (sinceValue === 'cluster_start') {
7
- return cluster.createdAt;
8
- }
9
-
10
- if (sinceValue === 'last_task_end') {
11
- return lastTaskEndTime || cluster.createdAt;
12
- }
13
-
14
- if (sinceValue === 'last_agent_start') {
15
- return lastAgentStartTime ? lastAgentStartTime + 1 : cluster.createdAt;
16
- }
17
-
18
- if (typeof sinceValue === 'string') {
19
- const parsed = Date.parse(sinceValue);
20
- if (Number.isNaN(parsed)) {
21
- throw new Error(
22
- `Unknown context source "since" value "${sinceValue}" for topic ${source.topic}. ` +
23
- 'Use cluster_start, last_task_end, last_agent_start, or an ISO timestamp.'
24
- );
5
+ const sinceValue = source.since;
6
+ if (sinceValue === 'cluster_start') {
7
+ return cluster.createdAt;
25
8
  }
26
- return parsed;
27
- }
28
-
29
- return sinceValue;
9
+ if (sinceValue === 'last_task_end') {
10
+ return lastTaskEndTime || cluster.createdAt;
11
+ }
12
+ if (sinceValue === 'last_agent_start') {
13
+ return lastAgentStartTime ? lastAgentStartTime + 1 : cluster.createdAt;
14
+ }
15
+ if (typeof sinceValue === 'string') {
16
+ const parsed = Date.parse(sinceValue);
17
+ if (Number.isNaN(parsed)) {
18
+ throw new Error(`Unknown context source "since" value "${sinceValue}" for topic ${source.topic}. ` +
19
+ 'Use cluster_start, last_task_end, last_agent_start, or an ISO timestamp.');
20
+ }
21
+ return parsed;
22
+ }
23
+ return sinceValue;
30
24
  }
31
-
32
25
  function formatSourceMessagesSection(source, messages) {
33
- let context = `\n## Messages from topic: ${source.topic}\n\n`;
34
-
35
- for (const msg of messages) {
36
- context += `[${new Date(msg.timestamp).toISOString()}] ${msg.sender}:\n`;
37
- if (msg.content?.text) {
38
- context += `${msg.content.text}\n`;
39
- }
40
- if (msg.content?.data) {
41
- context += `Data: ${JSON.stringify(msg.content.data, null, 2)}\n`;
26
+ let context = `\n## Messages from topic: ${source.topic}\n\n`;
27
+ for (const msg of messages) {
28
+ context += `[${new Date(msg.timestamp).toISOString()}] ${msg.sender}:\n`;
29
+ if (msg.content?.text) {
30
+ context += `${msg.content.text}\n`;
31
+ }
32
+ if (msg.content?.data) {
33
+ context += `Data: ${JSON.stringify(msg.content.data, null, 2)}\n`;
34
+ }
35
+ context += '\n';
42
36
  }
43
- context += '\n';
44
- }
45
-
46
- return context;
37
+ return context;
47
38
  }
48
-
49
39
  function resolveSourceSelection(source, { compact = false } = {}) {
50
- const baseAmount = source.amount ?? source.limit;
51
- const baseStrategy = source.strategy ?? (baseAmount !== undefined ? 'latest' : 'all');
52
-
53
- if (!compact) {
54
- return { amount: baseAmount, strategy: baseStrategy };
55
- }
56
-
57
- return {
58
- amount: source.compactAmount ?? 1,
59
- strategy: source.compactStrategy ?? (baseStrategy === 'all' ? 'latest' : baseStrategy),
60
- };
40
+ const baseAmount = source.amount ?? source.limit;
41
+ const baseStrategy = source.strategy ?? (baseAmount !== undefined ? 'latest' : 'all');
42
+ if (!compact) {
43
+ return { amount: baseAmount, strategy: baseStrategy };
44
+ }
45
+ return {
46
+ amount: source.compactAmount ?? 1,
47
+ strategy: source.compactStrategy ?? (baseStrategy === 'all' ? 'latest' : baseStrategy),
48
+ };
61
49
  }
62
-
63
- function resolveSourceMessages({
64
- source,
65
- messageBus,
66
- cluster,
67
- lastTaskEndTime,
68
- lastAgentStartTime,
69
- afterId,
70
- throughId,
71
- triggeringMessageId,
72
- compact = false,
73
- }) {
74
- const sinceTimestamp = resolveSourceSince(
75
- source,
76
- cluster,
77
- lastTaskEndTime,
78
- lastAgentStartTime
79
- );
80
- const { amount, strategy } = resolveSourceSelection(source, { compact });
81
- const messages = messageBus.query({
82
- cluster_id: cluster.id,
83
- topic: source.topic,
84
- sender: source.sender,
85
- since: sinceTimestamp,
86
- afterId,
87
- throughId,
88
- });
89
- const replayableMessages = messages.filter(
90
- (message) => isReplayableMessage(message) && message.id !== triggeringMessageId
91
- );
92
-
93
- if (amount === undefined) {
94
- return replayableMessages;
95
- }
96
-
97
- if (strategy === 'latest') {
98
- return replayableMessages.slice(-amount);
99
- }
100
-
101
- return replayableMessages.slice(0, amount);
50
+ function resolveSourceMessages({ source, messageBus, cluster, lastTaskEndTime, lastAgentStartTime, afterId, throughId, triggeringMessageId, compact = false, }) {
51
+ const sinceTimestamp = resolveSourceSince(source, cluster, lastTaskEndTime, lastAgentStartTime);
52
+ const { amount, strategy } = resolveSourceSelection(source, { compact });
53
+ const messages = messageBus.query({
54
+ cluster_id: cluster.id,
55
+ topic: source.topic,
56
+ sender: source.sender,
57
+ since: sinceTimestamp,
58
+ afterId,
59
+ throughId,
60
+ });
61
+ const replayableMessages = messages.filter((message) => isReplayableMessage(message) && message.id !== triggeringMessageId);
62
+ if (amount === undefined) {
63
+ return replayableMessages;
64
+ }
65
+ if (strategy === 'latest') {
66
+ return replayableMessages.slice(-amount);
67
+ }
68
+ return replayableMessages.slice(0, amount);
102
69
  }
103
-
104
70
  const REQUIRED_TOPICS = new Set(['STATE_SNAPSHOT', 'ISSUE_OPENED', 'PLAN_READY']);
105
71
  const HIGH_PRIORITY_TOPICS = new Set(['VALIDATION_RESULT', 'IMPLEMENTATION_READY']);
106
-
107
72
  function resolveSourcePriority(source) {
108
- if (source.priority) {
109
- return source.priority;
110
- }
111
-
112
- if (REQUIRED_TOPICS.has(source.topic)) {
113
- return 'required';
114
- }
115
-
116
- if (HIGH_PRIORITY_TOPICS.has(source.topic)) {
117
- return 'high';
118
- }
119
-
120
- return 'medium';
121
- }
122
-
123
- function buildSourcePack({
124
- source,
125
- index,
126
- messageBus,
127
- cluster,
128
- lastTaskEndTime,
129
- lastAgentStartTime,
130
- afterId,
131
- throughId,
132
- triggeringMessageId,
133
- }) {
134
- const render = (compact) => {
135
- const messages = resolveSourceMessages({
136
- source,
137
- messageBus,
138
- cluster,
139
- lastTaskEndTime,
140
- lastAgentStartTime,
141
- afterId,
142
- throughId,
143
- triggeringMessageId,
144
- compact,
145
- });
146
-
147
- if (messages.length === 0) {
148
- return '';
73
+ if (source.priority) {
74
+ return source.priority;
149
75
  }
150
-
151
- return formatSourceMessagesSection(source, messages);
152
- };
153
-
154
- return {
155
- id: `source:${source.topic}:${index}`,
156
- section: 'sources',
157
- priority: resolveSourcePriority(source),
158
- render: () => render(false),
159
- compact: () => render(true),
160
- };
76
+ if (REQUIRED_TOPICS.has(source.topic)) {
77
+ return 'required';
78
+ }
79
+ if (HIGH_PRIORITY_TOPICS.has(source.topic)) {
80
+ return 'high';
81
+ }
82
+ return 'medium';
83
+ }
84
+ function buildSourcePack({ source, index, messageBus, cluster, lastTaskEndTime, lastAgentStartTime, afterId, throughId, triggeringMessageId, }) {
85
+ const render = (compact) => {
86
+ const messages = resolveSourceMessages({
87
+ source,
88
+ messageBus,
89
+ cluster,
90
+ lastTaskEndTime,
91
+ lastAgentStartTime,
92
+ afterId,
93
+ throughId,
94
+ triggeringMessageId,
95
+ compact,
96
+ });
97
+ if (messages.length === 0) {
98
+ return '';
99
+ }
100
+ return formatSourceMessagesSection(source, messages);
101
+ };
102
+ return {
103
+ id: `source:${source.topic}:${index}`,
104
+ section: 'sources',
105
+ priority: resolveSourcePriority(source),
106
+ render: () => render(false),
107
+ compact: () => render(true),
108
+ };
161
109
  }
162
-
163
110
  module.exports = {
164
- buildSourcePack,
111
+ buildSourcePack,
165
112
  };