@tarquinen/opencode-dcp 2.0.1 → 2.0.3-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 (82) hide show
  1. package/README.md +22 -4
  2. package/dist/lib/commands/context.js +3 -3
  3. package/dist/lib/commands/context.js.map +1 -1
  4. package/dist/lib/commands/help.d.ts +2 -0
  5. package/dist/lib/commands/help.d.ts.map +1 -1
  6. package/dist/lib/commands/help.js +33 -8
  7. package/dist/lib/commands/help.js.map +1 -1
  8. package/dist/lib/commands/manual.d.ts +27 -0
  9. package/dist/lib/commands/manual.d.ts.map +1 -0
  10. package/dist/lib/commands/manual.js +85 -0
  11. package/dist/lib/commands/manual.js.map +1 -0
  12. package/dist/lib/commands/stats.js +2 -2
  13. package/dist/lib/commands/stats.js.map +1 -1
  14. package/dist/lib/commands/sweep.d.ts.map +1 -1
  15. package/dist/lib/commands/sweep.js +10 -8
  16. package/dist/lib/commands/sweep.js.map +1 -1
  17. package/dist/lib/config.d.ts +13 -0
  18. package/dist/lib/config.d.ts.map +1 -1
  19. package/dist/lib/config.js +97 -17
  20. package/dist/lib/config.js.map +1 -1
  21. package/dist/lib/hooks.d.ts +1 -1
  22. package/dist/lib/hooks.d.ts.map +1 -1
  23. package/dist/lib/hooks.js +70 -33
  24. package/dist/lib/hooks.js.map +1 -1
  25. package/dist/lib/messages/inject.d.ts +1 -0
  26. package/dist/lib/messages/inject.d.ts.map +1 -1
  27. package/dist/lib/messages/inject.js +38 -12
  28. package/dist/lib/messages/inject.js.map +1 -1
  29. package/dist/lib/messages/prune.js +6 -6
  30. package/dist/lib/messages/prune.js.map +1 -1
  31. package/dist/lib/prompts/_codegen/system.generated.d.ts +1 -1
  32. package/dist/lib/prompts/_codegen/system.generated.d.ts.map +1 -1
  33. package/dist/lib/prompts/_codegen/system.generated.js +10 -0
  34. package/dist/lib/prompts/_codegen/system.generated.js.map +1 -1
  35. package/dist/lib/prompts/index.d.ts +1 -0
  36. package/dist/lib/prompts/index.d.ts.map +1 -1
  37. package/dist/lib/prompts/index.js +1 -1
  38. package/dist/lib/prompts/index.js.map +1 -1
  39. package/dist/lib/shared-utils.js +1 -1
  40. package/dist/lib/shared-utils.js.map +1 -1
  41. package/dist/lib/state/persistence.d.ts +5 -3
  42. package/dist/lib/state/persistence.d.ts.map +1 -1
  43. package/dist/lib/state/persistence.js +12 -6
  44. package/dist/lib/state/persistence.js.map +1 -1
  45. package/dist/lib/state/state.d.ts +2 -2
  46. package/dist/lib/state/state.d.ts.map +1 -1
  47. package/dist/lib/state/state.js +18 -15
  48. package/dist/lib/state/state.js.map +1 -1
  49. package/dist/lib/state/tool-cache.d.ts +2 -2
  50. package/dist/lib/state/tool-cache.d.ts.map +1 -1
  51. package/dist/lib/state/tool-cache.js +2 -2
  52. package/dist/lib/state/tool-cache.js.map +1 -1
  53. package/dist/lib/state/types.d.ts +8 -2
  54. package/dist/lib/state/types.d.ts.map +1 -1
  55. package/dist/lib/state/utils.d.ts +1 -0
  56. package/dist/lib/state/utils.d.ts.map +1 -1
  57. package/dist/lib/state/utils.js +9 -2
  58. package/dist/lib/state/utils.js.map +1 -1
  59. package/dist/lib/strategies/deduplication.d.ts.map +1 -1
  60. package/dist/lib/strategies/deduplication.js +12 -5
  61. package/dist/lib/strategies/deduplication.js.map +1 -1
  62. package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
  63. package/dist/lib/strategies/purge-errors.js +8 -4
  64. package/dist/lib/strategies/purge-errors.js.map +1 -1
  65. package/dist/lib/strategies/supersede-writes.d.ts.map +1 -1
  66. package/dist/lib/strategies/supersede-writes.js +17 -7
  67. package/dist/lib/strategies/supersede-writes.js.map +1 -1
  68. package/dist/lib/strategies/utils.d.ts +2 -1
  69. package/dist/lib/strategies/utils.d.ts.map +1 -1
  70. package/dist/lib/strategies/utils.js +18 -19
  71. package/dist/lib/strategies/utils.js.map +1 -1
  72. package/dist/lib/tools/compress.d.ts.map +1 -1
  73. package/dist/lib/tools/compress.js +20 -16
  74. package/dist/lib/tools/compress.js.map +1 -1
  75. package/dist/lib/tools/prune-shared.d.ts.map +1 -1
  76. package/dist/lib/tools/prune-shared.js +10 -5
  77. package/dist/lib/tools/prune-shared.js.map +1 -1
  78. package/dist/lib/tools/utils.d.ts +6 -18
  79. package/dist/lib/tools/utils.d.ts.map +1 -1
  80. package/dist/lib/tools/utils.js +157 -76
  81. package/dist/lib/tools/utils.js.map +1 -1
  82. package/package.json +2 -1
@@ -1,26 +1,14 @@
1
1
  import type { WithParts, CompressSummary } from "../state";
2
2
  import type { Logger } from "../logger";
3
- /**
4
- * Searches messages for a string and returns the message ID where it's found.
5
- * Searches in text parts, tool outputs, tool inputs, and other textual content.
6
- * Also searches through existing compress summaries to enable chained compression.
7
- * Throws an error if the string is not found or found more than once.
8
- */
9
- export declare function findStringInMessages(messages: WithParts[], searchString: string, logger: Logger, compressSummaries: CompressSummary[] | undefined, stringType: "startString" | "endString"): {
3
+ export interface FuzzyConfig {
4
+ minScore: number;
5
+ minGap: number;
6
+ }
7
+ export declare const DEFAULT_FUZZY_CONFIG: FuzzyConfig;
8
+ export declare function findStringInMessages(messages: WithParts[], searchString: string, logger: Logger, compressSummaries: CompressSummary[] | undefined, stringType: "startString" | "endString", fuzzyConfig?: FuzzyConfig): {
10
9
  messageId: string;
11
10
  messageIndex: number;
12
11
  };
13
- /**
14
- * Collects all tool callIDs from messages between start and end indices (inclusive).
15
- */
16
12
  export declare function collectToolIdsInRange(messages: WithParts[], startIndex: number, endIndex: number): string[];
17
- /**
18
- * Collects all message IDs from messages between start and end indices (inclusive).
19
- */
20
13
  export declare function collectMessageIdsInRange(messages: WithParts[], startIndex: number, endIndex: number): string[];
21
- /**
22
- * Collects all textual content (text parts, tool inputs, and tool outputs)
23
- * from a range of messages. Used for token estimation.
24
- */
25
- export declare function collectContentInRange(messages: WithParts[], startIndex: number, endIndex: number): string[];
26
14
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/tools/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,SAAS,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,eAAe,EAAE,YAAK,EACzC,UAAU,EAAE,aAAa,GAAG,WAAW,GACxC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CA2D7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,SAAS,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACjB,MAAM,EAAE,CAiBV;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,SAAS,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACjB,MAAM,EAAE,CAWV;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,SAAS,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACjB,MAAM,EAAE,CAkCV"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/tools/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAA;AA6JD,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,SAAS,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,eAAe,EAAE,YAAK,EACzC,UAAU,EAAE,aAAa,GAAG,WAAW,EACvC,WAAW,GAAE,WAAkC,GAChD;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAuE7C;AAED,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,SAAS,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACjB,MAAM,EAAE,CAiBV;AAED,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,SAAS,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACjB,MAAM,EAAE,CAWV"}
@@ -1,60 +1,179 @@
1
- /**
2
- * Searches messages for a string and returns the message ID where it's found.
3
- * Searches in text parts, tool outputs, tool inputs, and other textual content.
4
- * Also searches through existing compress summaries to enable chained compression.
5
- * Throws an error if the string is not found or found more than once.
6
- */
7
- export function findStringInMessages(messages, searchString, logger, compressSummaries = [], stringType) {
1
+ import { partial_ratio } from "fuzzball";
2
+ export const DEFAULT_FUZZY_CONFIG = {
3
+ minScore: 95,
4
+ minGap: 15,
5
+ };
6
+ function extractMessageContent(msg) {
7
+ const parts = Array.isArray(msg.parts) ? msg.parts : [];
8
+ let content = "";
9
+ for (const part of parts) {
10
+ const p = part;
11
+ switch (part.type) {
12
+ case "text":
13
+ case "reasoning":
14
+ if (typeof p.text === "string") {
15
+ content += " " + p.text;
16
+ }
17
+ break;
18
+ case "tool": {
19
+ const state = p.state;
20
+ if (!state)
21
+ break;
22
+ // Include tool output (completed or error)
23
+ if (state.status === "completed" && typeof state.output === "string") {
24
+ content += " " + state.output;
25
+ }
26
+ else if (state.status === "error" && typeof state.error === "string") {
27
+ content += " " + state.error;
28
+ }
29
+ // Include tool input
30
+ if (state.input) {
31
+ content +=
32
+ " " +
33
+ (typeof state.input === "string"
34
+ ? state.input
35
+ : JSON.stringify(state.input));
36
+ }
37
+ break;
38
+ }
39
+ case "compaction":
40
+ if (typeof p.summary === "string") {
41
+ content += " " + p.summary;
42
+ }
43
+ break;
44
+ case "subtask":
45
+ if (typeof p.summary === "string") {
46
+ content += " " + p.summary;
47
+ }
48
+ if (typeof p.result === "string") {
49
+ content += " " + p.result;
50
+ }
51
+ break;
52
+ }
53
+ }
54
+ return content;
55
+ }
56
+ function findExactMatches(messages, searchString, compressSummaries) {
8
57
  const matches = [];
9
- // First, search through existing compress summaries
10
- // This allows referencing text from previous compress operations
58
+ const seenMessageIds = new Set();
59
+ // Search compress summaries first
11
60
  for (const summary of compressSummaries) {
12
61
  if (summary.summary.includes(searchString)) {
13
62
  const anchorIndex = messages.findIndex((m) => m.info.id === summary.anchorMessageId);
14
- if (anchorIndex !== -1) {
63
+ if (anchorIndex !== -1 && !seenMessageIds.has(summary.anchorMessageId)) {
64
+ seenMessageIds.add(summary.anchorMessageId);
15
65
  matches.push({
16
66
  messageId: summary.anchorMessageId,
17
67
  messageIndex: anchorIndex,
68
+ score: 100,
69
+ matchType: "exact",
18
70
  });
19
71
  }
20
72
  }
21
73
  }
22
- // Then search through raw messages
74
+ // Search raw messages
23
75
  for (let i = 0; i < messages.length; i++) {
24
76
  const msg = messages[i];
25
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
26
- for (const part of parts) {
27
- let content = "";
28
- if (part.type === "text" && typeof part.text === "string") {
29
- content = part.text;
30
- }
31
- else if (part.type === "tool" && part.state?.status === "completed") {
32
- if (typeof part.state.output === "string") {
33
- content = part.state.output;
34
- }
35
- if (part.state.input) {
36
- const inputStr = typeof part.state.input === "string"
37
- ? part.state.input
38
- : JSON.stringify(part.state.input);
39
- content += " " + inputStr;
40
- }
41
- }
42
- if (content.includes(searchString)) {
43
- matches.push({ messageId: msg.info.id, messageIndex: i });
77
+ if (seenMessageIds.has(msg.info.id))
78
+ continue;
79
+ const content = extractMessageContent(msg);
80
+ if (content.includes(searchString)) {
81
+ seenMessageIds.add(msg.info.id);
82
+ matches.push({
83
+ messageId: msg.info.id,
84
+ messageIndex: i,
85
+ score: 100,
86
+ matchType: "exact",
87
+ });
88
+ }
89
+ }
90
+ return matches;
91
+ }
92
+ function findFuzzyMatches(messages, searchString, compressSummaries, minScore) {
93
+ const matches = [];
94
+ const seenMessageIds = new Set();
95
+ // Search compress summaries first
96
+ for (const summary of compressSummaries) {
97
+ const score = partial_ratio(searchString, summary.summary);
98
+ if (score >= minScore) {
99
+ const anchorIndex = messages.findIndex((m) => m.info.id === summary.anchorMessageId);
100
+ if (anchorIndex !== -1 && !seenMessageIds.has(summary.anchorMessageId)) {
101
+ seenMessageIds.add(summary.anchorMessageId);
102
+ matches.push({
103
+ messageId: summary.anchorMessageId,
104
+ messageIndex: anchorIndex,
105
+ score,
106
+ matchType: "fuzzy",
107
+ });
44
108
  }
45
109
  }
46
110
  }
47
- if (matches.length === 0) {
48
- throw new Error(`${stringType} not found in conversation. Make sure the string exists and is spelled exactly as it appears.`);
111
+ // Search raw messages
112
+ for (let i = 0; i < messages.length; i++) {
113
+ const msg = messages[i];
114
+ if (seenMessageIds.has(msg.info.id))
115
+ continue;
116
+ const content = extractMessageContent(msg);
117
+ const score = partial_ratio(searchString, content);
118
+ if (score >= minScore) {
119
+ seenMessageIds.add(msg.info.id);
120
+ matches.push({
121
+ messageId: msg.info.id,
122
+ messageIndex: i,
123
+ score,
124
+ matchType: "fuzzy",
125
+ });
126
+ }
127
+ }
128
+ return matches;
129
+ }
130
+ export function findStringInMessages(messages, searchString, logger, compressSummaries = [], stringType, fuzzyConfig = DEFAULT_FUZZY_CONFIG) {
131
+ const searchableMessages = messages.length > 1 ? messages.slice(0, -1) : messages;
132
+ const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
133
+ const exactMatches = findExactMatches(searchableMessages, searchString, compressSummaries);
134
+ if (exactMatches.length === 1) {
135
+ return { messageId: exactMatches[0].messageId, messageIndex: exactMatches[0].messageIndex };
136
+ }
137
+ if (exactMatches.length > 1) {
138
+ throw new Error(`Found multiple matches for ${stringType}. ` +
139
+ `Provide more surrounding context to uniquely identify the intended match.`);
140
+ }
141
+ const fuzzyMatches = findFuzzyMatches(searchableMessages, searchString, compressSummaries, fuzzyConfig.minScore);
142
+ if (fuzzyMatches.length === 0) {
143
+ if (lastMessage) {
144
+ const lastMsgContent = extractMessageContent(lastMessage);
145
+ const lastMsgIndex = messages.length - 1;
146
+ if (lastMsgContent.includes(searchString)) {
147
+ // logger.info(
148
+ // `${stringType} found in last message (last resort) at index ${lastMsgIndex}`,
149
+ // )
150
+ return {
151
+ messageId: lastMessage.info.id,
152
+ messageIndex: lastMsgIndex,
153
+ };
154
+ }
155
+ }
156
+ throw new Error(`${stringType} not found in conversation. ` +
157
+ `Make sure the string exists and is spelled exactly as it appears.`);
49
158
  }
50
- if (matches.length > 1) {
51
- throw new Error(`Found multiple matches for ${stringType}. Provide more surrounding context to uniquely identify the intended match.`);
159
+ fuzzyMatches.sort((a, b) => b.score - a.score);
160
+ const best = fuzzyMatches[0];
161
+ const secondBest = fuzzyMatches[1];
162
+ // Log fuzzy match candidates
163
+ // logger.info(
164
+ // `Fuzzy match for ${stringType}: best=${best.score}% (msg ${best.messageIndex})` +
165
+ // (secondBest
166
+ // ? `, secondBest=${secondBest.score}% (msg ${secondBest.messageIndex})`
167
+ // : ""),
168
+ // )
169
+ // Check confidence gap - best must be significantly better than second best
170
+ if (secondBest && best.score - secondBest.score < fuzzyConfig.minGap) {
171
+ throw new Error(`Found multiple matches for ${stringType}. ` +
172
+ `Provide more unique surrounding context to disambiguate.`);
52
173
  }
53
- return matches[0];
174
+ logger.info(`Fuzzy matched ${stringType} with ${best.score}% confidence at message index ${best.messageIndex}`);
175
+ return { messageId: best.messageId, messageIndex: best.messageIndex };
54
176
  }
55
- /**
56
- * Collects all tool callIDs from messages between start and end indices (inclusive).
57
- */
58
177
  export function collectToolIdsInRange(messages, startIndex, endIndex) {
59
178
  const toolIds = [];
60
179
  for (let i = startIndex; i <= endIndex; i++) {
@@ -70,9 +189,6 @@ export function collectToolIdsInRange(messages, startIndex, endIndex) {
70
189
  }
71
190
  return toolIds;
72
191
  }
73
- /**
74
- * Collects all message IDs from messages between start and end indices (inclusive).
75
- */
76
192
  export function collectMessageIdsInRange(messages, startIndex, endIndex) {
77
193
  const messageIds = [];
78
194
  for (let i = startIndex; i <= endIndex; i++) {
@@ -83,39 +199,4 @@ export function collectMessageIdsInRange(messages, startIndex, endIndex) {
83
199
  }
84
200
  return messageIds;
85
201
  }
86
- /**
87
- * Collects all textual content (text parts, tool inputs, and tool outputs)
88
- * from a range of messages. Used for token estimation.
89
- */
90
- export function collectContentInRange(messages, startIndex, endIndex) {
91
- const contents = [];
92
- for (let i = startIndex; i <= endIndex; i++) {
93
- const msg = messages[i];
94
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
95
- for (const part of parts) {
96
- if (part.type === "text") {
97
- contents.push(part.text);
98
- }
99
- else if (part.type === "tool") {
100
- const toolState = part.state;
101
- if (toolState?.input) {
102
- contents.push(typeof toolState.input === "string"
103
- ? toolState.input
104
- : JSON.stringify(toolState.input));
105
- }
106
- if (toolState?.status === "completed" && toolState?.output) {
107
- contents.push(typeof toolState.output === "string"
108
- ? toolState.output
109
- : JSON.stringify(toolState.output));
110
- }
111
- else if (toolState?.status === "error" && toolState?.error) {
112
- contents.push(typeof toolState.error === "string"
113
- ? toolState.error
114
- : JSON.stringify(toolState.error));
115
- }
116
- }
117
- }
118
- }
119
- return contents;
120
- }
121
202
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/tools/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/tools/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@tarquinen/opencode-dcp",
4
- "version": "2.0.1",
4
+ "version": "2.0.3-beta.0",
5
5
  "type": "module",
6
6
  "description": "OpenCode plugin that optimizes token usage by pruning obsolete tool outputs from conversation context",
7
7
  "main": "./dist/index.js",
@@ -44,6 +44,7 @@
44
44
  "dependencies": {
45
45
  "@anthropic-ai/tokenizer": "^0.0.4",
46
46
  "@opencode-ai/sdk": "^1.1.48",
47
+ "fuzzball": "^2.2.3",
47
48
  "jsonc-parser": "^3.3.1",
48
49
  "ulid": "^3.0.2",
49
50
  "zod": "^4.3.6"