@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,278 +1,43 @@
1
- /**
2
- * AgentContextBuilder - Build agent execution context from ledger
3
- *
4
- * Provides:
5
- * - Context assembly from multiple message sources
6
- * - Context strategy evaluation (topics, limits, since timestamps)
7
- * - Prompt injection and formatting
8
- * - Token-budgeted context packs
9
- * - Defensive context overflow prevention
10
- */
11
-
12
- // Defensive limit: 500,000 chars ≈ 125k tokens (safe buffer below 200k limit)
13
- // Prevents "Prompt is too long" errors that kill tasks
1
+ "use strict";
2
+ const contextMetrics = require("./context-metrics");
3
+ const contextPackBuilder = require("./context-pack-builder");
4
+ const agentContextPacks = require("./agent-context-packs");
14
5
  const MAX_CONTEXT_CHARS = 500000;
15
- const {
16
- buildContextMetrics,
17
- emitContextMetrics,
18
- resolveLegacyMaxTokens,
19
- updateTotalMetrics,
20
- } = require('./context-metrics');
21
- const { buildContextPacks } = require('./context-pack-builder');
22
- const { buildSourcePack } = require('./agent-context-sources');
23
- const {
24
- buildHeaderContext,
25
- buildInstructionsSection,
26
- buildJsonSchemaSection,
27
- buildLegacyOutputSchemaSection,
28
- buildRepoToolingSection,
29
- buildTriggeringMessageSection,
30
- buildValidatorSkipSection,
31
- } = require('./agent-context-sections');
32
- const { buildRequiredQualityGatesSection } = require('./agent-quality-gates-context');
33
- const { buildCommandProofsSection } = require('./agent-command-proofs-context');
34
-
35
- function pushStaticPack({ packs, packId, section, text, order, options = {} }) {
36
- if (!text) {
37
- return order;
38
- }
39
-
40
- packs.push({
41
- id: packId,
42
- section,
43
- priority: 'required',
44
- order,
45
- preserve: options.preserve || false,
46
- render: () => text,
47
- });
48
-
49
- return order + 1;
50
- }
51
-
52
- function appendSourcePacks(packs, strategy, params, startingOrder) {
53
- if (!Array.isArray(strategy.sources)) {
54
- return startingOrder;
55
- }
56
-
57
- let order = startingOrder;
58
- strategy.sources.forEach((source, index) => {
59
- packs.push({ ...buildSourcePack({ source, index, ...params }), order });
60
- order += 1;
61
- });
62
-
63
- return order;
64
- }
65
-
66
- function buildStaticSections(params) {
67
- const {
68
- id,
69
- role,
70
- iteration,
71
- config,
72
- selectedPrompt,
73
- queuedGuidance,
74
- messageBus,
75
- cluster,
76
- triggeringMessage,
77
- worktree,
78
- isolation,
79
- } = params;
80
- const isIsolated = !!(worktree?.enabled || isolation?.enabled);
81
-
82
- return {
83
- header: buildHeaderContext({ id, role, iteration, isIsolated }),
84
- instructions: buildInstructionsSection({ config, selectedPrompt, id }),
85
- repoTooling: buildRepoToolingSection({ config, worktree }),
86
- commandProofs: buildCommandProofsSection(config),
87
- legacyOutputSchema: buildLegacyOutputSchemaSection(config),
88
- queuedGuidance: queuedGuidance || '',
89
- requiredQualityGates: buildRequiredQualityGatesSection(config),
90
- jsonSchema: buildJsonSchemaSection(config),
91
- validatorSkip: buildValidatorSkipSection({ role, messageBus, cluster, isolation }),
92
- triggeringMessage: buildTriggeringMessageSection(triggeringMessage),
93
- };
94
- }
95
-
96
- function buildPacks(params) {
97
- const { strategy, messageBus, cluster, lastTaskEndTime, lastAgentStartTime, triggeringMessage } =
98
- params;
99
- const sections = buildStaticSections(params);
100
- const packs = [];
101
- let order = 0;
102
- const staticPackIds = [
103
- 'header',
104
- 'instructions',
105
- 'repoTooling',
106
- 'commandProofs',
107
- 'queuedGuidance',
108
- 'legacyOutputSchema',
109
- 'requiredQualityGates',
110
- 'jsonSchema',
111
- ];
112
-
113
- for (const packId of staticPackIds) {
114
- order = pushStaticPack({ packs, packId, section: packId, text: sections[packId], order });
115
- }
116
-
117
- order = appendSourcePacks(
118
- packs,
119
- strategy,
120
- {
121
- messageBus,
122
- cluster,
123
- lastTaskEndTime,
124
- lastAgentStartTime,
125
- throughId: params.contextThroughId,
126
- triggeringMessageId: triggeringMessage?.id,
127
- },
128
- order
129
- );
130
- order = pushStaticPack({
131
- packs,
132
- packId: 'validatorSkip',
133
- section: 'validatorSkip',
134
- text: sections.validatorSkip,
135
- order,
136
- });
137
- pushStaticPack({
138
- packs,
139
- packId: 'triggeringMessage',
140
- section: 'triggeringMessage',
141
- text: sections.triggeringMessage,
142
- order,
143
- options: { preserve: true },
144
- });
145
-
146
- return packs;
147
- }
148
-
149
- function buildContinuationPacks(params) {
150
- const {
151
- id,
152
- iteration,
153
- config,
154
- selectedPrompt,
155
- queuedGuidance,
156
- triggeringMessage,
157
- strategy,
158
- messageBus,
159
- cluster,
160
- lastTaskEndTime,
161
- lastAgentStartTime,
162
- continuationSequence,
163
- contextThroughId,
164
- previousPromptIdentity,
165
- currentPromptIdentity,
166
- } = params;
167
- const packs = [];
168
- let order = 0;
169
-
170
- order = pushStaticPack({
171
- packs,
172
- packId: 'continuationHeader',
173
- section: 'continuationHeader',
174
- text: `## Continuation Turn\n\nAgent: ${id}\nIteration: ${iteration}\n\nApply only the new material below while retaining the existing session instructions.\n\n`,
175
- order,
176
- });
177
-
178
- // Iteration-rule prompts may intentionally change between turns. Static prompts,
179
- // repository tooling, ISSUE_OPENED/PLAN_READY sources, and output contracts are
180
- // already present in the provider session and must not be replayed.
181
- if (config.promptConfig?.type === 'rules' && currentPromptIdentity !== previousPromptIdentity) {
182
- order = pushStaticPack({
183
- packs,
184
- packId: 'iterationInstructions',
185
- section: 'iterationInstructions',
186
- text: buildInstructionsSection({ config, selectedPrompt, id }),
187
- order,
188
- });
189
- }
190
-
191
- order = pushStaticPack({
192
- packs,
193
- packId: 'queuedGuidance',
194
- section: 'queuedGuidance',
195
- text: queuedGuidance || '',
196
- order,
197
- });
198
- order = appendSourcePacks(
199
- packs,
200
- strategy,
201
- {
202
- messageBus,
203
- cluster,
204
- lastTaskEndTime,
205
- lastAgentStartTime,
206
- afterId: continuationSequence,
207
- throughId: contextThroughId,
208
- triggeringMessageId: triggeringMessage?.id,
209
- },
210
- order
211
- );
212
- pushStaticPack({
213
- packs,
214
- packId: 'triggeringMessage',
215
- section: 'triggeringMessage',
216
- text: buildTriggeringMessageSection(triggeringMessage),
217
- order,
218
- options: { preserve: true },
219
- });
220
-
221
- return packs;
222
- }
223
-
224
- /**
225
- * Build execution context for an agent
226
- * @param {object} params - Context building parameters
227
- * @param {string} params.id - Agent ID
228
- * @param {string} params.role - Agent role
229
- * @param {number} params.iteration - Current iteration number
230
- * @param {any} params.config - Agent configuration
231
- * @param {any} params.messageBus - Message bus for querying ledger
232
- * @param {any} params.cluster - Cluster object
233
- * @param {number} [params.lastTaskEndTime] - Timestamp of last task completion
234
- * @param {number} [params.lastAgentStartTime] - Timestamp when this agent last started work
235
- * @param {any} params.triggeringMessage - Message that triggered this execution
236
- * @param {string} [params.selectedPrompt] - Pre-selected prompt from _selectPrompt() (iteration-based)
237
- * @param {object} [params.worktree] - Worktree isolation state (if running in worktree mode)
238
- * @param {object} [params.isolation] - Docker isolation state (if running in Docker mode)
239
- * @returns {string} Assembled context string
240
- */
6
+ const { buildContextMetrics, emitContextMetrics, resolveLegacyMaxTokens, updateTotalMetrics } = contextMetrics;
7
+ const { buildContextPacks } = contextPackBuilder;
8
+ const { buildAgentContextPacks } = agentContextPacks;
241
9
  function buildContext(params) {
242
- const strategy = params.config.contextStrategy || { sources: [] };
243
- const continuation = params.mode === 'continuation';
244
- const packs = continuation
245
- ? buildContinuationPacks({ ...params, strategy })
246
- : buildPacks({ ...params, strategy });
247
- const maxTokens = resolveLegacyMaxTokens(strategy);
248
- const packResult = buildContextPacks({
249
- packs,
250
- maxTokens,
251
- maxChars: MAX_CONTEXT_CHARS,
252
- });
253
-
254
- const metrics = buildContextMetrics({
255
- clusterId: params.cluster.id,
256
- agentId: params.id,
257
- role: params.role,
258
- iteration: params.iteration,
259
- triggeringMessage: params.triggeringMessage,
260
- strategy: { ...strategy, contextMode: continuation ? 'continuation' : 'full' },
261
- packs: packResult.packDecisions,
262
- budget: packResult.budget,
263
- truncation: packResult.truncation,
264
- });
265
-
266
- updateTotalMetrics(metrics, packResult.context.length);
267
- emitContextMetrics(metrics, {
268
- messageBus: params.messageBus,
269
- clusterId: params.cluster.id,
270
- agentId: params.id,
271
- });
272
-
273
- return packResult.context;
10
+ const strategy = params.config.contextStrategy || { sources: [] };
11
+ const continuation = params.mode === 'continuation';
12
+ const packs = buildAgentContextPacks(params, strategy, continuation);
13
+ const maxTokens = resolveLegacyMaxTokens(strategy);
14
+ const packResult = buildContextPacks({
15
+ packs,
16
+ maxTokens,
17
+ maxChars: MAX_CONTEXT_CHARS,
18
+ });
19
+ const metrics = buildContextMetrics({
20
+ clusterId: params.cluster.id,
21
+ agentId: params.id,
22
+ role: params.role,
23
+ iteration: params.iteration,
24
+ triggeringMessage: params.triggeringMessage,
25
+ strategy: {
26
+ ...strategy,
27
+ contextMode: continuation ? 'continuation' : 'full',
28
+ },
29
+ packs: packResult.packDecisions,
30
+ budget: packResult.budget,
31
+ truncation: packResult.truncation,
32
+ });
33
+ updateTotalMetrics(metrics, packResult.context.length);
34
+ emitContextMetrics(metrics, {
35
+ messageBus: params.messageBus,
36
+ clusterId: params.cluster.id,
37
+ agentId: params.id,
38
+ });
39
+ return packResult.context;
274
40
  }
275
-
276
41
  module.exports = {
277
- buildContext,
42
+ buildContext,
278
43
  };
@@ -0,0 +1,51 @@
1
+ import contextMetrics = require('./context-metrics');
2
+ import contextPackBuilder = require('./context-pack-builder');
3
+ import agentContextPacks = require('./agent-context-packs');
4
+
5
+ import type { BuildContextParams, ContextStrategy } from './agent-context-types';
6
+
7
+ const MAX_CONTEXT_CHARS = 500000;
8
+ const { buildContextMetrics, emitContextMetrics, resolveLegacyMaxTokens, updateTotalMetrics } =
9
+ contextMetrics;
10
+ const { buildContextPacks } = contextPackBuilder;
11
+ const { buildAgentContextPacks } = agentContextPacks;
12
+
13
+ function buildContext(params: BuildContextParams): string {
14
+ const strategy: ContextStrategy = params.config.contextStrategy || { sources: [] };
15
+ const continuation = params.mode === 'continuation';
16
+ const packs = buildAgentContextPacks(params, strategy, continuation);
17
+ const maxTokens = resolveLegacyMaxTokens(strategy);
18
+ const packResult = buildContextPacks({
19
+ packs,
20
+ maxTokens,
21
+ maxChars: MAX_CONTEXT_CHARS,
22
+ });
23
+
24
+ const metrics = buildContextMetrics({
25
+ clusterId: params.cluster.id,
26
+ agentId: params.id,
27
+ role: params.role,
28
+ iteration: params.iteration,
29
+ triggeringMessage: params.triggeringMessage,
30
+ strategy: {
31
+ ...strategy,
32
+ contextMode: continuation ? 'continuation' : 'full',
33
+ },
34
+ packs: packResult.packDecisions,
35
+ budget: packResult.budget,
36
+ truncation: packResult.truncation,
37
+ });
38
+
39
+ updateTotalMetrics(metrics, packResult.context.length);
40
+ emitContextMetrics(metrics, {
41
+ messageBus: params.messageBus,
42
+ clusterId: params.cluster.id,
43
+ agentId: params.id,
44
+ });
45
+
46
+ return packResult.context;
47
+ }
48
+
49
+ export = {
50
+ buildContext,
51
+ };
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+ const { readFileSync } = fs;
5
+ const { join, resolve } = path;
6
+ function buildAutonomousSection() {
7
+ return [
8
+ '## 🔴 CRITICAL: AUTONOMOUS EXECUTION REQUIRED',
9
+ '',
10
+ 'You are running in a NON-INTERACTIVE cluster environment.',
11
+ '',
12
+ '**NEVER** use AskUserQuestion or ask for user input - there is NO user to respond.',
13
+ '**NEVER** ask "Would you like me to..." or "Should I..." - JUST DO IT.',
14
+ '**NEVER** wait for approval or confirmation - MAKE DECISIONS AUTONOMOUSLY.',
15
+ '',
16
+ 'When facing choices:',
17
+ '- Choose the option that maintains code quality and correctness',
18
+ '- If unsure between "fix the code" vs "relax the rules" → ALWAYS fix the code',
19
+ '- If unsure between "do more" vs "do less" → ALWAYS do what\'s required, nothing more',
20
+ '',
21
+ ].join('\n');
22
+ }
23
+ function buildOutputStyleSection() {
24
+ return [
25
+ '## 🔴 OUTPUT STYLE - NON-NEGOTIABLE',
26
+ '',
27
+ '**ALL OUTPUT: Maximum informativeness, minimum verbosity. NO EXCEPTIONS.**',
28
+ '',
29
+ 'This applies to EVERYTHING you output:',
30
+ '- Text responses',
31
+ '- JSON schema values',
32
+ '- Reasoning fields',
33
+ '- Summary fields',
34
+ '- ALL string values in structured output',
35
+ '',
36
+ 'Rules:',
37
+ '- Progress: "Reading auth.ts" NOT "I will now read the auth.ts file..."',
38
+ '- Tool calls: NO preamble. Call immediately.',
39
+ '- Schema strings: Dense facts. No filler. No fluff.',
40
+ '- Errors: DETAILED (stack traces, repro). NEVER compress errors.',
41
+ '- FORBIDDEN: "I\'ll help...", "Let me...", "I\'m going to...", "Sure!", "Great!", "Certainly!"',
42
+ '',
43
+ 'Every token costs money. Waste nothing.',
44
+ '',
45
+ ].join('\n');
46
+ }
47
+ function buildGitOperationsSection() {
48
+ return [
49
+ '## 🚫 GIT OPERATIONS - FORBIDDEN',
50
+ '',
51
+ 'NEVER commit, push, or create PRs. You only modify files.',
52
+ 'The git-pusher agent handles ALL git operations AFTER validators approve.',
53
+ '',
54
+ '- ❌ NEVER run: git add, git commit, git push, gh pr create',
55
+ '- ❌ NEVER suggest committing changes',
56
+ '- ✅ Only modify files and publish your completion message when done',
57
+ '',
58
+ ].join('\n');
59
+ }
60
+ function buildHeaderContext({ id, role, iteration, isIsolated }) {
61
+ return [
62
+ `You are agent "${id}" with role "${role}".`,
63
+ '',
64
+ `Iteration: ${iteration}`,
65
+ '',
66
+ buildAutonomousSection(),
67
+ buildOutputStyleSection(),
68
+ isIsolated ? '' : buildGitOperationsSection(),
69
+ ]
70
+ .filter(Boolean)
71
+ .join('\n');
72
+ }
73
+ function hasIgnoredRepoToolingError(error) {
74
+ return (typeof error === 'object' &&
75
+ error !== null &&
76
+ 'code' in error &&
77
+ typeof error.code === 'string' &&
78
+ ['ENOENT', 'ENOTDIR', 'EACCES', 'EPERM'].includes(error.code));
79
+ }
80
+ function resolveRepoToolingRoots({ config, worktree }) {
81
+ return Array.from(new Set([worktree?.path, config?.cwd, process.cwd()]
82
+ .filter((value) => typeof value === 'string' && value.trim() !== '')
83
+ .map((value) => resolve(value))));
84
+ }
85
+ function buildRepoToolingSection({ config, worktree }) {
86
+ for (const root of resolveRepoToolingRoots({ config, worktree })) {
87
+ const skillPath = join(root, '.claude', 'skills', 'repo-tooling', 'SKILL.md');
88
+ try {
89
+ const content = readFileSync(skillPath, 'utf8').trim();
90
+ if (content !== '') {
91
+ return `${content}\n\n`;
92
+ }
93
+ }
94
+ catch (error) {
95
+ if (!hasIgnoredRepoToolingError(error)) {
96
+ throw error;
97
+ }
98
+ }
99
+ }
100
+ return '';
101
+ }
102
+ module.exports = {
103
+ buildHeaderContext,
104
+ buildRepoToolingSection,
105
+ };
@@ -0,0 +1,134 @@
1
+ import fs = require('fs');
2
+ import path = require('path');
3
+
4
+ import type { AgentContextConfig, WorktreeContext } from './agent-context-types';
5
+
6
+ interface HeaderContextParams {
7
+ id: string;
8
+ role: string;
9
+ iteration: number;
10
+ isIsolated: boolean;
11
+ }
12
+
13
+ interface RepoToolingParams {
14
+ config?: AgentContextConfig | null | undefined;
15
+ worktree?: WorktreeContext | null | undefined;
16
+ }
17
+
18
+ const { readFileSync } = fs;
19
+ const { join, resolve } = path;
20
+
21
+ function buildAutonomousSection(): string {
22
+ return [
23
+ '## 🔴 CRITICAL: AUTONOMOUS EXECUTION REQUIRED',
24
+ '',
25
+ 'You are running in a NON-INTERACTIVE cluster environment.',
26
+ '',
27
+ '**NEVER** use AskUserQuestion or ask for user input - there is NO user to respond.',
28
+ '**NEVER** ask "Would you like me to..." or "Should I..." - JUST DO IT.',
29
+ '**NEVER** wait for approval or confirmation - MAKE DECISIONS AUTONOMOUSLY.',
30
+ '',
31
+ 'When facing choices:',
32
+ '- Choose the option that maintains code quality and correctness',
33
+ '- If unsure between "fix the code" vs "relax the rules" → ALWAYS fix the code',
34
+ '- If unsure between "do more" vs "do less" → ALWAYS do what\'s required, nothing more',
35
+ '',
36
+ ].join('\n');
37
+ }
38
+
39
+ function buildOutputStyleSection(): string {
40
+ return [
41
+ '## 🔴 OUTPUT STYLE - NON-NEGOTIABLE',
42
+ '',
43
+ '**ALL OUTPUT: Maximum informativeness, minimum verbosity. NO EXCEPTIONS.**',
44
+ '',
45
+ 'This applies to EVERYTHING you output:',
46
+ '- Text responses',
47
+ '- JSON schema values',
48
+ '- Reasoning fields',
49
+ '- Summary fields',
50
+ '- ALL string values in structured output',
51
+ '',
52
+ 'Rules:',
53
+ '- Progress: "Reading auth.ts" NOT "I will now read the auth.ts file..."',
54
+ '- Tool calls: NO preamble. Call immediately.',
55
+ '- Schema strings: Dense facts. No filler. No fluff.',
56
+ '- Errors: DETAILED (stack traces, repro). NEVER compress errors.',
57
+ '- FORBIDDEN: "I\'ll help...", "Let me...", "I\'m going to...", "Sure!", "Great!", "Certainly!"',
58
+ '',
59
+ 'Every token costs money. Waste nothing.',
60
+ '',
61
+ ].join('\n');
62
+ }
63
+
64
+ function buildGitOperationsSection(): string {
65
+ return [
66
+ '## 🚫 GIT OPERATIONS - FORBIDDEN',
67
+ '',
68
+ 'NEVER commit, push, or create PRs. You only modify files.',
69
+ 'The git-pusher agent handles ALL git operations AFTER validators approve.',
70
+ '',
71
+ '- ❌ NEVER run: git add, git commit, git push, gh pr create',
72
+ '- ❌ NEVER suggest committing changes',
73
+ '- ✅ Only modify files and publish your completion message when done',
74
+ '',
75
+ ].join('\n');
76
+ }
77
+
78
+ function buildHeaderContext({ id, role, iteration, isIsolated }: HeaderContextParams): string {
79
+ return [
80
+ `You are agent "${id}" with role "${role}".`,
81
+ '',
82
+ `Iteration: ${iteration}`,
83
+ '',
84
+ buildAutonomousSection(),
85
+ buildOutputStyleSection(),
86
+ isIsolated ? '' : buildGitOperationsSection(),
87
+ ]
88
+ .filter(Boolean)
89
+ .join('\n');
90
+ }
91
+
92
+ function hasIgnoredRepoToolingError(error: unknown): boolean {
93
+ return (
94
+ typeof error === 'object' &&
95
+ error !== null &&
96
+ 'code' in error &&
97
+ typeof error.code === 'string' &&
98
+ ['ENOENT', 'ENOTDIR', 'EACCES', 'EPERM'].includes(error.code)
99
+ );
100
+ }
101
+
102
+ function resolveRepoToolingRoots({ config, worktree }: RepoToolingParams): string[] {
103
+ return Array.from(
104
+ new Set(
105
+ [worktree?.path, config?.cwd, process.cwd()]
106
+ .filter((value): value is string => typeof value === 'string' && value.trim() !== '')
107
+ .map((value) => resolve(value))
108
+ )
109
+ );
110
+ }
111
+
112
+ function buildRepoToolingSection({ config, worktree }: RepoToolingParams): string {
113
+ for (const root of resolveRepoToolingRoots({ config, worktree })) {
114
+ const skillPath = join(root, '.claude', 'skills', 'repo-tooling', 'SKILL.md');
115
+
116
+ try {
117
+ const content = readFileSync(skillPath, 'utf8').trim();
118
+ if (content !== '') {
119
+ return `${content}\n\n`;
120
+ }
121
+ } catch (error) {
122
+ if (!hasIgnoredRepoToolingError(error)) {
123
+ throw error;
124
+ }
125
+ }
126
+ }
127
+
128
+ return '';
129
+ }
130
+
131
+ export = {
132
+ buildHeaderContext,
133
+ buildRepoToolingSection,
134
+ };