@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,228 @@
1
+ import {
2
+ expectDefined
3
+ } from "./chunk-PFZO3C6H.js";
4
+ import {
5
+ ERROR_CODES,
6
+ WrongStackError
7
+ } from "./chunk-25LSLC3G.js";
8
+
9
+ // src/extension/registry.ts
10
+ var ExtensionRegistry = class {
11
+ extensions = [];
12
+ promptContributors = [];
13
+ log;
14
+ setLogger(log) {
15
+ this.log = log;
16
+ }
17
+ /**
18
+ * Register a system prompt contributor. Returns an unregister function.
19
+ * Contributors are called on every system prompt build in registration
20
+ * order. Their output blocks are inserted after the core environment
21
+ * block, before the mode and plan blocks.
22
+ */
23
+ registerSystemPromptContributor(c) {
24
+ this.promptContributors.push(c);
25
+ return () => {
26
+ const idx = this.promptContributors.indexOf(c);
27
+ if (idx >= 0) this.promptContributors.splice(idx, 1);
28
+ };
29
+ }
30
+ /**
31
+ * Build all registered system prompt contributions.
32
+ * Failures are caught and logged — one bad contributor doesn't
33
+ * break the prompt assembly.
34
+ */
35
+ async buildSystemPromptContributions(ctx) {
36
+ const blocks = [];
37
+ const snapshot = [...this.promptContributors];
38
+ for (const c of snapshot) {
39
+ try {
40
+ const contributed = await c(ctx);
41
+ blocks.push(...contributed);
42
+ } catch (err) {
43
+ this.log?.error("SystemPromptContributor failed", err);
44
+ }
45
+ }
46
+ return blocks;
47
+ }
48
+ /**
49
+ * Returns the live array of contributors (readonly snapshot for
50
+ * passing to DefaultSystemPromptBuilder at build time).
51
+ */
52
+ listSystemPromptContributors() {
53
+ return this.promptContributors;
54
+ }
55
+ /**
56
+ * Register an extension. Duplicate names are rejected.
57
+ * Returns an unregister function.
58
+ */
59
+ register(ext) {
60
+ if (this.extensions.some((e) => e.name === ext.name)) {
61
+ throw new WrongStackError({
62
+ message: `Extension "${ext.name}" already registered`,
63
+ code: ERROR_CODES.REGISTRY_DUPLICATE,
64
+ subsystem: "container",
65
+ context: { extension: ext.name }
66
+ });
67
+ }
68
+ this.extensions.push(ext);
69
+ return () => this.unregister(ext.name);
70
+ }
71
+ /**
72
+ * Register an extension, silently replacing any previous registration
73
+ * with the same name. Use this when overriding a default extension.
74
+ */
75
+ registerOrReplace(ext) {
76
+ const idx = this.extensions.findIndex((e) => e.name === ext.name);
77
+ if (idx >= 0) this.extensions.splice(idx, 1);
78
+ return this.register(ext);
79
+ }
80
+ /**
81
+ * Unregister an extension by name. Returns true if found.
82
+ */
83
+ unregister(name) {
84
+ const idx = this.extensions.findIndex((e) => e.name === name);
85
+ if (idx === -1) return false;
86
+ this.extensions.splice(idx, 1);
87
+ return true;
88
+ }
89
+ /**
90
+ * List registered extension names in order.
91
+ */
92
+ list() {
93
+ return this.extensions.map((e) => e.name);
94
+ }
95
+ /**
96
+ * Check if an extension with the given name is registered.
97
+ */
98
+ has(name) {
99
+ return this.extensions.some((e) => e.name === name);
100
+ }
101
+ /**
102
+ * Remove all registered extensions and contributors.
103
+ */
104
+ clear() {
105
+ this.extensions.length = 0;
106
+ this.promptContributors.length = 0;
107
+ }
108
+ // ── Hook runners ─────────────────────────────────────────────────
109
+ async runBeforeRun(...args) {
110
+ const snapshot = [...this.extensions];
111
+ for (const ext of snapshot) {
112
+ if (!ext.beforeRun) continue;
113
+ try {
114
+ await ext.beforeRun(...args);
115
+ } catch (err) {
116
+ this.log?.error(`Extension "${ext.name}" beforeRun hook failed`, err);
117
+ }
118
+ }
119
+ }
120
+ async runAfterRun(...args) {
121
+ const snapshot = [...this.extensions];
122
+ for (const ext of snapshot) {
123
+ if (!ext.afterRun) continue;
124
+ try {
125
+ await ext.afterRun(...args);
126
+ } catch (err) {
127
+ this.log?.error(`Extension "${ext.name}" afterRun hook failed`, err);
128
+ }
129
+ }
130
+ }
131
+ async runBeforeIteration(...args) {
132
+ const snapshot = [...this.extensions];
133
+ for (const ext of snapshot) {
134
+ if (!ext.beforeIteration) continue;
135
+ try {
136
+ await ext.beforeIteration(...args);
137
+ } catch (err) {
138
+ this.log?.error(`Extension "${ext.name}" beforeIteration hook failed`, err);
139
+ }
140
+ }
141
+ }
142
+ async runAfterIteration(...args) {
143
+ const snapshot = [...this.extensions];
144
+ for (const ext of snapshot) {
145
+ if (!ext.afterIteration) continue;
146
+ try {
147
+ await ext.afterIteration(...args);
148
+ } catch (err) {
149
+ this.log?.error(`Extension "${ext.name}" afterIteration hook failed`, err);
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * Run onError hooks in order. The first hook that returns a non-void
155
+ * result wins; subsequent hooks are skipped.
156
+ */
157
+ async runOnError(...args) {
158
+ const snapshot = [...this.extensions];
159
+ for (const ext of snapshot) {
160
+ if (!ext.onError) continue;
161
+ try {
162
+ const result = await ext.onError(...args);
163
+ if (result) return result;
164
+ } catch (err) {
165
+ this.log?.error(`Extension "${ext.name}" onError hook failed`, err);
166
+ }
167
+ }
168
+ }
169
+ /**
170
+ * Build a composed provider runner. Extensions with `wrapProviderRunner`
171
+ * form a middleware-style chain: the innermost extension wraps the
172
+ * default runner, each subsequent wrapper wraps the previous.
173
+ *
174
+ * Utility calls may exclude agent-loop-only middleware (notably
175
+ * `fallback-model`) while retaining request-safety wrappers such as the
176
+ * prompt firewall. One-shot orchestration owns its provider and fallback
177
+ * route, so an agent-loop fallback wrapper cannot safely run against it.
178
+ */
179
+ wrapProviderRunner(inner, options) {
180
+ const excluded = new Set(options?.exclude);
181
+ const wrappers = this.extensions.filter((e) => e.wrapProviderRunner && !excluded.has(e.name)).map((e) => ({ name: e.name, wrap: expectDefined(e.wrapProviderRunner) }));
182
+ if (wrappers.length === 0) return inner;
183
+ let composed = inner;
184
+ for (let i = wrappers.length - 1; i >= 0; i--) {
185
+ const wrapper = wrappers[i];
186
+ if (!wrapper) continue;
187
+ const next = composed;
188
+ composed = async (ctx, req) => {
189
+ try {
190
+ return await wrapper.wrap(ctx, req, next);
191
+ } catch (err) {
192
+ this.log?.error(`Extension "${wrapper.name}" wrapProviderRunner failed`, err);
193
+ throw err;
194
+ }
195
+ };
196
+ }
197
+ return composed;
198
+ }
199
+ async runBeforeToolExecution(...args) {
200
+ let toolUses = args[1];
201
+ const snapshot = [...this.extensions];
202
+ for (const ext of snapshot) {
203
+ if (!ext.beforeToolExecution) continue;
204
+ try {
205
+ toolUses = await ext.beforeToolExecution(args[0], toolUses);
206
+ } catch (err) {
207
+ this.log?.error(`Extension "${ext.name}" beforeToolExecution hook failed`, err);
208
+ }
209
+ }
210
+ return toolUses;
211
+ }
212
+ async runAfterToolExecution(...args) {
213
+ const snapshot = [...this.extensions];
214
+ for (const ext of snapshot) {
215
+ if (!ext.afterToolExecution) continue;
216
+ try {
217
+ await ext.afterToolExecution(...args);
218
+ } catch (err) {
219
+ this.log?.error(`Extension "${ext.name}" afterToolExecution hook failed`, err);
220
+ }
221
+ }
222
+ }
223
+ };
224
+
225
+ export {
226
+ ExtensionRegistry
227
+ };
228
+ //# sourceMappingURL=chunk-MTL4O5YR.js.map
@@ -0,0 +1,102 @@
1
+ import {
2
+ expectDefined
3
+ } from "./chunk-PFZO3C6H.js";
4
+
5
+ // src/observability/redact-command.ts
6
+ var SENSITIVE_FLAG_PATTERNS = [
7
+ // --flag=value or --flag "value" (value captured up to next space or comma)
8
+ /--(?:token|password|passwd|pwd|secret|api[-_]?key|api[-_]?secret|auth|credential|private[-_]?key|access[-_]?key|github[-_]?token|gh[-_]?token|bearer|jwt|oauth|pin|pincode|passphrase|access[-_]?token)(?:[=\s,][^\s]*)?/gi,
9
+ // -t short flag (token): attached (-tVALUE), separated (-t VALUE), or -t=VALUE.
10
+ // The separator group is optional so the attached form (the common one) matches.
11
+ // (?<![-\w]) anchors to a token start so we don't match the `-t` inside `--token`.
12
+ // The value must be token-like (>= 8 chars) so ordinary combined flags such
13
+ // as `tar -tf` / `ssh -tt` are not eaten. Global flag: EVERY occurrence is
14
+ // redacted, not just the first. Synced with packages/tools _redact-command.ts.
15
+ /(?<![-\w])-t(?:[=\s]+)?[^\s,-]{8,}/g,
16
+ // -p|-password|-a (redis auth) short flags: attached + separated + =value.
17
+ // Same token-start anchor; over-redaction is an accepted tradeoff for a
18
+ // redaction function (false positive = cosmetic noise; false negative = leak).
19
+ /(?<![-\w])-(?:password|p|a)(?:[=\s]+)?[^\s,-]+/gi,
20
+ // env var–style secrets: TOKEN=x, API_KEY=y, etc.
21
+ /(?:TOKEN|API_KEY|API_SECRET|AUTH_TOKEN|GITHUB_TOKEN|GH_TOKEN|BEARER|JWT|OAUTH|CREDENTIAL|SECRET|PRIVATE_KEY|PASSWORD|PASSWD|PASSPHRASE)\s*[=:]\s*[^\s,]+/gi,
22
+ // Generic high-entropy look: base64 strings >32 chars or hex strings >32 digits — but only
23
+ // when preceded by a flag name (e.g. --github-token=EyJ...). Global flag so
24
+ // every such flag in the command line is redacted, not just the first.
25
+ /--\w*(?:token|key|secret|password|passwd|auth|credential)\w*[=\s,][A-Za-z0-9+/=]{32,}/g
26
+ ];
27
+ function redactCommand(cmd) {
28
+ let result = cmd;
29
+ for (const pattern of SENSITIVE_FLAG_PATTERNS) {
30
+ result = result.replace(pattern, (match) => {
31
+ const eq = match.indexOf("=");
32
+ const sp = match.search(/\s/);
33
+ const delim = eq !== -1 ? "=" : sp !== -1 ? match[sp] : null;
34
+ if (delim !== null) {
35
+ const flag = match.slice(0, match.indexOf(expectDefined(delim)) + 1);
36
+ return `${flag}[REDACTED]`;
37
+ }
38
+ if (match.startsWith("--")) {
39
+ return match;
40
+ }
41
+ return `${match.slice(0, 2)}[REDACTED]`;
42
+ });
43
+ }
44
+ return result;
45
+ }
46
+ var BARE_SENSITIVE_LONG_FLAG = /^--(?:token|password|passwd|pwd|secret|api[-_]?key|api[-_]?secret|auth|credential|private[-_]?key|access[-_]?key|github[-_]?token|gh[-_]?token|bearer|jwt|oauth|pin|pincode|passphrase|access[-_]?token)$/i;
47
+ var BARE_SENSITIVE_SHORT_FLAG = /^-(?:p|t|a)$/i;
48
+ function redactCommandArgs(command, args) {
49
+ const redactedCommand = redactCommand(command);
50
+ const redactedArgs = args.map((a) => redactCommand(a));
51
+ for (let i = 0; i < redactedArgs.length - 1; i++) {
52
+ const flag = redactedArgs[i];
53
+ const next = redactedArgs[i + 1];
54
+ if (flag === void 0 || next === void 0) continue;
55
+ const isBareSensitive = (BARE_SENSITIVE_LONG_FLAG.test(flag) || BARE_SENSITIVE_SHORT_FLAG.test(flag)) && !flag.includes("[REDACTED]");
56
+ if (isBareSensitive && !next.startsWith("-")) {
57
+ redactedArgs[i + 1] = "[REDACTED]";
58
+ }
59
+ }
60
+ return { command: redactedCommand, args: redactedArgs };
61
+ }
62
+
63
+ // src/observability/process-telemetry.ts
64
+ import { AsyncLocalStorage } from "node:async_hooks";
65
+ import { createHash } from "node:crypto";
66
+ var storage = new AsyncLocalStorage();
67
+ function runWithProcessTelemetry(context, run) {
68
+ return storage.run(context, run);
69
+ }
70
+ function emitProcessStarted(event) {
71
+ const { command, args } = redactCommandArgs(event.command, event.args);
72
+ emit("process.started", { ...event, command, args });
73
+ }
74
+ function emitProcessOutput(input) {
75
+ const bytes = Buffer.byteLength(input.chunk);
76
+ emit("process.output", {
77
+ ...input.pid !== void 0 ? { pid: input.pid } : {},
78
+ stream: input.stream,
79
+ bytes,
80
+ chunkHash: createHash("sha256").update(input.chunk).digest("hex"),
81
+ at: (/* @__PURE__ */ new Date()).toISOString()
82
+ });
83
+ }
84
+ function emitProcessCompleted(event) {
85
+ emit("process.completed", event);
86
+ }
87
+ function emit(name, event) {
88
+ const context = storage.getStore();
89
+ if (!context) return;
90
+ const { events, ...identity } = context;
91
+ events.emit(name, { ...identity, ...event });
92
+ }
93
+
94
+ export {
95
+ redactCommand,
96
+ redactCommandArgs,
97
+ runWithProcessTelemetry,
98
+ emitProcessStarted,
99
+ emitProcessOutput,
100
+ emitProcessCompleted
101
+ };
102
+ //# sourceMappingURL=chunk-NDBIPFNY.js.map