@the-open-engine/zeroshot 6.38.1 → 6.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/cli/event-copy.js +8 -7
  2. package/cli/event-copy.ts +12 -0
  3. package/cli/index.js +7 -31
  4. package/cli/json-export.js +61 -64
  5. package/cli/json-export.ts +112 -0
  6. package/cli/message-formatter-utils.js +68 -56
  7. package/cli/message-formatter-utils.ts +121 -0
  8. package/cli/message-formatters-normal.js +124 -259
  9. package/cli/message-formatters-normal.ts +250 -0
  10. package/cli/message-formatters-watch.js +81 -84
  11. package/cli/message-formatters-watch.ts +189 -0
  12. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  13. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  14. package/lib/cluster/generated/protocol.d.cts +8 -0
  15. package/lib/cluster/generated/protocol.d.mts +8 -0
  16. package/lib/cluster/generated/protocol.d.ts +8 -0
  17. package/lib/clusters-registry.d.ts +23 -0
  18. package/lib/clusters-registry.js +17 -29
  19. package/lib/completion.d.ts +12 -0
  20. package/lib/completion.js +84 -94
  21. package/lib/compose-utils.d.ts +32 -0
  22. package/lib/compose-utils.js +57 -72
  23. package/lib/detached-startup.d.ts +83 -0
  24. package/lib/detached-startup.js +231 -302
  25. package/lib/docker-config.d.ts +43 -0
  26. package/lib/docker-config.js +150 -325
  27. package/lib/docker-env-auth.d.ts +17 -0
  28. package/lib/docker-env-auth.js +75 -0
  29. package/lib/git-remote-utils.d.ts +48 -0
  30. package/lib/git-remote-utils.js +147 -213
  31. package/lib/id-detector.d.ts +15 -0
  32. package/lib/id-detector.js +37 -41
  33. package/lib/path-check.d.ts +30 -0
  34. package/lib/path-check.js +42 -45
  35. package/lib/process-liveness.d.ts +16 -0
  36. package/lib/process-liveness.js +19 -12
  37. package/lib/provider-credential-path.d.ts +16 -0
  38. package/lib/provider-credential-path.js +31 -29
  39. package/lib/provider-defaults.d.ts +30 -0
  40. package/lib/provider-defaults.js +47 -42
  41. package/lib/provider-detection.d.ts +11 -0
  42. package/lib/provider-detection.js +91 -54
  43. package/lib/provider-names.d.ts +38 -0
  44. package/lib/provider-names.js +56 -64
  45. package/lib/repo-settings.d.ts +28 -0
  46. package/lib/repo-settings.js +83 -59
  47. package/lib/run-mode.d.ts +21 -0
  48. package/lib/run-mode.js +21 -20
  49. package/lib/run-plan.d.ts +28 -0
  50. package/lib/run-plan.js +17 -16
  51. package/lib/settings/claude-auth.d.ts +35 -0
  52. package/lib/settings/claude-auth.js +30 -47
  53. package/lib/settings-defaults.d.ts +20 -0
  54. package/lib/settings-defaults.js +149 -0
  55. package/lib/settings-error.d.ts +7 -0
  56. package/lib/settings-error.js +8 -0
  57. package/lib/settings-issue-providers.d.ts +10 -0
  58. package/lib/settings-issue-providers.js +12 -0
  59. package/lib/settings-models.d.ts +22 -0
  60. package/lib/settings-models.js +93 -0
  61. package/lib/settings-storage.d.ts +23 -0
  62. package/lib/settings-storage.js +205 -0
  63. package/lib/settings-validation.d.ts +7 -0
  64. package/lib/settings-validation.js +182 -0
  65. package/lib/settings.d.ts +29 -0
  66. package/lib/settings.js +41 -736
  67. package/lib/setup-apply-types.d.ts +66 -0
  68. package/lib/setup-apply-types.js +2 -0
  69. package/lib/setup-apply.d.ts +39 -0
  70. package/lib/setup-apply.js +267 -264
  71. package/lib/setup-journal.d.ts +41 -0
  72. package/lib/setup-journal.js +119 -76
  73. package/lib/setup-plan-types.d.ts +102 -0
  74. package/lib/setup-plan-types.js +2 -0
  75. package/lib/setup-plan.d.ts +30 -0
  76. package/lib/setup-plan.js +300 -324
  77. package/lib/setup-undo.d.ts +44 -0
  78. package/lib/setup-undo.js +61 -74
  79. package/lib/start-cluster-config.d.ts +26 -0
  80. package/lib/start-cluster-config.js +56 -0
  81. package/lib/start-cluster-environment.d.ts +40 -0
  82. package/lib/start-cluster-environment.js +134 -0
  83. package/lib/start-cluster-run-options.d.ts +53 -0
  84. package/lib/start-cluster-run-options.js +147 -0
  85. package/lib/start-cluster.d.ts +64 -0
  86. package/lib/start-cluster.js +98 -454
  87. package/lib/stream-json-parser.d.ts +17 -0
  88. package/lib/stream-json-parser.js +51 -52
  89. package/npm-shrinkwrap.json +2 -2
  90. package/package.json +12 -6
  91. package/scripts/postinstall.js +27 -0
  92. package/scripts/rust-distribution.js +23 -14
  93. package/src/agent/agent-command-proofs-context.js +35 -45
  94. package/src/agent/agent-command-proofs-context.ts +87 -0
  95. package/src/agent/agent-config-settings.js +19 -0
  96. package/src/agent/agent-config-settings.ts +41 -0
  97. package/src/agent/agent-config.js +122 -231
  98. package/src/agent/agent-config.ts +285 -0
  99. package/src/agent/agent-context-builder.js +38 -273
  100. package/src/agent/agent-context-builder.ts +51 -0
  101. package/src/agent/agent-context-environment-sections.js +105 -0
  102. package/src/agent/agent-context-environment-sections.ts +134 -0
  103. package/src/agent/agent-context-packs.js +165 -0
  104. package/src/agent/agent-context-packs.ts +296 -0
  105. package/src/agent/agent-context-prompt-sections.js +100 -0
  106. package/src/agent/agent-context-prompt-sections.ts +148 -0
  107. package/src/agent/agent-context-sections.js +25 -334
  108. package/src/agent/agent-context-sections.ts +36 -0
  109. package/src/agent/agent-context-sources.js +96 -149
  110. package/src/agent/agent-context-sources.ts +253 -0
  111. package/src/agent/agent-context-types.js +2 -0
  112. package/src/agent/agent-context-types.ts +132 -0
  113. package/src/agent/agent-context-validation-sections.js +73 -0
  114. package/src/agent/agent-context-validation-sections.ts +129 -0
  115. package/src/agent/agent-input-injector.js +99 -118
  116. package/src/agent/agent-input-injector.ts +195 -0
  117. package/src/agent/agent-liveness-poll.js +74 -78
  118. package/src/agent/agent-liveness-poll.ts +163 -0
  119. package/src/agent/agent-quality-gate-schema.js +77 -86
  120. package/src/agent/agent-quality-gate-schema.ts +135 -0
  121. package/src/agent/agent-quality-gates-context.js +44 -50
  122. package/src/agent/agent-quality-gates-context.ts +91 -0
  123. package/src/agent/agent-stuck-detector.js +171 -239
  124. package/src/agent/agent-stuck-detector.ts +288 -0
  125. package/src/agent/agent-trigger-evaluator.js +29 -46
  126. package/src/agent/agent-trigger-evaluator.ts +98 -0
  127. package/src/agent/context-metrics.js +110 -141
  128. package/src/agent/context-metrics.ts +261 -0
  129. package/src/agent/context-pack-builder.js +72 -358
  130. package/src/agent/context-pack-builder.ts +105 -0
  131. package/src/agent/context-pack-core.js +70 -0
  132. package/src/agent/context-pack-core.ts +96 -0
  133. package/src/agent/context-pack-selection.js +119 -0
  134. package/src/agent/context-pack-selection.ts +187 -0
  135. package/src/agent/context-pack-truncation.js +139 -0
  136. package/src/agent/context-pack-truncation.ts +208 -0
  137. package/src/agent/context-pack-types.js +2 -0
  138. package/src/agent/context-pack-types.ts +98 -0
  139. package/src/agent/context-replay-policy.js +30 -39
  140. package/src/agent/context-replay-policy.ts +71 -0
  141. package/src/agent/critical-agent-policy.js +6 -10
  142. package/src/agent/critical-agent-policy.ts +20 -0
  143. package/src/agent/guidance-queue.js +74 -87
  144. package/src/agent/guidance-queue.ts +166 -0
  145. package/src/agent/output-extraction-error-detail.js +45 -0
  146. package/src/agent/output-extraction-error-detail.ts +49 -0
  147. package/src/agent/output-extraction-failures.js +125 -0
  148. package/src/agent/output-extraction-failures.ts +149 -0
  149. package/src/agent/output-extraction-json.js +234 -0
  150. package/src/agent/output-extraction-json.ts +235 -0
  151. package/src/agent/output-extraction-pi.js +124 -0
  152. package/src/agent/output-extraction-pi.ts +137 -0
  153. package/src/agent/output-extraction-types.js +2 -0
  154. package/src/agent/output-extraction-types.ts +49 -0
  155. package/src/agent/output-extraction.js +17 -617
  156. package/src/agent/output-extraction.ts +30 -0
  157. package/src/agent/output-reformatter-errors.js +83 -0
  158. package/src/agent/output-reformatter-errors.ts +106 -0
  159. package/src/agent/output-reformatter-types.js +2 -0
  160. package/src/agent/output-reformatter-types.ts +86 -0
  161. package/src/agent/output-reformatter.js +140 -185
  162. package/src/agent/output-reformatter.ts +238 -0
  163. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  164. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  165. package/src/agent/pi-terminal-lifecycle.js +186 -206
  166. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  167. package/src/agent/provider-control-plane.js +22 -21
  168. package/src/agent/provider-control-plane.ts +52 -0
  169. package/src/agent/provider-terminal-failure-types.js +2 -0
  170. package/src/agent/provider-terminal-failure-types.ts +60 -0
  171. package/src/agent/provider-terminal-failure.js +194 -191
  172. package/src/agent/provider-terminal-failure.ts +262 -0
  173. package/src/agent/rate-limit-backoff.js +31 -74
  174. package/src/agent/rate-limit-backoff.ts +71 -0
  175. package/src/agent/schema-utils.js +85 -125
  176. package/src/agent/schema-utils.ts +148 -0
  177. package/src/agent/structured-output-error.js +34 -33
  178. package/src/agent/structured-output-error.ts +105 -0
  179. package/src/agent/validation-platform.js +27 -27
  180. package/src/agent/validation-platform.ts +49 -0
  181. package/src/attach/attach-client.js +232 -405
  182. package/src/attach/attach-client.ts +300 -0
  183. package/src/attach/attach-server-cleanup.js +43 -0
  184. package/src/attach/attach-server-cleanup.ts +39 -0
  185. package/src/attach/attach-server-clients.js +117 -0
  186. package/src/attach/attach-server-clients.ts +122 -0
  187. package/src/attach/attach-server-events.js +38 -0
  188. package/src/attach/attach-server-events.ts +36 -0
  189. package/src/attach/attach-server-pty.js +45 -0
  190. package/src/attach/attach-server-pty.ts +64 -0
  191. package/src/attach/attach-server-runtime.js +73 -0
  192. package/src/attach/attach-server-runtime.ts +62 -0
  193. package/src/attach/attach-server-socket.js +28 -0
  194. package/src/attach/attach-server-socket.ts +23 -0
  195. package/src/attach/attach-server-types.js +2 -0
  196. package/src/attach/attach-server-types.ts +82 -0
  197. package/src/attach/attach-server.js +106 -523
  198. package/src/attach/attach-server.ts +158 -0
  199. package/src/attach/index.js +18 -35
  200. package/src/attach/index.ts +18 -0
  201. package/src/attach/protocol.js +95 -184
  202. package/src/attach/protocol.ts +181 -0
  203. package/src/attach/ring-buffer.js +76 -102
  204. package/src/attach/ring-buffer.ts +109 -0
  205. package/src/attach/send-input.js +64 -75
  206. package/src/attach/send-input.ts +94 -0
  207. package/src/attach/socket-discovery.js +164 -218
  208. package/src/attach/socket-discovery.ts +230 -0
  209. package/src/attach/socket-paths.js +42 -61
  210. package/src/attach/socket-paths.ts +81 -0
  211. package/src/claude-credentials.js +51 -54
  212. package/src/claude-credentials.ts +89 -0
  213. package/src/cluster/generated/protocol-schema.ts +1 -1
  214. package/src/cluster/generated/protocol.ts +2 -1
  215. package/src/command-proofs.js +110 -141
  216. package/src/command-proofs.ts +216 -0
  217. package/src/config-router.js +81 -73
  218. package/src/config-router.ts +131 -0
  219. package/src/copy-worker.js +53 -29
  220. package/src/copy-worker.ts +75 -0
  221. package/src/darwin-keychain-boundary.js +80 -111
  222. package/src/darwin-keychain-boundary.ts +148 -0
  223. package/src/guidance-topics.js +4 -5
  224. package/src/guidance-topics.ts +10 -0
  225. package/src/input-helpers.js +33 -54
  226. package/src/input-helpers.ts +58 -0
  227. package/src/ledger-sequence.js +45 -48
  228. package/src/ledger-sequence.ts +63 -0
  229. package/src/legacy-lib/clusters-registry.ts +40 -0
  230. package/src/legacy-lib/completion.ts +148 -0
  231. package/src/legacy-lib/compose-utils.ts +102 -0
  232. package/src/legacy-lib/detached-startup.ts +449 -0
  233. package/src/legacy-lib/docker-config.ts +282 -0
  234. package/src/legacy-lib/docker-env-auth.ts +116 -0
  235. package/src/legacy-lib/git-remote-utils.ts +244 -0
  236. package/src/legacy-lib/id-detector.ts +57 -0
  237. package/src/legacy-lib/js-yaml.d.ts +3 -0
  238. package/src/legacy-lib/omelette.d.ts +15 -0
  239. package/src/legacy-lib/path-check.ts +89 -0
  240. package/src/legacy-lib/process-liveness.ts +36 -0
  241. package/src/legacy-lib/provider-credential-path.ts +57 -0
  242. package/src/legacy-lib/provider-defaults.ts +114 -0
  243. package/src/legacy-lib/provider-detection.ts +67 -0
  244. package/src/legacy-lib/provider-names.ts +126 -0
  245. package/src/legacy-lib/repo-settings.ts +88 -0
  246. package/src/legacy-lib/run-mode.ts +58 -0
  247. package/src/legacy-lib/run-plan.ts +49 -0
  248. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  249. package/src/legacy-lib/settings-defaults.ts +212 -0
  250. package/src/legacy-lib/settings-error.ts +8 -0
  251. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  252. package/src/legacy-lib/settings-models.ts +124 -0
  253. package/src/legacy-lib/settings-storage.ts +277 -0
  254. package/src/legacy-lib/settings-validation.ts +220 -0
  255. package/src/legacy-lib/settings.ts +87 -0
  256. package/src/legacy-lib/setup-apply-types.ts +70 -0
  257. package/src/legacy-lib/setup-apply.ts +456 -0
  258. package/src/legacy-lib/setup-journal.ts +185 -0
  259. package/src/legacy-lib/setup-plan-types.ts +96 -0
  260. package/src/legacy-lib/setup-plan.ts +500 -0
  261. package/src/legacy-lib/setup-undo.ts +142 -0
  262. package/src/legacy-lib/start-cluster-config.ts +124 -0
  263. package/src/legacy-lib/start-cluster-environment.ts +165 -0
  264. package/src/legacy-lib/start-cluster-run-options.ts +279 -0
  265. package/src/legacy-lib/start-cluster.ts +237 -0
  266. package/src/legacy-lib/stream-json-parser.ts +88 -0
  267. package/src/message-buffer.js +55 -71
  268. package/src/message-buffer.ts +107 -0
  269. package/src/message-bus-bridge.js +92 -133
  270. package/src/message-bus-bridge.ts +149 -0
  271. package/src/name-generator-shared.js +220 -0
  272. package/src/name-generator-shared.ts +231 -0
  273. package/src/name-generator.js +8 -217
  274. package/src/name-generator.ts +27 -0
  275. package/src/omp-blob-root.js +83 -64
  276. package/src/omp-blob-root.ts +116 -0
  277. package/src/omp-config-overlay.js +65 -38
  278. package/src/omp-config-overlay.ts +110 -0
  279. package/src/omp-execution-fingerprint.js +38 -43
  280. package/src/omp-execution-fingerprint.ts +92 -0
  281. package/src/omp-session-limits.js +10 -15
  282. package/src/omp-session-limits.ts +53 -0
  283. package/src/omp-session-partition.js +2 -2
  284. package/src/omp-session-verifier.js +1 -1
  285. package/src/orchestrator.js +19 -4
  286. package/src/providers/anthropic/index.js +3 -1
  287. package/src/providers/anthropic/index.ts +13 -0
  288. package/src/providers/capabilities.js +19 -27
  289. package/src/providers/capabilities.ts +44 -0
  290. package/src/providers/google/index.js +3 -1
  291. package/src/providers/google/index.ts +13 -0
  292. package/src/providers/openai/index.js +3 -1
  293. package/src/providers/openai/index.ts +13 -0
  294. package/src/providers/opencode/index.js +3 -1
  295. package/src/providers/opencode/index.ts +13 -0
  296. package/src/quality-gates.js +67 -127
  297. package/src/quality-gates.ts +149 -0
  298. package/src/repo-settings-access.js +40 -0
  299. package/src/repo-settings-access.ts +64 -0
  300. package/src/schemas/sub-cluster.js +127 -183
  301. package/src/schemas/sub-cluster.ts +238 -0
  302. package/src/state-snapshot-normalization.js +224 -0
  303. package/src/state-snapshot-normalization.ts +222 -0
  304. package/src/state-snapshot.js +192 -359
  305. package/src/state-snapshot.ts +291 -0
  306. package/src/state-snapshotter.js +118 -130
  307. package/src/state-snapshotter.ts +167 -0
  308. package/src/sub-cluster-wrapper.js +4 -13
  309. package/src/task-run-model-args.js +87 -124
  310. package/src/task-run-model-args.ts +204 -0
  311. package/src/task-runner.js +5 -25
  312. package/src/task-runner.ts +28 -0
  313. package/src/task-startup-error.js +73 -58
  314. package/src/task-startup-error.ts +126 -0
  315. package/src/template-validation/consensus-gate-contracts.js +2 -0
  316. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  317. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  318. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  319. package/src/template-validation/consensus-gate-stage.js +34 -0
  320. package/src/template-validation/consensus-gate-stage.ts +56 -0
  321. package/src/template-validation/random-topology-contracts.js +2 -0
  322. package/src/template-validation/random-topology-contracts.ts +54 -0
  323. package/src/template-validation/random-topology-dispatch.js +25 -0
  324. package/src/template-validation/random-topology-dispatch.ts +33 -0
  325. package/src/template-validation/random-topology-message-loop.js +53 -0
  326. package/src/template-validation/random-topology-message-loop.ts +73 -0
  327. package/src/template-validation/random-topology-operations.js +79 -0
  328. package/src/template-validation/random-topology-operations.ts +101 -0
  329. package/src/template-validation/random-topology-runtime.js +25 -0
  330. package/src/template-validation/random-topology-runtime.ts +43 -0
  331. package/src/template-validation/random-topology-scenario.js +52 -0
  332. package/src/template-validation/random-topology-scenario.ts +57 -0
  333. package/src/template-validation/random-topology-schema.js +159 -0
  334. package/src/template-validation/random-topology-schema.ts +190 -0
  335. package/src/template-validation/random-topology-state.js +28 -0
  336. package/src/template-validation/random-topology-state.ts +30 -0
  337. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  338. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  339. package/src/template-validation/random-topology-trigger.js +75 -0
  340. package/src/template-validation/random-topology-trigger.ts +88 -0
  341. package/src/template-validation/report-formatter.js +40 -46
  342. package/src/template-validation/report-formatter.ts +101 -0
  343. package/src/template-validation/simulate-consensus-gates.js +111 -302
  344. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  345. package/src/template-validation/simulate-random-topology.js +26 -519
  346. package/src/template-validation/simulate-random-topology.ts +57 -0
  347. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  348. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  349. package/src/template-validation/simulation-agent-runtime.js +25 -0
  350. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  351. package/src/template-validation/simulation-agent.js +29 -0
  352. package/src/template-validation/simulation-agent.ts +73 -0
  353. package/src/template-validation/simulation-runtime.js +34 -0
  354. package/src/template-validation/simulation-runtime.ts +72 -0
  355. package/src/template-validation/two-stage-contracts.js +2 -0
  356. package/src/template-validation/two-stage-contracts.ts +41 -0
  357. package/src/template-validation/two-stage-inputs.js +21 -0
  358. package/src/template-validation/two-stage-inputs.ts +29 -0
  359. package/src/template-validation/two-stage-results.js +30 -0
  360. package/src/template-validation/two-stage-results.ts +40 -0
  361. package/src/template-validation/two-stage-scenario.js +86 -0
  362. package/src/template-validation/two-stage-scenario.ts +120 -0
  363. package/src/worktree-claude-config.js +182 -220
  364. package/src/worktree-claude-config.ts +272 -0
  365. package/src/worktree-tooling-env.js +103 -125
  366. package/src/worktree-tooling-env.ts +142 -0
  367. package/task-lib/completion.js +2 -3
  368. package/task-lib/completion.ts +9 -0
  369. package/task-lib/config.js +1 -4
  370. package/task-lib/config.ts +11 -0
  371. package/task-lib/name-generator.js +4 -226
  372. package/task-lib/name-generator.ts +11 -0
  373. package/task-lib/omp-session-cleanup.js +1 -1
  374. package/task-lib/omp-storage-root.js +8 -12
  375. package/task-lib/omp-storage-root.ts +62 -0
  376. package/task-lib/process-termination.js +143 -166
  377. package/task-lib/process-termination.ts +268 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ const contextSections = require("./agent-context-sections");
3
+ const contextSources = require("./agent-context-sources");
4
+ const qualityGatesContext = require("./agent-quality-gates-context");
5
+ const commandProofsContext = require("./agent-command-proofs-context");
6
+ const { buildHeaderContext, buildInstructionsSection, buildJsonSchemaSection, buildLegacyOutputSchemaSection, buildRepoToolingSection, buildTriggeringMessageSection, buildValidatorSkipSection, } = contextSections;
7
+ const { buildSourcePack } = contextSources;
8
+ const { buildRequiredQualityGatesSection } = qualityGatesContext;
9
+ const { buildCommandProofsSection } = commandProofsContext;
10
+ function pushStaticPack({ packs, packId, section, text, order, options = {}, }) {
11
+ if (!text) {
12
+ return order;
13
+ }
14
+ packs.push({
15
+ id: packId,
16
+ section,
17
+ priority: 'required',
18
+ order,
19
+ preserve: options.preserve || false,
20
+ render: () => text,
21
+ });
22
+ return order + 1;
23
+ }
24
+ function appendSourcePacks(packs, strategy, params, startingOrder) {
25
+ if (!Array.isArray(strategy.sources)) {
26
+ return startingOrder;
27
+ }
28
+ let order = startingOrder;
29
+ strategy.sources.forEach((source, index) => {
30
+ packs.push({
31
+ ...buildSourcePack({ source, index, ...params }),
32
+ order,
33
+ });
34
+ order += 1;
35
+ });
36
+ return order;
37
+ }
38
+ function buildStaticSections(params) {
39
+ const { id, role, iteration, config, selectedPrompt, queuedGuidance, messageBus, cluster, triggeringMessage, worktree, isolation, } = params;
40
+ const isIsolated = !!(worktree?.enabled || isolation?.enabled);
41
+ return {
42
+ header: buildHeaderContext({ id, role, iteration, isIsolated }),
43
+ instructions: buildInstructionsSection({
44
+ config,
45
+ selectedPrompt,
46
+ id,
47
+ }),
48
+ repoTooling: buildRepoToolingSection({ config, worktree }),
49
+ commandProofs: buildCommandProofsSection(config),
50
+ legacyOutputSchema: buildLegacyOutputSchemaSection(config),
51
+ queuedGuidance: queuedGuidance || '',
52
+ requiredQualityGates: buildRequiredQualityGatesSection(config),
53
+ jsonSchema: buildJsonSchemaSection(config),
54
+ validatorSkip: buildValidatorSkipSection({
55
+ role,
56
+ messageBus,
57
+ cluster,
58
+ isolation,
59
+ }),
60
+ triggeringMessage: buildTriggeringMessageSection(triggeringMessage),
61
+ };
62
+ }
63
+ function buildPacks(params) {
64
+ const { strategy, messageBus, cluster, lastTaskEndTime, lastAgentStartTime, triggeringMessage } = params;
65
+ const sections = buildStaticSections(params);
66
+ const packs = [];
67
+ let order = 0;
68
+ const staticPackIds = [
69
+ 'header',
70
+ 'instructions',
71
+ 'repoTooling',
72
+ 'commandProofs',
73
+ 'queuedGuidance',
74
+ 'legacyOutputSchema',
75
+ 'requiredQualityGates',
76
+ 'jsonSchema',
77
+ ];
78
+ for (const packId of staticPackIds) {
79
+ order = pushStaticPack({
80
+ packs,
81
+ packId,
82
+ section: packId,
83
+ text: sections[packId],
84
+ order,
85
+ });
86
+ }
87
+ order = appendSourcePacks(packs, strategy, {
88
+ messageBus,
89
+ cluster,
90
+ lastTaskEndTime,
91
+ lastAgentStartTime,
92
+ throughId: params.contextThroughId,
93
+ triggeringMessageId: triggeringMessage?.id,
94
+ }, order);
95
+ order = pushStaticPack({
96
+ packs,
97
+ packId: 'validatorSkip',
98
+ section: 'validatorSkip',
99
+ text: sections.validatorSkip,
100
+ order,
101
+ });
102
+ pushStaticPack({
103
+ packs,
104
+ packId: 'triggeringMessage',
105
+ section: 'triggeringMessage',
106
+ text: sections.triggeringMessage,
107
+ order,
108
+ options: { preserve: true },
109
+ });
110
+ return packs;
111
+ }
112
+ function buildContinuationPacks(params) {
113
+ const { id, iteration, config, selectedPrompt, queuedGuidance, triggeringMessage, strategy, messageBus, cluster, lastTaskEndTime, lastAgentStartTime, continuationSequence, contextThroughId, previousPromptIdentity, currentPromptIdentity, } = params;
114
+ const packs = [];
115
+ let order = 0;
116
+ order = pushStaticPack({
117
+ packs,
118
+ packId: 'continuationHeader',
119
+ section: 'continuationHeader',
120
+ text: `## Continuation Turn\n\nAgent: ${id}\nIteration: ${iteration}\n\n` +
121
+ 'Apply only the new material below while retaining the existing session instructions.\n\n',
122
+ order,
123
+ });
124
+ if (config.promptConfig?.type === 'rules' && currentPromptIdentity !== previousPromptIdentity) {
125
+ order = pushStaticPack({
126
+ packs,
127
+ packId: 'iterationInstructions',
128
+ section: 'iterationInstructions',
129
+ text: buildInstructionsSection({ config, selectedPrompt, id }),
130
+ order,
131
+ });
132
+ }
133
+ order = pushStaticPack({
134
+ packs,
135
+ packId: 'queuedGuidance',
136
+ section: 'queuedGuidance',
137
+ text: queuedGuidance || '',
138
+ order,
139
+ });
140
+ order = appendSourcePacks(packs, strategy, {
141
+ messageBus,
142
+ cluster,
143
+ lastTaskEndTime,
144
+ lastAgentStartTime,
145
+ afterId: continuationSequence,
146
+ throughId: contextThroughId,
147
+ triggeringMessageId: triggeringMessage?.id,
148
+ }, order);
149
+ pushStaticPack({
150
+ packs,
151
+ packId: 'triggeringMessage',
152
+ section: 'triggeringMessage',
153
+ text: buildTriggeringMessageSection(triggeringMessage),
154
+ order,
155
+ options: { preserve: true },
156
+ });
157
+ return packs;
158
+ }
159
+ function buildAgentContextPacks(params, strategy, continuation) {
160
+ const contextPacksParams = { ...params, strategy };
161
+ return continuation ? buildContinuationPacks(contextPacksParams) : buildPacks(contextPacksParams);
162
+ }
163
+ module.exports = {
164
+ buildAgentContextPacks,
165
+ };
@@ -0,0 +1,296 @@
1
+ import contextSections = require('./agent-context-sections');
2
+ import contextSources = require('./agent-context-sources');
3
+ import qualityGatesContext = require('./agent-quality-gates-context');
4
+ import commandProofsContext = require('./agent-command-proofs-context');
5
+
6
+ import type {
7
+ BuildContextParams,
8
+ ContextMessageBus,
9
+ ContextCluster,
10
+ ContextStrategy,
11
+ } from './agent-context-types';
12
+ import type { ContextPack } from './context-pack-types';
13
+
14
+ interface StaticPackOptions {
15
+ preserve?: boolean;
16
+ }
17
+
18
+ interface StaticPackParams {
19
+ packs: ContextPack[];
20
+ packId: string;
21
+ section: string;
22
+ text: string | null | undefined;
23
+ order: number;
24
+ options?: StaticPackOptions;
25
+ }
26
+
27
+ interface SourcePackContext {
28
+ messageBus: ContextMessageBus;
29
+ cluster: ContextCluster;
30
+ lastTaskEndTime?: number | null | undefined;
31
+ lastAgentStartTime?: number | null | undefined;
32
+ afterId?: unknown;
33
+ throughId?: unknown;
34
+ triggeringMessageId?: unknown;
35
+ }
36
+
37
+ interface ContextPacksParams extends BuildContextParams {
38
+ strategy: ContextStrategy;
39
+ }
40
+
41
+ interface StaticSections {
42
+ header: string;
43
+ instructions: string;
44
+ repoTooling: string;
45
+ commandProofs: string;
46
+ legacyOutputSchema: string;
47
+ queuedGuidance: string;
48
+ requiredQualityGates: string;
49
+ jsonSchema: string;
50
+ validatorSkip: string;
51
+ triggeringMessage: string;
52
+ }
53
+
54
+ const {
55
+ buildHeaderContext,
56
+ buildInstructionsSection,
57
+ buildJsonSchemaSection,
58
+ buildLegacyOutputSchemaSection,
59
+ buildRepoToolingSection,
60
+ buildTriggeringMessageSection,
61
+ buildValidatorSkipSection,
62
+ } = contextSections;
63
+ const { buildSourcePack } = contextSources;
64
+ const { buildRequiredQualityGatesSection } = qualityGatesContext;
65
+ const { buildCommandProofsSection } = commandProofsContext;
66
+
67
+ function pushStaticPack({
68
+ packs,
69
+ packId,
70
+ section,
71
+ text,
72
+ order,
73
+ options = {},
74
+ }: StaticPackParams): number {
75
+ if (!text) {
76
+ return order;
77
+ }
78
+
79
+ packs.push({
80
+ id: packId,
81
+ section,
82
+ priority: 'required',
83
+ order,
84
+ preserve: options.preserve || false,
85
+ render: () => text,
86
+ });
87
+
88
+ return order + 1;
89
+ }
90
+
91
+ function appendSourcePacks(
92
+ packs: ContextPack[],
93
+ strategy: ContextStrategy,
94
+ params: SourcePackContext,
95
+ startingOrder: number
96
+ ): number {
97
+ if (!Array.isArray(strategy.sources)) {
98
+ return startingOrder;
99
+ }
100
+
101
+ let order = startingOrder;
102
+ strategy.sources.forEach((source, index) => {
103
+ packs.push({
104
+ ...buildSourcePack({ source, index, ...params }),
105
+ order,
106
+ });
107
+ order += 1;
108
+ });
109
+
110
+ return order;
111
+ }
112
+
113
+ function buildStaticSections(params: BuildContextParams): StaticSections {
114
+ const {
115
+ id,
116
+ role,
117
+ iteration,
118
+ config,
119
+ selectedPrompt,
120
+ queuedGuidance,
121
+ messageBus,
122
+ cluster,
123
+ triggeringMessage,
124
+ worktree,
125
+ isolation,
126
+ } = params;
127
+ const isIsolated = !!(worktree?.enabled || isolation?.enabled);
128
+
129
+ return {
130
+ header: buildHeaderContext({ id, role, iteration, isIsolated }),
131
+ instructions: buildInstructionsSection({
132
+ config,
133
+ selectedPrompt,
134
+ id,
135
+ }),
136
+ repoTooling: buildRepoToolingSection({ config, worktree }),
137
+ commandProofs: buildCommandProofsSection(config),
138
+ legacyOutputSchema: buildLegacyOutputSchemaSection(config),
139
+ queuedGuidance: queuedGuidance || '',
140
+ requiredQualityGates: buildRequiredQualityGatesSection(config),
141
+ jsonSchema: buildJsonSchemaSection(config),
142
+ validatorSkip: buildValidatorSkipSection({
143
+ role,
144
+ messageBus,
145
+ cluster,
146
+ isolation,
147
+ }),
148
+ triggeringMessage: buildTriggeringMessageSection(triggeringMessage),
149
+ };
150
+ }
151
+
152
+ function buildPacks(params: ContextPacksParams): ContextPack[] {
153
+ const { strategy, messageBus, cluster, lastTaskEndTime, lastAgentStartTime, triggeringMessage } =
154
+ params;
155
+ const sections = buildStaticSections(params);
156
+ const packs: ContextPack[] = [];
157
+ let order = 0;
158
+ const staticPackIds: (keyof StaticSections)[] = [
159
+ 'header',
160
+ 'instructions',
161
+ 'repoTooling',
162
+ 'commandProofs',
163
+ 'queuedGuidance',
164
+ 'legacyOutputSchema',
165
+ 'requiredQualityGates',
166
+ 'jsonSchema',
167
+ ];
168
+
169
+ for (const packId of staticPackIds) {
170
+ order = pushStaticPack({
171
+ packs,
172
+ packId,
173
+ section: packId,
174
+ text: sections[packId],
175
+ order,
176
+ });
177
+ }
178
+
179
+ order = appendSourcePacks(
180
+ packs,
181
+ strategy,
182
+ {
183
+ messageBus,
184
+ cluster,
185
+ lastTaskEndTime,
186
+ lastAgentStartTime,
187
+ throughId: params.contextThroughId,
188
+ triggeringMessageId: triggeringMessage?.id,
189
+ },
190
+ order
191
+ );
192
+ order = pushStaticPack({
193
+ packs,
194
+ packId: 'validatorSkip',
195
+ section: 'validatorSkip',
196
+ text: sections.validatorSkip,
197
+ order,
198
+ });
199
+ pushStaticPack({
200
+ packs,
201
+ packId: 'triggeringMessage',
202
+ section: 'triggeringMessage',
203
+ text: sections.triggeringMessage,
204
+ order,
205
+ options: { preserve: true },
206
+ });
207
+
208
+ return packs;
209
+ }
210
+
211
+ function buildContinuationPacks(params: ContextPacksParams): ContextPack[] {
212
+ const {
213
+ id,
214
+ iteration,
215
+ config,
216
+ selectedPrompt,
217
+ queuedGuidance,
218
+ triggeringMessage,
219
+ strategy,
220
+ messageBus,
221
+ cluster,
222
+ lastTaskEndTime,
223
+ lastAgentStartTime,
224
+ continuationSequence,
225
+ contextThroughId,
226
+ previousPromptIdentity,
227
+ currentPromptIdentity,
228
+ } = params;
229
+ const packs: ContextPack[] = [];
230
+ let order = 0;
231
+
232
+ order = pushStaticPack({
233
+ packs,
234
+ packId: 'continuationHeader',
235
+ section: 'continuationHeader',
236
+ text:
237
+ `## Continuation Turn\n\nAgent: ${id}\nIteration: ${iteration}\n\n` +
238
+ 'Apply only the new material below while retaining the existing session instructions.\n\n',
239
+ order,
240
+ });
241
+
242
+ if (config.promptConfig?.type === 'rules' && currentPromptIdentity !== previousPromptIdentity) {
243
+ order = pushStaticPack({
244
+ packs,
245
+ packId: 'iterationInstructions',
246
+ section: 'iterationInstructions',
247
+ text: buildInstructionsSection({ config, selectedPrompt, id }),
248
+ order,
249
+ });
250
+ }
251
+
252
+ order = pushStaticPack({
253
+ packs,
254
+ packId: 'queuedGuidance',
255
+ section: 'queuedGuidance',
256
+ text: queuedGuidance || '',
257
+ order,
258
+ });
259
+ order = appendSourcePacks(
260
+ packs,
261
+ strategy,
262
+ {
263
+ messageBus,
264
+ cluster,
265
+ lastTaskEndTime,
266
+ lastAgentStartTime,
267
+ afterId: continuationSequence,
268
+ throughId: contextThroughId,
269
+ triggeringMessageId: triggeringMessage?.id,
270
+ },
271
+ order
272
+ );
273
+ pushStaticPack({
274
+ packs,
275
+ packId: 'triggeringMessage',
276
+ section: 'triggeringMessage',
277
+ text: buildTriggeringMessageSection(triggeringMessage),
278
+ order,
279
+ options: { preserve: true },
280
+ });
281
+
282
+ return packs;
283
+ }
284
+
285
+ function buildAgentContextPacks(
286
+ params: BuildContextParams,
287
+ strategy: ContextStrategy,
288
+ continuation: boolean
289
+ ): ContextPack[] {
290
+ const contextPacksParams = { ...params, strategy };
291
+ return continuation ? buildContinuationPacks(contextPacksParams) : buildPacks(contextPacksParams);
292
+ }
293
+
294
+ export = {
295
+ buildAgentContextPacks,
296
+ };
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ const EXAMPLE_PRIMITIVE_VALUES = {
3
+ boolean: true,
4
+ number: 0,
5
+ integer: 0,
6
+ };
7
+ function generateExampleValue(propSchema, key) {
8
+ if (!propSchema) {
9
+ return undefined;
10
+ }
11
+ if (Array.isArray(propSchema.enum) && propSchema.enum.length > 0) {
12
+ return propSchema.enum[0];
13
+ }
14
+ if (propSchema.type === 'string') {
15
+ return propSchema.description || `${key} value`;
16
+ }
17
+ if (propSchema.type === 'array') {
18
+ return [];
19
+ }
20
+ if (propSchema.type === 'object') {
21
+ return generateExampleFromSchema(propSchema) || {};
22
+ }
23
+ return propSchema.type === undefined ? undefined : EXAMPLE_PRIMITIVE_VALUES[propSchema.type];
24
+ }
25
+ function generateExampleFromSchema(schema) {
26
+ if (!schema || schema.type !== 'object' || !schema.properties) {
27
+ return null;
28
+ }
29
+ const example = {};
30
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
31
+ const value = generateExampleValue(propSchema, key);
32
+ if (value !== undefined) {
33
+ example[key] = value;
34
+ }
35
+ }
36
+ return example;
37
+ }
38
+ function buildInstructionsSection({ config, selectedPrompt, id, }) {
39
+ const promptText = selectedPrompt || (typeof config.prompt === 'string' ? config.prompt : config.prompt?.system);
40
+ if (promptText) {
41
+ return `## Instructions\n\n${promptText}\n\n`;
42
+ }
43
+ if (config.prompt && typeof config.prompt !== 'string' && !config.prompt.system) {
44
+ const serializedPrompt = JSON.stringify(config.prompt);
45
+ throw new Error(`Agent "${id}" has invalid prompt format. ` +
46
+ `Expected string or object with .system property, got: ${serializedPrompt.slice(0, 100)}...`);
47
+ }
48
+ return '';
49
+ }
50
+ function resolveLegacyOutputFormat(config) {
51
+ return typeof config.prompt === 'string' ? undefined : config.prompt?.outputFormat;
52
+ }
53
+ function buildLegacyOutputSchemaSection(config) {
54
+ const outputFormat = resolveLegacyOutputFormat(config);
55
+ if (!outputFormat) {
56
+ return '';
57
+ }
58
+ const rules = (outputFormat.rules || []).map((rule) => `- ${rule}`).join('\n');
59
+ return [
60
+ '## Output Schema (REQUIRED)',
61
+ '',
62
+ '```json',
63
+ JSON.stringify(outputFormat.example, null, 2),
64
+ '```',
65
+ '',
66
+ 'STRING VALUES IN THIS SCHEMA: Dense. Factual. No filler words. No pleasantries.',
67
+ rules,
68
+ '',
69
+ ]
70
+ .filter(Boolean)
71
+ .join('\n');
72
+ }
73
+ function buildJsonSchemaSection(config) {
74
+ if (!config.jsonSchema || config.outputFormat !== 'json') {
75
+ return '';
76
+ }
77
+ const lines = [
78
+ '## 🔴 OUTPUT FORMAT - JSON ONLY',
79
+ '',
80
+ 'Your response must be ONLY valid JSON. No other text before or after.',
81
+ 'Start with { and end with }. Nothing else.',
82
+ '',
83
+ 'Required schema:',
84
+ '```json',
85
+ JSON.stringify(config.jsonSchema, null, 2),
86
+ '```',
87
+ '',
88
+ ];
89
+ const example = generateExampleFromSchema(config.jsonSchema);
90
+ if (example) {
91
+ lines.push('Example output:', '```json', JSON.stringify(example, null, 2), '```', '');
92
+ }
93
+ lines.push('CRITICAL RULES:', '- Output ONLY the JSON object - no explanation, no thinking, no preamble', '- Use EXACTLY the enum values specified (case-sensitive)', '- Include ALL required fields', '');
94
+ return lines.join('\n');
95
+ }
96
+ module.exports = {
97
+ buildInstructionsSection,
98
+ buildJsonSchemaSection,
99
+ buildLegacyOutputSchemaSection,
100
+ };
@@ -0,0 +1,148 @@
1
+ import type { AgentContextConfig, JsonSchema, LegacyOutputFormat } from './agent-context-types';
2
+
3
+ interface InstructionsSectionParams {
4
+ config: AgentContextConfig;
5
+ selectedPrompt?: string | null | undefined;
6
+ id: string;
7
+ }
8
+
9
+ const EXAMPLE_PRIMITIVE_VALUES: Readonly<Record<string, boolean | number>> = {
10
+ boolean: true,
11
+ number: 0,
12
+ integer: 0,
13
+ };
14
+
15
+ function generateExampleValue(propSchema: JsonSchema | null | undefined, key: string): unknown {
16
+ if (!propSchema) {
17
+ return undefined;
18
+ }
19
+
20
+ if (Array.isArray(propSchema.enum) && propSchema.enum.length > 0) {
21
+ return propSchema.enum[0];
22
+ }
23
+
24
+ if (propSchema.type === 'string') {
25
+ return propSchema.description || `${key} value`;
26
+ }
27
+
28
+ if (propSchema.type === 'array') {
29
+ return [];
30
+ }
31
+
32
+ if (propSchema.type === 'object') {
33
+ return generateExampleFromSchema(propSchema) || {};
34
+ }
35
+
36
+ return propSchema.type === undefined ? undefined : EXAMPLE_PRIMITIVE_VALUES[propSchema.type];
37
+ }
38
+
39
+ function generateExampleFromSchema(
40
+ schema: JsonSchema | null | undefined
41
+ ): Record<string, unknown> | null {
42
+ if (!schema || schema.type !== 'object' || !schema.properties) {
43
+ return null;
44
+ }
45
+
46
+ const example: Record<string, unknown> = {};
47
+
48
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
49
+ const value = generateExampleValue(propSchema, key);
50
+ if (value !== undefined) {
51
+ example[key] = value;
52
+ }
53
+ }
54
+
55
+ return example;
56
+ }
57
+
58
+ function buildInstructionsSection({
59
+ config,
60
+ selectedPrompt,
61
+ id,
62
+ }: InstructionsSectionParams): string {
63
+ const promptText =
64
+ selectedPrompt || (typeof config.prompt === 'string' ? config.prompt : config.prompt?.system);
65
+
66
+ if (promptText) {
67
+ return `## Instructions\n\n${promptText}\n\n`;
68
+ }
69
+
70
+ if (config.prompt && typeof config.prompt !== 'string' && !config.prompt.system) {
71
+ const serializedPrompt = JSON.stringify(config.prompt);
72
+ throw new Error(
73
+ `Agent "${id}" has invalid prompt format. ` +
74
+ `Expected string or object with .system property, got: ${serializedPrompt.slice(0, 100)}...`
75
+ );
76
+ }
77
+
78
+ return '';
79
+ }
80
+
81
+ function resolveLegacyOutputFormat(
82
+ config: AgentContextConfig
83
+ ): LegacyOutputFormat | null | undefined {
84
+ return typeof config.prompt === 'string' ? undefined : config.prompt?.outputFormat;
85
+ }
86
+
87
+ function buildLegacyOutputSchemaSection(config: AgentContextConfig): string {
88
+ const outputFormat = resolveLegacyOutputFormat(config);
89
+ if (!outputFormat) {
90
+ return '';
91
+ }
92
+
93
+ const rules = (outputFormat.rules || []).map((rule) => `- ${rule}`).join('\n');
94
+
95
+ return [
96
+ '## Output Schema (REQUIRED)',
97
+ '',
98
+ '```json',
99
+ JSON.stringify(outputFormat.example, null, 2),
100
+ '```',
101
+ '',
102
+ 'STRING VALUES IN THIS SCHEMA: Dense. Factual. No filler words. No pleasantries.',
103
+ rules,
104
+ '',
105
+ ]
106
+ .filter(Boolean)
107
+ .join('\n');
108
+ }
109
+
110
+ function buildJsonSchemaSection(config: AgentContextConfig): string {
111
+ if (!config.jsonSchema || config.outputFormat !== 'json') {
112
+ return '';
113
+ }
114
+
115
+ const lines = [
116
+ '## 🔴 OUTPUT FORMAT - JSON ONLY',
117
+ '',
118
+ 'Your response must be ONLY valid JSON. No other text before or after.',
119
+ 'Start with { and end with }. Nothing else.',
120
+ '',
121
+ 'Required schema:',
122
+ '```json',
123
+ JSON.stringify(config.jsonSchema, null, 2),
124
+ '```',
125
+ '',
126
+ ];
127
+
128
+ const example = generateExampleFromSchema(config.jsonSchema);
129
+ if (example) {
130
+ lines.push('Example output:', '```json', JSON.stringify(example, null, 2), '```', '');
131
+ }
132
+
133
+ lines.push(
134
+ 'CRITICAL RULES:',
135
+ '- Output ONLY the JSON object - no explanation, no thinking, no preamble',
136
+ '- Use EXACTLY the enum values specified (case-sensitive)',
137
+ '- Include ALL required fields',
138
+ ''
139
+ );
140
+
141
+ return lines.join('\n');
142
+ }
143
+
144
+ export = {
145
+ buildInstructionsSection,
146
+ buildJsonSchemaSection,
147
+ buildLegacyOutputSchemaSection,
148
+ };