pi-agent-flow 1.8.39 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +33 -37
  2. package/agents/audit.md +18 -22
  3. package/agents/build.md +20 -22
  4. package/agents/craft.md +20 -27
  5. package/agents/debug.md +21 -28
  6. package/agents/ideas.md +18 -101
  7. package/agents/scout.md +15 -19
  8. package/dist/batch/batch-bash.d.ts +2 -2
  9. package/dist/batch/batch-bash.d.ts.map +1 -1
  10. package/dist/batch/batch-bash.js +3 -3
  11. package/dist/batch/batch-bash.js.map +1 -1
  12. package/dist/batch/constants.d.ts +19 -5
  13. package/dist/batch/constants.d.ts.map +1 -1
  14. package/dist/batch/constants.js +4 -3
  15. package/dist/batch/constants.js.map +1 -1
  16. package/dist/batch/execute.d.ts +0 -1
  17. package/dist/batch/execute.d.ts.map +1 -1
  18. package/dist/batch/execute.js +101 -10
  19. package/dist/batch/execute.js.map +1 -1
  20. package/dist/batch/fuzzy-edit.d.ts +0 -6
  21. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  22. package/dist/batch/fuzzy-edit.js +1 -1
  23. package/dist/batch/fuzzy-edit.js.map +1 -1
  24. package/dist/batch/index.d.ts.map +1 -1
  25. package/dist/batch/index.js +87 -16
  26. package/dist/batch/index.js.map +1 -1
  27. package/dist/batch/render.d.ts +0 -1
  28. package/dist/batch/render.d.ts.map +1 -1
  29. package/dist/batch/render.js +7 -101
  30. package/dist/batch/render.js.map +1 -1
  31. package/dist/batch/summary.d.ts +5 -0
  32. package/dist/batch/summary.d.ts.map +1 -0
  33. package/dist/batch/summary.js +101 -0
  34. package/dist/batch/summary.js.map +1 -0
  35. package/dist/{config.d.ts → config/config.d.ts} +34 -2
  36. package/dist/config/config.d.ts.map +1 -0
  37. package/dist/{config.js → config/config.js} +157 -9
  38. package/dist/config/config.js.map +1 -0
  39. package/dist/config/log.d.ts +27 -0
  40. package/dist/config/log.d.ts.map +1 -0
  41. package/dist/config/log.js +104 -0
  42. package/dist/config/log.js.map +1 -0
  43. package/dist/{settings-resolver.d.ts → config/settings-resolver.d.ts} +9 -2
  44. package/dist/config/settings-resolver.d.ts.map +1 -0
  45. package/dist/config/settings-resolver.js +275 -0
  46. package/dist/config/settings-resolver.js.map +1 -0
  47. package/dist/core/agents.d.ts.map +1 -0
  48. package/dist/{agents.js → core/agents.js} +11 -10
  49. package/dist/core/agents.js.map +1 -0
  50. package/dist/core/delegation.d.ts +24 -0
  51. package/dist/core/delegation.d.ts.map +1 -0
  52. package/dist/core/delegation.js +55 -0
  53. package/dist/core/delegation.js.map +1 -0
  54. package/dist/core/depth.d.ts.map +1 -0
  55. package/dist/{depth.js → core/depth.js} +9 -8
  56. package/dist/core/depth.js.map +1 -0
  57. package/dist/{executor.d.ts → core/executor.d.ts} +13 -3
  58. package/dist/core/executor.d.ts.map +1 -0
  59. package/dist/{executor.js → core/executor.js} +79 -15
  60. package/dist/core/executor.js.map +1 -0
  61. package/dist/{flow.d.ts → core/flow.d.ts} +4 -1
  62. package/dist/core/flow.d.ts.map +1 -0
  63. package/dist/{flow.js → core/flow.js} +179 -25
  64. package/dist/core/flow.js.map +1 -0
  65. package/dist/{session-mode.d.ts → core/session-mode.d.ts} +2 -1
  66. package/dist/core/session-mode.d.ts.map +1 -0
  67. package/dist/{session-mode.js → core/session-mode.js} +1 -1
  68. package/dist/core/session-mode.js.map +1 -0
  69. package/dist/core/session-registry.d.ts +16 -0
  70. package/dist/core/session-registry.d.ts.map +1 -0
  71. package/dist/core/session-registry.js +30 -0
  72. package/dist/core/session-registry.js.map +1 -0
  73. package/dist/core/transitions.d.ts.map +1 -0
  74. package/dist/{transitions.js → core/transitions.js} +1 -1
  75. package/dist/core/transitions.js.map +1 -0
  76. package/dist/flow/command.d.ts +8 -0
  77. package/dist/flow/command.d.ts.map +1 -0
  78. package/dist/flow/command.js +189 -0
  79. package/dist/flow/command.js.map +1 -0
  80. package/dist/flow/continuation.d.ts +16 -0
  81. package/dist/flow/continuation.d.ts.map +1 -0
  82. package/dist/flow/continuation.js +151 -0
  83. package/dist/flow/continuation.js.map +1 -0
  84. package/dist/flow/index.d.ts +15 -0
  85. package/dist/flow/index.d.ts.map +1 -0
  86. package/dist/flow/index.js +22 -0
  87. package/dist/flow/index.js.map +1 -0
  88. package/dist/flow/settings-command.d.ts +51 -0
  89. package/dist/flow/settings-command.d.ts.map +1 -0
  90. package/dist/flow/settings-command.js +851 -0
  91. package/dist/flow/settings-command.js.map +1 -0
  92. package/dist/flow/store.d.ts +26 -0
  93. package/dist/flow/store.d.ts.map +1 -0
  94. package/dist/flow/store.js +158 -0
  95. package/dist/flow/store.js.map +1 -0
  96. package/dist/flow/template-strings.d.ts +8 -0
  97. package/dist/flow/template-strings.d.ts.map +1 -0
  98. package/dist/flow/template-strings.js +39 -0
  99. package/dist/flow/template-strings.js.map +1 -0
  100. package/dist/flow/types.d.ts +55 -0
  101. package/dist/flow/types.d.ts.map +1 -0
  102. package/dist/flow/types.js +5 -0
  103. package/dist/flow/types.js.map +1 -0
  104. package/dist/flow/warp-command.d.ts +9 -0
  105. package/dist/flow/warp-command.d.ts.map +1 -0
  106. package/dist/flow/warp-command.js +405 -0
  107. package/dist/flow/warp-command.js.map +1 -0
  108. package/dist/index.d.ts +3 -1
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +115 -32
  111. package/dist/index.js.map +1 -1
  112. package/dist/{notify-state.d.ts → notify/notify-state.d.ts} +2 -1
  113. package/dist/notify/notify-state.d.ts.map +1 -0
  114. package/dist/notify/notify-state.js.map +1 -0
  115. package/dist/notify/notify.d.ts.map +1 -0
  116. package/dist/{notify.js → notify/notify.js} +3 -2
  117. package/dist/notify/notify.js.map +1 -0
  118. package/dist/{cli-args.d.ts → snapshot/cli-args.d.ts} +4 -2
  119. package/dist/snapshot/cli-args.d.ts.map +1 -0
  120. package/dist/{cli-args.js → snapshot/cli-args.js} +10 -1
  121. package/dist/snapshot/cli-args.js.map +1 -0
  122. package/dist/snapshot/index.d.ts +2 -0
  123. package/dist/snapshot/index.d.ts.map +1 -0
  124. package/dist/snapshot/index.js +2 -0
  125. package/dist/snapshot/index.js.map +1 -0
  126. package/dist/{reasoning-strip.d.ts → snapshot/reasoning-strip.d.ts} +0 -4
  127. package/dist/snapshot/reasoning-strip.d.ts.map +1 -0
  128. package/dist/{reasoning-strip.js → snapshot/reasoning-strip.js} +2 -2
  129. package/dist/snapshot/reasoning-strip.js.map +1 -0
  130. package/dist/{runner-events.d.ts → snapshot/runner-events.d.ts} +13 -1
  131. package/dist/snapshot/runner-events.d.ts.map +1 -0
  132. package/dist/{runner-events.js → snapshot/runner-events.js} +16 -4
  133. package/dist/snapshot/runner-events.js.map +1 -0
  134. package/dist/{snapshot.d.ts → snapshot/snapshot.d.ts} +29 -3
  135. package/dist/snapshot/snapshot.d.ts.map +1 -0
  136. package/dist/{snapshot.js → snapshot/snapshot.js} +347 -39
  137. package/dist/snapshot/snapshot.js.map +1 -0
  138. package/dist/{structured-output.d.ts → snapshot/structured-output.d.ts} +1 -1
  139. package/dist/snapshot/structured-output.d.ts.map +1 -0
  140. package/dist/{structured-output.js → snapshot/structured-output.js} +13 -0
  141. package/dist/snapshot/structured-output.js.map +1 -0
  142. package/dist/{flow-prompt.d.ts → steering/flow-prompt.d.ts} +2 -2
  143. package/dist/steering/flow-prompt.d.ts.map +1 -0
  144. package/dist/{flow-prompt.js → steering/flow-prompt.js} +3 -3
  145. package/dist/steering/flow-prompt.js.map +1 -0
  146. package/dist/{sliding-prompt.d.ts → steering/sliding-prompt.d.ts} +8 -7
  147. package/dist/steering/sliding-prompt.d.ts.map +1 -0
  148. package/dist/{sliding-prompt.js → steering/sliding-prompt.js} +15 -64
  149. package/dist/steering/sliding-prompt.js.map +1 -0
  150. package/dist/{tool-utils.d.ts → steering/tool-utils.d.ts} +1 -0
  151. package/dist/steering/tool-utils.d.ts.map +1 -0
  152. package/dist/{tool-utils.js → steering/tool-utils.js} +10 -3
  153. package/dist/steering/tool-utils.js.map +1 -0
  154. package/dist/{ask-user.d.ts → tools/ask-user.d.ts} +3 -15
  155. package/dist/tools/ask-user.d.ts.map +1 -0
  156. package/dist/tools/ask-user.js +778 -0
  157. package/dist/tools/ask-user.js.map +1 -0
  158. package/dist/{timed-bash.d.ts → tools/timed-bash.d.ts} +2 -7
  159. package/dist/tools/timed-bash.d.ts.map +1 -0
  160. package/dist/{timed-bash.js → tools/timed-bash.js} +2 -2
  161. package/dist/tools/timed-bash.js.map +1 -0
  162. package/dist/{web-tool.d.ts → tools/web-tool.d.ts} +1 -1
  163. package/dist/tools/web-tool.d.ts.map +1 -0
  164. package/dist/{web-tool.js → tools/web-tool.js} +8 -7
  165. package/dist/tools/web-tool.js.map +1 -0
  166. package/dist/tui/flow-colors.d.ts +55 -0
  167. package/dist/tui/flow-colors.d.ts.map +1 -0
  168. package/dist/tui/flow-colors.js +22 -0
  169. package/dist/tui/flow-colors.js.map +1 -0
  170. package/dist/{render-utils.d.ts → tui/render-utils.d.ts} +1 -1
  171. package/dist/tui/render-utils.d.ts.map +1 -0
  172. package/dist/{render-utils.js → tui/render-utils.js} +3 -3
  173. package/dist/tui/render-utils.js.map +1 -0
  174. package/dist/tui/render.d.ts +21 -0
  175. package/dist/tui/render.d.ts.map +1 -0
  176. package/dist/tui/render.js +813 -0
  177. package/dist/tui/render.js.map +1 -0
  178. package/dist/tui/scramble/algorithm.d.ts +7 -0
  179. package/dist/tui/scramble/algorithm.d.ts.map +1 -0
  180. package/dist/tui/scramble/algorithm.js +227 -0
  181. package/dist/tui/scramble/algorithm.js.map +1 -0
  182. package/dist/tui/scramble/constants.d.ts +99 -0
  183. package/dist/tui/scramble/constants.d.ts.map +1 -0
  184. package/dist/tui/scramble/constants.js +101 -0
  185. package/dist/tui/scramble/constants.js.map +1 -0
  186. package/dist/tui/scramble/index.d.ts +6 -0
  187. package/dist/tui/scramble/index.d.ts.map +1 -0
  188. package/dist/tui/scramble/index.js +6 -0
  189. package/dist/tui/scramble/index.js.map +1 -0
  190. package/dist/tui/scramble/manager.d.ts +48 -0
  191. package/dist/tui/scramble/manager.d.ts.map +1 -0
  192. package/dist/tui/scramble/manager.js +959 -0
  193. package/dist/tui/scramble/manager.js.map +1 -0
  194. package/dist/tui/scramble/utils.d.ts +18 -0
  195. package/dist/tui/scramble/utils.d.ts.map +1 -0
  196. package/dist/tui/scramble/utils.js +145 -0
  197. package/dist/tui/scramble/utils.js.map +1 -0
  198. package/dist/tui/single-select-layout.d.ts +17 -0
  199. package/dist/tui/single-select-layout.d.ts.map +1 -0
  200. package/dist/{single-select-layout.js → tui/single-select-layout.js} +8 -25
  201. package/dist/tui/single-select-layout.js.map +1 -0
  202. package/dist/types/flow.d.ts +110 -0
  203. package/dist/types/flow.d.ts.map +1 -0
  204. package/dist/{types.js → types/flow.js} +3 -54
  205. package/dist/types/flow.js.map +1 -0
  206. package/dist/types/index.d.ts +8 -0
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/types/index.js +7 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/types/output.d.ts +104 -0
  211. package/dist/types/output.d.ts.map +1 -0
  212. package/dist/types/output.js +5 -0
  213. package/dist/types/output.js.map +1 -0
  214. package/dist/types/ui.d.ts +24 -0
  215. package/dist/types/ui.d.ts.map +1 -0
  216. package/dist/types/ui.js +55 -0
  217. package/dist/types/ui.js.map +1 -0
  218. package/package.json +7 -4
  219. package/dist/agents.d.ts.map +0 -1
  220. package/dist/agents.js.map +0 -1
  221. package/dist/ask-user.d.ts.map +0 -1
  222. package/dist/ask-user.js +0 -1405
  223. package/dist/ask-user.js.map +0 -1
  224. package/dist/batch.d.ts +0 -12
  225. package/dist/batch.d.ts.map +0 -1
  226. package/dist/batch.js +0 -11
  227. package/dist/batch.js.map +0 -1
  228. package/dist/cli-args.d.ts.map +0 -1
  229. package/dist/cli-args.js.map +0 -1
  230. package/dist/config.d.ts.map +0 -1
  231. package/dist/config.js.map +0 -1
  232. package/dist/depth.d.ts.map +0 -1
  233. package/dist/depth.js.map +0 -1
  234. package/dist/executor.d.ts.map +0 -1
  235. package/dist/executor.js.map +0 -1
  236. package/dist/flow-prompt.d.ts.map +0 -1
  237. package/dist/flow-prompt.js.map +0 -1
  238. package/dist/flow.d.ts.map +0 -1
  239. package/dist/flow.js.map +0 -1
  240. package/dist/notify-state.d.ts.map +0 -1
  241. package/dist/notify-state.js.map +0 -1
  242. package/dist/notify.d.ts.map +0 -1
  243. package/dist/notify.js.map +0 -1
  244. package/dist/reasoning-strip.d.ts.map +0 -1
  245. package/dist/reasoning-strip.js.map +0 -1
  246. package/dist/render-utils.d.ts.map +0 -1
  247. package/dist/render-utils.js.map +0 -1
  248. package/dist/render.d.ts +0 -24
  249. package/dist/render.d.ts.map +0 -1
  250. package/dist/render.js +0 -592
  251. package/dist/render.js.map +0 -1
  252. package/dist/runner-events.d.ts.map +0 -1
  253. package/dist/runner-events.js.map +0 -1
  254. package/dist/scramble.d.ts +0 -171
  255. package/dist/scramble.d.ts.map +0 -1
  256. package/dist/scramble.js +0 -2261
  257. package/dist/scramble.js.map +0 -1
  258. package/dist/session-mode.d.ts.map +0 -1
  259. package/dist/session-mode.js.map +0 -1
  260. package/dist/settings-resolver.d.ts.map +0 -1
  261. package/dist/settings-resolver.js +0 -148
  262. package/dist/settings-resolver.js.map +0 -1
  263. package/dist/single-select-layout.d.ts +0 -20
  264. package/dist/single-select-layout.d.ts.map +0 -1
  265. package/dist/single-select-layout.js.map +0 -1
  266. package/dist/sliding-prompt.d.ts.map +0 -1
  267. package/dist/sliding-prompt.js.map +0 -1
  268. package/dist/snapshot.d.ts.map +0 -1
  269. package/dist/snapshot.js.map +0 -1
  270. package/dist/spec-mode.d.ts +0 -13
  271. package/dist/spec-mode.d.ts.map +0 -1
  272. package/dist/spec-mode.js +0 -90
  273. package/dist/spec-mode.js.map +0 -1
  274. package/dist/structured-output.d.ts.map +0 -1
  275. package/dist/structured-output.js.map +0 -1
  276. package/dist/timed-bash.d.ts.map +0 -1
  277. package/dist/timed-bash.js.map +0 -1
  278. package/dist/tool-utils.d.ts.map +0 -1
  279. package/dist/tool-utils.js.map +0 -1
  280. package/dist/transitions.d.ts.map +0 -1
  281. package/dist/transitions.js.map +0 -1
  282. package/dist/types.d.ts +0 -208
  283. package/dist/types.d.ts.map +0 -1
  284. package/dist/types.js.map +0 -1
  285. package/dist/web-tool.d.ts.map +0 -1
  286. package/dist/web-tool.js.map +0 -1
  287. /package/dist/{agents.d.ts → core/agents.d.ts} +0 -0
  288. /package/dist/{depth.d.ts → core/depth.d.ts} +0 -0
  289. /package/dist/{transitions.d.ts → core/transitions.d.ts} +0 -0
  290. /package/dist/{notify-state.js → notify/notify-state.js} +0 -0
  291. /package/dist/{notify.d.ts → notify/notify.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-events.js","sourceRoot":"","sources":["../../src/snapshot/runner-events.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,26 @@
1
+ /**
2
+ * Two JSONL protocols are used in this codebase:
3
+ *
4
+ * 1. Fork Snapshot Protocol (snapshot.ts):
5
+ * Types: session, model_change, thinking_level_change, system, message,
6
+ * compression-stats
7
+ * Purpose: Serialized session state passed to child flows via --session.
8
+ * Emitted by buildForkSessionSnapshotJsonl() and consumed by
9
+ * sanitizeForkSnapshot() before forking.
10
+ *
11
+ * 2. Streaming Stdout Protocol (runner-events.ts):
12
+ * Types: session, agent_start, turn_start, message_start, message_end,
13
+ * message_update
14
+ * Sub-events under message_update: thinking_start, thinking_delta, text_delta
15
+ * Purpose: Real-time events emitted by the pi process stdout during flow
16
+ * execution. Parsed by processFlowJsonLine().
17
+ */
1
18
  /**
2
19
  * Session snapshot building, sanitization, and tool result compression.
3
20
  *
4
21
  * Extracted from index.ts for single-responsibility and testability.
5
22
  */
6
- import { type CompressedFlowResult } from "./types.js";
23
+ import type { CompressedFlowResult } from "../types/output.js";
7
24
  export interface SessionSnapshotSource {
8
25
  getHeader: () => unknown;
9
26
  getBranch: () => unknown[];
@@ -12,7 +29,7 @@ export declare function buildForkSessionSnapshotJsonl(sessionManager: SessionSna
12
29
  /**
13
30
  * Render a compressed flow result as compact text for child context.
14
31
  */
15
- export declare function renderCompressedFlowResult(r: CompressedFlowResult): string;
32
+ export declare function renderCompressedFlowResult(r: CompressedFlowResult): string | undefined;
16
33
  /**
17
34
  * Compress tool results in a sanitized session snapshot.
18
35
  *
@@ -44,5 +61,14 @@ export declare function stripBatchReadToolCalls(snapshot: string): string;
44
61
  * sliding system prompts, assistant reasoning/thinking,
45
62
  * batch_read tool calls, and compress flow/batch_read tool results.
46
63
  */
47
- export declare function sanitizeForkSnapshot(snapshot: string | null, cache?: Map<string, CompressedFlowResult[]>): string | null;
64
+ export interface SanitizeForkSnapshotOptions {
65
+ forkedFrom?: string;
66
+ forkedAt?: string;
67
+ parentFlow?: string;
68
+ depth?: number;
69
+ }
70
+ export declare function sanitizeForkSnapshot(snapshot: string | null, cache?: Map<string, CompressedFlowResult[]>, options?: SanitizeForkSnapshotOptions): {
71
+ result: string | null;
72
+ passesApplied: string[];
73
+ };
48
74
  //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/snapshot/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAiB/D,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,OAAO,EAAE,CAAC;CAC3B;AAMD,wBAAgB,6BAA6B,CAC5C,cAAc,EAAE,qBAAqB,GACnC,MAAM,GAAG,IAAI,CA+Bf;AAMD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAqDtF;AAmND;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,GAAG,MAAM,CA4LxG;AAiBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,GAAG,MAAM,CAE5G;AAMD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsEhE;AAqDD;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAa,EACtD,OAAO,CAAC,EAAE,2BAA2B,GACnC;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAiSpD"}
@@ -1,11 +1,24 @@
1
1
  /**
2
- * Session snapshot building, sanitization, and tool result compression.
2
+ * Two JSONL protocols are used in this codebase:
3
3
  *
4
- * Extracted from index.ts for single-responsibility and testability.
4
+ * 1. Fork Snapshot Protocol (snapshot.ts):
5
+ * Types: session, model_change, thinking_level_change, system, message,
6
+ * compression-stats
7
+ * Purpose: Serialized session state passed to child flows via --session.
8
+ * Emitted by buildForkSessionSnapshotJsonl() and consumed by
9
+ * sanitizeForkSnapshot() before forking.
10
+ *
11
+ * 2. Streaming Stdout Protocol (runner-events.ts):
12
+ * Types: session, agent_start, turn_start, message_start, message_end,
13
+ * message_update
14
+ * Sub-events under message_update: thinking_start, thinking_delta, text_delta
15
+ * Purpose: Real-time events emitted by the pi process stdout during flow
16
+ * execution. Parsed by processFlowJsonLine().
5
17
  */
6
18
  import { stripReasoningFromAssistantMessage } from "./reasoning-strip.js";
7
- import { stripSteeringHintFromContent, stripSteeringHintText, contentContainsSteeringHintTag, isJsonEqual, } from "./sliding-prompt.js";
8
- import { stripStrategicHintsFromContent } from "./tool-utils.js";
19
+ import { stripSteeringHintFromContent, contentContainsSteeringHintTag, isJsonEqual, } from "../steering/sliding-prompt.js";
20
+ import { stripStrategicHintsFromContent } from "../steering/tool-utils.js";
21
+ import { logError } from "../config/log.js";
9
22
  // ---------------------------------------------------------------------------
10
23
  // Session snapshot serialization
11
24
  // ---------------------------------------------------------------------------
@@ -14,7 +27,25 @@ export function buildForkSessionSnapshotJsonl(sessionManager) {
14
27
  if (!header || typeof header !== "object")
15
28
  return null;
16
29
  const branchEntries = sessionManager.getBranch();
17
- const lines = [JSON.stringify(header)];
30
+ const lines = [];
31
+ // Emit session header once, unless getBranch() already includes it as the
32
+ // first entry (some session managers include the header in the branch).
33
+ const firstBranch = branchEntries[0];
34
+ const headerId = header?.id;
35
+ const firstId = firstBranch && typeof firstBranch === "object" ? firstBranch?.id : undefined;
36
+ const firstType = firstBranch && typeof firstBranch === "object" ? firstBranch?.type : undefined;
37
+ if (!firstBranch ||
38
+ typeof firstBranch !== "object" ||
39
+ (firstType !== "session" && firstType !== "header") ||
40
+ firstId !== headerId) {
41
+ lines.push(JSON.stringify(header));
42
+ }
43
+ // Emit system event so the JSONL is self-contained — parsers can reconstruct
44
+ // full context without needing the markdown section.
45
+ const systemPrompt = header.systemPrompt;
46
+ if (typeof systemPrompt === "string" && systemPrompt) {
47
+ lines.push(JSON.stringify({ type: "system", content: systemPrompt }));
48
+ }
18
49
  for (const entry of branchEntries)
19
50
  lines.push(JSON.stringify(entry));
20
51
  return `${lines.join("\n")}\n`;
@@ -27,21 +58,63 @@ export function buildForkSessionSnapshotJsonl(sessionManager) {
27
58
  */
28
59
  export function renderCompressedFlowResult(r) {
29
60
  const parts = [`[Flow: ${r.type} ${r.status}]`];
61
+ if (r.intent)
62
+ parts.push(`Intent: ${r.intent}`);
63
+ if (r.aim)
64
+ parts.push(`Aim: ${r.aim}`);
65
+ if (r.summary)
66
+ parts.push(`Summary: ${r.summary}`);
30
67
  if (r.files?.length) {
31
- const fileLines = r.files.map((f) => {
68
+ const fileLines = r.files
69
+ .map((f) => {
70
+ if (!f.path)
71
+ return undefined;
32
72
  const role = f.role ? ` (${f.role})` : "";
33
73
  const desc = f.description ? ` — ${f.description}` : "";
34
74
  return ` ${f.path}${role}${desc}`;
35
- });
75
+ })
76
+ .filter((line) => line !== undefined);
77
+ // Safety net: if >50% of file entries were invalid (no path), compression is
78
+ // producing garbage. Return undefined so caller falls back to truncated raw.
79
+ if (fileLines.length === 0 || fileLines.length < r.files.length / 2) {
80
+ return undefined;
81
+ }
36
82
  parts.push(`Files:\n${fileLines.join("\n")}`);
37
83
  }
84
+ if (r.actions?.length) {
85
+ const actionLines = r.actions.map((a) => {
86
+ const result = a.result ? ` → ${a.result}` : "";
87
+ const target = a.target ? ` (${a.target})` : "";
88
+ return ` [${a.type}] ${a.description}${target}${result}`;
89
+ });
90
+ parts.push(`Actions:\n${actionLines.join("\n")}`);
91
+ }
38
92
  if (r.commands?.length) {
39
93
  const cmdLines = r.commands.map((c) => ` ${c.tool ?? "cmd"}: ${c.command}`);
40
94
  parts.push(`Commands:\n${cmdLines.join("\n")}`);
41
95
  }
96
+ if (r.notDone?.length) {
97
+ const ndLines = r.notDone.map((n) => {
98
+ const reason = n.reason ? ` — ${n.reason}` : "";
99
+ return ` ${n.item}${reason}`;
100
+ });
101
+ parts.push(`Not done:\n${ndLines.join("\n")}`);
102
+ }
103
+ if (r.nextSteps?.length) {
104
+ parts.push(`Next steps:\n${r.nextSteps.map((s) => ` ${s}`).join("\n")}`);
105
+ }
106
+ if (r.reasoning?.length) {
107
+ parts.push(`Reasoning:\n${r.reasoning.map((s) => ` ${s}`).join("\n")}`);
108
+ }
109
+ if (r.notes?.length) {
110
+ parts.push(`Notes:\n${r.notes.map((s) => ` ${s}`).join("\n")}`);
111
+ }
42
112
  if (r.error)
43
113
  parts.push(`Error: ${r.error}`);
44
- return parts.join("\n");
114
+ const text = parts.join("\n");
115
+ if (text.includes("undefined"))
116
+ return undefined;
117
+ return text;
45
118
  }
46
119
  // ---------------------------------------------------------------------------
47
120
  // batch_read result compression
@@ -91,7 +164,7 @@ function logCompress(toolName, before, after) {
91
164
  if (!DEBUG_CONTEXT)
92
165
  return;
93
166
  const reduction = before > 0 ? ((1 - after / before) * 100).toFixed(0) : "0";
94
- console.error(`[context-compress] ${toolName}: ${before} → ${after} bytes (${reduction}% reduction)`);
167
+ logError(`[context-compress] ${toolName}: ${before} → ${after} bytes (${reduction}% reduction)`);
95
168
  }
96
169
  const KNOWN_SECTION_HEADERS = [
97
170
  /^--- (.+) \((\d+) lines\) ---$/,
@@ -354,18 +427,37 @@ export function compressToolResults(snapshot, cache) {
354
427
  if (toolName === "flow") {
355
428
  const compressed = cache.get(toolCallId);
356
429
  if (!compressed || compressed.length === 0) {
357
- result.push(line);
358
- continue;
430
+ // Cache miss (never populated or evicted) — do NOT pass megabytes of raw
431
+ // flow output verbatim into child context. Render a minimal placeholder.
432
+ originalText = extractToolResultText(entry) ?? "";
433
+ const rawContent = entry.message?.content;
434
+ const contentSize = rawContent
435
+ ? (typeof rawContent === "string" ? rawContent.length : JSON.stringify(rawContent).length)
436
+ : 0;
437
+ const size = originalText.length || contentSize || line.length;
438
+ rendered = `[flow] prior result · ${size} chars — full context unavailable (result not cached at this depth)`;
439
+ }
440
+ else {
441
+ const renderResults = compressed.map(renderCompressedFlowResult);
442
+ const hasAnyUndefined = renderResults.some(r => r === undefined);
443
+ if (hasAnyUndefined) {
444
+ // Safety net: compression produced garbage, fall back to truncated raw.
445
+ originalText = extractToolResultText(entry) ?? "";
446
+ const size = originalText.length;
447
+ rendered = size > 2000
448
+ ? originalText.slice(0, 2000) + "\n[truncated]"
449
+ : originalText;
450
+ }
451
+ else {
452
+ rendered = renderResults.filter((r) => r !== undefined).join("\n\n");
453
+ }
359
454
  }
360
- rendered = compressed.map(renderCompressedFlowResult).join("\n\n");
361
455
  }
362
- // --- Compress batch_read tool results ---
456
+ // Note: batch_read tool results are now compressed in stripBatchReadToolCalls
457
+ // before compressToolResults runs, so this branch is no longer needed.
458
+ // Kept as a no-op safety net for any edge cases.
363
459
  else if (toolName === "batch_read") {
364
- const args = toolCallIdToArgs.get(toolCallId);
365
- const paths = extractBatchReadPaths(args);
366
- rendered = paths.length > 0
367
- ? renderCompressedBatchReadResult(paths)
368
- : "[batch_read] result compressed";
460
+ rendered = undefined; // handled upstream
369
461
  }
370
462
  // --- Compress batch tool results (selective: keep bash, truncate reads) ---
371
463
  else if (toolName === "batch") {
@@ -386,11 +478,14 @@ export function compressToolResults(snapshot, cache) {
386
478
  }
387
479
  if (rendered !== undefined) {
388
480
  logCompress(toolName ?? "unknown", originalText.length || line.length, rendered.length);
481
+ // Strip the 'details' field which carries UI metadata that children don't need.
482
+ // This eliminates ~98% of payload bloat from flow tool results.
483
+ const { details, ...messageWithoutDetails } = entry.message;
389
484
  if (typeof entry.message.toolCallId === "string") {
390
485
  entry = {
391
486
  ...entry,
392
487
  message: {
393
- ...entry.message,
488
+ ...messageWithoutDetails,
394
489
  content: [{ type: "text", text: rendered }],
395
490
  },
396
491
  };
@@ -399,7 +494,7 @@ export function compressToolResults(snapshot, cache) {
399
494
  entry = {
400
495
  ...entry,
401
496
  message: {
402
- ...entry.message,
497
+ ...messageWithoutDetails,
403
498
  content: entry.message.content.map((part) => part.type === "toolResult" && part.toolCallId === toolCallId
404
499
  ? { ...part, content: rendered }
405
500
  : part),
@@ -525,20 +620,61 @@ export function stripBatchReadToolCalls(snapshot) {
525
620
  return `${result.join("\n")}\n`;
526
621
  }
527
622
  // ---------------------------------------------------------------------------
528
- // Snapshot sanitization
623
+ // Reparent orphans
529
624
  // ---------------------------------------------------------------------------
530
625
  /**
531
- * Sanitize a fork session snapshot JSONL to remove non-inheritable
532
- * artifacts before passing parent context to child flows:
533
- * sliding system prompts, assistant reasoning/thinking,
534
- * batch_read tool calls, and compress flow/batch_read tool results.
626
+ * Fix parentId references that point to messages which no longer exist.
627
+ * Call this after any pass that drops messages.
535
628
  */
536
- export function sanitizeForkSnapshot(snapshot, cache = new Map()) {
629
+ function reparentOrphans(snapshot) {
630
+ const lines = snapshot.trimEnd().split("\n");
631
+ const survivingIds = new Set();
632
+ for (const line of lines) {
633
+ try {
634
+ const entry = JSON.parse(line);
635
+ const id = entry?.message?.id ?? entry?.message?.messageId ?? entry?.id;
636
+ if (typeof id === "string" && id)
637
+ survivingIds.add(id);
638
+ const parentId = entry?.parentId ?? entry?.parentMessageId ?? entry?.message?.parentId ?? entry?.message?.parentMessageId;
639
+ if (typeof parentId === "string" && parentId && !(typeof id === "string" && id))
640
+ survivingIds.add(parentId);
641
+ }
642
+ catch { /* ignore */ }
643
+ }
644
+ for (let i = 0; i < lines.length; i++) {
645
+ try {
646
+ let entry = JSON.parse(lines[i]);
647
+ const entryParentId = entry.parentId ?? entry.parentMessageId;
648
+ const messageParentId = entry.message?.parentId ?? entry.message?.parentMessageId;
649
+ const parentId = entryParentId ?? messageParentId;
650
+ if (typeof parentId === "string" && parentId && !survivingIds.has(parentId)) {
651
+ let modified = false;
652
+ if (entry.parentId === parentId || entry.parentMessageId === parentId) {
653
+ const { parentId: _pid, parentMessageId: _pmid, ...restEntry } = entry;
654
+ entry = restEntry;
655
+ modified = true;
656
+ }
657
+ if (entry.message && (entry.message.parentId === parentId || entry.message.parentMessageId === parentId)) {
658
+ const { parentId: _pid, parentMessageId: _pmid, ...restMessage } = entry.message;
659
+ entry = { ...entry, message: restMessage };
660
+ modified = true;
661
+ }
662
+ if (modified) {
663
+ lines[i] = JSON.stringify(entry);
664
+ }
665
+ }
666
+ }
667
+ catch { /* ignore */ }
668
+ }
669
+ return `${lines.join("\n")}\n`;
670
+ }
671
+ export function sanitizeForkSnapshot(snapshot, cache = new Map(), options) {
537
672
  if (!snapshot)
538
- return snapshot;
673
+ return { result: snapshot, passesApplied: [] };
539
674
  const preBytes = snapshot.length;
540
675
  const lines = snapshot.trimEnd().split("\n");
541
676
  const sanitizedLines = [];
677
+ const subPasses = new Set();
542
678
  for (let i = 0; i < lines.length; i++) {
543
679
  const line = lines[i];
544
680
  let entry;
@@ -550,18 +686,76 @@ export function sanitizeForkSnapshot(snapshot, cache = new Map()) {
550
686
  continue;
551
687
  }
552
688
  let changed = false;
553
- // Strip sliding prompt from header systemPrompt (first line is header)
554
- if (i === 0 && entry && typeof entry === "object" && entry.systemPrompt && typeof entry.systemPrompt === "string") {
555
- const stripped = stripSteeringHintText(entry.systemPrompt);
556
- if (stripped !== entry.systemPrompt) {
557
- entry = { ...entry, systemPrompt: stripped };
689
+ // Header (first line): merge fork metadata and replace parent system prompt.
690
+ if (i === 0 && entry && typeof entry === "object") {
691
+ // Inject fork metadata so children know their lineage.
692
+ if (options && (options.forkedFrom || options.forkedAt || options.parentFlow || options.depth !== undefined)) {
693
+ entry = {
694
+ ...entry,
695
+ ...(options.forkedFrom !== undefined ? { forkedFrom: options.forkedFrom } : {}),
696
+ ...(options.forkedAt !== undefined ? { forkedAt: options.forkedAt } : {}),
697
+ ...(options.parentFlow !== undefined ? { parentFlow: options.parentFlow } : {}),
698
+ ...(options.depth !== undefined ? { depth: options.depth } : {}),
699
+ };
558
700
  changed = true;
701
+ subPasses.add("forkMetadataInjection");
702
+ }
703
+ // Replace the parent orchestrator system prompt with a brief note.
704
+ // Children receive their own directive in the <activation> block.
705
+ if (entry.systemPrompt && typeof entry.systemPrompt === "string") {
706
+ entry = { ...entry, systemPrompt: "[parent orchestrator system prompt stripped — child receives its own directive]" };
707
+ changed = true;
708
+ subPasses.add("stripSystemPrompt");
709
+ }
710
+ // Prevent child from inheriting parent's session identity.
711
+ // Rename id → parentId so lineage is preserved but the child
712
+ // generates its own session identifier.
713
+ if ('id' in entry) {
714
+ entry = { ...entry, parentId: entry.id };
715
+ delete entry.id;
716
+ changed = true;
717
+ subPasses.add('stripSessionId');
559
718
  }
560
719
  }
720
+ // Drop type: "system" entries — the parent orchestrator system prompt was already
721
+ // stripped from the header above. Standalone system events leak the full prompt.
722
+ // Children receive their own directive in the <activation> block.
723
+ if (entry?.type === "system") {
724
+ subPasses.add("dropSystemEvents");
725
+ continue;
726
+ }
727
+ // Drop custom_message entries — hidden orchestrator instructions (e.g.
728
+ // flow continuation hook messages with display:false) that children
729
+ // should never see.
730
+ if (entry?.type === "custom_message") {
731
+ subPasses.add("dropCustomMessages");
732
+ continue;
733
+ }
734
+ // Drop parent-specific configuration events; child receives its own
735
+ // model/tier via the <activation> block and CLI args.
736
+ if (entry?.type === "model_change" || entry?.type === "thinking_level_change") {
737
+ subPasses.add("dropConfigEvents");
738
+ continue;
739
+ }
740
+ // Defense-in-depth: drop entries with an explicit unknown type that do not
741
+ // belong in the fork snapshot protocol. Entries without a type field (e.g. bare
742
+ // session headers from getHeader) pass through unchanged.
743
+ if (entry?.type !== undefined &&
744
+ entry?.type !== "session" &&
745
+ entry?.type !== "message") {
746
+ subPasses.add("dropUnknownTypes");
747
+ continue;
748
+ }
749
+ // Drop malformed message entries that lack a message payload.
750
+ if (entry?.type === "message" && !entry.message) {
751
+ subPasses.add("dropMalformedMessages");
752
+ continue;
753
+ }
561
754
  // Drop sliding system prompt messages entirely.
562
755
  if (entry?.type === "message" &&
563
756
  entry.message?.role === "system" &&
564
757
  contentContainsSteeringHintTag(entry.message?.content)) {
758
+ subPasses.add("dropSlidingSystemPrompts");
565
759
  continue;
566
760
  }
567
761
  if (entry?.type === "message" && entry.message) {
@@ -570,11 +764,63 @@ export function sanitizeForkSnapshot(snapshot, cache = new Map()) {
570
764
  if (message.role === "toolResult") {
571
765
  message = { ...message, role: "tool" };
572
766
  changed = true;
767
+ subPasses.add("normalizeToolResultRole");
573
768
  }
574
- if (message.role === "assistant") {
769
+ // Strip reasoning/thinking from assistant messages.
770
+ // (Reasoning typically only appears in assistant messages, but we
771
+ // also check system/tool roles as a safety net for provider-specific
772
+ // formats. stripReasoningFromAssistantMessage is a no-op on non-assistant
773
+ // shapes, so calling it universally is safe.)
774
+ if (message.role === "assistant" || message.role === "system" || message.role === "tool") {
575
775
  const stripped = stripReasoningFromAssistantMessage(message);
576
776
  message = stripped.message;
577
- changed ||= stripped.changed;
777
+ if (stripped.changed) {
778
+ changed = true;
779
+ subPasses.add("stripReasoning");
780
+ }
781
+ }
782
+ // Strip inner `message.timestamp` — the outer event-level timestamp (ISO string)
783
+ // is sufficient for ordering. The inner epoch-ms timestamp is redundant.
784
+ if ("timestamp" in message) {
785
+ const { timestamp, ...restMessage } = message;
786
+ message = restMessage;
787
+ changed = true;
788
+ subPasses.add("stripTimestamps");
789
+ }
790
+ // Strip API metadata fields that children don't need (~5-7 KB per assistant message).
791
+ // IMPORTANT: keep `usage` (including `totalTokens`). The child `pi` process replays
792
+ // this JSONL and core/session code reads `message.usage.totalTokens`; stripping
793
+ // `usage` causes: Cannot read properties of undefined (reading 'totalTokens').
794
+ // Strip `cost` from `usage` — it's always zeros in forked context and children never need it.
795
+ if (message.role === "assistant") {
796
+ const { api, provider, model, stopReason, responseId, responseModel, usage, ...rest } = message;
797
+ let stripped = false;
798
+ if (api !== undefined || provider !== undefined || model !== undefined ||
799
+ stopReason !== undefined || responseId !== undefined || responseModel !== undefined) {
800
+ stripped = true;
801
+ }
802
+ // Strip cost sub-object from usage while preserving totalTokens and other fields.
803
+ let cleanedUsage = usage;
804
+ if (usage && typeof usage === "object" && "cost" in usage) {
805
+ const { cost, ...usageWithoutCost } = usage;
806
+ cleanedUsage = usageWithoutCost;
807
+ stripped = true;
808
+ }
809
+ if (stripped) {
810
+ message = { ...rest, ...(cleanedUsage !== undefined ? { usage: cleanedUsage } : {}) };
811
+ changed = true;
812
+ subPasses.add("stripApiMetadata");
813
+ }
814
+ }
815
+ // Strip `details` from tool/toolResult messages — carries FlowDetails UI metadata
816
+ // (mode, flowStyle, projectAgentsDir, results) that children never need.
817
+ if (message.role === "tool" || message.role === "toolResult") {
818
+ if ("details" in message) {
819
+ const { details, ...restMessage } = message;
820
+ message = restMessage;
821
+ changed = true;
822
+ subPasses.add("stripDetails");
823
+ }
578
824
  }
579
825
  if ("content" in message) {
580
826
  let modifiedContent = message.content;
@@ -583,6 +829,7 @@ export function sanitizeForkSnapshot(snapshot, cache = new Map()) {
583
829
  if (!isJsonEqual(afterSliding, modifiedContent)) {
584
830
  modifiedContent = afterSliding;
585
831
  changed = true;
832
+ subPasses.add("stripSteeringHints");
586
833
  }
587
834
  // Strip strategic hints from tool results
588
835
  if (message.role === "tool" || message.role === "toolResult") {
@@ -590,6 +837,47 @@ export function sanitizeForkSnapshot(snapshot, cache = new Map()) {
590
837
  if (!isJsonEqual(afterHints, modifiedContent)) {
591
838
  modifiedContent = afterHints;
592
839
  changed = true;
840
+ subPasses.add("stripStrategicHints");
841
+ }
842
+ }
843
+ // Compress parent activation prompts in nested snapshot JSONL
844
+ // (detect user messages containing <context-seal> at depth >= 2).
845
+ if (message.role === "user" && options?.depth !== undefined && options.depth >= 2) {
846
+ let hasParentActivation = false;
847
+ let previewText = "";
848
+ const parentActivationRegex = /<context-seal>[\s\S]*?<\/context-seal>/;
849
+ let fullText = "";
850
+ if (typeof modifiedContent === "string") {
851
+ fullText = modifiedContent;
852
+ }
853
+ else if (Array.isArray(modifiedContent)) {
854
+ fullText = modifiedContent
855
+ .filter((p) => p.type === "text" && typeof p.text === "string")
856
+ .map((p) => p.text)
857
+ .join("");
858
+ }
859
+ if (parentActivationRegex.test(fullText)) {
860
+ hasParentActivation = true;
861
+ // Extract mission content for preview; fall back to content after </context-seal>
862
+ const missionMatch = fullText.match(/<mission>([\s\S]*?)<\/mission>/);
863
+ if (missionMatch) {
864
+ previewText = missionMatch[1].trim().replace(/\s+/g, " ").slice(0, 200).trim();
865
+ }
866
+ else {
867
+ const afterSeal = fullText.split(/<\/context-seal>/).pop() ?? fullText;
868
+ previewText = afterSeal.trim().slice(0, 200).trim();
869
+ }
870
+ }
871
+ if (hasParentActivation) {
872
+ const compact = `[Parent flow activation stripped] Mission preview: ${previewText}`;
873
+ if (typeof modifiedContent === "string") {
874
+ modifiedContent = compact;
875
+ }
876
+ else {
877
+ modifiedContent = [{ type: "text", text: compact }];
878
+ }
879
+ changed = true;
880
+ subPasses.add("compressParentActivation");
593
881
  }
594
882
  }
595
883
  if (changed) {
@@ -603,18 +891,38 @@ export function sanitizeForkSnapshot(snapshot, cache = new Map()) {
603
891
  const outLine = changed ? JSON.stringify(entry) : line;
604
892
  sanitizedLines.push(outLine);
605
893
  }
894
+ const passesApplied = [];
606
895
  let sanitized = `${sanitizedLines.join("\n")}\n`;
896
+ passesApplied.push(...subPasses);
897
+ // Reparent orphaned parentIds after steering-hint messages were dropped.
898
+ sanitized = reparentOrphans(sanitized);
899
+ passesApplied.push("reparentOrphans");
607
900
  // Strip batch_read tool calls from assistant messages.
608
901
  // Children don't have batch_read in their active tools.
609
902
  sanitized = stripBatchReadToolCalls(sanitized);
610
- // Compress tool results (flow, batch_read, batch, web, ask_user).
903
+ passesApplied.push("stripBatchRead");
904
+ // Compress tool results (flow, batch, web, ask_user).
611
905
  sanitized = compressToolResults(sanitized, cache);
906
+ passesApplied.push("compressToolResults");
907
+ // Reparent again after stripBatchRead and compressToolResults may have
908
+ // dropped additional messages, leaving new orphaned parentIds.
909
+ sanitized = reparentOrphans(sanitized);
910
+ passesApplied.push("reparentOrphans");
612
911
  // Telemetry: measure total delta across sanitization, stripping, and compression.
912
+ const postBytes = sanitized.length;
913
+ const reduction = preBytes > 0 ? ((1 - postBytes / preBytes) * 100).toFixed(0) : "0";
613
914
  if (DEBUG_CONTEXT) {
614
- const postBytes = sanitized.length;
615
- const reduction = preBytes > 0 ? ((1 - postBytes / preBytes) * 100).toFixed(0) : "0";
616
- console.error(`[context-snapshot] pre: ${preBytes} → post: ${postBytes} bytes (${reduction}% reduction)`);
915
+ logError(`[context-snapshot] pre: ${preBytes} → post: ${postBytes} bytes (${reduction}% reduction)`);
617
916
  }
618
- return sanitized;
917
+ // Always emit compression-stats as a trailing metadata entry so the dump contains
918
+ // observability data regardless of DEBUG_CONTEXT setting.
919
+ sanitized = sanitized.trimEnd() + "\n" + JSON.stringify({
920
+ type: "compression-stats",
921
+ preBytes,
922
+ postBytes,
923
+ reductionPercent: Number(reduction),
924
+ passesApplied,
925
+ }) + "\n";
926
+ return { result: sanitized, passesApplied };
619
927
  }
620
928
  //# sourceMappingURL=snapshot.js.map