@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
@@ -65,7 +65,28 @@ export interface SessionMetadata {
65
65
  * The only files that live inside the project tree are the committed
66
66
  * `.wrongstack/AGENTS.md` and `.wrongstack/skills/`.
67
67
  */
68
- export type SessionEvent = {
68
+ export type SessionEvent = SessionEventVariant & SessionEventAttribution;
69
+ /**
70
+ * Attribution stamped onto a journal event by the WRITER, never by the
71
+ * producer that built it.
72
+ *
73
+ * A leader's JSONL can carry events produced by its subagents: the
74
+ * parent-interleaved writer (`createParentSubagentSessionWriter`) forwards a
75
+ * subagent's appends into the leader's journal because that subagent has no
76
+ * journal of its own. Without a stamp those appends are indistinguishable
77
+ * from the leader's, so a transcript reader cannot say which agent ran which
78
+ * tool. `withAgentAttribution` sets this at the writer boundary — the one
79
+ * place that knows whose writer it is — so no emit site has to remember.
80
+ *
81
+ * Absent means "the session's own leader". Old journals have no stamp at all,
82
+ * which reads the same way and is correct: they predate subagent interleaving
83
+ * being attributable.
84
+ */
85
+ export interface SessionEventAttribution {
86
+ /** Subagent that produced this event; absent = the session's leader. */
87
+ agentId?: string | undefined;
88
+ }
89
+ type SessionEventVariant = {
69
90
  type: 'session_start';
70
91
  ts: string;
71
92
  id: string;
@@ -105,6 +126,21 @@ export type SessionEvent = {
105
126
  content: ContentBlock[];
106
127
  stopReason: string;
107
128
  usage: Usage;
129
+ /**
130
+ * Model that produced this response and billed this `usage`.
131
+ *
132
+ * Optional because logs written before this field existed omit it —
133
+ * never because a live writer may skip it. `usage` is the only place
134
+ * token counts are journaled, so without these two fields the journal
135
+ * cannot answer "which model burned these tokens": `session_start`
136
+ * records only the model the session OPENED with (a mid-session switch
137
+ * or a fallback rotation leaves it stale), and `llm_request` carries
138
+ * `model` but no provider. Readers must still tolerate `undefined` and
139
+ * fall back to the nearest preceding `llm_request` / `session_start`.
140
+ */
141
+ model?: string | undefined;
142
+ /** Provider id that served this response. See {@link model}. */
143
+ provider?: string | undefined;
108
144
  } | {
109
145
  type: 'tool_use';
110
146
  ts: string;
@@ -250,26 +286,121 @@ export type SessionEvent = {
250
286
  ts: string;
251
287
  agentId: string;
252
288
  role: string;
289
+ } | {
290
+ /**
291
+ * Binds a spawned agent to the transcript it writes into.
292
+ *
293
+ * Separate from `agent_spawned` because the two facts are learned in
294
+ * different places: the fleet layer emits `agent_spawned` once the
295
+ * coordinator hands back an id, while the writer is built one layer
296
+ * down in the subagent factory, which has no channel back to that emit
297
+ * site. Threading one would have changed five signatures for a fact
298
+ * that is naturally its own record — and would still be optional on
299
+ * `agent_spawned`, since an agent running on the parent-interleaved
300
+ * writer never gets a transcript of its own and emits no link at all.
301
+ *
302
+ * Readers join on `agentId` within the session.
303
+ */
304
+ type: 'agent_session_linked';
305
+ ts: string;
306
+ agentId: string;
307
+ /** The subagent journal's own session id. */
308
+ agentSessionId: string;
309
+ /**
310
+ * Absolute path of the subagent's JSONL at the time it was opened.
311
+ * Absent for in-memory writers (tests, ephemeral runs), which have a
312
+ * session id but no file.
313
+ */
314
+ transcriptPath?: string | undefined;
315
+ provider?: string | undefined;
316
+ model?: string | undefined;
317
+ /** Set when this agent was spawned by another agent, not the leader. */
318
+ parentAgentId?: string | undefined;
253
319
  } | {
254
320
  type: 'agent_stopped';
255
321
  ts: string;
256
322
  agentId: string;
323
+ /** Why the agent ended. Absent in journals written before this field. */
324
+ reason?: 'completed' | 'aborted' | 'failed' | 'evicted' | undefined;
325
+ /** This agent's own cumulative spend, when the stopper knows it. */
326
+ usage?: Usage | undefined;
257
327
  } | {
258
328
  type: 'agent_error';
259
329
  ts: string;
260
330
  agentId: string;
261
331
  error: string;
262
332
  } | {
263
- type: 'spec_parsed';
333
+ /**
334
+ * A `delegate` tool call handing work to a subagent.
335
+ *
336
+ * Distinct from `agent_spawned`, which records that an agent exists.
337
+ * This records that the LEADER stopped and waited on it, which is the
338
+ * thing the transcript shows: every surface renders a delegation line
339
+ * live (the TUI even suppresses the generic tool card in its favour),
340
+ * and none of it reached disk — so a resumed session showed a gap where
341
+ * minutes of delegated work had happened.
342
+ */
343
+ type: 'delegate_started';
344
+ ts: string;
345
+ /** Resolved roster role or free-form subagent name. */
346
+ target: string;
347
+ /** The instruction handed to the subagent. */
348
+ task: string;
349
+ subagentId?: string | undefined;
350
+ } | {
351
+ type: 'delegate_completed';
352
+ ts: string;
353
+ target: string;
354
+ task: string;
355
+ ok: boolean;
356
+ /** `success` | `timeout` | `host_timeout` | `stopped` | … */
357
+ status?: string | undefined;
358
+ /** One-line human summary, as the live surfaces render it. */
359
+ summary: string;
360
+ durationMs: number;
361
+ iterations: number;
362
+ toolCalls: number;
363
+ costUsd?: number | undefined;
364
+ subagentId?: string | undefined;
365
+ } | {
366
+ /**
367
+ * The loop detector acted on a repeating run.
368
+ *
369
+ * Only `action: 'cut'` is worth a record: a `steer` is an in-band nudge
370
+ * the model absorbs, while a cut ENDS the turn — and without this the
371
+ * run came back as a bare `max_iterations` with nothing saying why.
372
+ */
373
+ type: 'loop_detected';
264
374
  ts: string;
265
- specId: string;
266
- title: string;
267
- completeness: number;
375
+ /** Comma-separated tool names, or empty for a pure message loop. */
376
+ tools: string;
377
+ repeatCount: number;
378
+ iteration: number;
379
+ kind?: 'tool' | 'message' | 'mixed' | undefined;
380
+ action?: 'steer' | 'cut' | undefined;
268
381
  } | {
269
- type: 'spec_analyzed';
382
+ /**
383
+ * The active provider/model changed mid-session.
384
+ *
385
+ * `reason: 'fallback'` is the automatic switch after a provider failure;
386
+ * `'user'` is an explicit `/model` or UI change. Either way the rest of
387
+ * the transcript was produced by a different model than the one
388
+ * `session_start` names, and a reader with no record of the switch
389
+ * attributes it all to the first one.
390
+ */
391
+ type: 'model_switched';
270
392
  ts: string;
271
- specId: string;
272
- gaps: string[];
393
+ from?: {
394
+ providerId: string;
395
+ model: string;
396
+ } | undefined;
397
+ to: {
398
+ providerId: string;
399
+ model: string;
400
+ };
401
+ reason: 'fallback' | 'user';
402
+ /** HTTP status that triggered an automatic fallback, when there was one. */
403
+ status?: number | undefined;
273
404
  } | {
274
405
  type: 'skill_activated';
275
406
  ts: string;
@@ -530,7 +661,11 @@ export interface SessionData {
530
661
  * in flight (crash/interrupt). Computed during replay BEFORE adjacency
531
662
  * repair strips them. `resume()` surfaces this as an informational notice so
532
663
  * the user/model know work was interrupted; the tools are NOT re-executed.
533
- * Undefined for events-only loads (no message reconstruction).
664
+ *
665
+ * Only present when at least one call was left open: **absent means none**,
666
+ * never zero (see `load-session-data.ts`). It is also absent for
667
+ * events-only loads, which reconstruct no messages to count. Read it as
668
+ * `data.pendingToolUseCount ?? 0` rather than testing for `undefined`.
534
669
  */
535
670
  pendingToolUseCount?: number | undefined;
536
671
  /**
@@ -561,9 +696,28 @@ export interface ForkedSession {
561
696
  /** Available for checkpoint forks captured by workspace-CAS-aware writers. */
562
697
  workspaceCheckpoint?: WorkspaceCheckpointRef | undefined;
563
698
  }
699
+ /**
700
+ * Byte-level progress for a session JSONL load. `loadedBytes` counts raw
701
+ * source bytes consumed so far (newline-inclusive approximation) and
702
+ * `totalBytes` is the source file size at load start.
703
+ */
704
+ export interface SessionLoadProgress {
705
+ loadedBytes: number;
706
+ totalBytes: number;
707
+ }
564
708
  export interface SessionStore {
565
709
  create(meta: Omit<SessionMetadata, 'startedAt'>): Promise<SessionWriter>;
566
- load(id: string): Promise<SessionData>;
710
+ /**
711
+ * Read a session without claiming it for writing.
712
+ *
713
+ * `onLoadProgress` mirrors {@link SessionStore.resume} — the implementation
714
+ * has always accepted it, but the interface did not declare it, so the only
715
+ * caller that can stream progress for a read-only view (a resume falling
716
+ * back to showing the transcript it could not attach to) had to drop it and
717
+ * leave the user staring at a frozen screen for the length of a 131 MB
718
+ * parse. Implementations may ignore it.
719
+ */
720
+ load(id: string, onLoadProgress?: (progress: SessionLoadProgress) => void): Promise<SessionData>;
567
721
  /**
568
722
  * Open an existing session for append, returning both a writer that
569
723
  * continues writing to the same JSONL file and the replayed state
@@ -571,8 +725,12 @@ export interface SessionStore {
571
725
  * `session_resumed` marker is appended for audit. New writers may also
572
726
  * persist the exact conversation journal (`message_*` events); legacy logs
573
727
  * containing only user/assistant/tool events remain replayable.
728
+ *
729
+ * Optional `onLoadProgress` streams byte-level parse progress for large
730
+ * journals so callers can surface a live indicator; implementations may
731
+ * ignore it, and a warm load cache reports a single completed event.
574
732
  */
575
- resume(id: string): Promise<ResumedSession>;
733
+ resume(id: string, onLoadProgress?: (progress: SessionLoadProgress) => void): Promise<ResumedSession>;
576
734
  /**
577
735
  * Create a non-destructive child journal from a persisted parent boundary.
578
736
  * Parent file snapshots are intentionally not inherited as rewind authority;
@@ -654,6 +812,8 @@ export interface SessionStore {
654
812
  }
655
813
  export interface SessionWriter {
656
814
  readonly id: string;
815
+ /** Original session start timestamp, used by resumed surfaces to keep uptime stable. */
816
+ readonly startedAt?: string | undefined;
657
817
  /**
658
818
  * Session-level trace ID for correlating storage events with agent
659
819
  * iterations in observability pipelines. Generated once at Context
@@ -823,4 +983,5 @@ export interface SessionWriter {
823
983
  */
824
984
  clearInFlightMarker(reason: 'clean' | 'aborted' | 'recovered'): Promise<void>;
825
985
  }
986
+ export {};
826
987
  //# sourceMappingURL=session.d.ts.map
@@ -1,3 +1,4 @@
1
+ import type { SystemInstructionVariant } from '../core/instruction-bundle.js';
1
2
  import type { MailboxAgentStatus } from '../coordination/mailbox-types.js';
2
3
  import type { TextBlock } from './blocks.js';
3
4
  import type { Tool } from './tool.js';
@@ -32,6 +33,32 @@ export interface BuildContext {
32
33
  * linked Git worktrees in the same canonical project.
33
34
  */
34
35
  onlineAgents?: MailboxAgentStatus[] | undefined;
36
+ /**
37
+ * Identity variant for THIS build — `system.md`, `system-lite.md` or
38
+ * `system-pro.md`.
39
+ *
40
+ * The builder is one process-wide instance and used to take the variant once,
41
+ * at construction, from the boot config. With four conversations on one
42
+ * process that made the identity a property of the process: picking a lighter
43
+ * identity in one tab was either discarded on that tab's next turn (the
44
+ * pre-run prompt refresh rebuilt it from the boot variant) or applied to all
45
+ * of them. Passing it per build makes it a property of the conversation,
46
+ * which is what it always described.
47
+ *
48
+ * Omitted keeps the builder's configured default.
49
+ */
50
+ systemVariant?: SystemInstructionVariant | undefined;
51
+ /**
52
+ * Autonomy mode of THIS conversation.
53
+ *
54
+ * The ETERNAL AUTONOMY block is injected from a process-wide mode ref, which
55
+ * one tab could move for all of them — so switching a background tab to
56
+ * eternal put those instructions into every other conversation's prompt.
57
+ * Passing it per build makes the block follow the conversation that is
58
+ * actually in that mode. Omitted keeps the host's process-wide answer, which
59
+ * is the only one a CLI or TUI has.
60
+ */
61
+ autonomy?: string | undefined;
35
62
  }
36
63
  /**
37
64
  * Stability regions for the system prompt.
@@ -2,7 +2,7 @@
2
2
  * Minimal paths object needed for config backup — just the global root
3
3
  * from which we derive the backup history directory.
4
4
  */
5
- export interface ConfigBackupPaths {
5
+ interface ConfigBackupPaths {
6
6
  globalRoot: string;
7
7
  }
8
8
  /**
@@ -11,10 +11,18 @@ export interface ConfigBackupPaths {
11
11
  * recover from accidental changes. Backups are never cleaned up automatically.
12
12
  */
13
13
  export declare function configHistoryDir(globalRoot: string): string;
14
+ /**
15
+ * Derive a human-readable slug for a config file path relative to the
16
+ * ~/.wrongstack root. Examples:
17
+ * config.json → config
18
+ * profiles/default/config.json → profiles-default-config
19
+ */
20
+ export declare function configSlug(absolutePath: string, globalRoot: string): string;
14
21
  /**
15
22
  * Before overwriting a config file, save its current content to the
16
23
  * config-history directory with a timestamp. Best-effort: failures are
17
24
  * silently ignored so they never block the config write itself.
18
25
  */
19
26
  export declare function backupConfigFile(filePath: string, paths: ConfigBackupPaths): Promise<void>;
27
+ export {};
20
28
  //# sourceMappingURL=config-backup.d.ts.map
@@ -1,7 +1,6 @@
1
- // src/utils/error.ts
2
- function toErrorMessage(err) {
3
- return err instanceof Error ? err.message : String(err);
4
- }
1
+ import {
2
+ toErrorMessage
3
+ } from "../chunk-TBRL2RCC.js";
5
4
  export {
6
5
  toErrorMessage
7
6
  };
@@ -1,12 +1,6 @@
1
- // src/utils/expect-defined.ts
2
- function expectDefined(value, label) {
3
- if (value === null || value === void 0) {
4
- const err = new Error(label ? `Expected ${label} to be defined` : "Expected value to be defined");
5
- err.name = "ExpectDefinedError";
6
- throw err;
7
- }
8
- return value;
9
- }
1
+ import {
2
+ expectDefined
3
+ } from "../chunk-PFZO3C6H.js";
10
4
  export {
11
5
  expectDefined
12
6
  };