@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,208 @@
1
+ import contextMetrics = require('./context-metrics');
2
+ import contextPackCore = require('./context-pack-core');
3
+
4
+ import type {
5
+ ContextPackTruncationStage,
6
+ MutableContextPackDecision,
7
+ NormalizedContextPack,
8
+ RenderedVariant,
9
+ SelectedVariant,
10
+ } from './context-pack-types';
11
+
12
+ interface MaxCharsGuardParams {
13
+ packs: NormalizedContextPack[];
14
+ selected: Map<string, SelectedVariant>;
15
+ decisions: Map<string, MutableContextPackDecision>;
16
+ cache: Map<string, RenderedVariant>;
17
+ maxChars: number | undefined;
18
+ totalChars: number;
19
+ }
20
+
21
+ interface MaxCharsMutationParams {
22
+ selected: Map<string, SelectedVariant>;
23
+ decisions: Map<string, MutableContextPackDecision>;
24
+ cache: Map<string, RenderedVariant>;
25
+ maxChars: number;
26
+ }
27
+
28
+ interface RequiredTruncationParams {
29
+ packs: readonly NormalizedContextPack[];
30
+ selected: Map<string, SelectedVariant>;
31
+ decisions: Map<string, MutableContextPackDecision>;
32
+ currentChars: number;
33
+ maxChars: number;
34
+ }
35
+
36
+ const { estimateTokensFromChars } = contextMetrics;
37
+ const { renderVariant, sortByPriorityDescThenOrderDesc } = contextPackCore;
38
+
39
+ const TRUNCATION_SUFFIX = '\n\n[Context truncated to fit limit]\n';
40
+
41
+ function truncateText(text: string, targetChars: number): { text: string; truncated: boolean } {
42
+ if (text.length <= targetChars) {
43
+ return { text, truncated: false };
44
+ }
45
+
46
+ if (targetChars <= 0) {
47
+ return { text: '', truncated: true };
48
+ }
49
+
50
+ if (targetChars <= TRUNCATION_SUFFIX.length) {
51
+ return { text: text.slice(0, targetChars), truncated: true };
52
+ }
53
+
54
+ const sliceLength = targetChars - TRUNCATION_SUFFIX.length;
55
+ return {
56
+ text: text.slice(0, sliceLength) + TRUNCATION_SUFFIX,
57
+ truncated: true,
58
+ };
59
+ }
60
+
61
+ function compactOptionalPacks(
62
+ packs: readonly NormalizedContextPack[],
63
+ { selected, decisions, cache, maxChars }: MaxCharsMutationParams,
64
+ startingChars: number
65
+ ): number {
66
+ let currentChars = startingChars;
67
+ for (const pack of packs) {
68
+ if (currentChars <= maxChars) break;
69
+ const decision = decisions.get(pack.id);
70
+ if (!decision || decision.variant === 'compact' || !pack.compact) continue;
71
+
72
+ const compact = renderVariant(pack, 'compact', cache);
73
+ if (compact.chars === 0 || compact.chars >= decision.chars) continue;
74
+
75
+ const previousChars = decision.chars;
76
+ selected.set(pack.id, { ...compact, variant: 'compact' });
77
+ decision.variant = 'compact';
78
+ decision.chars = compact.chars;
79
+ decision.estimatedTokens = compact.estimatedTokens;
80
+ decision.reason = decision.reason || 'max_chars';
81
+
82
+ currentChars -= previousChars - compact.chars;
83
+ currentChars = Math.max(0, currentChars);
84
+ }
85
+ return currentChars;
86
+ }
87
+
88
+ function dropOptionalPacks(
89
+ packs: readonly NormalizedContextPack[],
90
+ { selected, decisions, maxChars }: MaxCharsMutationParams,
91
+ startingChars: number
92
+ ): number {
93
+ let currentChars = startingChars;
94
+ for (const pack of packs) {
95
+ if (currentChars <= maxChars) break;
96
+ if (!selected.has(pack.id)) continue;
97
+
98
+ const decision = decisions.get(pack.id);
99
+ currentChars -= decision?.chars || 0;
100
+ selected.delete(pack.id);
101
+ if (decision) {
102
+ decision.status = 'skipped';
103
+ decision.reason = decision.reason || 'max_chars';
104
+ decision.chars = 0;
105
+ decision.estimatedTokens = 0;
106
+ }
107
+ }
108
+ return currentChars;
109
+ }
110
+
111
+ function sortRequiredTruncationCandidates(
112
+ packs: readonly NormalizedContextPack[],
113
+ selected: ReadonlyMap<string, SelectedVariant>
114
+ ): NormalizedContextPack[] {
115
+ return packs
116
+ .filter((pack) => selected.has(pack.id) && pack.required)
117
+ .sort((a, b) => {
118
+ const preserveDelta = (a.preserve ? 1 : 0) - (b.preserve ? 1 : 0);
119
+ if (preserveDelta !== 0) return preserveDelta;
120
+ const sizeDelta = (selected.get(b.id)?.chars || 0) - (selected.get(a.id)?.chars || 0);
121
+ if (sizeDelta !== 0) return sizeDelta;
122
+ return b.order - a.order;
123
+ });
124
+ }
125
+
126
+ function truncateRequiredPacks({
127
+ packs,
128
+ selected,
129
+ decisions,
130
+ currentChars,
131
+ maxChars,
132
+ }: RequiredTruncationParams): void {
133
+ let overage = currentChars - maxChars;
134
+ const requiredCandidates = sortRequiredTruncationCandidates(packs, selected);
135
+
136
+ for (const pack of requiredCandidates) {
137
+ if (overage <= 0) break;
138
+ const decision = decisions.get(pack.id);
139
+ const selectedPack = selected.get(pack.id);
140
+ if (!decision || !selectedPack) continue;
141
+
142
+ const targetChars = Math.max(0, selectedPack.chars - overage);
143
+ const truncated = truncateText(selectedPack.text, targetChars);
144
+ if (truncated.text.length === selectedPack.chars) continue;
145
+
146
+ const newChars = truncated.text.length;
147
+ overage -= selectedPack.chars - newChars;
148
+ selected.set(pack.id, {
149
+ text: truncated.text,
150
+ chars: newChars,
151
+ estimatedTokens: estimateTokensFromChars(newChars),
152
+ variant: selectedPack.variant,
153
+ });
154
+
155
+ decision.chars = newChars;
156
+ decision.estimatedTokens = estimateTokensFromChars(newChars);
157
+ decision.truncated = true;
158
+ decision.reason = decision.reason || 'max_chars';
159
+ }
160
+ }
161
+
162
+ function selectedChars(selected: ReadonlyMap<string, SelectedVariant>): number {
163
+ return Array.from(selected.values()).reduce((sum, item) => sum + item.chars, 0);
164
+ }
165
+
166
+ function applyMaxCharsGuard({
167
+ packs,
168
+ selected,
169
+ decisions,
170
+ cache,
171
+ maxChars,
172
+ totalChars,
173
+ }: MaxCharsGuardParams): ContextPackTruncationStage {
174
+ if (typeof maxChars !== 'number' || !Number.isFinite(maxChars) || totalChars <= maxChars) {
175
+ return {
176
+ applied: false,
177
+ beforeChars: totalChars,
178
+ afterChars: totalChars,
179
+ };
180
+ }
181
+
182
+ const includedOptional = packs
183
+ .filter((pack) => selected.has(pack.id) && !pack.required)
184
+ .sort(sortByPriorityDescThenOrderDesc);
185
+ const mutationParams = { selected, decisions, cache, maxChars };
186
+ let currentChars = compactOptionalPacks(includedOptional, mutationParams, totalChars);
187
+ currentChars = dropOptionalPacks(includedOptional, mutationParams, currentChars);
188
+
189
+ if (currentChars > maxChars) {
190
+ truncateRequiredPacks({
191
+ packs,
192
+ selected,
193
+ decisions,
194
+ currentChars,
195
+ maxChars,
196
+ });
197
+ }
198
+
199
+ return {
200
+ applied: true,
201
+ beforeChars: totalChars,
202
+ afterChars: selectedChars(selected),
203
+ };
204
+ }
205
+
206
+ export = {
207
+ applyMaxCharsGuard,
208
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,98 @@
1
+ export type ContextPackPriority = 'required' | 'high' | 'medium' | 'low';
2
+ export type ContextPackVariant = 'full' | 'compact';
3
+ export type ContextPackStatus = 'included' | 'skipped';
4
+
5
+ export interface ContextPack {
6
+ id: string;
7
+ section?: string | null;
8
+ priority?: string;
9
+ required?: boolean;
10
+ order?: number;
11
+ preserve?: boolean;
12
+ render?: () => unknown;
13
+ compact?: () => unknown;
14
+ }
15
+
16
+ export interface NormalizedContextPack extends ContextPack {
17
+ priority: ContextPackPriority;
18
+ required: boolean;
19
+ order: number;
20
+ }
21
+
22
+ export interface RenderedVariant {
23
+ text: string;
24
+ chars: number;
25
+ estimatedTokens: number;
26
+ }
27
+
28
+ export interface SelectedVariant extends RenderedVariant {
29
+ variant: ContextPackVariant;
30
+ }
31
+
32
+ export interface IncludedSelection extends SelectedVariant {
33
+ status: 'included';
34
+ }
35
+
36
+ export interface SkippedSelection {
37
+ status: 'skipped';
38
+ variant: null;
39
+ reason: 'empty' | 'budget';
40
+ chars: 0;
41
+ estimatedTokens: 0;
42
+ }
43
+
44
+ export type PackSelection = IncludedSelection | SkippedSelection;
45
+
46
+ export interface ContextPackDecision {
47
+ id: string;
48
+ section: string | null;
49
+ priority: ContextPackPriority;
50
+ required: boolean;
51
+ status: ContextPackStatus;
52
+ variant: ContextPackVariant | null;
53
+ chars: number;
54
+ estimatedTokens: number;
55
+ order: number;
56
+ reason: string | null;
57
+ truncated: boolean;
58
+ }
59
+
60
+ export interface MutableContextPackDecision extends Omit<ContextPackDecision, 'truncated'> {
61
+ truncated?: boolean;
62
+ }
63
+
64
+ export interface PackSelectionState {
65
+ renderCache: Map<string, RenderedVariant>;
66
+ decisions: Map<string, MutableContextPackDecision>;
67
+ selected: Map<string, SelectedVariant>;
68
+ remainingTokens: number;
69
+ overBudgetTokens: number;
70
+ }
71
+
72
+ export interface ContextPackBudget {
73
+ maxTokens: number | undefined;
74
+ remainingTokens: number | null;
75
+ overBudgetTokens: number;
76
+ finalTokens: number;
77
+ }
78
+
79
+ export interface ContextPackTruncationStage {
80
+ applied: boolean;
81
+ beforeChars: number;
82
+ afterChars: number;
83
+ }
84
+
85
+ export interface ContextPackResult {
86
+ context: string;
87
+ packDecisions: ContextPackDecision[];
88
+ budget: ContextPackBudget;
89
+ truncation: {
90
+ maxContextChars: ContextPackTruncationStage;
91
+ };
92
+ }
93
+
94
+ export interface BuildContextPacksParams {
95
+ packs: ContextPack[];
96
+ maxTokens?: number | undefined;
97
+ maxChars?: number | undefined;
98
+ }
@@ -1,51 +1,42 @@
1
+ "use strict";
1
2
  const RAW_LOG_ONLY_REPLAY_POLICY = 'raw_log_only';
2
3
  const CONTEXT_REPLAY_POLICY = 'context';
3
-
4
4
  function buildRawLogOnlyMetadata(extra = {}) {
5
- return {
6
- ...extra,
7
- contextSafe: false,
8
- replayPolicy: RAW_LOG_ONLY_REPLAY_POLICY,
9
- };
5
+ return {
6
+ ...extra,
7
+ contextSafe: false,
8
+ replayPolicy: RAW_LOG_ONLY_REPLAY_POLICY,
9
+ };
10
10
  }
11
-
12
11
  function getReplayPolicy(message) {
13
- return message?.metadata?.replayPolicy ?? message?.content?.data?.replayPolicy;
12
+ return message?.metadata?.replayPolicy ?? message?.content?.data?.replayPolicy;
14
13
  }
15
-
16
14
  function getContextSafe(message) {
17
- if (typeof message?.metadata?.contextSafe === 'boolean') {
18
- return message.metadata.contextSafe;
19
- }
20
-
21
- if (typeof message?.content?.data?.contextSafe === 'boolean') {
22
- return message.content.data.contextSafe;
23
- }
24
-
25
- return null;
15
+ if (typeof message?.metadata?.contextSafe === 'boolean') {
16
+ return message.metadata.contextSafe;
17
+ }
18
+ if (typeof message?.content?.data?.contextSafe === 'boolean') {
19
+ return message.content.data.contextSafe;
20
+ }
21
+ return null;
26
22
  }
27
-
28
23
  function isReplayableMessage(message) {
29
- const contextSafe = getContextSafe(message);
30
- if (contextSafe !== null) {
31
- return contextSafe;
32
- }
33
-
34
- const replayPolicy = getReplayPolicy(message);
35
- if (replayPolicy === RAW_LOG_ONLY_REPLAY_POLICY) {
36
- return false;
37
- }
38
-
39
- if (replayPolicy === CONTEXT_REPLAY_POLICY) {
40
- return true;
41
- }
42
-
43
- return message?.topic !== 'AGENT_OUTPUT';
24
+ const contextSafe = getContextSafe(message);
25
+ if (contextSafe !== null) {
26
+ return contextSafe;
27
+ }
28
+ const replayPolicy = getReplayPolicy(message);
29
+ if (replayPolicy === RAW_LOG_ONLY_REPLAY_POLICY) {
30
+ return false;
31
+ }
32
+ if (replayPolicy === CONTEXT_REPLAY_POLICY) {
33
+ return true;
34
+ }
35
+ return message?.topic !== 'AGENT_OUTPUT';
44
36
  }
45
-
46
37
  module.exports = {
47
- RAW_LOG_ONLY_REPLAY_POLICY,
48
- CONTEXT_REPLAY_POLICY,
49
- buildRawLogOnlyMetadata,
50
- isReplayableMessage,
38
+ RAW_LOG_ONLY_REPLAY_POLICY,
39
+ CONTEXT_REPLAY_POLICY,
40
+ buildRawLogOnlyMetadata,
41
+ isReplayableMessage,
51
42
  };
@@ -0,0 +1,71 @@
1
+ const RAW_LOG_ONLY_REPLAY_POLICY = 'raw_log_only';
2
+ const CONTEXT_REPLAY_POLICY = 'context';
3
+
4
+ type ReplayMetadata = Record<string, unknown> & {
5
+ readonly contextSafe?: unknown;
6
+ readonly replayPolicy?: unknown;
7
+ };
8
+
9
+ interface ReplayMessage {
10
+ readonly topic?: unknown;
11
+ readonly metadata?: ReplayMetadata | null;
12
+ readonly content?: {
13
+ readonly data?: {
14
+ readonly contextSafe?: unknown;
15
+ readonly replayPolicy?: unknown;
16
+ } | null;
17
+ } | null;
18
+ }
19
+
20
+ function buildRawLogOnlyMetadata(extra: Record<string, unknown> = {}): {
21
+ contextSafe: false;
22
+ replayPolicy: typeof RAW_LOG_ONLY_REPLAY_POLICY;
23
+ [key: string]: unknown;
24
+ } {
25
+ return {
26
+ ...extra,
27
+ contextSafe: false,
28
+ replayPolicy: RAW_LOG_ONLY_REPLAY_POLICY,
29
+ };
30
+ }
31
+
32
+ function getReplayPolicy(message: ReplayMessage | null | undefined): unknown {
33
+ return message?.metadata?.replayPolicy ?? message?.content?.data?.replayPolicy;
34
+ }
35
+
36
+ function getContextSafe(message: ReplayMessage | null | undefined): boolean | null {
37
+ if (typeof message?.metadata?.contextSafe === 'boolean') {
38
+ return message.metadata.contextSafe;
39
+ }
40
+
41
+ if (typeof message?.content?.data?.contextSafe === 'boolean') {
42
+ return message.content.data.contextSafe;
43
+ }
44
+
45
+ return null;
46
+ }
47
+
48
+ function isReplayableMessage(message: ReplayMessage | null | undefined): boolean {
49
+ const contextSafe = getContextSafe(message);
50
+ if (contextSafe !== null) {
51
+ return contextSafe;
52
+ }
53
+
54
+ const replayPolicy = getReplayPolicy(message);
55
+ if (replayPolicy === RAW_LOG_ONLY_REPLAY_POLICY) {
56
+ return false;
57
+ }
58
+
59
+ if (replayPolicy === CONTEXT_REPLAY_POLICY) {
60
+ return true;
61
+ }
62
+
63
+ return message?.topic !== 'AGENT_OUTPUT';
64
+ }
65
+
66
+ export = {
67
+ RAW_LOG_ONLY_REPLAY_POLICY,
68
+ CONTEXT_REPLAY_POLICY,
69
+ buildRawLogOnlyMetadata,
70
+ isReplayableMessage,
71
+ };
@@ -1,17 +1,13 @@
1
- // @ts-nocheck
2
-
1
+ "use strict";
3
2
  // Validators publish a rejection when their task exhausts retries. Every other named role can
4
3
  // execute provider work, including user-defined and orchestrator roles, so exhaustion must
5
4
  // terminalize the cluster by default instead of requiring this policy to know each future role.
6
5
  const NON_TERMINAL_AGENT_ROLES = new Set(['validator']);
7
-
8
6
  function isCriticalAgent(agent) {
9
- if (agent?.id === 'consensus-coordinator') return true;
10
- return (
11
- typeof agent?.role === 'string' &&
12
- agent.role.length > 0 &&
13
- !NON_TERMINAL_AGENT_ROLES.has(agent.role)
14
- );
7
+ if (agent?.id === 'consensus-coordinator')
8
+ return true;
9
+ return (typeof agent?.role === 'string' &&
10
+ agent.role.length > 0 &&
11
+ !NON_TERMINAL_AGENT_ROLES.has(agent.role));
15
12
  }
16
-
17
13
  module.exports = { isCriticalAgent };
@@ -0,0 +1,20 @@
1
+ interface AgentIdentity {
2
+ readonly id?: unknown;
3
+ readonly role?: unknown;
4
+ }
5
+
6
+ // Validators publish a rejection when their task exhausts retries. Every other named role can
7
+ // execute provider work, including user-defined and orchestrator roles, so exhaustion must
8
+ // terminalize the cluster by default instead of requiring this policy to know each future role.
9
+ const NON_TERMINAL_AGENT_ROLES: ReadonlySet<string> = new Set(['validator']);
10
+
11
+ function isCriticalAgent(agent: AgentIdentity | null | undefined): boolean {
12
+ if (agent?.id === 'consensus-coordinator') return true;
13
+ return (
14
+ typeof agent?.role === 'string' &&
15
+ agent.role.length > 0 &&
16
+ !NON_TERMINAL_AGENT_ROLES.has(agent.role)
17
+ );
18
+ }
19
+
20
+ export = { isCriticalAgent };
@@ -1,99 +1,86 @@
1
+ "use strict";
2
+ const ledgerSequence = require("../ledger-sequence");
1
3
  const GUIDANCE_BLOCK_START = '<<GUIDANCE_QUEUE_START>>';
2
4
  const GUIDANCE_BLOCK_END = '<<GUIDANCE_QUEUE_END>>';
3
- const { compareMessageSequences } = require('../ledger-sequence');
4
-
5
+ const { compareMessageSequences } = ledgerSequence;
5
6
  function formatGuidanceMessage(message) {
6
- const timestamp = Number.isFinite(message.timestamp)
7
- ? new Date(message.timestamp).toISOString()
8
- : new Date().toISOString();
9
- const sender = message.sender || 'unknown';
10
- const topic = message.topic || 'GUIDANCE';
11
- const target = message.receiver || message.target_agent_id;
12
- const targetSuffix = target ? ` -> ${target}` : '';
13
-
14
- let formatted = `[${timestamp}] ${sender} (${topic}${targetSuffix})\n`;
15
- if (message.content?.text) {
16
- formatted += `${message.content.text}\n`;
17
- }
18
- if (message.content?.data) {
19
- formatted += `${JSON.stringify(message.content.data, null, 2)}\n`;
20
- }
21
-
22
- return formatted.trimEnd();
7
+ const timestamp = typeof message.timestamp === 'number' && Number.isFinite(message.timestamp)
8
+ ? new Date(message.timestamp).toISOString()
9
+ : new Date().toISOString();
10
+ const sender = message.sender || 'unknown';
11
+ const topic = message.topic || 'GUIDANCE';
12
+ const target = message.receiver || message.target_agent_id;
13
+ const targetSuffix = target ? ` -> ${target}` : '';
14
+ let formatted = `[${timestamp}] ${sender} (${topic}${targetSuffix})\n`;
15
+ if (message.content?.text) {
16
+ formatted += `${message.content.text}\n`;
17
+ }
18
+ if (message.content?.data) {
19
+ formatted += `${JSON.stringify(message.content.data, null, 2)}\n`;
20
+ }
21
+ return formatted.trimEnd();
23
22
  }
24
-
25
23
  function orderGuidanceMessages(messages, orderBySequence) {
26
- return messages.slice().sort((a, b) => {
27
- if (orderBySequence) {
28
- return compareMessageSequences(a.sequence || '0', b.sequence || '0');
29
- }
30
- return (a.timestamp || 0) - (b.timestamp || 0);
31
- });
24
+ return messages.slice().sort((left, right) => {
25
+ if (orderBySequence) {
26
+ return compareMessageSequences(left.sequence || '0', right.sequence || '0');
27
+ }
28
+ return (left.timestamp || 0) - (right.timestamp || 0);
29
+ });
32
30
  }
33
-
34
31
  function formatGuidanceBlock(messages, { orderBySequence = false } = {}) {
35
- if (!Array.isArray(messages) || messages.length === 0) return '';
36
-
37
- const ordered = orderGuidanceMessages(messages, orderBySequence);
38
-
39
- let block = '## Guidance (Queued)\n\n';
40
- block += `${GUIDANCE_BLOCK_START}\n`;
41
-
42
- ordered.forEach((message, index) => {
43
- block += `${formatGuidanceMessage(message)}\n`;
44
- if (index < ordered.length - 1) {
45
- block += '\n';
46
- }
47
- });
48
-
49
- block += `\n${GUIDANCE_BLOCK_END}\n\n`;
50
- return block;
32
+ if (!Array.isArray(messages) || messages.length === 0)
33
+ return '';
34
+ const ordered = orderGuidanceMessages(messages, orderBySequence);
35
+ let block = '## Guidance (Queued)\n\n';
36
+ block += `${GUIDANCE_BLOCK_START}\n`;
37
+ ordered.forEach((message, index) => {
38
+ block += `${formatGuidanceMessage(message)}\n`;
39
+ if (index < ordered.length - 1) {
40
+ block += '\n';
41
+ }
42
+ });
43
+ block += `\n${GUIDANCE_BLOCK_END}\n\n`;
44
+ return block;
51
45
  }
52
-
53
- function collectQueuedGuidance({
54
- messageBus,
55
- clusterId,
56
- agentId,
57
- afterId,
58
- throughId,
59
- lastDeliveredAt,
60
- limit,
61
- }) {
62
- if (!messageBus) {
63
- throw new Error('collectQueuedGuidance: messageBus is required');
64
- }
65
- if (!clusterId) {
66
- throw new Error('collectQueuedGuidance: clusterId is required');
67
- }
68
- if (!agentId) {
69
- throw new Error('collectQueuedGuidance: agentId is required');
70
- }
71
-
72
- const messages = messageBus.queryGuidanceMailbox({
73
- cluster_id: clusterId,
74
- target_agent_id: agentId,
75
- afterId,
76
- throughId,
77
- lastDeliveredAt,
78
- limit,
79
- });
80
-
81
- if (!messages.length) {
46
+ function emptyQueuedGuidance() {
82
47
  return { messages: [], latestSequence: null, latestTimestamp: null, guidanceBlock: '' };
83
- }
84
-
85
- const sequenceBounded = afterId !== undefined || throughId !== undefined;
86
- const ordered = orderGuidanceMessages(messages, sequenceBounded);
87
- const latestSequence = ordered[ordered.length - 1].sequence;
88
- const latestTimestamp = ordered[ordered.length - 1].timestamp;
89
- const guidanceBlock = formatGuidanceBlock(ordered, { orderBySequence: sequenceBounded });
90
-
91
- return { messages: ordered, latestSequence, latestTimestamp, guidanceBlock };
92
48
  }
93
-
49
+ function collectQueuedGuidance({ messageBus, clusterId, agentId, afterId, throughId, lastDeliveredAt, limit, }) {
50
+ if (!messageBus) {
51
+ throw new Error('collectQueuedGuidance: messageBus is required');
52
+ }
53
+ if (!clusterId) {
54
+ throw new Error('collectQueuedGuidance: clusterId is required');
55
+ }
56
+ if (!agentId) {
57
+ throw new Error('collectQueuedGuidance: agentId is required');
58
+ }
59
+ const messages = messageBus.queryGuidanceMailbox({
60
+ cluster_id: clusterId,
61
+ target_agent_id: agentId,
62
+ afterId,
63
+ throughId,
64
+ lastDeliveredAt,
65
+ limit,
66
+ });
67
+ if (!messages.length) {
68
+ return emptyQueuedGuidance();
69
+ }
70
+ const sequenceBounded = afterId !== undefined || throughId !== undefined;
71
+ const ordered = orderGuidanceMessages(messages, sequenceBounded);
72
+ const latestMessage = ordered.at(-1);
73
+ if (!latestMessage) {
74
+ return emptyQueuedGuidance();
75
+ }
76
+ const latestSequence = latestMessage.sequence;
77
+ const latestTimestamp = latestMessage.timestamp;
78
+ const guidanceBlock = formatGuidanceBlock(ordered, { orderBySequence: sequenceBounded });
79
+ return { messages: ordered, latestSequence, latestTimestamp, guidanceBlock };
80
+ }
94
81
  module.exports = {
95
- GUIDANCE_BLOCK_START,
96
- GUIDANCE_BLOCK_END,
97
- formatGuidanceBlock,
98
- collectQueuedGuidance,
82
+ GUIDANCE_BLOCK_START,
83
+ GUIDANCE_BLOCK_END,
84
+ formatGuidanceBlock,
85
+ collectQueuedGuidance,
99
86
  };