@the-open-engine/zeroshot 6.38.1 → 6.39.1

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 (383) hide show
  1. package/README.md +6 -0
  2. package/cli/event-copy.js +8 -7
  3. package/cli/event-copy.ts +12 -0
  4. package/cli/index.js +67 -48
  5. package/cli/json-export.js +61 -64
  6. package/cli/json-export.ts +112 -0
  7. package/cli/message-formatter-utils.js +68 -56
  8. package/cli/message-formatter-utils.ts +121 -0
  9. package/cli/message-formatters-normal.js +124 -259
  10. package/cli/message-formatters-normal.ts +250 -0
  11. package/cli/message-formatters-watch.js +81 -84
  12. package/cli/message-formatters-watch.ts +189 -0
  13. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  14. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  15. package/lib/cluster/generated/protocol.d.cts +8 -0
  16. package/lib/cluster/generated/protocol.d.mts +8 -0
  17. package/lib/cluster/generated/protocol.d.ts +8 -0
  18. package/lib/clusters-registry.d.ts +23 -0
  19. package/lib/clusters-registry.js +17 -29
  20. package/lib/completion.d.ts +12 -0
  21. package/lib/completion.js +84 -94
  22. package/lib/compose-utils.d.ts +32 -0
  23. package/lib/compose-utils.js +57 -72
  24. package/lib/detached-startup.d.ts +84 -0
  25. package/lib/detached-startup.js +232 -302
  26. package/lib/docker-config.d.ts +43 -0
  27. package/lib/docker-config.js +150 -325
  28. package/lib/docker-env-auth.d.ts +17 -0
  29. package/lib/docker-env-auth.js +75 -0
  30. package/lib/git-remote-utils.d.ts +48 -0
  31. package/lib/git-remote-utils.js +147 -213
  32. package/lib/id-detector.d.ts +15 -0
  33. package/lib/id-detector.js +37 -41
  34. package/lib/path-check.d.ts +30 -0
  35. package/lib/path-check.js +42 -45
  36. package/lib/process-liveness.d.ts +16 -0
  37. package/lib/process-liveness.js +19 -12
  38. package/lib/provider-credential-path.d.ts +16 -0
  39. package/lib/provider-credential-path.js +31 -29
  40. package/lib/provider-defaults.d.ts +30 -0
  41. package/lib/provider-defaults.js +47 -42
  42. package/lib/provider-detection.d.ts +11 -0
  43. package/lib/provider-detection.js +91 -54
  44. package/lib/provider-names.d.ts +38 -0
  45. package/lib/provider-names.js +56 -64
  46. package/lib/repo-settings.d.ts +28 -0
  47. package/lib/repo-settings.js +83 -59
  48. package/lib/run-mode.d.ts +21 -0
  49. package/lib/run-mode.js +21 -20
  50. package/lib/run-plan.d.ts +28 -0
  51. package/lib/run-plan.js +17 -16
  52. package/lib/settings/claude-auth.d.ts +35 -0
  53. package/lib/settings/claude-auth.js +30 -47
  54. package/lib/settings-defaults.d.ts +20 -0
  55. package/lib/settings-defaults.js +149 -0
  56. package/lib/settings-error.d.ts +7 -0
  57. package/lib/settings-error.js +8 -0
  58. package/lib/settings-issue-providers.d.ts +10 -0
  59. package/lib/settings-issue-providers.js +12 -0
  60. package/lib/settings-models.d.ts +22 -0
  61. package/lib/settings-models.js +93 -0
  62. package/lib/settings-storage.d.ts +23 -0
  63. package/lib/settings-storage.js +205 -0
  64. package/lib/settings-validation.d.ts +7 -0
  65. package/lib/settings-validation.js +182 -0
  66. package/lib/settings.d.ts +29 -0
  67. package/lib/settings.js +41 -736
  68. package/lib/setup-apply-types.d.ts +66 -0
  69. package/lib/setup-apply-types.js +2 -0
  70. package/lib/setup-apply.d.ts +39 -0
  71. package/lib/setup-apply.js +267 -264
  72. package/lib/setup-journal.d.ts +41 -0
  73. package/lib/setup-journal.js +119 -76
  74. package/lib/setup-plan-types.d.ts +102 -0
  75. package/lib/setup-plan-types.js +2 -0
  76. package/lib/setup-plan.d.ts +30 -0
  77. package/lib/setup-plan.js +300 -324
  78. package/lib/setup-undo.d.ts +44 -0
  79. package/lib/setup-undo.js +61 -74
  80. package/lib/start-cluster-config.d.ts +26 -0
  81. package/lib/start-cluster-config.js +56 -0
  82. package/lib/start-cluster-environment.d.ts +41 -0
  83. package/lib/start-cluster-environment.js +134 -0
  84. package/lib/start-cluster-run-options.d.ts +54 -0
  85. package/lib/start-cluster-run-options.js +148 -0
  86. package/lib/start-cluster.d.ts +64 -0
  87. package/lib/start-cluster.js +98 -454
  88. package/lib/stream-json-parser.d.ts +17 -0
  89. package/lib/stream-json-parser.js +51 -52
  90. package/npm-shrinkwrap.json +6 -8
  91. package/package.json +14 -8
  92. package/scripts/postinstall.js +27 -0
  93. package/scripts/rust-distribution.js +36 -45
  94. package/src/agent/agent-command-proofs-context.js +35 -45
  95. package/src/agent/agent-command-proofs-context.ts +87 -0
  96. package/src/agent/agent-config-settings.js +19 -0
  97. package/src/agent/agent-config-settings.ts +41 -0
  98. package/src/agent/agent-config.js +122 -231
  99. package/src/agent/agent-config.ts +285 -0
  100. package/src/agent/agent-context-builder.js +38 -273
  101. package/src/agent/agent-context-builder.ts +51 -0
  102. package/src/agent/agent-context-environment-sections.js +105 -0
  103. package/src/agent/agent-context-environment-sections.ts +134 -0
  104. package/src/agent/agent-context-packs.js +165 -0
  105. package/src/agent/agent-context-packs.ts +296 -0
  106. package/src/agent/agent-context-prompt-sections.js +100 -0
  107. package/src/agent/agent-context-prompt-sections.ts +148 -0
  108. package/src/agent/agent-context-sections.js +25 -334
  109. package/src/agent/agent-context-sections.ts +36 -0
  110. package/src/agent/agent-context-sources.js +96 -149
  111. package/src/agent/agent-context-sources.ts +253 -0
  112. package/src/agent/agent-context-types.js +2 -0
  113. package/src/agent/agent-context-types.ts +132 -0
  114. package/src/agent/agent-context-validation-sections.js +73 -0
  115. package/src/agent/agent-context-validation-sections.ts +129 -0
  116. package/src/agent/agent-input-injector.js +99 -118
  117. package/src/agent/agent-input-injector.ts +195 -0
  118. package/src/agent/agent-liveness-poll.js +74 -78
  119. package/src/agent/agent-liveness-poll.ts +163 -0
  120. package/src/agent/agent-quality-gate-schema.js +77 -86
  121. package/src/agent/agent-quality-gate-schema.ts +135 -0
  122. package/src/agent/agent-quality-gates-context.js +44 -50
  123. package/src/agent/agent-quality-gates-context.ts +91 -0
  124. package/src/agent/agent-stuck-detector.js +171 -239
  125. package/src/agent/agent-stuck-detector.ts +288 -0
  126. package/src/agent/agent-trigger-evaluator.js +29 -46
  127. package/src/agent/agent-trigger-evaluator.ts +98 -0
  128. package/src/agent/context-metrics.js +110 -141
  129. package/src/agent/context-metrics.ts +261 -0
  130. package/src/agent/context-pack-builder.js +72 -358
  131. package/src/agent/context-pack-builder.ts +105 -0
  132. package/src/agent/context-pack-core.js +70 -0
  133. package/src/agent/context-pack-core.ts +96 -0
  134. package/src/agent/context-pack-selection.js +119 -0
  135. package/src/agent/context-pack-selection.ts +187 -0
  136. package/src/agent/context-pack-truncation.js +139 -0
  137. package/src/agent/context-pack-truncation.ts +208 -0
  138. package/src/agent/context-pack-types.js +2 -0
  139. package/src/agent/context-pack-types.ts +98 -0
  140. package/src/agent/context-replay-policy.js +30 -39
  141. package/src/agent/context-replay-policy.ts +71 -0
  142. package/src/agent/critical-agent-policy.js +6 -10
  143. package/src/agent/critical-agent-policy.ts +20 -0
  144. package/src/agent/guidance-queue.js +74 -87
  145. package/src/agent/guidance-queue.ts +166 -0
  146. package/src/agent/output-extraction-error-detail.js +45 -0
  147. package/src/agent/output-extraction-error-detail.ts +49 -0
  148. package/src/agent/output-extraction-failures.js +125 -0
  149. package/src/agent/output-extraction-failures.ts +149 -0
  150. package/src/agent/output-extraction-json.js +234 -0
  151. package/src/agent/output-extraction-json.ts +235 -0
  152. package/src/agent/output-extraction-pi.js +124 -0
  153. package/src/agent/output-extraction-pi.ts +137 -0
  154. package/src/agent/output-extraction-types.js +2 -0
  155. package/src/agent/output-extraction-types.ts +49 -0
  156. package/src/agent/output-extraction.js +17 -617
  157. package/src/agent/output-extraction.ts +30 -0
  158. package/src/agent/output-reformatter-errors.js +83 -0
  159. package/src/agent/output-reformatter-errors.ts +106 -0
  160. package/src/agent/output-reformatter-types.js +2 -0
  161. package/src/agent/output-reformatter-types.ts +86 -0
  162. package/src/agent/output-reformatter.js +140 -185
  163. package/src/agent/output-reformatter.ts +238 -0
  164. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  165. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  166. package/src/agent/pi-terminal-lifecycle.js +186 -206
  167. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  168. package/src/agent/provider-control-plane.js +22 -21
  169. package/src/agent/provider-control-plane.ts +52 -0
  170. package/src/agent/provider-terminal-failure-types.js +2 -0
  171. package/src/agent/provider-terminal-failure-types.ts +60 -0
  172. package/src/agent/provider-terminal-failure.js +194 -191
  173. package/src/agent/provider-terminal-failure.ts +262 -0
  174. package/src/agent/rate-limit-backoff.js +31 -74
  175. package/src/agent/rate-limit-backoff.ts +71 -0
  176. package/src/agent/schema-utils.js +85 -125
  177. package/src/agent/schema-utils.ts +148 -0
  178. package/src/agent/structured-output-error.js +34 -33
  179. package/src/agent/structured-output-error.ts +105 -0
  180. package/src/agent/validation-platform.js +27 -27
  181. package/src/agent/validation-platform.ts +49 -0
  182. package/src/agents/git-pusher-template.js +17 -34
  183. package/src/attach/attach-client.js +232 -405
  184. package/src/attach/attach-client.ts +300 -0
  185. package/src/attach/attach-server-cleanup.js +43 -0
  186. package/src/attach/attach-server-cleanup.ts +39 -0
  187. package/src/attach/attach-server-clients.js +117 -0
  188. package/src/attach/attach-server-clients.ts +122 -0
  189. package/src/attach/attach-server-events.js +38 -0
  190. package/src/attach/attach-server-events.ts +36 -0
  191. package/src/attach/attach-server-pty.js +45 -0
  192. package/src/attach/attach-server-pty.ts +64 -0
  193. package/src/attach/attach-server-runtime.js +73 -0
  194. package/src/attach/attach-server-runtime.ts +62 -0
  195. package/src/attach/attach-server-socket.js +28 -0
  196. package/src/attach/attach-server-socket.ts +23 -0
  197. package/src/attach/attach-server-types.js +2 -0
  198. package/src/attach/attach-server-types.ts +82 -0
  199. package/src/attach/attach-server.js +106 -523
  200. package/src/attach/attach-server.ts +158 -0
  201. package/src/attach/index.js +18 -35
  202. package/src/attach/index.ts +18 -0
  203. package/src/attach/protocol.js +95 -184
  204. package/src/attach/protocol.ts +181 -0
  205. package/src/attach/ring-buffer.js +76 -102
  206. package/src/attach/ring-buffer.ts +109 -0
  207. package/src/attach/send-input.js +64 -75
  208. package/src/attach/send-input.ts +94 -0
  209. package/src/attach/socket-discovery.js +164 -218
  210. package/src/attach/socket-discovery.ts +230 -0
  211. package/src/attach/socket-paths.js +42 -61
  212. package/src/attach/socket-paths.ts +81 -0
  213. package/src/claude-credentials.js +51 -54
  214. package/src/claude-credentials.ts +89 -0
  215. package/src/cluster/generated/protocol-schema.ts +1 -1
  216. package/src/cluster/generated/protocol.ts +2 -1
  217. package/src/command-proofs.js +110 -141
  218. package/src/command-proofs.ts +216 -0
  219. package/src/config-router.js +81 -73
  220. package/src/config-router.ts +131 -0
  221. package/src/copy-containment.js +191 -0
  222. package/src/copy-containment.ts +259 -0
  223. package/src/copy-worker.js +53 -30
  224. package/src/copy-worker.ts +88 -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/isolation-manager.js +59 -20
  232. package/src/ledger-sequence.js +45 -48
  233. package/src/ledger-sequence.ts +63 -0
  234. package/src/legacy-lib/clusters-registry.ts +40 -0
  235. package/src/legacy-lib/completion.ts +148 -0
  236. package/src/legacy-lib/compose-utils.ts +102 -0
  237. package/src/legacy-lib/detached-startup.ts +451 -0
  238. package/src/legacy-lib/docker-config.ts +282 -0
  239. package/src/legacy-lib/docker-env-auth.ts +116 -0
  240. package/src/legacy-lib/git-remote-utils.ts +244 -0
  241. package/src/legacy-lib/id-detector.ts +57 -0
  242. package/src/legacy-lib/js-yaml.d.ts +3 -0
  243. package/src/legacy-lib/omelette.d.ts +15 -0
  244. package/src/legacy-lib/path-check.ts +89 -0
  245. package/src/legacy-lib/process-liveness.ts +36 -0
  246. package/src/legacy-lib/provider-credential-path.ts +57 -0
  247. package/src/legacy-lib/provider-defaults.ts +114 -0
  248. package/src/legacy-lib/provider-detection.ts +67 -0
  249. package/src/legacy-lib/provider-names.ts +126 -0
  250. package/src/legacy-lib/repo-settings.ts +88 -0
  251. package/src/legacy-lib/run-mode.ts +58 -0
  252. package/src/legacy-lib/run-plan.ts +49 -0
  253. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  254. package/src/legacy-lib/settings-defaults.ts +212 -0
  255. package/src/legacy-lib/settings-error.ts +8 -0
  256. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  257. package/src/legacy-lib/settings-models.ts +124 -0
  258. package/src/legacy-lib/settings-storage.ts +277 -0
  259. package/src/legacy-lib/settings-validation.ts +220 -0
  260. package/src/legacy-lib/settings.ts +87 -0
  261. package/src/legacy-lib/setup-apply-types.ts +70 -0
  262. package/src/legacy-lib/setup-apply.ts +456 -0
  263. package/src/legacy-lib/setup-journal.ts +185 -0
  264. package/src/legacy-lib/setup-plan-types.ts +96 -0
  265. package/src/legacy-lib/setup-plan.ts +500 -0
  266. package/src/legacy-lib/setup-undo.ts +142 -0
  267. package/src/legacy-lib/start-cluster-config.ts +124 -0
  268. package/src/legacy-lib/start-cluster-environment.ts +166 -0
  269. package/src/legacy-lib/start-cluster-run-options.ts +281 -0
  270. package/src/legacy-lib/start-cluster.ts +237 -0
  271. package/src/legacy-lib/stream-json-parser.ts +88 -0
  272. package/src/message-buffer.js +55 -71
  273. package/src/message-buffer.ts +107 -0
  274. package/src/message-bus-bridge.js +92 -133
  275. package/src/message-bus-bridge.ts +149 -0
  276. package/src/name-generator-shared.js +220 -0
  277. package/src/name-generator-shared.ts +231 -0
  278. package/src/name-generator.js +8 -217
  279. package/src/name-generator.ts +27 -0
  280. package/src/omp-blob-root.js +83 -64
  281. package/src/omp-blob-root.ts +116 -0
  282. package/src/omp-config-overlay.js +65 -38
  283. package/src/omp-config-overlay.ts +110 -0
  284. package/src/omp-execution-fingerprint.js +38 -43
  285. package/src/omp-execution-fingerprint.ts +92 -0
  286. package/src/omp-session-limits.js +10 -15
  287. package/src/omp-session-limits.ts +53 -0
  288. package/src/omp-session-partition.js +2 -2
  289. package/src/omp-session-verifier.js +1 -1
  290. package/src/orchestrator.js +32 -7
  291. package/src/pr-body-template.js +71 -0
  292. package/src/providers/anthropic/index.js +3 -1
  293. package/src/providers/anthropic/index.ts +13 -0
  294. package/src/providers/capabilities.js +19 -27
  295. package/src/providers/capabilities.ts +44 -0
  296. package/src/providers/google/index.js +3 -1
  297. package/src/providers/google/index.ts +13 -0
  298. package/src/providers/openai/index.js +3 -1
  299. package/src/providers/openai/index.ts +13 -0
  300. package/src/providers/opencode/index.js +3 -1
  301. package/src/providers/opencode/index.ts +13 -0
  302. package/src/quality-gates.js +67 -127
  303. package/src/quality-gates.ts +149 -0
  304. package/src/repo-settings-access.js +40 -0
  305. package/src/repo-settings-access.ts +64 -0
  306. package/src/schemas/sub-cluster.js +127 -183
  307. package/src/schemas/sub-cluster.ts +238 -0
  308. package/src/state-snapshot-normalization.js +224 -0
  309. package/src/state-snapshot-normalization.ts +222 -0
  310. package/src/state-snapshot.js +192 -359
  311. package/src/state-snapshot.ts +291 -0
  312. package/src/state-snapshotter.js +118 -130
  313. package/src/state-snapshotter.ts +167 -0
  314. package/src/sub-cluster-wrapper.js +4 -13
  315. package/src/task-run-model-args.js +87 -124
  316. package/src/task-run-model-args.ts +204 -0
  317. package/src/task-runner.js +5 -25
  318. package/src/task-runner.ts +28 -0
  319. package/src/task-startup-error.js +73 -58
  320. package/src/task-startup-error.ts +126 -0
  321. package/src/template-validation/consensus-gate-contracts.js +2 -0
  322. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  323. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  324. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  325. package/src/template-validation/consensus-gate-stage.js +34 -0
  326. package/src/template-validation/consensus-gate-stage.ts +56 -0
  327. package/src/template-validation/random-topology-contracts.js +2 -0
  328. package/src/template-validation/random-topology-contracts.ts +54 -0
  329. package/src/template-validation/random-topology-dispatch.js +25 -0
  330. package/src/template-validation/random-topology-dispatch.ts +33 -0
  331. package/src/template-validation/random-topology-message-loop.js +53 -0
  332. package/src/template-validation/random-topology-message-loop.ts +73 -0
  333. package/src/template-validation/random-topology-operations.js +79 -0
  334. package/src/template-validation/random-topology-operations.ts +101 -0
  335. package/src/template-validation/random-topology-runtime.js +25 -0
  336. package/src/template-validation/random-topology-runtime.ts +43 -0
  337. package/src/template-validation/random-topology-scenario.js +52 -0
  338. package/src/template-validation/random-topology-scenario.ts +57 -0
  339. package/src/template-validation/random-topology-schema.js +159 -0
  340. package/src/template-validation/random-topology-schema.ts +190 -0
  341. package/src/template-validation/random-topology-state.js +28 -0
  342. package/src/template-validation/random-topology-state.ts +30 -0
  343. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  344. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  345. package/src/template-validation/random-topology-trigger.js +75 -0
  346. package/src/template-validation/random-topology-trigger.ts +88 -0
  347. package/src/template-validation/report-formatter.js +40 -46
  348. package/src/template-validation/report-formatter.ts +101 -0
  349. package/src/template-validation/simulate-consensus-gates.js +111 -302
  350. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  351. package/src/template-validation/simulate-random-topology.js +26 -519
  352. package/src/template-validation/simulate-random-topology.ts +57 -0
  353. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  354. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  355. package/src/template-validation/simulation-agent-runtime.js +25 -0
  356. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  357. package/src/template-validation/simulation-agent.js +29 -0
  358. package/src/template-validation/simulation-agent.ts +73 -0
  359. package/src/template-validation/simulation-runtime.js +34 -0
  360. package/src/template-validation/simulation-runtime.ts +72 -0
  361. package/src/template-validation/two-stage-contracts.js +2 -0
  362. package/src/template-validation/two-stage-contracts.ts +41 -0
  363. package/src/template-validation/two-stage-inputs.js +21 -0
  364. package/src/template-validation/two-stage-inputs.ts +29 -0
  365. package/src/template-validation/two-stage-results.js +30 -0
  366. package/src/template-validation/two-stage-results.ts +40 -0
  367. package/src/template-validation/two-stage-scenario.js +86 -0
  368. package/src/template-validation/two-stage-scenario.ts +120 -0
  369. package/src/worktree-claude-config.js +182 -220
  370. package/src/worktree-claude-config.ts +272 -0
  371. package/src/worktree-tooling-env.js +103 -125
  372. package/src/worktree-tooling-env.ts +142 -0
  373. package/task-lib/completion.js +2 -3
  374. package/task-lib/completion.ts +9 -0
  375. package/task-lib/config.js +1 -4
  376. package/task-lib/config.ts +11 -0
  377. package/task-lib/name-generator.js +4 -226
  378. package/task-lib/name-generator.ts +11 -0
  379. package/task-lib/omp-session-cleanup.js +1 -1
  380. package/task-lib/omp-storage-root.js +8 -12
  381. package/task-lib/omp-storage-root.ts +62 -0
  382. package/task-lib/process-termination.js +143 -166
  383. 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
  };