@wrongstack/core 0.313.0 → 0.316.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 (343) hide show
  1. package/dist/chronicle/index.js +84 -6391
  2. package/dist/chronicle/legacy-journal-import.d.ts +0 -6
  3. package/dist/chronicle/metrics-ingest.d.ts +14 -0
  4. package/dist/chronicle/metrics-schema.d.ts +10 -1
  5. package/dist/chronicle/metrics-store.d.ts +20 -2
  6. package/dist/chronicle/project-server.js +98 -4874
  7. package/dist/chronicle/sink.d.ts +13 -0
  8. package/dist/chronicle/sqlite-journal.d.ts +20 -2
  9. package/dist/chunk-25LSLC3G.js +334 -0
  10. package/dist/chunk-27QIURLN.js +1073 -0
  11. package/dist/chunk-2FK4WTFF.js +207 -0
  12. package/dist/chunk-2YU4WVBW.js +134 -0
  13. package/dist/chunk-3AGWVSS7.js +4608 -0
  14. package/dist/chunk-3BDV7RL3.js +211 -0
  15. package/dist/chunk-3ECENVHL.js +325 -0
  16. package/dist/chunk-3XPVB7BA.js +135 -0
  17. package/dist/chunk-45WI72ZB.js +16884 -0
  18. package/dist/chunk-4BMVPOHO.js +3748 -0
  19. package/dist/chunk-4I7HGVVA.js +363 -0
  20. package/dist/chunk-4LCZVJVF.js +317 -0
  21. package/dist/chunk-4SJNS7OB.js +217 -0
  22. package/dist/chunk-4VWO3ZXL.js +342 -0
  23. package/dist/chunk-57GEWK5X.js +26 -0
  24. package/dist/chunk-5BMIE7QG.js +46 -0
  25. package/dist/chunk-5S437PRC.js +50 -0
  26. package/dist/chunk-5XDUGTKN.js +511 -0
  27. package/dist/chunk-5YPSXQXM.js +1443 -0
  28. package/dist/chunk-6FHWXLPT.js +10 -0
  29. package/dist/chunk-6H5GEOET.js +2406 -0
  30. package/dist/chunk-6NWEVFEL.js +151 -0
  31. package/dist/chunk-AYW5YINX.js +58 -0
  32. package/dist/chunk-B4AMLZPB.js +9 -0
  33. package/dist/chunk-B7F4WVP4.js +65 -0
  34. package/dist/chunk-BJHVULHO.js +55 -0
  35. package/dist/chunk-BPBKKBUK.js +2085 -0
  36. package/dist/chunk-BYD345OX.js +589 -0
  37. package/dist/chunk-C27KDLOX.js +279 -0
  38. package/dist/chunk-CU546ESW.js +597 -0
  39. package/dist/chunk-DLHHXUAM.js +172 -0
  40. package/dist/chunk-DOTHQSJ2.js +429 -0
  41. package/dist/chunk-DYLPMV4Q.js +711 -0
  42. package/dist/chunk-EODDVJBM.js +82 -0
  43. package/dist/chunk-F3JWNST7.js +361 -0
  44. package/dist/chunk-FC2ZGRF3.js +140 -0
  45. package/dist/chunk-FCBTO76Z.js +5786 -0
  46. package/dist/chunk-FHZVFYSL.js +396 -0
  47. package/dist/chunk-FNXVT7HF.js +52 -0
  48. package/dist/chunk-FWNLEZYG.js +259 -0
  49. package/dist/chunk-FXQLIX3K.js +211 -0
  50. package/dist/chunk-G5S3S5ZN.js +38 -0
  51. package/dist/chunk-GDQ7CZRQ.js +116 -0
  52. package/dist/chunk-GJJGJB2R.js +1374 -0
  53. package/dist/chunk-GTCU6DZ3.js +1 -0
  54. package/dist/chunk-HA4ZYA6T.js +178 -0
  55. package/dist/chunk-HI3JGZR2.js +188 -0
  56. package/dist/chunk-HMLIGAU7.js +395 -0
  57. package/dist/chunk-HXKZ7OBQ.js +303 -0
  58. package/dist/chunk-I7DALG7J.js +292 -0
  59. package/dist/chunk-IRUTEHCE.js +960 -0
  60. package/dist/chunk-IYFBFX34.js +86 -0
  61. package/dist/chunk-J2WRWR37.js +1104 -0
  62. package/dist/chunk-JFPJ6LLQ.js +129 -0
  63. package/dist/chunk-JMULFFLN.js +9 -0
  64. package/dist/chunk-JO4MGB6Z.js +1264 -0
  65. package/dist/chunk-JVKB2TBL.js +48 -0
  66. package/dist/chunk-JX7VBZDK.js +31 -0
  67. package/dist/chunk-K6BXGITA.js +931 -0
  68. package/dist/chunk-KDQJCT2J.js +45 -0
  69. package/dist/chunk-KJ2ZTQSL.js +47 -0
  70. package/dist/chunk-KZMSZV32.js +187 -0
  71. package/dist/chunk-LA7CLDRW.js +129 -0
  72. package/dist/chunk-LHOA5DWA.js +28 -0
  73. package/dist/chunk-LSMMOS2Z.js +119 -0
  74. package/dist/chunk-LX5QWLBL.js +27 -0
  75. package/dist/chunk-LXWCMQNJ.js +789 -0
  76. package/dist/chunk-M27LIEKV.js +2829 -0
  77. package/dist/chunk-MJPHJRAL.js +663 -0
  78. package/dist/chunk-MTL4O5YR.js +228 -0
  79. package/dist/chunk-NDBIPFNY.js +102 -0
  80. package/dist/chunk-NEMIWEXC.js +1199 -0
  81. package/dist/chunk-NHJ75HXY.js +1 -0
  82. package/dist/chunk-NIOAGFPB.js +1510 -0
  83. package/dist/chunk-NS52ISWS.js +355 -0
  84. package/dist/chunk-NSOFPKGT.js +5352 -0
  85. package/dist/chunk-NVIZG63R.js +757 -0
  86. package/dist/chunk-O37BQ65S.js +21 -0
  87. package/dist/chunk-OOYZPOXM.js +308 -0
  88. package/dist/chunk-OSGLYW5J.js +28 -0
  89. package/dist/chunk-PFCMSSUF.js +1640 -0
  90. package/dist/chunk-PFZO3C6H.js +14 -0
  91. package/dist/chunk-PGRVXIMY.js +158 -0
  92. package/dist/chunk-PHH7LD45.js +113 -0
  93. package/dist/chunk-PISBFBJN.js +109 -0
  94. package/dist/chunk-POOOIWE5.js +9 -0
  95. package/dist/chunk-PQNS3U7Z.js +1240 -0
  96. package/dist/chunk-QSTSJOCK.js +402 -0
  97. package/dist/chunk-RFQMOKWK.js +282 -0
  98. package/dist/chunk-RJIZEJ42.js +30 -0
  99. package/dist/chunk-RTOTNK3P.js +484 -0
  100. package/dist/chunk-RXKSDUAU.js +1172 -0
  101. package/dist/chunk-S45JPKQN.js +3317 -0
  102. package/dist/chunk-SAFHACFA.js +152 -0
  103. package/dist/chunk-SQJVFEBV.js +41 -0
  104. package/dist/chunk-SVT4RNTR.js +49 -0
  105. package/dist/chunk-SWUFN7XM.js +43 -0
  106. package/dist/chunk-SXMVYC5H.js +174 -0
  107. package/dist/chunk-SZ6AYUIZ.js +23 -0
  108. package/dist/chunk-TBRL2RCC.js +9 -0
  109. package/dist/chunk-TCCHINEF.js +655 -0
  110. package/dist/chunk-THEGTRAG.js +316 -0
  111. package/dist/chunk-TR4LQE7L.js +2256 -0
  112. package/dist/chunk-TRT2HRWZ.js +18 -0
  113. package/dist/chunk-TWJMGXCI.js +900 -0
  114. package/dist/chunk-U45AXT5D.js +1023 -0
  115. package/dist/chunk-U4FWBSO3.js +509 -0
  116. package/dist/chunk-UBGDX6FI.js +147 -0
  117. package/dist/chunk-UJILKYES.js +75 -0
  118. package/dist/chunk-ULMAQV3T.js +234 -0
  119. package/dist/chunk-VVBP6KGT.js +9 -0
  120. package/dist/chunk-W5VITDM2.js +168 -0
  121. package/dist/chunk-WAHQVNWT.js +194 -0
  122. package/dist/chunk-WBPVKEEE.js +227 -0
  123. package/dist/chunk-WGGYRBXH.js +5434 -0
  124. package/dist/chunk-WLYKU45P.js +5770 -0
  125. package/dist/chunk-WP7BVANJ.js +53 -0
  126. package/dist/chunk-WQQON3SV.js +473 -0
  127. package/dist/chunk-WQTOVMGV.js +119 -0
  128. package/dist/chunk-XBDP4QPW.js +7 -0
  129. package/dist/chunk-XEBHSJLT.js +103 -0
  130. package/dist/chunk-XF4VUMKW.js +231 -0
  131. package/dist/chunk-XQ2ECNK3.js +1 -0
  132. package/dist/chunk-Y5YXDM7D.js +74 -0
  133. package/dist/chunk-YOPAUVU4.js +2588 -0
  134. package/dist/chunk-YPT4A46F.js +362 -0
  135. package/dist/chunk-YWXT3JNM.js +425 -0
  136. package/dist/chunk-YY6APYUM.js +49 -0
  137. package/dist/chunk-Z2IJUO45.js +691 -0
  138. package/dist/chunk-ZHZ2Y2DH.js +1643 -0
  139. package/dist/chunk-ZT7JNIGX.js +152 -0
  140. package/dist/coordination/agent-monitor.d.ts +9 -1
  141. package/dist/coordination/agent-subagent-runner.d.ts +1 -1
  142. package/dist/coordination/agents/agent-prompts.d.ts +8 -0
  143. package/dist/coordination/agents/index.d.ts +33 -1
  144. package/dist/coordination/agents/index.js +184 -6269
  145. package/dist/coordination/agents/phase3-wave1-platform.d.ts +1 -3
  146. package/dist/coordination/agents/phase3-wave2-meta.d.ts +1 -3
  147. package/dist/coordination/agents/phase8-wave3-products.d.ts +1 -3
  148. package/dist/coordination/agents/phase9-wave4-platform-meta.d.ts +1 -3
  149. package/dist/coordination/agents/project-agent-identity.d.ts +11 -11
  150. package/dist/coordination/agents/types.d.ts +13 -2
  151. package/dist/coordination/brain-monitor.d.ts +30 -7
  152. package/dist/coordination/collab-debug.d.ts +1 -1
  153. package/dist/coordination/collab-pause.d.ts +1 -1
  154. package/dist/coordination/delegate-tool.d.ts +7 -5
  155. package/dist/coordination/director-kanban-queue-helpers.d.ts +1 -0
  156. package/dist/coordination/director-options.d.ts +7 -0
  157. package/dist/coordination/director-spawn-model.d.ts +17 -0
  158. package/dist/coordination/director-tools.d.ts +2 -2
  159. package/dist/coordination/director.d.ts +12 -0
  160. package/dist/coordination/dispatcher.d.ts +8 -0
  161. package/dist/coordination/fleet-bus.d.ts +35 -4
  162. package/dist/coordination/fleet-supervisor.d.ts +10 -2
  163. package/dist/coordination/fleet.d.ts +16 -7
  164. package/dist/coordination/index.d.ts +4 -0
  165. package/dist/coordination/index.js +402 -34324
  166. package/dist/coordination/kanban-dispatch-port.d.ts +2 -2
  167. package/dist/coordination/mailbox-http-router.d.ts +4 -3
  168. package/dist/coordination/mailbox-http-validation.d.ts +1 -1
  169. package/dist/coordination/mailbox-project-server.js +48 -3276
  170. package/dist/coordination/mailbox-types.d.ts +24 -6
  171. package/dist/coordination/model-tier-leader.d.ts +122 -0
  172. package/dist/coordination/model-tier.d.ts +122 -0
  173. package/dist/coordination/multi-agent-coordinator.d.ts +24 -0
  174. package/dist/coordination/origin-session.d.ts +16 -0
  175. package/dist/coordination/provider-status-tracker.d.ts +41 -5
  176. package/dist/coordination/session-note-hub.d.ts +44 -0
  177. package/dist/coordination/session-note-tool.d.ts +10 -0
  178. package/dist/core/agent.d.ts +15 -2
  179. package/dist/core/context.d.ts +22 -3
  180. package/dist/core/index.d.ts +2 -0
  181. package/dist/core/index.js +239 -12360
  182. package/dist/core/model-ref.js +5 -23
  183. package/dist/core/provider-runner.d.ts +36 -1
  184. package/dist/core/request-conversation-binding.d.ts +37 -0
  185. package/dist/core/session-notes.d.ts +25 -0
  186. package/dist/core/system-prompt-builder.d.ts +11 -2
  187. package/dist/core/system-prompt-variants.d.ts +78 -0
  188. package/dist/design/index.js +50 -1087
  189. package/dist/execution/auto-compaction-middleware.d.ts +11 -0
  190. package/dist/execution/autonomy-brain.d.ts +2 -1
  191. package/dist/execution/autonomy-prompt-contributor.d.ts +7 -2
  192. package/dist/execution/compaction-core.d.ts +4 -4
  193. package/dist/execution/eternal-autonomy.d.ts +1 -1
  194. package/dist/execution/index.d.ts +1 -1
  195. package/dist/execution/index.js +1615 -21895
  196. package/dist/execution/model-runtime.d.ts +0 -7
  197. package/dist/execution/parallel-eternal-engine.d.ts +7 -7
  198. package/dist/execution/prompt-enhancer.js +16 -535
  199. package/dist/execution/retry-policy.d.ts +31 -1
  200. package/dist/extension/index.js +7 -311
  201. package/dist/goal/index.js +33 -3435
  202. package/dist/hooks/index.js +14 -1138
  203. package/dist/hq/index.js +114 -5139
  204. package/dist/hq/persistence/event-log.d.ts +0 -1
  205. package/dist/hq/persistence.d.ts +4 -4
  206. package/dist/hq/protocol.js +21 -668
  207. package/dist/hq/publisher.d.ts +2 -0
  208. package/dist/index.d.ts +14 -11
  209. package/dist/index.js +1502 -92655
  210. package/dist/infrastructure/index.d.ts +4 -4
  211. package/dist/infrastructure/index.js +504 -5230
  212. package/dist/infrastructure/token-counter.d.ts +9 -0
  213. package/dist/kernel/events/agent-events.d.ts +77 -3
  214. package/dist/kernel/events/brain-events.d.ts +12 -0
  215. package/dist/kernel/events/provider-events.d.ts +22 -1
  216. package/dist/kernel/events/session-events.d.ts +14 -0
  217. package/dist/kernel/events/tool-events.d.ts +13 -0
  218. package/dist/kernel/index.js +14 -992
  219. package/dist/mailbox-attach.d.ts +1 -1
  220. package/dist/models/index.js +41 -1117
  221. package/dist/notifications/index.js +3 -108
  222. package/dist/observability/event-bridge.d.ts +25 -5
  223. package/dist/observability/index.d.ts +9 -8
  224. package/dist/observability/index.js +477 -631
  225. package/dist/observability/tool-usage-source.d.ts +65 -0
  226. package/dist/plugin/index.d.ts +5 -0
  227. package/dist/plugin/index.js +600 -14835
  228. package/dist/plugins/auto-review-plugin.d.ts +3 -2
  229. package/dist/plugins/review-finding-commands.d.ts +0 -8
  230. package/dist/plugins/review-finding-store.js +22 -0
  231. package/dist/plugins/review-finding-types.js +19 -0
  232. package/dist/plugins/review-report-integration.js +21 -0
  233. package/dist/plugins/review-report-store.js +20 -0
  234. package/dist/plugins/review-report-types.js +13 -0
  235. package/dist/prompts/index.js +14 -948
  236. package/dist/registry/index.js +9 -822
  237. package/dist/registry/tool-registry.d.ts +59 -9
  238. package/dist/registry-7N4O3E7W.js +14 -0
  239. package/dist/replay/index.js +6 -84
  240. package/dist/security/capabilities.d.ts +6 -0
  241. package/dist/security/file-permissions.d.ts +1 -1
  242. package/dist/security/index.js +161 -2235
  243. package/dist/security/permission-policy.d.ts +12 -1
  244. package/dist/security/secret-scrubber.d.ts +15 -0
  245. package/dist/session-catalog/index.d.ts +1 -0
  246. package/dist/session-catalog/index.js +41 -2103
  247. package/dist/session-catalog/project-server.js +59 -1435
  248. package/dist/session-catalog/protocol.d.ts +32 -1
  249. package/dist/session-catalog/registry.d.ts +17 -1
  250. package/dist/session-catalog/session-agents.d.ts +56 -0
  251. package/dist/session-catalog/store-rebuild.d.ts +14 -0
  252. package/dist/session-catalog/store-schema.d.ts +26 -0
  253. package/dist/session-catalog/store.d.ts +27 -1
  254. package/dist/session-note-attach.d.ts +9 -0
  255. package/dist/skills/index.js +35 -1578
  256. package/dist/statusline/index.d.ts +43 -0
  257. package/dist/statusline/index.js +102 -0
  258. package/dist/storage/board-store-port.d.ts +2 -2
  259. package/dist/storage/config-loader/in-project-policy.d.ts +29 -0
  260. package/dist/storage/config-loader.d.ts +3 -2
  261. package/dist/storage/file-session-writer.d.ts +4 -2
  262. package/dist/storage/goal-coordination.d.ts +6 -1
  263. package/dist/storage/goal-kanban.d.ts +4 -1
  264. package/dist/storage/index.d.ts +12 -4
  265. package/dist/storage/index.js +198 -15601
  266. package/dist/storage/input-history-store.d.ts +2 -4
  267. package/dist/storage/memory-curator.d.ts +133 -0
  268. package/dist/storage/session-agent-attribution.d.ts +39 -0
  269. package/dist/storage/session-doctor.d.ts +109 -0
  270. package/dist/storage/session-event-bridge.d.ts +5 -7
  271. package/dist/storage/session-outcome.d.ts +42 -0
  272. package/dist/storage/session-recovery.d.ts +55 -0
  273. package/dist/storage/session-store/load-session-data.d.ts +11 -0
  274. package/dist/storage/session-store/prune-helpers.d.ts +1 -1
  275. package/dist/storage/session-store/resume-session.d.ts +0 -2
  276. package/dist/storage/session-store/types.d.ts +8 -0
  277. package/dist/storage/session-store.d.ts +3 -3
  278. package/dist/storage/session-summary-tracker.d.ts +8 -1
  279. package/dist/storage/session-write-buffer.d.ts +18 -0
  280. package/dist/storage/session-writer-truncate.d.ts +2 -0
  281. package/dist/tasking/index.js +10 -676
  282. package/dist/tools/fallback-manage-tools.d.ts +6 -4
  283. package/dist/tools/index.js +52 -9590
  284. package/dist/tools/model-tier-set-tool.d.ts +66 -0
  285. package/dist/types/agent-bridge.d.ts +2 -1
  286. package/dist/types/config/autonomy.d.ts +5 -0
  287. package/dist/types/config/mcp-features.d.ts +7 -0
  288. package/dist/types/config/model-tiers.d.ts +148 -0
  289. package/dist/types/config/root.d.ts +9 -0
  290. package/dist/types/config/tools.d.ts +73 -0
  291. package/dist/types/config/ui.d.ts +1 -1
  292. package/dist/types/config.d.ts +1 -0
  293. package/dist/types/context.d.ts +2 -0
  294. package/dist/types/default-config.d.ts +6 -0
  295. package/dist/types/errors.d.ts +20 -1
  296. package/dist/types/index.d.ts +11 -9
  297. package/dist/types/index.js +131 -1342
  298. package/dist/types/multi-agent.d.ts +43 -0
  299. package/dist/types/plugin.d.ts +1 -1
  300. package/dist/types/provider-runner.d.ts +8 -0
  301. package/dist/types/provider.d.ts +15 -0
  302. package/dist/types/runtime-capability-manifest.d.ts +1 -1
  303. package/dist/types/secret-scrubber.d.ts +15 -0
  304. package/dist/types/session-markers.d.ts +37 -10
  305. package/dist/types/session-markers.js +8 -144
  306. package/dist/types/session-timeline.d.ts +197 -0
  307. package/dist/types/session-timeline.js +12 -0
  308. package/dist/types/session.d.ts +172 -11
  309. package/dist/types/system-prompt.d.ts +27 -0
  310. package/dist/utils/config-backup.d.ts +9 -1
  311. package/dist/utils/error.js +3 -4
  312. package/dist/utils/expect-defined.js +3 -9
  313. package/dist/utils/heap-watchdog.js +6 -706
  314. package/dist/utils/index.js +271 -5685
  315. package/dist/utils/message-invariants.d.ts +4 -1
  316. package/dist/utils/regex-guard.d.ts +1 -1
  317. package/dist/utils/sage-output-block.js +5 -42
  318. package/dist/utils/socket-path.d.ts +1 -1
  319. package/dist/utils/token-estimate.d.ts +6 -2
  320. package/dist/utils/wstack-paths.d.ts +2 -0
  321. package/dist/wiring/proxy-rewrite.d.ts +46 -0
  322. package/dist/wiring/proxy-rewrite.js +24 -121
  323. package/dist/worktree/index.js +6 -887
  324. package/instructions/agents/explore-companion.md +45 -18
  325. package/instructions/agents/memory-curator.md +34 -22
  326. package/instructions/coordination/director-preamble.md +12 -7
  327. package/instructions/coordination/subagent-baseline.md +26 -5
  328. package/instructions/leader-after-task.md +4 -1
  329. package/instructions/llm/chimera-review.md +30 -9
  330. package/instructions/llm/memory-curator.md +31 -0
  331. package/instructions/sections/tool/delegation-compact.md +2 -0
  332. package/instructions/sections/tool/delegation-full.md +5 -1
  333. package/instructions/sections/tool/mailbox-compact.md +5 -1
  334. package/instructions/sections/tool/mailbox-full.md +3 -0
  335. package/instructions/sections/tool/session-note-compact.md +3 -0
  336. package/instructions/sections/tool/session-note-full.md +15 -0
  337. package/instructions/system-lite.md +9 -4
  338. package/instructions/system-pro.md +66 -143
  339. package/instructions/system.md +73 -175
  340. package/package.json +32 -4
  341. package/dist/coordination/agents.d.ts +0 -8
  342. package/dist/coordination/transport.d.ts +0 -2
  343. package/dist/storage/session-writer/session-writer-summary-tracker.d.ts +0 -28
@@ -0,0 +1,355 @@
1
+ import {
2
+ ERROR_CODES,
3
+ WrongStackError
4
+ } from "./chunk-25LSLC3G.js";
5
+ import {
6
+ toErrorMessage
7
+ } from "./chunk-TBRL2RCC.js";
8
+
9
+ // src/kernel/run-controller.ts
10
+ var RunController = class {
11
+ ctrl = new AbortController();
12
+ hooks = [];
13
+ disposed = false;
14
+ hooksDrained = false;
15
+ errorSink;
16
+ /**
17
+ * Shared promise for the in-flight `runHooks()` call. Set by the abort
18
+ * signal handler or by `dispose()`, whichever fires first. Both callers
19
+ * await the same promise so abort-triggered async cleanup (session flush,
20
+ * socket close) completes before `dispose()` resolves.
21
+ */
22
+ _hooksPromise = null;
23
+ constructor(opts = {}) {
24
+ this.errorSink = opts.errorSink ?? ((err, where) => {
25
+ console.warn(JSON.stringify({
26
+ level: "warn",
27
+ event: "run.cleanup_hook_failed",
28
+ where,
29
+ message: toErrorMessage(err),
30
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
31
+ }));
32
+ });
33
+ if (opts.parentSignal) {
34
+ const parent = opts.parentSignal;
35
+ if (parent.aborted) {
36
+ this.ctrl.abort(parent.reason);
37
+ queueMicrotask(() => {
38
+ void this.runHooks();
39
+ });
40
+ } else {
41
+ const onParentAbort = () => this.ctrl.abort(parent.reason);
42
+ parent.addEventListener("abort", onParentAbort, { once: true });
43
+ this.onAbort(() => parent.removeEventListener("abort", onParentAbort));
44
+ }
45
+ }
46
+ this.ctrl.signal.addEventListener(
47
+ "abort",
48
+ () => {
49
+ this.ensureHooksRun();
50
+ },
51
+ { once: true }
52
+ );
53
+ }
54
+ get signal() {
55
+ return this.ctrl.signal;
56
+ }
57
+ get aborted() {
58
+ return this.ctrl.signal.aborted;
59
+ }
60
+ abort(reason) {
61
+ if (this.ctrl.signal.aborted) return;
62
+ this.ctrl.abort(reason);
63
+ }
64
+ /**
65
+ * Register a teardown hook. Returns an unsubscribe function so callers
66
+ * can opt out before the hook fires (e.g. when a tool finishes cleanly
67
+ * before abort happens).
68
+ *
69
+ * If the controller has already drained its hooks (a prior abort() or
70
+ * dispose() ran), the new hook is fired immediately on a best-effort
71
+ * basis — otherwise a hook registered after teardown would be silently
72
+ * dropped and the resource it cleans up would leak. The returned
73
+ * unsubscribe is a no-op in that case (the hook has already run). Errors
74
+ * from the immediate run are routed through `errorSink` like any other
75
+ * cleanup failure.
76
+ */
77
+ onAbort(fn) {
78
+ if (this.hooksDrained) {
79
+ void (async () => {
80
+ try {
81
+ await fn();
82
+ } catch (err) {
83
+ this.errorSink(err, "RunController.onAbort(post-drain)");
84
+ }
85
+ })();
86
+ return () => {
87
+ };
88
+ }
89
+ this.hooks.push(fn);
90
+ return () => {
91
+ const idx = this.hooks.indexOf(fn);
92
+ if (idx !== -1) this.hooks.splice(idx, 1);
93
+ };
94
+ }
95
+ /**
96
+ * Fire cleanup hooks and tear down listeners — called when the run
97
+ * ends *normally* so cleanup happens regardless of outcome. Subsequent
98
+ * aborts become no-ops.
99
+ */
100
+ async dispose() {
101
+ if (this.disposed) return;
102
+ this.disposed = true;
103
+ await this.ensureHooksRun();
104
+ }
105
+ /**
106
+ * Start running hooks (or wait for an already-in-flight run) and return
107
+ * a promise that settles when all hooks complete. Both the abort signal
108
+ * handler and `dispose()` call this so they share the same underlying
109
+ * promise — abort-triggered async cleanup (session flush, socket close)
110
+ * is guaranteed to finish before `dispose()` resolves.
111
+ */
112
+ ensureHooksRun() {
113
+ if (!this._hooksPromise) {
114
+ this._hooksPromise = this.runHooks();
115
+ }
116
+ return this._hooksPromise;
117
+ }
118
+ async runHooks() {
119
+ if (this.hooksDrained) return;
120
+ this.hooksDrained = true;
121
+ const snapshot = this.hooks.splice(0, this.hooks.length).reverse();
122
+ if (snapshot.length === 0) return;
123
+ await Promise.allSettled(
124
+ snapshot.map(
125
+ (hook) => Promise.resolve().then(() => hook()).catch((err) => {
126
+ this.errorSink(err, "RunController.dispose");
127
+ })
128
+ )
129
+ );
130
+ }
131
+ };
132
+
133
+ // src/kernel/tokens.ts
134
+ var t = (name) => /* @__PURE__ */ Symbol.for(`@wrongstack/core/kernel#${name}`);
135
+ var TOKENS = {
136
+ Logger: t("Logger"),
137
+ TokenCounter: t("TokenCounter"),
138
+ SessionStore: t("SessionStore"),
139
+ /**
140
+ * @deprecated Token name retained for compatibility.
141
+ * The resolved value IS a `MemoryPort`, NOT the legacy `MemoryStore` interface.
142
+ * Callers that cast or destructure as `MemoryStore` will lose `getCapability`,
143
+ * `health`, `dispose`, and the narrowed `withTraceId(): MemoryPort` return type.
144
+ * Port implementations are opaque — query optional features via `getCapability`.
145
+ * Use `TOKENS.MemoryPort` instead.
146
+ */
147
+ MemoryStore: t("MemoryStore"),
148
+ /** Production memory backend. Use instead of the deprecated `MemoryStore` token. */
149
+ MemoryPort: t("MemoryPort"),
150
+ PermissionPolicy: t("PermissionPolicy"),
151
+ Compactor: t("Compactor"),
152
+ PathResolver: t("PathResolver"),
153
+ ConfigLoader: t("ConfigLoader"),
154
+ ConfigStore: t("ConfigStore"),
155
+ FallbackProfileManager: t("FallbackProfileManager"),
156
+ /** Shared (provider, model) health tracker; fallback extensions read/write it. */
157
+ ProviderModelStatusTracker: t("ProviderModelStatusTracker"),
158
+ Renderer: t("Renderer"),
159
+ InputReader: t("InputReader"),
160
+ ErrorHandler: t("ErrorHandler"),
161
+ RetryPolicy: t("RetryPolicy"),
162
+ SkillLoader: t("SkillLoader"),
163
+ PromptLoader: t("PromptLoader"),
164
+ SystemPromptBuilder: t("SystemPromptBuilder"),
165
+ SecretScrubber: t("SecretScrubber"),
166
+ ModelsRegistry: t("ModelsRegistry"),
167
+ ModeStore: t("ModeStore"),
168
+ /** Replaces the entire provider call layer — retry, streaming, tracing. */
169
+ ProviderRunner: t("ProviderRunner"),
170
+ /** Optional git-worktree lifecycle manager (per-phase isolation in Goal). */
171
+ WorktreeManager: t("WorktreeManager"),
172
+ /** Optional global Brain arbiter for policy/decision escalation. */
173
+ BrainArbiter: t("BrainArbiter"),
174
+ /** Lifecycle hook registry (shell + in-process hooks). */
175
+ HookRegistry: t("HookRegistry")
176
+ };
177
+
178
+ // src/kernel/pipeline.ts
179
+ var Pipeline = class {
180
+ chain = [];
181
+ errorHandler;
182
+ /**
183
+ * Optional operational logger. When set, the `swallow` error-boundary path
184
+ * emits a structured warning so a swallowed middleware crash is never
185
+ * completely silent (P2 #7, before-release.md). Without a logger, the
186
+ * swallow path still works but the crash is invisible — host code should
187
+ * always wire one.
188
+ */
189
+ logger;
190
+ /**
191
+ * Install an error boundary. When a middleware throws or rejects, the
192
+ * handler is called and decides whether to swallow (continue with the
193
+ * pre-handler value) or rethrow. Without a handler, errors propagate.
194
+ *
195
+ * Wire one per pipeline at boot — the host CLI typically installs a
196
+ * single boundary that logs to the operational log and emits a
197
+ * `pipeline.error` event for /diag.
198
+ */
199
+ setErrorHandler(handler) {
200
+ this.errorHandler = handler;
201
+ return this;
202
+ }
203
+ /**
204
+ * Set the operational logger used by the swallow error-boundary path.
205
+ * Without this, a swallowed middleware crash is completely silent.
206
+ */
207
+ setLogger(logger) {
208
+ this.logger = logger;
209
+ return this;
210
+ }
211
+ use(mw) {
212
+ this.ensureUnique(mw.name);
213
+ this.chain.push(mw);
214
+ return this;
215
+ }
216
+ prepend(mw) {
217
+ this.ensureUnique(mw.name);
218
+ this.chain.unshift(mw);
219
+ return this;
220
+ }
221
+ /**
222
+ * Insert middleware at an explicit index. Out-of-range indices are clamped.
223
+ * Use this when insertBefore/insertAfter are insufficient (e.g. to place
224
+ * a middleware at a known position regardless of named targets).
225
+ */
226
+ insertAt(index, mw) {
227
+ this.ensureUnique(mw.name);
228
+ const idx = Math.max(0, Math.min(index, this.chain.length));
229
+ this.chain.splice(idx, 0, mw);
230
+ return this;
231
+ }
232
+ /**
233
+ * Insert mw immediately before the first occurrence of target.
234
+ * If called multiple times with the same target, each call inserts
235
+ * before the target's current position — so after insertBefore('B', X)
236
+ * then insertBefore('B', Y), the order is Y → X → B.
237
+ */
238
+ insertBefore(target, mw, opts) {
239
+ this.ensureUnique(mw.name);
240
+ const idx = this.indexOf(target, opts?.optional);
241
+ if (idx === -1) return this;
242
+ this.chain.splice(idx, 0, mw);
243
+ return this;
244
+ }
245
+ /**
246
+ * Insert mw immediately after the first occurrence of target.
247
+ * If called multiple times with the same target, each call inserts
248
+ * after the target's current position — so after insertAfter('B', X)
249
+ * then insertAfter('B', Y), the order is B → X → Y.
250
+ */
251
+ insertAfter(target, mw, opts) {
252
+ this.ensureUnique(mw.name);
253
+ const idx = this.indexOf(target, opts?.optional);
254
+ if (idx === -1) return this;
255
+ this.chain.splice(idx + 1, 0, mw);
256
+ return this;
257
+ }
258
+ replace(target, mw, opts) {
259
+ if (mw.name !== target) this.ensureUnique(mw.name);
260
+ const idx = this.indexOf(target, opts?.optional);
261
+ if (idx === -1) return this;
262
+ this.chain[idx] = mw;
263
+ return this;
264
+ }
265
+ remove(name, opts) {
266
+ const idx = this.indexOf(name, opts?.optional);
267
+ if (idx === -1) return this;
268
+ this.chain.splice(idx, 1);
269
+ return this;
270
+ }
271
+ list() {
272
+ return this.chain.map((m) => m.name);
273
+ }
274
+ size() {
275
+ return this.chain.length;
276
+ }
277
+ /** Return a read-only view suitable for passing to plugins. */
278
+ asReadonly() {
279
+ const self = this;
280
+ const view = Object.freeze({
281
+ get size() {
282
+ return self.chain.length;
283
+ },
284
+ list() {
285
+ return Object.freeze(self.chain.map((m) => m.name));
286
+ },
287
+ run(input) {
288
+ return self.run(input);
289
+ }
290
+ });
291
+ return view;
292
+ }
293
+ async run(input) {
294
+ let index = -1;
295
+ const chain = this.chain;
296
+ const errorHandler = this.errorHandler;
297
+ const dispatch = async (i, value) => {
298
+ if (i <= index) {
299
+ const offender = chain[index]?.name;
300
+ throw new WrongStackError({
301
+ message: `Pipeline: next() called multiple times in "${offender}"`,
302
+ code: ERROR_CODES.VALIDATION_ERROR,
303
+ subsystem: "container",
304
+ context: { middleware: offender }
305
+ });
306
+ }
307
+ index = i;
308
+ const mw = chain[i];
309
+ if (!mw) return value;
310
+ try {
311
+ return await mw.handler(value, (v) => dispatch(i + 1, v));
312
+ } catch (err) {
313
+ if (!errorHandler) throw err;
314
+ const policy = await errorHandler({ middleware: mw.name, owner: mw.owner, err });
315
+ if (policy === "rethrow") throw err;
316
+ this.logger?.warn("pipeline.error", {
317
+ middleware: mw.name,
318
+ owner: mw.owner,
319
+ error: err instanceof Error ? err.message : String(err)
320
+ });
321
+ return value;
322
+ }
323
+ };
324
+ return dispatch(0, input);
325
+ }
326
+ indexOf(name, optional = false) {
327
+ const idx = this.chain.findIndex((m) => m.name === name);
328
+ if (idx === -1 && !optional) {
329
+ throw new WrongStackError({
330
+ message: `Pipeline: middleware "${name}" not found`,
331
+ code: ERROR_CODES.REGISTRY_NOT_FOUND,
332
+ subsystem: "container",
333
+ context: { middleware: name }
334
+ });
335
+ }
336
+ return idx;
337
+ }
338
+ ensureUnique(name) {
339
+ if (this.chain.some((m) => m.name === name)) {
340
+ throw new WrongStackError({
341
+ message: `Pipeline: middleware "${name}" already registered`,
342
+ code: ERROR_CODES.REGISTRY_DUPLICATE,
343
+ subsystem: "container",
344
+ context: { middleware: name }
345
+ });
346
+ }
347
+ }
348
+ };
349
+
350
+ export {
351
+ RunController,
352
+ TOKENS,
353
+ Pipeline
354
+ };
355
+ //# sourceMappingURL=chunk-NS52ISWS.js.map