@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.
- package/README.md +22 -4
- package/dist/lib/commands/context.js +3 -3
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/help.d.ts +2 -0
- package/dist/lib/commands/help.d.ts.map +1 -1
- package/dist/lib/commands/help.js +33 -8
- package/dist/lib/commands/help.js.map +1 -1
- package/dist/lib/commands/manual.d.ts +27 -0
- package/dist/lib/commands/manual.d.ts.map +1 -0
- package/dist/lib/commands/manual.js +85 -0
- package/dist/lib/commands/manual.js.map +1 -0
- package/dist/lib/commands/stats.js +2 -2
- package/dist/lib/commands/stats.js.map +1 -1
- package/dist/lib/commands/sweep.d.ts.map +1 -1
- package/dist/lib/commands/sweep.js +10 -8
- package/dist/lib/commands/sweep.js.map +1 -1
- package/dist/lib/config.d.ts +13 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +97 -17
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +70 -33
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/messages/inject.d.ts +1 -0
- package/dist/lib/messages/inject.d.ts.map +1 -1
- package/dist/lib/messages/inject.js +38 -12
- package/dist/lib/messages/inject.js.map +1 -1
- package/dist/lib/messages/prune.js +6 -6
- package/dist/lib/messages/prune.js.map +1 -1
- package/dist/lib/prompts/_codegen/system.generated.d.ts +1 -1
- package/dist/lib/prompts/_codegen/system.generated.d.ts.map +1 -1
- package/dist/lib/prompts/_codegen/system.generated.js +10 -0
- package/dist/lib/prompts/_codegen/system.generated.js.map +1 -1
- package/dist/lib/prompts/index.d.ts +1 -0
- package/dist/lib/prompts/index.d.ts.map +1 -1
- package/dist/lib/prompts/index.js +1 -1
- package/dist/lib/prompts/index.js.map +1 -1
- package/dist/lib/shared-utils.js +1 -1
- package/dist/lib/shared-utils.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +5 -3
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +12 -6
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts +2 -2
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +18 -15
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/tool-cache.d.ts +2 -2
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +2 -2
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +8 -2
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/state/utils.d.ts +1 -0
- package/dist/lib/state/utils.d.ts.map +1 -1
- package/dist/lib/state/utils.js +9 -2
- package/dist/lib/state/utils.js.map +1 -1
- package/dist/lib/strategies/deduplication.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.js +12 -5
- package/dist/lib/strategies/deduplication.js.map +1 -1
- package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
- package/dist/lib/strategies/purge-errors.js +8 -4
- package/dist/lib/strategies/purge-errors.js.map +1 -1
- package/dist/lib/strategies/supersede-writes.d.ts.map +1 -1
- package/dist/lib/strategies/supersede-writes.js +17 -7
- package/dist/lib/strategies/supersede-writes.js.map +1 -1
- package/dist/lib/strategies/utils.d.ts +2 -1
- package/dist/lib/strategies/utils.d.ts.map +1 -1
- package/dist/lib/strategies/utils.js +18 -19
- package/dist/lib/strategies/utils.js.map +1 -1
- package/dist/lib/tools/compress.d.ts.map +1 -1
- package/dist/lib/tools/compress.js +20 -16
- package/dist/lib/tools/compress.js.map +1 -1
- package/dist/lib/tools/prune-shared.d.ts.map +1 -1
- package/dist/lib/tools/prune-shared.js +10 -5
- package/dist/lib/tools/prune-shared.js.map +1 -1
- package/dist/lib/tools/utils.d.ts +6 -18
- package/dist/lib/tools/utils.d.ts.map +1 -1
- package/dist/lib/tools/utils.js +157 -76
- package/dist/lib/tools/utils.js.map +1 -1
- 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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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":"
|
|
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"}
|
package/dist/lib/tools/utils.js
CHANGED
|
@@ -1,60 +1,179 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
10
|
-
//
|
|
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
|
-
//
|
|
74
|
+
// Search raw messages
|
|
23
75
|
for (let i = 0; i < messages.length; i++) {
|
|
24
76
|
const msg = messages[i];
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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":"
|
|
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.
|
|
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"
|