@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,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
+ };