@royalcat/opencode-dcp-rc 4.0.0 → 4.0.2

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 (55) hide show
  1. package/README.md +21 -1
  2. package/dist/index.js +1402 -27
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/commands/stats.d.ts +3 -1
  5. package/dist/lib/commands/stats.d.ts.map +1 -1
  6. package/dist/lib/compress/rc.d.ts.map +1 -1
  7. package/dist/lib/compress/summary.d.ts +11 -1
  8. package/dist/lib/compress/summary.d.ts.map +1 -1
  9. package/dist/lib/compress/types.d.ts +10 -1
  10. package/dist/lib/compress/types.d.ts.map +1 -1
  11. package/dist/lib/compress/usage.d.ts +45 -0
  12. package/dist/lib/compress/usage.d.ts.map +1 -0
  13. package/dist/lib/config.d.ts +2 -0
  14. package/dist/lib/config.d.ts.map +1 -1
  15. package/dist/lib/prompts/context-limit-nudge.d.ts +1 -1
  16. package/dist/lib/prompts/context-limit-nudge.d.ts.map +1 -1
  17. package/dist/lib/prompts/extensions/system.d.ts +2 -2
  18. package/dist/lib/prompts/extensions/system.d.ts.map +1 -1
  19. package/dist/lib/prompts/iteration-nudge.d.ts +1 -1
  20. package/dist/lib/prompts/iteration-nudge.d.ts.map +1 -1
  21. package/dist/lib/prompts/turn-nudge.d.ts +1 -1
  22. package/dist/lib/prompts/turn-nudge.d.ts.map +1 -1
  23. package/dist/lib/state/persistence.d.ts +2 -0
  24. package/dist/lib/state/persistence.d.ts.map +1 -1
  25. package/dist/lib/state/state.d.ts.map +1 -1
  26. package/dist/lib/state/types.d.ts +3 -0
  27. package/dist/lib/state/types.d.ts.map +1 -1
  28. package/dist/lib/tui/dialogs.d.ts.map +1 -1
  29. package/dist/lib/v2/index.d.ts.map +1 -1
  30. package/dist/lib/v2/rpc.d.ts +20 -0
  31. package/dist/lib/v2/rpc.d.ts.map +1 -1
  32. package/dist/lib/v2/scrub.d.ts +94 -0
  33. package/dist/lib/v2/scrub.d.ts.map +1 -0
  34. package/dist/lib/v2/usage.d.ts +45 -0
  35. package/dist/lib/v2/usage.d.ts.map +1 -0
  36. package/lib/commands/stats.ts +21 -0
  37. package/lib/compress/rc.ts +43 -7
  38. package/lib/compress/summary.ts +28 -1
  39. package/lib/compress/types.ts +14 -1
  40. package/lib/compress/usage.ts +168 -0
  41. package/lib/config.ts +30 -0
  42. package/lib/prompts/context-limit-nudge.ts +2 -0
  43. package/lib/prompts/extensions/system.ts +4 -0
  44. package/lib/prompts/iteration-nudge.ts +2 -0
  45. package/lib/prompts/system.ts +1 -1
  46. package/lib/prompts/turn-nudge.ts +2 -0
  47. package/lib/state/persistence.ts +18 -2
  48. package/lib/state/state.ts +4 -0
  49. package/lib/state/types.ts +3 -0
  50. package/lib/tui/dialogs.tsx +24 -0
  51. package/lib/v2/index.ts +58 -5
  52. package/lib/v2/rpc.ts +12 -0
  53. package/lib/v2/scrub.ts +954 -0
  54. package/lib/v2/usage.ts +450 -0
  55. package/package.json +1 -1
@@ -5,6 +5,7 @@
5
5
  import type { Logger } from "../logger";
6
6
  import type { SessionState, WithParts } from "../state";
7
7
  import { type AggregatedStats } from "../state/persistence";
8
+ import { type CompressionUsageTotals } from "../compress/usage";
8
9
  export interface StatsCommandContext {
9
10
  client: any;
10
11
  state: SessionState;
@@ -12,7 +13,7 @@ export interface StatsCommandContext {
12
13
  sessionId: string;
13
14
  messages: WithParts[];
14
15
  }
15
- export declare function formatStatsMessage(sessionTokens: number, sessionSummaryTokens: number, sessionTools: number, sessionMessages: number, sessionDurationMs: number, allTime: AggregatedStats): string;
16
+ export declare function formatStatsMessage(sessionTokens: number, sessionSummaryTokens: number, sessionTools: number, sessionMessages: number, sessionDurationMs: number, sessionUsage: CompressionUsageTotals, allTime: AggregatedStats): string;
16
17
  export declare function handleStatsCommand(ctx: StatsCommandContext): Promise<void>;
17
18
  export declare function buildStatsReport(state: SessionState, logger: Logger): Promise<{
18
19
  sessionTokens: number;
@@ -20,6 +21,7 @@ export declare function buildStatsReport(state: SessionState, logger: Logger): P
20
21
  sessionTools: number;
21
22
  sessionMessages: number;
22
23
  sessionDurationMs: number;
24
+ sessionCompressionUsage: CompressionUsageTotals;
23
25
  allTime: AggregatedStats;
24
26
  }>;
25
27
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../lib/commands/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGvD,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAIhF,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;CACxB;AAED,wBAAgB,kBAAkB,CAC9B,aAAa,EAAE,MAAM,EACrB,oBAAoB,EAAE,MAAM,EAC5B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,eAAe,GACzB,MAAM,CAyBR;AAsCD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhF;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM;;;;;;;GAuCzE"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../lib/commands/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGvD,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEhF,OAAO,EAAmC,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAGhG,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;CACxB;AAED,wBAAgB,kBAAkB,CAC9B,aAAa,EAAE,MAAM,EACrB,oBAAoB,EAAE,MAAM,EAC5B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,sBAAsB,EACpC,OAAO,EAAE,eAAe,GACzB,MAAM,CAsCR;AAsCD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhF;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM;;;;;;;;GA0CzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"rc.d.ts","sourceRoot":"","sources":["../../../lib/compress/rc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAA;AAG/D,OAAO,EAAqD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AA4BjG,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,EAAE,CAAA;CAChB;AAuBD,UAAU,cAAc;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,cAAc,CAkChF;AAsGD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAuF9E"}
1
+ {"version":3,"file":"rc.d.ts","sourceRoot":"","sources":["../../../lib/compress/rc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAA;AAG/D,OAAO,EAAqD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAmCjG,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,EAAE,CAAA;CAChB;AAiCD,UAAU,cAAc;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,cAAc,CAkChF;AAsGD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CA4F9E"}
@@ -3,8 +3,18 @@ import { type IdFormat } from "../message-ids";
3
3
  /**
4
4
  * Marker embedded in the hidden summary prompt so the plugin can recognize its
5
5
  * own transient (`session.generate`) request and strip everything else from it.
6
+ * Requests carry a per-call suffix (`[[DCP-RC-SUMMARY:<callId>]]`) so captured
7
+ * provider usage can be attributed to a specific request.
6
8
  */
7
9
  export declare const RC_SUMMARY_MARKER = "[[DCP-RC-SUMMARY]]";
10
+ /** Prefix shared by the static marker and its per-call variant. */
11
+ export declare const RC_SUMMARY_MARKER_PREFIX = "[[DCP-RC-SUMMARY";
12
+ /** Marker line for a hidden summary request, optionally tagged with a call id. */
13
+ export declare function buildSummaryMarker(callId?: string): string;
14
+ /** True when the text contains a hidden summary marker, with or without a call id. */
15
+ export declare function hasSummaryMarker(text: string): boolean;
16
+ /** Extract the call id from a hidden summary marker, when present. */
17
+ export declare function extractSummaryCallId(text: string): string | undefined;
8
18
  export interface PriorSummary {
9
19
  /** Canonical block reference, e.g. `b2` or `@b2@`. */
10
20
  ref: string;
@@ -37,7 +47,7 @@ export declare function serializeMessageForSummary(message: WithParts, selector:
37
47
  * Build the hidden summarization prompt. The selected segments are embedded
38
48
  * verbatim so the transient request does not depend on any injected metadata.
39
49
  */
40
- export declare function buildSummaryPrompt(selectors: SummarySegment[], idFormat?: IdFormat): string;
50
+ export declare function buildSummaryPrompt(selectors: SummarySegment[], idFormat?: IdFormat, callId?: string): string;
41
51
  /**
42
52
  * Normalize a selector written in either ID format (`m0004` or ``) into the
43
53
  * session's canonical format. Returns null when the selector is malformed.
@@ -1 +1 @@
1
- {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../lib/compress/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAqD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEjG;;;GAGG;AACH,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AAErD,MAAM,WAAW,YAAY;IACzB,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC3B,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,YAAY,EAAE,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CAClB;AA+BD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiDvF;AAWD;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,cAAc,EAAE,EAC3B,QAAQ,GAAE,QAAgB,GAC3B,MAAM,CAiCR;AAOD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,QAAgB,GAAG,MAAM,GAAG,IAAI,CAsB9F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,GAAE,QAAgB,GAC3B,qBAAqB,CAoDvB"}
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../lib/compress/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAqD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEjG;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AACrD,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,qBAAqB,CAAA;AAM1D,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE;AAED,MAAM,WAAW,YAAY;IACzB,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC3B,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,YAAY,EAAE,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CAClB;AA+BD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiDvF;AAWD;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,cAAc,EAAE,EAC3B,QAAQ,GAAE,QAAgB,EAC1B,MAAM,CAAC,EAAE,MAAM,GAChB,MAAM,CAiCR;AAOD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,QAAgB,GAAG,MAAM,GAAG,IAAI,CAsB9F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,GAAE,QAAgB,GAC3B,qBAAqB,CAoDvB"}
@@ -2,6 +2,13 @@ import type { PluginConfig } from "../config";
2
2
  import type { Logger } from "../logger";
3
3
  import type { PromptStore } from "../prompts/store";
4
4
  import type { CompressionBlock, CompressionMode, SessionState, WithParts } from "../state";
5
+ import type { CompressionUsage } from "./usage";
6
+ /** Result of the hidden transient model call (OpenCode V2 `session.generate`). */
7
+ export interface GenerateSummaryResult {
8
+ text: string;
9
+ /** Provider usage when captured, otherwise a local estimate. */
10
+ usage?: CompressionUsage;
11
+ }
5
12
  export interface ToolContext {
6
13
  client: any;
7
14
  state: SessionState;
@@ -12,7 +19,9 @@ export interface ToolContext {
12
19
  generate: (input: {
13
20
  sessionID: string;
14
21
  prompt: string;
15
- }) => Promise<string>;
22
+ /** Per-request id embedded in the prompt marker for usage attribution. */
23
+ callId?: string;
24
+ }) => Promise<GenerateSummaryResult>;
16
25
  }
17
26
  export interface BoundaryReference {
18
27
  kind: "message" | "compressed-block";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/compress/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE1F,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;IACpB,oEAAoE;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC9E;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACvC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,iBAAiB,CAAA;IACjC,YAAY,EAAE,iBAAiB,CAAA;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACrC,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,yBAAyB,EAAE,MAAM,EAAE,CAAA;IACnC,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,eAAe,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/compress/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,gEAAgE;IAChE,KAAK,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;IACpB,oEAAoE;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,0EAA0E;QAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;KAClB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACvC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,iBAAiB,CAAA;IACjC,YAAY,EAAE,iBAAiB,CAAA;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACrC,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,yBAAyB,EAAE,MAAM,EAAE,CAAA;IACnC,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,eAAe,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACxB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Usage accounting for the hidden compression (summary) request.
3
+ *
4
+ * Provider-reported usage is preferred: OpenCode V2 generates the summary
5
+ * through `session.generate`, which does not surface token usage to the
6
+ * caller, so the numbers are captured by wrapping the resolved language
7
+ * model (`ctx.aisdk.hook("language")`) and reading the `finish` usage.
8
+ * When that path is unavailable, local tokenizer estimates are recorded
9
+ * instead so the plugin can still report an approximate cost.
10
+ */
11
+ export type CompressionUsageSource = "provider" | "estimated";
12
+ /** Usage of a single hidden compression request. */
13
+ export interface CompressionUsage {
14
+ inputTokens: number;
15
+ outputTokens: number;
16
+ cacheReadTokens: number;
17
+ cacheWriteTokens: number;
18
+ reasoningTokens: number;
19
+ source: CompressionUsageSource;
20
+ }
21
+ /** Aggregated usage of all hidden compression requests in a session. */
22
+ export interface CompressionUsageTotals {
23
+ calls: number;
24
+ providerCalls: number;
25
+ estimatedCalls: number;
26
+ inputTokens: number;
27
+ outputTokens: number;
28
+ cacheReadTokens: number;
29
+ cacheWriteTokens: number;
30
+ reasoningTokens: number;
31
+ }
32
+ export declare function emptyCompressionUsage(): CompressionUsageTotals;
33
+ /**
34
+ * Normalize AI SDK v3 usage (`{ inputTokens: { total, noCache, cacheRead,
35
+ * cacheWrite }, outputTokens: { total, text, reasoning } }`) into the plugin
36
+ * shape. Returns undefined when there is nothing usable to record.
37
+ */
38
+ export declare function normalizeProviderUsage(raw: unknown): CompressionUsage | undefined;
39
+ /** Local fallback when the provider did not report usage. */
40
+ export declare function estimatedCompressionUsage(inputTokens: number, outputTokens: number): CompressionUsage;
41
+ export declare function addCompressionUsage(totals: CompressionUsageTotals, usage: CompressionUsage): CompressionUsageTotals;
42
+ export declare function addCompressionUsageTotals(totals: CompressionUsageTotals, other: CompressionUsageTotals): CompressionUsageTotals;
43
+ /** Backward-compatible load of persisted totals. */
44
+ export declare function normalizeCompressionUsageTotals(value: unknown): CompressionUsageTotals;
45
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../lib/compress/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,WAAW,CAAA;AAE7D,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,sBAAsB,CAAA;CACjC;AAED,wEAAwE;AACxE,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,qBAAqB,IAAI,sBAAsB,CAW9D;AASD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CA0CjF;AAED,6DAA6D;AAC7D,wBAAgB,yBAAyB,CACrC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACrB,gBAAgB,CASlB;AAED,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,gBAAgB,GACxB,sBAAsB,CAWxB;AAED,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,sBAAsB,GAC9B,sBAAsB,CAWxB;AAED,oDAAoD;AACpD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAetF"}
@@ -32,6 +32,8 @@ export interface CompressConfig {
32
32
  protectedTools: string[];
33
33
  protectTags: boolean;
34
34
  protectUserMessages: boolean;
35
+ scrubModelOutput: boolean;
36
+ scrubMessageIds: boolean;
35
37
  }
36
38
  export interface Commands {
37
39
  enabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const CONTEXT_LIMIT_NUDGE = "<dcp-system-reminder>\nCRITICAL WARNING: MAX CONTEXT LIMIT REACHED\n\nYou are at or beyond the configured max context threshold. This is an emergency context-recovery moment.\n\nYou MUST use the `compress` tool now. Do not continue normal exploration until compression is handled.\n\nIf you are in the middle of a critical atomic operation, finish that atomic step first, then compress immediately.\n\nSELECTION PROCESS\nStart from older, resolved history and capture as much stale context as safely possible in one pass.\nAvoid the newest active working messages unless it is clearly closed.\n\nSUMMARY REQUIREMENTS\nYour summary MUST cover all essential details from the selected messages so work can continue.\nIf the compressed range includes user messages, preserve user intent exactly. Prefer direct quotes for short user messages to avoid semantic drift.\n</dcp-system-reminder>\n";
1
+ export declare const CONTEXT_LIMIT_NUDGE = "<dcp-system-reminder>\nCRITICAL WARNING: MAX CONTEXT LIMIT REACHED\n\nYou are at or beyond the configured max context threshold. This is an emergency context-recovery moment.\n\nYou MUST use the `compress` tool now. Do not continue normal exploration until compression is handled.\n\nIf you are in the middle of a critical atomic operation, finish that atomic step first, then compress immediately.\n\nSELECTION PROCESS\nStart from older, resolved history and capture as much stale context as safely possible in one pass.\nAvoid the newest active working messages unless it is clearly closed.\n\nSUMMARY REQUIREMENTS\nYour summary MUST cover all essential details from the selected messages so work can continue.\nIf the compressed range includes user messages, preserve user intent exactly. Prefer direct quotes for short user messages to avoid semantic drift.\n\nNever repeat or quote this reminder in your reply.\n</dcp-system-reminder>\n";
2
2
  //# sourceMappingURL=context-limit-nudge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-limit-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/context-limit-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,43BAiB/B,CAAA"}
1
+ {"version":3,"file":"context-limit-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/context-limit-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,k7BAmB/B,CAAA"}
@@ -1,4 +1,4 @@
1
- export declare const MANUAL_MODE_SYSTEM_EXTENSION = "<dcp-system-reminder>\nManual mode is enabled. Do NOT use compress unless the user has explicitly triggered it through a manual marker.\n\nOnly use the compress tool after seeing `<compress triggered manually>` in the current user instruction context.\n\nIssue exactly ONE compress tool per manual trigger. Do NOT launch multiple compress tools in parallel. Each trigger grants a single compression; after it completes, wait for the next trigger.\n\nAfter completing a manually triggered context-management action, STOP IMMEDIATELY. Do NOT continue with any task execution. End your response right after the tool use completes and wait for the next user input.\n</dcp-system-reminder>\n";
2
- export declare const SUBAGENT_SYSTEM_EXTENSION = "<dcp-system-reminder>\nYou are operating in a subagent environment.\n\nThe initial subagent instruction is imperative and must be followed exactly.\nIt is the only user message intentionally not assigned a message ID, and therefore is not eligible for compression.\nAll subsequent messages in the session will have IDs.\n</dcp-system-reminder>\n";
1
+ export declare const MANUAL_MODE_SYSTEM_EXTENSION = "<dcp-system-reminder>\nManual mode is enabled. Do NOT use compress unless the user has explicitly triggered it through a manual marker.\n\nOnly use the compress tool after seeing `<compress triggered manually>` in the current user instruction context.\n\nIssue exactly ONE compress tool per manual trigger. Do NOT launch multiple compress tools in parallel. Each trigger grants a single compression; after it completes, wait for the next trigger.\n\nAfter completing a manually triggered context-management action, STOP IMMEDIATELY. Do NOT continue with any task execution. End your response right after the tool use completes and wait for the next user input.\n\nNever repeat this notice in your reply.\n</dcp-system-reminder>\n";
2
+ export declare const SUBAGENT_SYSTEM_EXTENSION = "<dcp-system-reminder>\nYou are operating in a subagent environment.\n\nThe initial subagent instruction is imperative and must be followed exactly.\nIt is the only user message intentionally not assigned a message ID, and therefore is not eligible for compression.\nAll subsequent messages in the session will have IDs.\n\nNever repeat this notice in your reply.\n</dcp-system-reminder>\n";
3
3
  export declare function buildProtectedToolsExtension(protectedTools: string[]): string;
4
4
  //# sourceMappingURL=system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../lib/prompts/extensions/system.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,mrBASxC,CAAA;AAED,eAAO,MAAM,yBAAyB,8VAOrC,CAAA;AAED,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,CAW7E"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../lib/prompts/extensions/system.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,8tBAWxC,CAAA;AAED,eAAO,MAAM,yBAAyB,yYASrC,CAAA;AAED,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,CAW7E"}
@@ -1,2 +1,2 @@
1
- export declare const ITERATION_NUDGE = "<dcp-system-reminder>\nYou've been iterating for a while after the last user message.\n\nIf there is a closed portion that is unlikely to be referenced immediately (for example, finished research before implementation), use the compress tool on it now.\n</dcp-system-reminder>\n";
1
+ export declare const ITERATION_NUDGE = "<dcp-system-reminder>\nYou've been iterating for a while after the last user message.\n\nIf there is a closed portion that is unlikely to be referenced immediately (for example, finished research before implementation), use the compress tool on it now.\n\nNever repeat or quote this reminder in your reply.\n</dcp-system-reminder>\n";
2
2
  //# sourceMappingURL=iteration-nudge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iteration-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/iteration-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,2RAK3B,CAAA"}
1
+ {"version":3,"file":"iteration-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/iteration-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,iVAO3B,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const TURN_NUDGE = "<dcp-system-reminder>\nEvaluate the conversation for compressible ranges.\n\nIf any messages are cleanly closed and unlikely to be needed again, use the compress tool on them.\nIf direction has shifted, compress earlier ranges that are now less relevant.\n\nThe goal is to filter noise and distill key information so context accumulation stays under control.\nKeep active context uncompressed.\n</dcp-system-reminder>\n";
1
+ export declare const TURN_NUDGE = "<dcp-system-reminder>\nEvaluate the conversation for compressible ranges.\n\nIf any messages are cleanly closed and unlikely to be needed again, use the compress tool on them.\nIf direction has shifted, compress earlier ranges that are now less relevant.\n\nThe goal is to filter noise and distill key information so context accumulation stays under control.\nKeep active context uncompressed.\n\nNever repeat or quote this reminder in your reply.\n</dcp-system-reminder>\n";
2
2
  //# sourceMappingURL=turn-nudge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"turn-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/turn-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,waAStB,CAAA"}
1
+ {"version":3,"file":"turn-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/turn-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,8dAWtB,CAAA"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import type { CompressionBlock, PrunedMessageEntry, SessionState, SessionStats } from "./types";
7
7
  import type { Logger } from "../logger";
8
+ import { type CompressionUsageTotals } from "../compress/usage";
8
9
  /** Prune state as stored on disk */
9
10
  export interface PersistedPruneMessagesState {
10
11
  byMessageId: Record<string, PrunedMessageEntry>;
@@ -40,6 +41,7 @@ export interface AggregatedStats {
40
41
  totalTools: number;
41
42
  totalMessages: number;
42
43
  sessionCount: number;
44
+ compressionUsage: CompressionUsageTotals;
43
45
  }
44
46
  export declare function loadAllSessionStats(logger: Logger): Promise<AggregatedStats>;
45
47
  //# sourceMappingURL=persistence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGvC,oCAAoC;AACpC,MAAM,WAAW,2BAA2B;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,2BAA2B,CAAA;CACzC;AAED,MAAM,WAAW,eAAe;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB;AAqCD,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAwFvC;AA6BD,wBAAsB,qBAAqB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAG9B;AAED,wBAAsB,qBAAqB,CACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2ClF"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAIH,KAAK,sBAAsB,EAC9B,MAAM,mBAAmB,CAAA;AAG1B,oCAAoC;AACpC,MAAM,WAAW,2BAA2B;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,2BAA2B,CAAA;CACzC;AAED,MAAM,WAAW,eAAe;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB;AAqCD,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAwFvC;AA8BD,wBAAsB,qBAAqB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAG9B;AAED,wBAAsB,qBAAqB,CACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,sBAAsB,CAAA;CAC3C;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAmDlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAcvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,EACrB,mBAAmB,OAAO,KAC3B,OAAO,CAAC,IAAI,CAyCd,CAAA;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,GAAE,QAAgB,GAAG,YAAY,CAsC3E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA+B3D;AAED,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,EACrB,iBAAiB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,wBAAsB,iBAAiB,CACnC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CAQf"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAevC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,EACrB,mBAAmB,OAAO,KAC3B,OAAO,CAAC,IAAI,CAyCd,CAAA;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,GAAE,QAAgB,GAAG,YAAY,CAuC3E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAgC3D;AAED,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,EACrB,iBAAiB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,wBAAsB,iBAAiB,CACnC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -1,4 +1,5 @@
1
1
  import type { CompressionTimingState } from "../compress/timing";
2
+ import type { CompressionUsageTotals } from "../compress/usage";
2
3
  import type { IdFormat } from "../message-ids";
3
4
  import { Message, Part } from "@opencode-ai/sdk/v2";
4
5
  export interface WithParts {
@@ -18,6 +19,8 @@ export interface ToolParameterEntry {
18
19
  export interface SessionStats {
19
20
  pruneTokenCounter: number;
20
21
  totalPruneTokens: number;
22
+ /** Token usage of the hidden compression (summary) requests. */
23
+ compressionUsage: CompressionUsageTotals;
21
24
  }
22
25
  export interface PrunedMessageEntry {
23
26
  tokenCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../../lib/tui/dialogs.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAI/D,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEnD,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAChC,GAAG,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAClB,OAQA;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACjC,GAAG,EAAE,OAAO,CAAA;IACZ,SAAS,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;IAClD,MAAM,EAAE,MAAM,IAAI,CAAA;CACrB,OAgEA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,OAwD3F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAC/B,GAAG,EAAE,OAAO,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC,OAkDA"}
1
+ {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../../lib/tui/dialogs.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAI/D,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEnD,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAChC,GAAG,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAClB,OAQA;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACjC,GAAG,EAAE,OAAO,CAAA;IACZ,SAAS,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;IAClD,MAAM,EAAE,MAAM,IAAI,CAAA;CACrB,OAgEA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,OAgF3F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAC/B,GAAG,EAAE,OAAO,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC,OAkDA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAkClC,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,iBAE5E;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,qCAuW9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAwClC,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,iBAE5E;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,qCAsZ9C"}
@@ -33,11 +33,31 @@ export declare const rpc: {
33
33
  sessionDurationMs: import("zod").ZodNumber;
34
34
  sessionTools: import("zod").ZodNumber;
35
35
  sessionMessages: import("zod").ZodNumber;
36
+ sessionCompressionUsage: import("zod").ZodObject<{
37
+ calls: import("zod").ZodNumber;
38
+ providerCalls: import("zod").ZodNumber;
39
+ estimatedCalls: import("zod").ZodNumber;
40
+ inputTokens: import("zod").ZodNumber;
41
+ outputTokens: import("zod").ZodNumber;
42
+ cacheReadTokens: import("zod").ZodNumber;
43
+ cacheWriteTokens: import("zod").ZodNumber;
44
+ reasoningTokens: import("zod").ZodNumber;
45
+ }, import("zod/v4/core").$strip>;
36
46
  allTime: import("zod").ZodObject<{
37
47
  totalTokens: import("zod").ZodNumber;
38
48
  totalTools: import("zod").ZodNumber;
39
49
  totalMessages: import("zod").ZodNumber;
40
50
  sessionCount: import("zod").ZodNumber;
51
+ compressionUsage: import("zod").ZodObject<{
52
+ calls: import("zod").ZodNumber;
53
+ providerCalls: import("zod").ZodNumber;
54
+ estimatedCalls: import("zod").ZodNumber;
55
+ inputTokens: import("zod").ZodNumber;
56
+ outputTokens: import("zod").ZodNumber;
57
+ cacheReadTokens: import("zod").ZodNumber;
58
+ cacheWriteTokens: import("zod").ZodNumber;
59
+ reasoningTokens: import("zod").ZodNumber;
60
+ }, import("zod/v4/core").$strip>;
41
61
  }, import("zod/v4/core").$strip>;
42
62
  }, import("zod/v4/core").$strip>;
43
63
  }, import("zod/v4/core").$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../lib/v2/rpc.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBN,CAAA"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../lib/v2/rpc.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBN,CAAA"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Removes DCP-injected metadata from model output before it reaches the stored
3
+ * conversation or the user interface.
4
+ *
5
+ * The injected reminders, message-id tags and compact id lines are addressed to
6
+ * the model, but models occasionally copy them into their visible reply or
7
+ * reasoning. The request-side `stripHallucinations` pass keeps those copies out
8
+ * of later requests; this module keeps them out of the stored history in the
9
+ * first place by scrubbing the provider response stream. Two surfaces are
10
+ * covered: raw HTTP responses (`http.response` hook, native provider packages)
11
+ * and standardized AI SDK stream parts (`aisdk.language` hook).
12
+ *
13
+ * Every failure path falls back to the untouched response: scrubbing must never
14
+ * break or delay model traffic.
15
+ */
16
+ import type { Plugin } from "@opencode/plugin";
17
+ import type { Logger } from "../logger";
18
+ export interface OutputScrubConfig {
19
+ /** Strip `<dcp...>` reminder/tag blocks from model output. */
20
+ modelOutput: boolean;
21
+ /** Strip line-standalone compact id tags (`@N@`, `@bN@`, `@blocked@`). */
22
+ messageIds: boolean;
23
+ }
24
+ export declare function outputScrubEnabled(config: OutputScrubConfig): boolean;
25
+ export declare function stripDcpArtifacts(text: string, config: OutputScrubConfig): string;
26
+ /** Streaming text scrubber: tag blocks first, then compact-id lines. */
27
+ export declare class DcpStreamScrubber {
28
+ private readonly config;
29
+ private readonly tags;
30
+ private readonly ids;
31
+ constructor(config: OutputScrubConfig);
32
+ push(chunk: string): string;
33
+ flush(): string;
34
+ reset(): void;
35
+ }
36
+ /**
37
+ * Scrubs provider payloads in place. Stateful for streamed deltas, complete
38
+ * (stateless) for done/full payloads. Unknown shapes are left untouched.
39
+ */
40
+ export declare class ProviderPayloadScrubber {
41
+ private readonly config;
42
+ private readonly streams;
43
+ constructor(config: OutputScrubConfig);
44
+ /** Scrub one streamed provider event. Returns true when it was modified. */
45
+ scrub(payload: unknown): boolean;
46
+ /** Scrub a complete (non-streamed) JSON payload. */
47
+ scrubComplete(payload: unknown): boolean;
48
+ private complete;
49
+ private stream;
50
+ private textFor;
51
+ private scrubField;
52
+ private scrubParts;
53
+ private scrubChat;
54
+ private scrubResponses;
55
+ private scrubResponseObject;
56
+ private scrubItems;
57
+ private scrubAnthropic;
58
+ private scrubGoogle;
59
+ }
60
+ /** Scrub a complete JSON body (non-streamed responses). */
61
+ export declare function scrubJsonBody(body: string, config: OutputScrubConfig, scrubber?: ProviderPayloadScrubber): string;
62
+ /** SSE transformer that scrubs known provider events and passes the rest through. */
63
+ export declare function createSseScrubTransform(config: OutputScrubConfig): any;
64
+ /** Buffers a JSON body, scrubs it at stream end. Used for non-SSE responses. */
65
+ export declare function createJsonScrubTransform(config: OutputScrubConfig): any;
66
+ /**
67
+ * Wrap a provider response so its body is scrubbed while streaming. Returns the
68
+ * original response when nothing can or should be done.
69
+ */
70
+ export declare function wrapScrubResponse(response: any, config: OutputScrubConfig): any;
71
+ /**
72
+ * Best-effort registration of the response scrub hook. Applies to every session
73
+ * request kind (primary, compaction, title, generate) through the shared HTTP
74
+ * transport used by native provider packages. AI SDK providers are covered by
75
+ * the language-model wrapper instead.
76
+ */
77
+ export declare function installResponseScrubHook(ctx: Plugin.Context, config: OutputScrubConfig, logger: Logger): Promise<void>;
78
+ /**
79
+ * Standardized AI SDK stream-part scrubber. Deltas pass through a stateful
80
+ * scrubber, end/finish parts are scrubbed statelessly, and any text the
81
+ * scrubber held back is re-emitted as an extra delta before the end part.
82
+ */
83
+ export declare class AisdkPartScrubber {
84
+ private readonly config;
85
+ private readonly streams;
86
+ constructor(config: OutputScrubConfig);
87
+ process(part: any): any[];
88
+ private stream;
89
+ private take;
90
+ private flushStreams;
91
+ }
92
+ /** Stateless scrub of a non-streamed AI SDK result (`doGenerate`). */
93
+ export declare function stripAisdkResultContent(result: any, config: OutputScrubConfig): void;
94
+ //# sourceMappingURL=scrub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../../../lib/v2/scrub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,WAAW,iBAAiB;IAC9B,8DAA8D;IAC9D,WAAW,EAAE,OAAO,CAAA;IACpB,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAErE;AAuED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAcjF;AA6JD,wEAAwE;AACxE,qBAAa,iBAAiB;IAId,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAuB;gBAEd,MAAM,EAAE,iBAAiB;IAEtD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAW3B,KAAK,IAAI,MAAM;IAWf,KAAK,IAAI,IAAI;CAIhB;AAYD;;;GAGG;AACH,qBAAa,uBAAuB;IAGpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;gBAElC,MAAM,EAAE,iBAAiB;IAEtD,4EAA4E;IAC5E,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IA6BhC,oDAAoD;IACpD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAkCxC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,SAAS;IA6BjB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,WAAW;CA4BtB;AAcD,2DAA2D;AAC3D,wBAAgB,aAAa,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,QAAQ,CAAC,EAAE,uBAAuB,GACnC,MAAM,CAeR;AAED,qFAAqF;AACrF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,GAAG,CAyFtE;AAED,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,GAAG,CA8BvE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,GAAG,GAAG,CAwB/E;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC1C,GAAG,EAAE,MAAM,CAAC,OAAO,EACnB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAsBD;;;;GAIG;AACH,qBAAa,iBAAiB;IAGd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;gBAElC,MAAM,EAAE,iBAAiB;IAEtD,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE;IAuCzB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,YAAY;CAiBvB;AAED,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAYpF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Captures token usage of the hidden compression (summary) requests.
3
+ *
4
+ * OpenCode V2 `session.generate` returns only the reply text, so provider
5
+ * usage is observed in two complementary ways: wrapping the resolved language
6
+ * model through the `aisdk.language` hook (AI SDK packages) and reading the
7
+ * raw response body through the session `http.response` hook (native
8
+ * `@opencode/ai` packages, whose model never passes through the core AISDK
9
+ * service). The session `generate` hook records a local input estimate as a
10
+ * fallback for runtimes where neither capture path is available. All state is
11
+ * kept in memory and keyed by the per-request call id embedded in the hidden
12
+ * prompt marker.
13
+ */
14
+ import type { Plugin } from "@opencode/plugin";
15
+ import type { Logger } from "../logger";
16
+ import { type CompressionUsage } from "../compress/usage";
17
+ import { type OutputScrubConfig } from "./scrub";
18
+ export interface CompressionUsageTracker {
19
+ recordProvider(callId: string, usage: CompressionUsage): void;
20
+ recordEstimatedInput(callId: string, inputTokens: number): void;
21
+ /** Provider usage when captured, otherwise a tokenizer estimate, otherwise undefined. */
22
+ resolve(callId: string, outputText: string): CompressionUsage | undefined;
23
+ discard(callId: string): void;
24
+ }
25
+ export declare function createCompressionUsageTracker(): CompressionUsageTracker;
26
+ /**
27
+ * Best-effort registration of the language-model wrapper. Runtimes without the
28
+ * `aisdk` hook simply rely on the local estimate fallback.
29
+ */
30
+ export declare function installCompressionUsageHook(ctx: Plugin.Context, tracker: CompressionUsageTracker, logger: Logger, scrub?: OutputScrubConfig): Promise<void>;
31
+ /**
32
+ * Parse provider usage from a raw model response body. Handles plain JSON
33
+ * bodies and SSE streams from the common provider protocols (OpenAI
34
+ * responses/chat, Anthropic, Google) by merging every usage-like object.
35
+ */
36
+ export declare function parseProviderUsageFromBody(body: string): CompressionUsage | undefined;
37
+ /**
38
+ * Best-effort capture of provider usage from the raw HTTP response of the
39
+ * hidden summary request. Needed for native `@opencode/ai` provider packages,
40
+ * which bypass the core AISDK service entirely. The hook reads clones of the
41
+ * request/response, so the real traffic is never disturbed, and any failure
42
+ * falls back to the local estimate recorded by the `generate` hook.
43
+ */
44
+ export declare function installHttpUsageHook(ctx: Plugin.Context, tracker: CompressionUsageTracker, logger: Logger): Promise<void>;
45
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../lib/v2/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGvC,OAAO,EAGH,KAAK,gBAAgB,EACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAIH,KAAK,iBAAiB,EACzB,MAAM,SAAS,CAAA;AAOhB,MAAM,WAAW,uBAAuB;IACpC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC7D,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/D,yFAAyF;IACzF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAA;IACzE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAsCvE;AAoID;;;GAGG;AACH,wBAAsB,2BAA2B,CAC7C,GAAG,EAAE,MAAM,CAAC,OAAO,EACnB,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAyCf;AA6FD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CA8BrF;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,MAAM,CAAC,OAAO,EACnB,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
@@ -9,6 +9,7 @@ import { sendIgnoredMessage } from "../ui/notification"
9
9
  import { formatTokenCount } from "../ui/utils"
10
10
  import { loadAllSessionStats, type AggregatedStats } from "../state/persistence"
11
11
  import { getCurrentParams } from "../token-utils"
12
+ import { normalizeCompressionUsageTotals, type CompressionUsageTotals } from "../compress/usage"
12
13
  import { getActiveCompressionTargets } from "./compression-targets"
13
14
 
14
15
  export interface StatsCommandContext {
@@ -25,6 +26,7 @@ export function formatStatsMessage(
25
26
  sessionTools: number,
26
27
  sessionMessages: number,
27
28
  sessionDurationMs: number,
29
+ sessionUsage: CompressionUsageTotals,
28
30
  allTime: AggregatedStats,
29
31
  ): string {
30
32
  const lines: string[] = []
@@ -42,6 +44,16 @@ export function formatStatsMessage(
42
44
  lines.push(` Time: ${formatCompressionTime(sessionDurationMs)}`)
43
45
  lines.push(` Messages: ${sessionMessages}`)
44
46
  lines.push(` Tools: ${sessionTools}`)
47
+ lines.push(
48
+ ` Summary requests: ${sessionUsage.calls} (${sessionUsage.providerCalls} provider, ${sessionUsage.estimatedCalls} estimated)`,
49
+ )
50
+ lines.push(
51
+ ` Request in|out: ~${formatTokenCount(sessionUsage.inputTokens)} | ~${formatTokenCount(sessionUsage.outputTokens)}`,
52
+ )
53
+ lines.push(
54
+ ` Request cache: ~${formatTokenCount(sessionUsage.cacheReadTokens)} read | ~${formatTokenCount(sessionUsage.cacheWriteTokens)} write`,
55
+ )
56
+ lines.push(` Request reason: ~${formatTokenCount(sessionUsage.reasoningTokens)}`)
45
57
  lines.push("")
46
58
  lines.push("All-time:")
47
59
  lines.push("─".repeat(60))
@@ -49,6 +61,9 @@ export function formatStatsMessage(
49
61
  lines.push(` Tools pruned: ${allTime.totalTools}`)
50
62
  lines.push(` Messages pruned: ${allTime.totalMessages}`)
51
63
  lines.push(` Sessions: ${allTime.sessionCount}`)
64
+ lines.push(
65
+ ` Summary requests: ${allTime.compressionUsage.calls} (~${formatTokenCount(allTime.compressionUsage.inputTokens)} in | ~${formatTokenCount(allTime.compressionUsage.outputTokens)} out)`,
66
+ )
52
67
 
53
68
  return lines.join("\n")
54
69
  }
@@ -99,6 +114,7 @@ export async function handleStatsCommand(ctx: StatsCommandContext): Promise<void
99
114
  report.sessionTools,
100
115
  report.sessionMessages,
101
116
  report.sessionDurationMs,
117
+ report.sessionCompressionUsage,
102
118
  report.allTime,
103
119
  )
104
120
 
@@ -111,9 +127,11 @@ export async function handleStatsCommand(ctx: StatsCommandContext): Promise<void
111
127
  sessionTools: report.sessionTools,
112
128
  sessionMessages: report.sessionMessages,
113
129
  sessionDurationMs: report.sessionDurationMs,
130
+ sessionCompressionUsage: report.sessionCompressionUsage,
114
131
  allTimeTokens: report.allTime.totalTokens,
115
132
  allTimeTools: report.allTime.totalTools,
116
133
  allTimeMessages: report.allTime.totalMessages,
134
+ allTimeCompressionUsage: report.allTime.compressionUsage,
117
135
  })
118
136
  }
119
137
 
@@ -138,6 +156,8 @@ export async function buildStatsReport(state: SessionState, logger: Logger) {
138
156
  }
139
157
  const sessionTools = prunedToolIds.size
140
158
 
159
+ const sessionCompressionUsage = normalizeCompressionUsageTotals(state.stats.compressionUsage)
160
+
141
161
  let sessionMessages = 0
142
162
  for (const entry of state.prune.messages.byMessageId.values()) {
143
163
  if (entry.activeBlockIds.length > 0) {
@@ -154,6 +174,7 @@ export async function buildStatsReport(state: SessionState, logger: Logger) {
154
174
  sessionTools,
155
175
  sessionMessages,
156
176
  sessionDurationMs,
177
+ sessionCompressionUsage,
157
178
  allTime,
158
179
  }
159
180
  }