@tarquinen/opencode-dcp 1.3.1-beta1 → 1.3.2-beta.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 (145) hide show
  1. package/README.md +92 -85
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +25 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/auth.d.ts +4 -0
  6. package/dist/lib/auth.d.ts.map +1 -0
  7. package/dist/lib/auth.js +32 -0
  8. package/dist/lib/auth.js.map +1 -0
  9. package/dist/lib/commands/context.d.ts.map +1 -1
  10. package/dist/lib/commands/context.js +36 -23
  11. package/dist/lib/commands/context.js.map +1 -1
  12. package/dist/lib/config.d.ts +9 -4
  13. package/dist/lib/config.d.ts.map +1 -1
  14. package/dist/lib/config.js +60 -31
  15. package/dist/lib/config.js.map +1 -1
  16. package/dist/lib/hooks.d.ts.map +1 -1
  17. package/dist/lib/hooks.js +8 -16
  18. package/dist/lib/hooks.js.map +1 -1
  19. package/dist/lib/messages/inject.d.ts +7 -0
  20. package/dist/lib/messages/inject.d.ts.map +1 -1
  21. package/dist/lib/messages/inject.js +86 -51
  22. package/dist/lib/messages/inject.js.map +1 -1
  23. package/dist/lib/messages/prune.d.ts.map +1 -1
  24. package/dist/lib/messages/prune.js +78 -2
  25. package/dist/lib/messages/prune.js.map +1 -1
  26. package/dist/lib/messages/utils.d.ts +2 -0
  27. package/dist/lib/messages/utils.d.ts.map +1 -1
  28. package/dist/lib/messages/utils.js +21 -12
  29. package/dist/lib/messages/utils.js.map +1 -1
  30. package/dist/lib/prompts/compress-tool-spec.d.ts +2 -0
  31. package/dist/lib/prompts/compress-tool-spec.d.ts.map +1 -0
  32. package/dist/lib/prompts/compress-tool-spec.js +58 -0
  33. package/dist/lib/prompts/compress-tool-spec.js.map +1 -0
  34. package/dist/lib/prompts/distill-tool-spec.d.ts +2 -0
  35. package/dist/lib/prompts/distill-tool-spec.d.ts.map +1 -0
  36. package/dist/lib/prompts/{extract-tool-spec.js → distill-tool-spec.js} +14 -14
  37. package/dist/lib/prompts/distill-tool-spec.js.map +1 -0
  38. package/dist/lib/prompts/index.d.ts +7 -0
  39. package/dist/lib/prompts/index.d.ts.map +1 -1
  40. package/dist/lib/prompts/index.js +28 -18
  41. package/dist/lib/prompts/index.js.map +1 -1
  42. package/dist/lib/prompts/prune-tool-spec.d.ts +2 -0
  43. package/dist/lib/prompts/prune-tool-spec.d.ts.map +1 -0
  44. package/dist/lib/prompts/prune-tool-spec.js +40 -0
  45. package/dist/lib/prompts/prune-tool-spec.js.map +1 -0
  46. package/dist/lib/shared-utils.d.ts +1 -1
  47. package/dist/lib/shared-utils.d.ts.map +1 -1
  48. package/dist/lib/shared-utils.js +10 -3
  49. package/dist/lib/shared-utils.js.map +1 -1
  50. package/dist/lib/state/persistence.d.ts +2 -1
  51. package/dist/lib/state/persistence.d.ts.map +1 -1
  52. package/dist/lib/state/persistence.js +18 -0
  53. package/dist/lib/state/persistence.js.map +1 -1
  54. package/dist/lib/state/state.d.ts +0 -1
  55. package/dist/lib/state/state.d.ts.map +1 -1
  56. package/dist/lib/state/state.js +10 -29
  57. package/dist/lib/state/state.js.map +1 -1
  58. package/dist/lib/state/tool-cache.d.ts.map +1 -1
  59. package/dist/lib/state/tool-cache.js +8 -7
  60. package/dist/lib/state/tool-cache.js.map +1 -1
  61. package/dist/lib/state/types.d.ts +6 -0
  62. package/dist/lib/state/types.d.ts.map +1 -1
  63. package/dist/lib/state/utils.d.ts +4 -0
  64. package/dist/lib/state/utils.d.ts.map +1 -1
  65. package/dist/lib/state/utils.js +33 -0
  66. package/dist/lib/state/utils.js.map +1 -1
  67. package/dist/lib/strategies/index.d.ts +1 -1
  68. package/dist/lib/strategies/index.d.ts.map +1 -1
  69. package/dist/lib/strategies/index.js +1 -1
  70. package/dist/lib/strategies/index.js.map +1 -1
  71. package/dist/lib/strategies/utils.d.ts +1 -0
  72. package/dist/lib/strategies/utils.d.ts.map +1 -1
  73. package/dist/lib/strategies/utils.js +13 -4
  74. package/dist/lib/strategies/utils.js.map +1 -1
  75. package/dist/lib/tools/compress.d.ts +4 -0
  76. package/dist/lib/tools/compress.d.ts.map +1 -0
  77. package/dist/lib/tools/compress.js +98 -0
  78. package/dist/lib/tools/compress.js.map +1 -0
  79. package/dist/lib/tools/distill.d.ts +4 -0
  80. package/dist/lib/tools/distill.d.ts.map +1 -0
  81. package/dist/lib/tools/distill.js +41 -0
  82. package/dist/lib/tools/distill.js.map +1 -0
  83. package/dist/lib/tools/index.d.ts +5 -0
  84. package/dist/lib/tools/index.d.ts.map +1 -0
  85. package/dist/lib/tools/index.js +4 -0
  86. package/dist/lib/tools/index.js.map +1 -0
  87. package/dist/lib/tools/prune-shared.d.ts +6 -0
  88. package/dist/lib/tools/prune-shared.d.ts.map +1 -0
  89. package/dist/lib/tools/prune-shared.js +107 -0
  90. package/dist/lib/tools/prune-shared.js.map +1 -0
  91. package/dist/lib/tools/prune.d.ts +4 -0
  92. package/dist/lib/tools/prune.d.ts.map +1 -0
  93. package/dist/lib/tools/prune.js +28 -0
  94. package/dist/lib/tools/prune.js.map +1 -0
  95. package/dist/lib/{strategies/tools.d.ts → tools/types.d.ts} +1 -4
  96. package/dist/lib/tools/types.d.ts.map +1 -0
  97. package/dist/lib/tools/types.js +2 -0
  98. package/dist/lib/tools/types.js.map +1 -0
  99. package/dist/lib/tools/utils.d.ts +26 -0
  100. package/dist/lib/tools/utils.d.ts.map +1 -0
  101. package/dist/lib/tools/utils.js +121 -0
  102. package/dist/lib/tools/utils.js.map +1 -0
  103. package/dist/lib/ui/notification.d.ts +1 -0
  104. package/dist/lib/ui/notification.d.ts.map +1 -1
  105. package/dist/lib/ui/notification.js +32 -4
  106. package/dist/lib/ui/notification.js.map +1 -1
  107. package/dist/lib/ui/utils.d.ts +1 -0
  108. package/dist/lib/ui/utils.d.ts.map +1 -1
  109. package/dist/lib/ui/utils.js +16 -0
  110. package/dist/lib/ui/utils.js.map +1 -1
  111. package/package.json +12 -9
  112. package/dist/lib/prompts/discard-tool-spec.d.ts +0 -2
  113. package/dist/lib/prompts/discard-tool-spec.d.ts.map +0 -1
  114. package/dist/lib/prompts/discard-tool-spec.js +0 -41
  115. package/dist/lib/prompts/discard-tool-spec.js.map +0 -1
  116. package/dist/lib/prompts/extract-tool-spec.d.ts +0 -2
  117. package/dist/lib/prompts/extract-tool-spec.d.ts.map +0 -1
  118. package/dist/lib/prompts/extract-tool-spec.js.map +0 -1
  119. package/dist/lib/prompts/nudge/both.d.ts +0 -2
  120. package/dist/lib/prompts/nudge/both.d.ts.map +0 -1
  121. package/dist/lib/prompts/nudge/both.js +0 -11
  122. package/dist/lib/prompts/nudge/both.js.map +0 -1
  123. package/dist/lib/prompts/nudge/discard.d.ts +0 -2
  124. package/dist/lib/prompts/nudge/discard.d.ts.map +0 -1
  125. package/dist/lib/prompts/nudge/discard.js +0 -10
  126. package/dist/lib/prompts/nudge/discard.js.map +0 -1
  127. package/dist/lib/prompts/nudge/extract.d.ts +0 -2
  128. package/dist/lib/prompts/nudge/extract.d.ts.map +0 -1
  129. package/dist/lib/prompts/nudge/extract.js +0 -10
  130. package/dist/lib/prompts/nudge/extract.js.map +0 -1
  131. package/dist/lib/prompts/system/both.d.ts +0 -2
  132. package/dist/lib/prompts/system/both.d.ts.map +0 -1
  133. package/dist/lib/prompts/system/both.js +0 -61
  134. package/dist/lib/prompts/system/both.js.map +0 -1
  135. package/dist/lib/prompts/system/discard.d.ts +0 -2
  136. package/dist/lib/prompts/system/discard.d.ts.map +0 -1
  137. package/dist/lib/prompts/system/discard.js +0 -52
  138. package/dist/lib/prompts/system/discard.js.map +0 -1
  139. package/dist/lib/prompts/system/extract.d.ts +0 -2
  140. package/dist/lib/prompts/system/extract.d.ts.map +0 -1
  141. package/dist/lib/prompts/system/extract.js +0 -52
  142. package/dist/lib/prompts/system/extract.js.map +0 -1
  143. package/dist/lib/strategies/tools.d.ts.map +0 -1
  144. package/dist/lib/strategies/tools.js +0 -135
  145. package/dist/lib/strategies/tools.js.map +0 -1
@@ -3,11 +3,12 @@
3
3
  * Persists pruned tool IDs across sessions so they survive OpenCode restarts.
4
4
  * Storage location: ~/.local/share/opencode/storage/plugin/dcp/{sessionId}.json
5
5
  */
6
- import type { SessionState, SessionStats, Prune } from "./types";
6
+ import type { SessionState, SessionStats, Prune, CompressSummary } from "./types";
7
7
  import type { Logger } from "../logger";
8
8
  export interface PersistedSessionState {
9
9
  sessionName?: string;
10
10
  prune: Prune;
11
+ compressSummaries: CompressSummary[];
11
12
  stats: SessionStats;
12
13
  lastUpdated: string;
13
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB;AAcD,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,CA8BvC;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAqClF"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,KAAK,CAAA;IACZ,iBAAiB,EAAE,eAAe,EAAE,CAAA;IACpC,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB;AAcD,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAkDvC;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAqClF"}
@@ -25,6 +25,7 @@ export async function saveSessionState(sessionState, logger, sessionName) {
25
25
  const state = {
26
26
  sessionName: sessionName,
27
27
  prune: sessionState.prune,
28
+ compressSummaries: sessionState.compressSummaries,
28
29
  stats: sessionState.stats,
29
30
  lastUpdated: new Date().toISOString(),
30
31
  };
@@ -57,6 +58,23 @@ export async function loadSessionState(sessionId, logger) {
57
58
  });
58
59
  return null;
59
60
  }
61
+ if (Array.isArray(state.compressSummaries)) {
62
+ const validSummaries = state.compressSummaries.filter((s) => s !== null &&
63
+ typeof s === "object" &&
64
+ typeof s.anchorMessageId === "string" &&
65
+ typeof s.summary === "string");
66
+ if (validSummaries.length !== state.compressSummaries.length) {
67
+ logger.warn("Filtered out malformed compressSummaries entries", {
68
+ sessionId: sessionId,
69
+ original: state.compressSummaries.length,
70
+ valid: validSummaries.length,
71
+ });
72
+ }
73
+ state.compressSummaries = validSummaries;
74
+ }
75
+ else {
76
+ state.compressSummaries = [];
77
+ }
60
78
  logger.info("Loaded session state from disk", {
61
79
  sessionId: sessionId,
62
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,4 @@ export declare const checkSession: (client: any, state: SessionState, logger: Lo
4
4
  export declare function createSessionState(): SessionState;
5
5
  export declare function resetSessionState(state: SessionState): void;
6
6
  export declare function ensureSessionInitialized(client: any, state: SessionState, sessionId: string, logger: Logger, messages: WithParts[]): Promise<void>;
7
- export declare function countTurns(state: SessionState, messages: WithParts[]): number;
8
7
  //# sourceMappingURL=state.d.ts.map
@@ -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;AAKvC,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,KACtB,OAAO,CAAC,IAAI,CA4Bd,CAAA;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAkBjD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAgB3D;AAED,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAYD,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAc7E"}
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;AAUvC,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,KACtB,OAAO,CAAC,IAAI,CA2Bd,CAAA;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAoBjD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAkB3D;AAED,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -1,6 +1,6 @@
1
1
  import { loadSessionState } from "./persistence";
2
- import { isSubAgentSession } from "./utils";
3
- import { getLastUserMessage, isMessageCompacted } from "../shared-utils";
2
+ import { isSubAgentSession, findLastCompactionTimestamp, countTurns, resetOnCompaction, } from "./utils";
3
+ import { getLastUserMessage } from "../shared-utils";
4
4
  export const checkSession = async (client, state, logger, messages) => {
5
5
  const lastUserMessage = getLastUserMessage(messages);
6
6
  if (!lastUserMessage) {
@@ -19,9 +19,8 @@ export const checkSession = async (client, state, logger, messages) => {
19
19
  const lastCompactionTimestamp = findLastCompactionTimestamp(messages);
20
20
  if (lastCompactionTimestamp > state.lastCompaction) {
21
21
  state.lastCompaction = lastCompactionTimestamp;
22
- state.toolParameters.clear();
23
- state.prune.toolIds = [];
24
- logger.info("Detected compaction from messages - cleared tool cache", {
22
+ resetOnCompaction(state);
23
+ logger.info("Detected compaction - reset stale state", {
25
24
  timestamp: lastCompactionTimestamp,
26
25
  });
27
26
  }
@@ -33,7 +32,9 @@ export function createSessionState() {
33
32
  isSubAgent: false,
34
33
  prune: {
35
34
  toolIds: [],
35
+ messageIds: [],
36
36
  },
37
+ compressSummaries: [],
37
38
  stats: {
38
39
  pruneTokenCounter: 0,
39
40
  totalPruneTokens: 0,
@@ -51,7 +52,9 @@ export function resetSessionState(state) {
51
52
  state.isSubAgent = false;
52
53
  state.prune = {
53
54
  toolIds: [],
55
+ messageIds: [],
54
56
  };
57
+ state.compressSummaries = [];
55
58
  state.stats = {
56
59
  pruneTokenCounter: 0,
57
60
  totalPruneTokens: 0,
@@ -82,34 +85,12 @@ export async function ensureSessionInitialized(client, state, sessionId, logger,
82
85
  }
83
86
  state.prune = {
84
87
  toolIds: persisted.prune.toolIds || [],
88
+ messageIds: persisted.prune.messageIds || [],
85
89
  };
90
+ state.compressSummaries = persisted.compressSummaries || [];
86
91
  state.stats = {
87
92
  pruneTokenCounter: persisted.stats?.pruneTokenCounter || 0,
88
93
  totalPruneTokens: persisted.stats?.totalPruneTokens || 0,
89
94
  };
90
95
  }
91
- function findLastCompactionTimestamp(messages) {
92
- for (let i = messages.length - 1; i >= 0; i--) {
93
- const msg = messages[i];
94
- if (msg.info.role === "assistant" && msg.info.summary === true) {
95
- return msg.info.time.created;
96
- }
97
- }
98
- return 0;
99
- }
100
- export function countTurns(state, messages) {
101
- let turnCount = 0;
102
- for (const msg of messages) {
103
- if (isMessageCompacted(state, msg)) {
104
- continue;
105
- }
106
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
107
- for (const part of parts) {
108
- if (part.type === "step-start") {
109
- turnCount++;
110
- }
111
- }
112
- }
113
- return turnCount;
114
- }
115
96
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,SAAS,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAKxC;;GAEG;AACH,wBAAsB,aAAa,CAC/B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAsEf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAajE"}
1
+ {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,SAAS,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAKxC;;GAEG;AACH,wBAAsB,aAAa,CAC/B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAqEf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAajE"}
@@ -26,15 +26,16 @@ export async function syncToolCache(state, config, logger, messages) {
26
26
  const isProtectedByTurn = turnProtectionEnabled &&
27
27
  turnProtectionTurns > 0 &&
28
28
  state.currentTurn - turnCounter < turnProtectionTurns;
29
- state.lastToolPrune =
30
- (part.tool === "discard" || part.tool === "extract") &&
31
- part.state.status === "completed";
32
- const allProtectedTools = config.tools.settings.protectedTools;
33
- if (part.tool === "discard" || part.tool === "extract") {
29
+ if (part.tool === "distill" || part.tool === "compress" || part.tool === "prune") {
34
30
  state.nudgeCounter = 0;
31
+ state.lastToolPrune = true;
35
32
  }
36
- else if (!allProtectedTools.includes(part.tool) && !isProtectedByTurn) {
37
- state.nudgeCounter++;
33
+ else {
34
+ state.lastToolPrune = false;
35
+ const allProtectedTools = config.tools.settings.protectedTools;
36
+ if (!allProtectedTools.includes(part.tool) && !isProtectedByTurn) {
37
+ state.nudgeCounter++;
38
+ }
38
39
  }
39
40
  if (state.toolParameters.has(part.callID)) {
40
41
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"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"}
@@ -15,13 +15,19 @@ export interface SessionStats {
15
15
  pruneTokenCounter: number;
16
16
  totalPruneTokens: number;
17
17
  }
18
+ export interface CompressSummary {
19
+ anchorMessageId: string;
20
+ summary: string;
21
+ }
18
22
  export interface Prune {
19
23
  toolIds: string[];
24
+ messageIds: string[];
20
25
  }
21
26
  export interface SessionState {
22
27
  sessionId: string | null;
23
28
  isSubAgent: boolean;
24
29
  prune: Prune;
30
+ compressSummaries: CompressSummary[];
25
31
  stats: SessionStats;
26
32
  toolParameters: Map<string, ToolParameterEntry>;
27
33
  nudgeCounter: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,IAAI,EAAE,CAAA;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,GAAG,CAAA;IACf,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,KAAK;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,YAAY,CAAA;IACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,IAAI,EAAE,CAAA;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,GAAG,CAAA;IACf,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,KAAK;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,KAAK,CAAA;IACZ,iBAAiB,EAAE,eAAe,EAAE,CAAA;IACpC,KAAK,EAAE,YAAY,CAAA;IACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B"}
@@ -1,2 +1,6 @@
1
+ import type { SessionState, WithParts } from "./types";
1
2
  export declare function isSubAgentSession(client: any, sessionID: string): Promise<boolean>;
3
+ export declare function findLastCompactionTimestamp(messages: WithParts[]): number;
4
+ export declare function countTurns(state: SessionState, messages: WithParts[]): number;
5
+ export declare function resetOnCompaction(state: SessionState): void;
2
6
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAAA,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAGtD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAQzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAc7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAO3D"}
@@ -1,3 +1,4 @@
1
+ import { isMessageCompacted } from "../shared-utils";
1
2
  export async function isSubAgentSession(client, sessionID) {
2
3
  try {
3
4
  const result = await client.session.get({ path: { id: sessionID } });
@@ -7,4 +8,36 @@ export async function isSubAgentSession(client, sessionID) {
7
8
  return false;
8
9
  }
9
10
  }
11
+ export function findLastCompactionTimestamp(messages) {
12
+ for (let i = messages.length - 1; i >= 0; i--) {
13
+ const msg = messages[i];
14
+ if (msg.info.role === "assistant" && msg.info.summary === true) {
15
+ return msg.info.time.created;
16
+ }
17
+ }
18
+ return 0;
19
+ }
20
+ export function countTurns(state, messages) {
21
+ let turnCount = 0;
22
+ for (const msg of messages) {
23
+ if (isMessageCompacted(state, msg)) {
24
+ continue;
25
+ }
26
+ const parts = Array.isArray(msg.parts) ? msg.parts : [];
27
+ for (const part of parts) {
28
+ if (part.type === "step-start") {
29
+ turnCount++;
30
+ }
31
+ }
32
+ }
33
+ return turnCount;
34
+ }
35
+ export function resetOnCompaction(state) {
36
+ state.toolParameters.clear();
37
+ state.prune.toolIds = [];
38
+ state.prune.messageIds = [];
39
+ state.compressSummaries = [];
40
+ state.nudgeCounter = 0;
41
+ state.lastToolPrune = false;
42
+ }
10
43
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAW,EAAE,SAAiB;IAClE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;QACpE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAA;IAClC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAW,EAAE,SAAiB;IAClE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;QACpE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAA;IAClC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAqB;IAC7D,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QAChC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAmB,EAAE,QAAqB;IACjE,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACjC,SAAQ;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC7B,SAAS,EAAE,CAAA;YACf,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACjD,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAA;IACxB,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAA;IAC3B,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAA;IAC5B,KAAK,CAAC,YAAY,GAAG,CAAC,CAAA;IACtB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAA;AAC/B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { deduplicate } from "./deduplication";
2
- export { createDiscardTool, createExtractTool } from "./tools";
2
+ export { createPruneTool, createDistillTool, createCompressTool } from "../tools";
3
3
  export { supersedeWrites } from "./supersede-writes";
4
4
  export { purgeErrors } from "./purge-errors";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  export { deduplicate } from "./deduplication";
2
- export { createDiscardTool, createExtractTool } from "./tools";
2
+ export { createPruneTool, createDistillTool, createCompressTool } from "../tools";
3
3
  export { supersedeWrites } from "./supersede-writes";
4
4
  export { purgeErrors } from "./purge-errors";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -7,5 +7,6 @@ export declare function getCurrentParams(state: SessionState, messages: WithPart
7
7
  variant: string | undefined;
8
8
  };
9
9
  export declare function countTokens(text: string): number;
10
+ export declare function estimateTokensBatch(texts: string[]): number;
10
11
  export declare const calculateTokensSaved: (state: SessionState, messages: WithParts[], pruneToolIds: string[]) => number;
11
12
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIlC,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE,MAAM,GACf;IACC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,CAkBA;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAMD,eAAO,MAAM,oBAAoB,GAC7B,OAAO,YAAY,EACnB,UAAU,SAAS,EAAE,EACrB,cAAc,MAAM,EAAE,KACvB,MAyCF,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIlC,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE,MAAM,GACf;IACC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,CAkBA;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAG3D;AAED,eAAO,MAAM,oBAAoB,GAC7B,OAAO,YAAY,EACnB,UAAU,SAAS,EAAE,EACrB,cAAc,MAAM,EAAE,KACvB,MAiDF,CAAA"}
@@ -28,8 +28,10 @@ export function countTokens(text) {
28
28
  return Math.round(text.length / 4);
29
29
  }
30
30
  }
31
- function estimateTokensBatch(texts) {
32
- return texts.map(countTokens);
31
+ export function estimateTokensBatch(texts) {
32
+ if (texts.length === 0)
33
+ return 0;
34
+ return countTokens(texts.join(" "));
33
35
  }
34
36
  export const calculateTokensSaved = (state, messages, pruneToolIds) => {
35
37
  try {
@@ -51,6 +53,14 @@ export const calculateTokensSaved = (state, messages, pruneToolIds) => {
51
53
  }
52
54
  continue;
53
55
  }
56
+ if (part.tool === "edit" || part.tool === "write") {
57
+ if (part.state.input) {
58
+ const inputContent = typeof part.state.input === "string"
59
+ ? part.state.input
60
+ : JSON.stringify(part.state.input);
61
+ contents.push(inputContent);
62
+ }
63
+ }
54
64
  if (part.state.status === "completed") {
55
65
  const content = typeof part.state.output === "string"
56
66
  ? part.state.output
@@ -65,8 +75,7 @@ export const calculateTokensSaved = (state, messages, pruneToolIds) => {
65
75
  }
66
76
  }
67
77
  }
68
- const tokenCounts = estimateTokensBatch(contents);
69
- return tokenCounts.reduce((sum, count) => sum + count, 0);
78
+ return estimateTokensBatch(contents);
70
79
  }
71
80
  catch (error) {
72
81
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAExE,MAAM,UAAU,gBAAgB,CAC5B,KAAmB,EACnB,QAAqB,EACrB,MAAc;IAOd,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAA;QACrE,OAAO;YACH,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACzB,CAAA;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAmB,CAAA;IAC5C,MAAM,KAAK,GAAW,QAAQ,CAAC,KAAK,CAAA;IACpC,MAAM,UAAU,GAAuB,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAA;IAChE,MAAM,OAAO,GAAuB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAA;IAC1D,MAAM,OAAO,GAAuB,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAA;IAErE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAA;IACnB,IAAI,CAAC;QACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACtC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,KAAmB,EACnB,QAAqB,EACrB,YAAsB,EAChB,EAAE;IACR,IAAI,CAAC;QACD,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBACjC,SAAQ;YACZ,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;YACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9D,SAAQ;gBACZ,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAA;oBAC7C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;wBAC1B,MAAM,OAAO,GACT,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;wBACzE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBAC1B,CAAC;oBACD,SAAQ;gBACZ,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACpC,MAAM,OAAO,GACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;wBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;wBACnB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC1B,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBACvC,MAAM,OAAO,GACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ;wBAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;wBAClB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;QACD,MAAM,WAAW,GAAa,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAC3D,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,CAAA;IACZ,CAAC;AACL,CAAC,CAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import type { PruneToolContext } from "./types";
3
+ export declare function createCompressTool(ctx: PruneToolContext): ReturnType<typeof tool>;
4
+ //# sourceMappingURL=compress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../../lib/tools/compress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAe/C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAgKjF"}
@@ -0,0 +1,98 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import { ensureSessionInitialized } from "../state";
3
+ import { saveSessionState } from "../state/persistence";
4
+ import { loadPrompt } from "../prompts";
5
+ import { estimateTokensBatch, getCurrentParams } from "../strategies/utils";
6
+ import { collectContentInRange, findStringInMessages, collectToolIdsInRange, collectMessageIdsInRange, } from "./utils";
7
+ import { sendCompressNotification } from "../ui/notification";
8
+ const COMPRESS_TOOL_DESCRIPTION = loadPrompt("compress-tool-spec");
9
+ export function createCompressTool(ctx) {
10
+ return tool({
11
+ description: COMPRESS_TOOL_DESCRIPTION,
12
+ args: {
13
+ input: tool.schema
14
+ .array(tool.schema.string())
15
+ .describe("[startString, endString, topic, summary] - 4 required strings: (1) startString: unique text from conversation marking range start, (2) endString: unique text marking range end, (3) topic: short 3-5 word label for UI, (4) summary: comprehensive text replacing all compressed content"),
16
+ },
17
+ async execute(args, toolCtx) {
18
+ const { client, state, logger } = ctx;
19
+ const sessionId = toolCtx.sessionID;
20
+ if (!Array.isArray(args.input)) {
21
+ throw new Error('input must be an array of 4 strings: ["startString", "endString", "topic", "summary"]');
22
+ }
23
+ if (args.input.length !== 4) {
24
+ throw new Error(`input must be an array of exactly 4 strings: ["startString", "endString", "topic", "summary"], got ${args.input.length} elements`);
25
+ }
26
+ const [startString, endString, topic, summary] = args.input;
27
+ if (!startString || typeof startString !== "string") {
28
+ throw new Error("startString is required and must be a non-empty string");
29
+ }
30
+ if (!endString || typeof endString !== "string") {
31
+ throw new Error("endString is required and must be a non-empty string");
32
+ }
33
+ if (!topic || typeof topic !== "string") {
34
+ throw new Error("topic is required and must be a non-empty string");
35
+ }
36
+ if (!summary || typeof summary !== "string") {
37
+ throw new Error("summary is required and must be a non-empty string");
38
+ }
39
+ logger.info("Compress tool invoked");
40
+ // logger.info(
41
+ // JSON.stringify({
42
+ // startString: startString?.substring(0, 50) + "...",
43
+ // endString: endString?.substring(0, 50) + "...",
44
+ // topic: topic,
45
+ // summaryLength: summary?.length,
46
+ // }),
47
+ // )
48
+ const messagesResponse = await client.session.messages({
49
+ path: { id: sessionId },
50
+ });
51
+ const messages = messagesResponse.data || messagesResponse;
52
+ await ensureSessionInitialized(client, state, sessionId, logger, messages);
53
+ const startResult = findStringInMessages(messages, startString, logger, state.compressSummaries, "startString");
54
+ const endResult = findStringInMessages(messages, endString, logger, state.compressSummaries, "endString");
55
+ if (startResult.messageIndex > endResult.messageIndex) {
56
+ throw new Error(`startString appears after endString in the conversation. Start must come before end.`);
57
+ }
58
+ const containedToolIds = collectToolIdsInRange(messages, startResult.messageIndex, endResult.messageIndex);
59
+ const containedMessageIds = collectMessageIdsInRange(messages, startResult.messageIndex, endResult.messageIndex);
60
+ state.prune.toolIds.push(...containedToolIds);
61
+ state.prune.messageIds.push(...containedMessageIds);
62
+ // Remove any existing summaries whose anchors are now inside this range
63
+ // This prevents duplicate injections when a larger compress subsumes a smaller one
64
+ const removedSummaries = state.compressSummaries.filter((s) => containedMessageIds.includes(s.anchorMessageId));
65
+ if (removedSummaries.length > 0) {
66
+ // logger.info("Removing subsumed compress summaries", {
67
+ // count: removedSummaries.length,
68
+ // anchorIds: removedSummaries.map((s) => s.anchorMessageId),
69
+ // })
70
+ state.compressSummaries = state.compressSummaries.filter((s) => !containedMessageIds.includes(s.anchorMessageId));
71
+ }
72
+ const compressSummary = {
73
+ anchorMessageId: startResult.messageId,
74
+ summary: summary,
75
+ };
76
+ state.compressSummaries.push(compressSummary);
77
+ const contentsToTokenize = collectContentInRange(messages, startResult.messageIndex, endResult.messageIndex);
78
+ const estimatedCompressedTokens = estimateTokensBatch(contentsToTokenize);
79
+ state.stats.pruneTokenCounter += estimatedCompressedTokens;
80
+ const currentParams = getCurrentParams(state, messages, logger);
81
+ await sendCompressNotification(client, logger, ctx.config, state, sessionId, containedToolIds, containedMessageIds, topic, summary, startResult, endResult, messages.length, currentParams);
82
+ state.stats.totalPruneTokens += state.stats.pruneTokenCounter;
83
+ state.stats.pruneTokenCounter = 0;
84
+ state.nudgeCounter = 0;
85
+ // logger.info("Compress range created", {
86
+ // startMessageId: startResult.messageId,
87
+ // endMessageId: endResult.messageId,
88
+ // toolIdsRemoved: containedToolIds.length,
89
+ // messagesInRange: containedMessageIds.length,
90
+ // estimatedTokens: estimatedCompressedTokens,
91
+ // })
92
+ saveSessionState(state, logger).catch((err) => logger.error("Failed to persist state", { error: err.message }));
93
+ const messagesCompressed = endResult.messageIndex - startResult.messageIndex + 1;
94
+ return `Compressed ${messagesCompressed} messages (${containedToolIds.length} tool calls) into summary. The content will be replaced with your summary.`;
95
+ },
96
+ });
97
+ }
98
+ //# sourceMappingURL=compress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../lib/tools/compress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import type { PruneToolContext } from "./types";
3
+ export declare function createDistillTool(ctx: PruneToolContext): ReturnType<typeof tool>;
4
+ //# sourceMappingURL=distill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distill.d.ts","sourceRoot":"","sources":["../../../lib/tools/distill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAO/C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CA2DhF"}
@@ -0,0 +1,41 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import { executePruneOperation } from "./prune-shared";
3
+ import { loadPrompt } from "../prompts";
4
+ const DISTILL_TOOL_DESCRIPTION = loadPrompt("distill-tool-spec");
5
+ export function createDistillTool(ctx) {
6
+ return tool({
7
+ description: DISTILL_TOOL_DESCRIPTION,
8
+ args: {
9
+ ids: tool.schema
10
+ .array(tool.schema.string())
11
+ .describe("Numeric IDs as strings to distill from the <prunable-tools> list"),
12
+ distillation: tool.schema
13
+ .array(tool.schema.string())
14
+ .describe("Required array of distillation strings, one per ID (positional: distillation[0] for ids[0], etc.)"),
15
+ },
16
+ async execute(args, toolCtx) {
17
+ if (!args.ids || !Array.isArray(args.ids) || args.ids.length === 0) {
18
+ ctx.logger.debug("Distill tool called without ids: " + JSON.stringify(args));
19
+ throw new Error("Missing ids. You must provide at least one ID to distill.");
20
+ }
21
+ if (!args.ids.every((id) => typeof id === "string" && id.trim() !== "")) {
22
+ ctx.logger.debug("Distill tool called with invalid ids: " + JSON.stringify(args));
23
+ throw new Error('Invalid ids. All IDs must be numeric strings (e.g., "1", "23") from the <prunable-tools> list.');
24
+ }
25
+ if (!args.distillation ||
26
+ !Array.isArray(args.distillation) ||
27
+ args.distillation.length === 0) {
28
+ ctx.logger.debug("Distill tool called without distillation: " + JSON.stringify(args));
29
+ throw new Error('Missing distillation. You must provide an array of strings (e.g., ["summary 1", "summary 2"]).');
30
+ }
31
+ if (!args.distillation.every((d) => typeof d === "string")) {
32
+ ctx.logger.debug("Distill tool called with non-string distillation: " + JSON.stringify(args));
33
+ throw new Error("Invalid distillation. All distillation entries must be strings.");
34
+ }
35
+ // ctx.logger.info("Distillation data received:")
36
+ // ctx.logger.info(JSON.stringify(args.distillation, null, 2))
37
+ return executePruneOperation(ctx, toolCtx, args.ids, "extraction", "Distill", args.distillation);
38
+ },
39
+ });
40
+ }
41
+ //# sourceMappingURL=distill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distill.js","sourceRoot":"","sources":["../../../lib/tools/distill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,wBAAwB,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;AAEhE,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACnD,OAAO,IAAI,CAAC;QACR,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE;YACF,GAAG,EAAE,IAAI,CAAC,MAAM;iBACX,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;iBAC3B,QAAQ,CAAC,kEAAkE,CAAC;YACjF,YAAY,EAAE,IAAI,CAAC,MAAM;iBACpB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;iBAC3B,QAAQ,CACL,mGAAmG,CACtG;SACR;QACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC5E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;YAChF,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjF,MAAM,IAAI,KAAK,CACX,gGAAgG,CACnG,CAAA;YACL,CAAC;YAED,IACI,CAAC,IAAI,CAAC,YAAY;gBAClB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAChC,CAAC;gBACC,GAAG,CAAC,MAAM,CAAC,KAAK,CACZ,4CAA4C,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACtE,CAAA;gBACD,MAAM,IAAI,KAAK,CACX,gGAAgG,CACnG,CAAA;YACL,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,MAAM,CAAC,KAAK,CACZ,oDAAoD,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAC9E,CAAA;gBACD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;YACtF,CAAC;YAED,iDAAiD;YACjD,8DAA8D;YAE9D,OAAO,qBAAqB,CACxB,GAAG,EACH,OAAO,EACP,IAAI,CAAC,GAAG,EACR,YAA2B,EAC3B,SAAS,EACT,IAAI,CAAC,YAAY,CACpB,CAAA;QACL,CAAC;KACJ,CAAC,CAAA;AACN,CAAC"}