@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
@@ -0,0 +1,253 @@
1
+ import replayPolicy = require('./context-replay-policy');
2
+
3
+ type MessageTimestamp = string | number;
4
+
5
+ interface ReplayFields {
6
+ readonly contextSafe?: unknown;
7
+ readonly replayPolicy?: unknown;
8
+ readonly [key: string]: unknown;
9
+ }
10
+
11
+ interface ContextMessage {
12
+ readonly id?: unknown;
13
+ readonly topic?: unknown;
14
+ readonly timestamp: MessageTimestamp;
15
+ readonly sender: string;
16
+ readonly metadata?: ReplayFields | null;
17
+ readonly content?: {
18
+ readonly text?: string | null;
19
+ readonly data?: ReplayFields | null;
20
+ } | null;
21
+ }
22
+
23
+ interface ContextSource {
24
+ topic: string;
25
+ sender?: unknown;
26
+ since?: unknown;
27
+ amount?: number;
28
+ limit?: number;
29
+ strategy?: string;
30
+ compactAmount?: number;
31
+ compactStrategy?: string;
32
+ priority?: string;
33
+ }
34
+
35
+ interface SourceCluster {
36
+ id: string;
37
+ createdAt: number;
38
+ }
39
+
40
+ interface MessageQuery {
41
+ cluster_id: string;
42
+ topic: string;
43
+ sender?: unknown;
44
+ since?: unknown;
45
+ afterId?: unknown;
46
+ throughId?: unknown;
47
+ }
48
+
49
+ interface SourceMessageBus {
50
+ query(criteria: MessageQuery): ContextMessage[];
51
+ }
52
+
53
+ interface SourceSelectionOptions {
54
+ compact?: boolean;
55
+ }
56
+
57
+ interface SourceSelection {
58
+ amount: number | undefined;
59
+ strategy: string;
60
+ }
61
+
62
+ interface SourceMessageParams {
63
+ source: ContextSource;
64
+ messageBus: SourceMessageBus;
65
+ cluster: SourceCluster;
66
+ lastTaskEndTime?: number | null | undefined;
67
+ lastAgentStartTime?: number | null | undefined;
68
+ afterId?: unknown;
69
+ throughId?: unknown;
70
+ triggeringMessageId?: unknown;
71
+ compact?: boolean;
72
+ }
73
+
74
+ interface SourcePackParams extends Omit<SourceMessageParams, 'compact'> {
75
+ index: number;
76
+ }
77
+
78
+ interface SourcePack {
79
+ id: string;
80
+ section: 'sources';
81
+ priority: string;
82
+ render(): string;
83
+ compact(): string;
84
+ }
85
+
86
+ const { isReplayableMessage } = replayPolicy;
87
+
88
+ function resolveSourceSince(
89
+ source: ContextSource,
90
+ cluster: SourceCluster,
91
+ lastTaskEndTime: number | null | undefined,
92
+ lastAgentStartTime: number | null | undefined
93
+ ): unknown {
94
+ const sinceValue = source.since;
95
+
96
+ if (sinceValue === 'cluster_start') {
97
+ return cluster.createdAt;
98
+ }
99
+
100
+ if (sinceValue === 'last_task_end') {
101
+ return lastTaskEndTime || cluster.createdAt;
102
+ }
103
+
104
+ if (sinceValue === 'last_agent_start') {
105
+ return lastAgentStartTime ? lastAgentStartTime + 1 : cluster.createdAt;
106
+ }
107
+
108
+ if (typeof sinceValue === 'string') {
109
+ const parsed = Date.parse(sinceValue);
110
+ if (Number.isNaN(parsed)) {
111
+ throw new Error(
112
+ `Unknown context source "since" value "${sinceValue}" for topic ${source.topic}. ` +
113
+ 'Use cluster_start, last_task_end, last_agent_start, or an ISO timestamp.'
114
+ );
115
+ }
116
+ return parsed;
117
+ }
118
+
119
+ return sinceValue;
120
+ }
121
+
122
+ function formatSourceMessagesSection(source: ContextSource, messages: ContextMessage[]): string {
123
+ let context = `\n## Messages from topic: ${source.topic}\n\n`;
124
+
125
+ for (const msg of messages) {
126
+ context += `[${new Date(msg.timestamp).toISOString()}] ${msg.sender}:\n`;
127
+ if (msg.content?.text) {
128
+ context += `${msg.content.text}\n`;
129
+ }
130
+ if (msg.content?.data) {
131
+ context += `Data: ${JSON.stringify(msg.content.data, null, 2)}\n`;
132
+ }
133
+ context += '\n';
134
+ }
135
+
136
+ return context;
137
+ }
138
+
139
+ function resolveSourceSelection(
140
+ source: ContextSource,
141
+ { compact = false }: SourceSelectionOptions = {}
142
+ ): SourceSelection {
143
+ const baseAmount = source.amount ?? source.limit;
144
+ const baseStrategy = source.strategy ?? (baseAmount !== undefined ? 'latest' : 'all');
145
+
146
+ if (!compact) {
147
+ return { amount: baseAmount, strategy: baseStrategy };
148
+ }
149
+
150
+ return {
151
+ amount: source.compactAmount ?? 1,
152
+ strategy: source.compactStrategy ?? (baseStrategy === 'all' ? 'latest' : baseStrategy),
153
+ };
154
+ }
155
+
156
+ function resolveSourceMessages({
157
+ source,
158
+ messageBus,
159
+ cluster,
160
+ lastTaskEndTime,
161
+ lastAgentStartTime,
162
+ afterId,
163
+ throughId,
164
+ triggeringMessageId,
165
+ compact = false,
166
+ }: SourceMessageParams): ContextMessage[] {
167
+ const sinceTimestamp = resolveSourceSince(source, cluster, lastTaskEndTime, lastAgentStartTime);
168
+ const { amount, strategy } = resolveSourceSelection(source, { compact });
169
+ const messages = messageBus.query({
170
+ cluster_id: cluster.id,
171
+ topic: source.topic,
172
+ sender: source.sender,
173
+ since: sinceTimestamp,
174
+ afterId,
175
+ throughId,
176
+ });
177
+ const replayableMessages = messages.filter(
178
+ (message) => isReplayableMessage(message) && message.id !== triggeringMessageId
179
+ );
180
+
181
+ if (amount === undefined) {
182
+ return replayableMessages;
183
+ }
184
+
185
+ if (strategy === 'latest') {
186
+ return replayableMessages.slice(-amount);
187
+ }
188
+
189
+ return replayableMessages.slice(0, amount);
190
+ }
191
+
192
+ const REQUIRED_TOPICS = new Set(['STATE_SNAPSHOT', 'ISSUE_OPENED', 'PLAN_READY']);
193
+ const HIGH_PRIORITY_TOPICS = new Set(['VALIDATION_RESULT', 'IMPLEMENTATION_READY']);
194
+
195
+ function resolveSourcePriority(source: ContextSource): string {
196
+ if (source.priority) {
197
+ return source.priority;
198
+ }
199
+
200
+ if (REQUIRED_TOPICS.has(source.topic)) {
201
+ return 'required';
202
+ }
203
+
204
+ if (HIGH_PRIORITY_TOPICS.has(source.topic)) {
205
+ return 'high';
206
+ }
207
+
208
+ return 'medium';
209
+ }
210
+
211
+ function buildSourcePack({
212
+ source,
213
+ index,
214
+ messageBus,
215
+ cluster,
216
+ lastTaskEndTime,
217
+ lastAgentStartTime,
218
+ afterId,
219
+ throughId,
220
+ triggeringMessageId,
221
+ }: SourcePackParams): SourcePack {
222
+ const render = (compact: boolean): string => {
223
+ const messages = resolveSourceMessages({
224
+ source,
225
+ messageBus,
226
+ cluster,
227
+ lastTaskEndTime,
228
+ lastAgentStartTime,
229
+ afterId,
230
+ throughId,
231
+ triggeringMessageId,
232
+ compact,
233
+ });
234
+
235
+ if (messages.length === 0) {
236
+ return '';
237
+ }
238
+
239
+ return formatSourceMessagesSection(source, messages);
240
+ };
241
+
242
+ return {
243
+ id: `source:${source.topic}:${index}`,
244
+ section: 'sources',
245
+ priority: resolveSourcePriority(source),
246
+ render: () => render(false),
247
+ compact: () => render(true),
248
+ };
249
+ }
250
+
251
+ export = {
252
+ buildSourcePack,
253
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,132 @@
1
+ export interface JsonSchema {
2
+ readonly type?: string;
3
+ readonly description?: string;
4
+ readonly enum?: readonly unknown[];
5
+ readonly properties?: Readonly<Record<string, JsonSchema | null | undefined>>;
6
+ }
7
+
8
+ export interface LegacyOutputFormat {
9
+ readonly rules?: readonly string[];
10
+ readonly example?: unknown;
11
+ }
12
+
13
+ export interface PromptObject {
14
+ readonly system?: string | null;
15
+ readonly outputFormat?: LegacyOutputFormat | null;
16
+ }
17
+
18
+ export interface ContextSource {
19
+ topic: string;
20
+ sender?: unknown;
21
+ since?: unknown;
22
+ amount?: number;
23
+ limit?: number;
24
+ strategy?: string;
25
+ compactAmount?: number;
26
+ compactStrategy?: string;
27
+ priority?: string;
28
+ }
29
+
30
+ export interface ContextStrategy {
31
+ maxTokens?: number;
32
+ sources?: ContextSource[];
33
+ readonly [key: string]: unknown;
34
+ }
35
+
36
+ export interface AgentContextConfig {
37
+ readonly prompt?: string | PromptObject | null;
38
+ readonly promptConfig?: {
39
+ readonly type?: string | null;
40
+ } | null;
41
+ readonly cwd?: string | null;
42
+ readonly jsonSchema?: JsonSchema | null;
43
+ readonly outputFormat?: string | null;
44
+ readonly role?: string;
45
+ readonly requiredQualityGates?: unknown;
46
+ readonly commandProofs?: unknown;
47
+ readonly contextStrategy?: ContextStrategy | null;
48
+ }
49
+
50
+ export interface WorktreeContext {
51
+ readonly enabled?: boolean;
52
+ readonly path?: string | null;
53
+ }
54
+
55
+ export interface IsolationContext {
56
+ readonly enabled?: boolean;
57
+ }
58
+
59
+ export interface ValidationCriterion {
60
+ readonly status?: string;
61
+ readonly id?: string;
62
+ readonly reason?: string;
63
+ }
64
+
65
+ export interface ContextMessageData {
66
+ readonly criteriaResults?: readonly ValidationCriterion[] | null;
67
+ readonly contextSafe?: unknown;
68
+ readonly replayPolicy?: unknown;
69
+ readonly [key: string]: unknown;
70
+ }
71
+
72
+ export interface ContextMessage {
73
+ readonly id?: unknown;
74
+ readonly topic?: unknown;
75
+ readonly timestamp: string | number;
76
+ readonly sender: string;
77
+ readonly metadata?: ContextMessageData | null;
78
+ readonly content?: {
79
+ readonly text?: string | null;
80
+ readonly data?: ContextMessageData | null;
81
+ } | null;
82
+ }
83
+
84
+ export interface ContextQuery {
85
+ cluster_id: string;
86
+ topic: string;
87
+ sender?: unknown;
88
+ since?: unknown;
89
+ afterId?: unknown;
90
+ throughId?: unknown;
91
+ limit?: number;
92
+ }
93
+
94
+ export interface ContextMessageBus {
95
+ query(criteria: ContextQuery): ContextMessage[];
96
+ publish(message: unknown): unknown;
97
+ }
98
+
99
+ export interface ContextCluster {
100
+ id: string;
101
+ createdAt: number;
102
+ }
103
+
104
+ export interface TriggeringMessage {
105
+ id?: unknown;
106
+ topic: string;
107
+ sender: string;
108
+ content?: {
109
+ text?: string | null;
110
+ } | null;
111
+ }
112
+
113
+ export interface BuildContextParams {
114
+ id: string;
115
+ role: string;
116
+ iteration: number;
117
+ config: AgentContextConfig;
118
+ messageBus: ContextMessageBus;
119
+ cluster: ContextCluster;
120
+ triggeringMessage: TriggeringMessage;
121
+ lastTaskEndTime?: number | null | undefined;
122
+ lastAgentStartTime?: number | null | undefined;
123
+ selectedPrompt?: string | null | undefined;
124
+ queuedGuidance?: string | null | undefined;
125
+ worktree?: WorktreeContext | null | undefined;
126
+ isolation?: IsolationContext | null | undefined;
127
+ mode?: string | undefined;
128
+ continuationSequence?: unknown;
129
+ contextThroughId?: unknown;
130
+ previousPromptIdentity?: unknown;
131
+ currentPromptIdentity?: unknown;
132
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ const validationPlatform = require("./validation-platform");
3
+ const { isPlatformMismatchReason } = validationPlatform;
4
+ function shouldKeepCannotValidate(criteria, ignoreReason, seenIds) {
5
+ if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
6
+ return false;
7
+ }
8
+ if (ignoreReason && ignoreReason(criteria.reason)) {
9
+ return false;
10
+ }
11
+ if (seenIds.has(criteria.id)) {
12
+ return false;
13
+ }
14
+ return true;
15
+ }
16
+ function isValidationCriteria(value) {
17
+ return Array.isArray(value);
18
+ }
19
+ function collectCannotValidateCriteria(prevValidations, options = {}) {
20
+ const cannotValidateCriteria = [];
21
+ const seenIds = new Set();
22
+ const ignoreReason = options.ignoreReason;
23
+ for (const msg of prevValidations) {
24
+ const criteriaResults = msg.content?.data?.criteriaResults;
25
+ if (!isValidationCriteria(criteriaResults)) {
26
+ continue;
27
+ }
28
+ for (const criteria of criteriaResults) {
29
+ if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
30
+ continue;
31
+ }
32
+ seenIds.add(criteria.id);
33
+ cannotValidateCriteria.push({
34
+ id: criteria.id,
35
+ reason: criteria.reason || 'No reason provided',
36
+ });
37
+ }
38
+ }
39
+ return cannotValidateCriteria;
40
+ }
41
+ function buildCannotValidateSection(cannotValidateCriteria) {
42
+ if (cannotValidateCriteria.length === 0) {
43
+ return '';
44
+ }
45
+ return [
46
+ '',
47
+ '## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
48
+ '',
49
+ 'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
50
+ 'These limitations have not changed. Do NOT re-attempt verification.',
51
+ 'Mark these as CANNOT_VALIDATE again with the same reason.',
52
+ '',
53
+ ...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
54
+ '',
55
+ ].join('\n');
56
+ }
57
+ function buildValidatorSkipSection({ role, messageBus, cluster, isolation, }) {
58
+ if (role !== 'validator') {
59
+ return '';
60
+ }
61
+ const prevValidations = messageBus.query({
62
+ cluster_id: cluster.id,
63
+ topic: 'VALIDATION_RESULT',
64
+ since: cluster.createdAt,
65
+ limit: 50,
66
+ });
67
+ const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
68
+ const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
69
+ return buildCannotValidateSection(cannotValidateCriteria);
70
+ }
71
+ module.exports = {
72
+ buildValidatorSkipSection,
73
+ };
@@ -0,0 +1,129 @@
1
+ import validationPlatform = require('./validation-platform');
2
+
3
+ import type {
4
+ ContextCluster,
5
+ ContextMessage,
6
+ ContextMessageBus,
7
+ IsolationContext,
8
+ ValidationCriterion,
9
+ } from './agent-context-types';
10
+
11
+ interface CannotValidateCriterion {
12
+ id: string;
13
+ reason: string;
14
+ }
15
+
16
+ interface CannotValidateOptions {
17
+ ignoreReason?: ((reason: string | undefined) => boolean) | null;
18
+ }
19
+
20
+ interface ValidatorSkipParams {
21
+ role: string;
22
+ messageBus: ContextMessageBus;
23
+ cluster: ContextCluster;
24
+ isolation?: IsolationContext | null | undefined;
25
+ }
26
+
27
+ const { isPlatformMismatchReason } = validationPlatform;
28
+
29
+ function shouldKeepCannotValidate(
30
+ criteria: ValidationCriterion,
31
+ ignoreReason: CannotValidateOptions['ignoreReason'],
32
+ seenIds: ReadonlySet<string>
33
+ ): criteria is ValidationCriterion & { id: string } {
34
+ if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
35
+ return false;
36
+ }
37
+
38
+ if (ignoreReason && ignoreReason(criteria.reason)) {
39
+ return false;
40
+ }
41
+
42
+ if (seenIds.has(criteria.id)) {
43
+ return false;
44
+ }
45
+
46
+ return true;
47
+ }
48
+
49
+ function isValidationCriteria(
50
+ value: readonly ValidationCriterion[] | null | undefined
51
+ ): value is readonly ValidationCriterion[] {
52
+ return Array.isArray(value);
53
+ }
54
+
55
+ function collectCannotValidateCriteria(
56
+ prevValidations: readonly ContextMessage[],
57
+ options: CannotValidateOptions = {}
58
+ ): CannotValidateCriterion[] {
59
+ const cannotValidateCriteria: CannotValidateCriterion[] = [];
60
+ const seenIds = new Set<string>();
61
+ const ignoreReason = options.ignoreReason;
62
+
63
+ for (const msg of prevValidations) {
64
+ const criteriaResults = msg.content?.data?.criteriaResults;
65
+ if (!isValidationCriteria(criteriaResults)) {
66
+ continue;
67
+ }
68
+
69
+ for (const criteria of criteriaResults) {
70
+ if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
71
+ continue;
72
+ }
73
+
74
+ seenIds.add(criteria.id);
75
+ cannotValidateCriteria.push({
76
+ id: criteria.id,
77
+ reason: criteria.reason || 'No reason provided',
78
+ });
79
+ }
80
+ }
81
+
82
+ return cannotValidateCriteria;
83
+ }
84
+
85
+ function buildCannotValidateSection(
86
+ cannotValidateCriteria: readonly CannotValidateCriterion[]
87
+ ): string {
88
+ if (cannotValidateCriteria.length === 0) {
89
+ return '';
90
+ }
91
+
92
+ return [
93
+ '',
94
+ '## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
95
+ '',
96
+ 'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
97
+ 'These limitations have not changed. Do NOT re-attempt verification.',
98
+ 'Mark these as CANNOT_VALIDATE again with the same reason.',
99
+ '',
100
+ ...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
101
+ '',
102
+ ].join('\n');
103
+ }
104
+
105
+ function buildValidatorSkipSection({
106
+ role,
107
+ messageBus,
108
+ cluster,
109
+ isolation,
110
+ }: ValidatorSkipParams): string {
111
+ if (role !== 'validator') {
112
+ return '';
113
+ }
114
+
115
+ const prevValidations = messageBus.query({
116
+ cluster_id: cluster.id,
117
+ topic: 'VALIDATION_RESULT',
118
+ since: cluster.createdAt,
119
+ limit: 50,
120
+ });
121
+ const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
122
+ const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
123
+
124
+ return buildCannotValidateSection(cannotValidateCriteria);
125
+ }
126
+
127
+ export = {
128
+ buildValidatorSkipSection,
129
+ };