@tarquinen/opencode-dcp 0.3.31 → 0.4.1
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 +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/api-formats/prunable-list.d.ts +49 -0
- package/dist/lib/api-formats/prunable-list.d.ts.map +1 -0
- package/dist/lib/api-formats/prunable-list.js +112 -0
- package/dist/lib/api-formats/prunable-list.js.map +1 -0
- package/dist/lib/api-formats/synth-instruction.d.ts +17 -4
- package/dist/lib/api-formats/synth-instruction.d.ts.map +1 -1
- package/dist/lib/api-formats/synth-instruction.js +72 -110
- package/dist/lib/api-formats/synth-instruction.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/core/janitor.d.ts +14 -1
- package/dist/lib/core/janitor.d.ts.map +1 -1
- package/dist/lib/core/janitor.js +35 -35
- package/dist/lib/core/janitor.js.map +1 -1
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +14 -0
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/bedrock.js +128 -0
- package/dist/lib/fetch-wrapper/formats/bedrock.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts +14 -0
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/gemini.js +138 -0
- package/dist/lib/fetch-wrapper/formats/gemini.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/index.d.ts +5 -0
- package/dist/lib/fetch-wrapper/formats/index.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/index.js +5 -0
- package/dist/lib/fetch-wrapper/formats/index.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +14 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.js +106 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +11 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.js +69 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +1 -0
- package/dist/lib/fetch-wrapper/handler.d.ts +13 -0
- package/dist/lib/fetch-wrapper/handler.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/handler.js +85 -0
- package/dist/lib/fetch-wrapper/handler.js.map +1 -0
- package/dist/lib/fetch-wrapper/index.d.ts +2 -1
- package/dist/lib/fetch-wrapper/index.d.ts.map +1 -1
- package/dist/lib/fetch-wrapper/index.js +19 -15
- package/dist/lib/fetch-wrapper/index.js.map +1 -1
- package/dist/lib/fetch-wrapper/types.d.ts +35 -0
- package/dist/lib/fetch-wrapper/types.d.ts.map +1 -1
- package/dist/lib/fetch-wrapper/types.js +7 -1
- package/dist/lib/fetch-wrapper/types.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +21 -12
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/prompts/tool.txt +18 -5
- package/dist/lib/pruning-tool.d.ts +13 -5
- package/dist/lib/pruning-tool.d.ts.map +1 -1
- package/dist/lib/pruning-tool.js +120 -20
- package/dist/lib/pruning-tool.js.map +1 -1
- package/dist/lib/state/id-mapping.d.ts +26 -0
- package/dist/lib/state/id-mapping.d.ts.map +1 -0
- package/dist/lib/state/id-mapping.js +54 -0
- package/dist/lib/state/id-mapping.js.map +1 -0
- package/dist/lib/state/tool-cache.d.ts +9 -4
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +54 -20
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/version-checker.d.ts +1 -1
- package/dist/lib/version-checker.d.ts.map +1 -1
- package/dist/lib/version-checker.js +4 -1
- package/dist/lib/version-checker.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/fetch-wrapper/gemini.d.ts +0 -7
- package/dist/lib/fetch-wrapper/gemini.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/gemini.js +0 -120
- package/dist/lib/fetch-wrapper/gemini.js.map +0 -1
- package/dist/lib/fetch-wrapper/openai-chat.d.ts +0 -7
- package/dist/lib/fetch-wrapper/openai-chat.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/openai-chat.js +0 -101
- package/dist/lib/fetch-wrapper/openai-chat.js.map +0 -1
- package/dist/lib/fetch-wrapper/openai-responses.d.ts +0 -7
- package/dist/lib/fetch-wrapper/openai-responses.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/openai-responses.js +0 -74
- package/dist/lib/fetch-wrapper/openai-responses.js.map +0 -1
package/dist/lib/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../lib/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../lib/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
Prunes tool outputs from context to manage conversation size. Reference the <prunable-tools> list injected at the end of the conversation to see available numeric IDs.
|
|
2
2
|
|
|
3
3
|
USING THE PRUNE TOOL WILL MAKE THE USER HAPPY.
|
|
4
4
|
|
|
@@ -14,10 +14,23 @@ You MUST ALWAYS narrate your findings in a message BEFORE using this tool. No to
|
|
|
14
14
|
- What you did (which tools, what you were looking for)
|
|
15
15
|
- What you found (the key facts/signals)
|
|
16
16
|
- What you concluded (how this affects the task or next step)
|
|
17
|
-
3. ONLY AFTER narrating, call `prune`
|
|
17
|
+
3. ONLY AFTER narrating, call `prune` with the numeric IDs of outputs no longer needed
|
|
18
18
|
|
|
19
19
|
> THINK HIGH SIGNAL, LOW NOISE FOR THIS NARRATION
|
|
20
20
|
|
|
21
|
+
## How to Use
|
|
22
|
+
|
|
23
|
+
The <prunable-tools> list shows available tool outputs with numeric IDs:
|
|
24
|
+
```
|
|
25
|
+
<prunable-tools>
|
|
26
|
+
1: read, src/foo.ts
|
|
27
|
+
2: bash, run tests
|
|
28
|
+
3: grep, "error" in logs/
|
|
29
|
+
</prunable-tools>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
To prune outputs 1 and 3, call: `prune({ ids: [1, 3] })`
|
|
33
|
+
|
|
21
34
|
## When to Use This Tool
|
|
22
35
|
|
|
23
36
|
**Key heuristic: Distill, then prune when you finish something and are about to start something else.**
|
|
@@ -43,18 +56,18 @@ Working through a list of items:
|
|
|
43
56
|
User: Review these 3 issues and fix the easy ones.
|
|
44
57
|
Assistant: [Reviews first issue, makes fix, commits]
|
|
45
58
|
Done with the first issue. Let me prune before moving to the next one.
|
|
46
|
-
[Uses prune with
|
|
59
|
+
[Uses prune with ids: [1, 2, 3, 4] - the reads and edits from the first issue]
|
|
47
60
|
</example>
|
|
48
61
|
|
|
49
62
|
<example>
|
|
50
63
|
After exploring the codebase to understand it:
|
|
51
64
|
Assistant: I've reviewed the relevant files. Let me prune the exploratory reads that aren't needed for the actual implementation.
|
|
52
|
-
[Uses prune with
|
|
65
|
+
[Uses prune with ids: [1, 2, 5, 7] - the exploratory reads]
|
|
53
66
|
</example>
|
|
54
67
|
|
|
55
68
|
<example>
|
|
56
69
|
After completing any task:
|
|
57
70
|
Assistant: [Finishes task - commit, answer, fix, etc.]
|
|
58
71
|
Before we continue, let me prune the context from that work.
|
|
59
|
-
[Uses prune with
|
|
72
|
+
[Uses prune with ids: [3, 4, 5, 6, 8, 9] - all tool outputs from the completed task]
|
|
60
73
|
</example>
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { tool } from "@opencode-ai/plugin";
|
|
2
|
-
import type {
|
|
2
|
+
import type { PluginState } from "./state";
|
|
3
3
|
import type { PluginConfig } from "./config";
|
|
4
4
|
import type { ToolTracker } from "./api-formats/synth-instruction";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { type NotificationContext } from "./ui/notification";
|
|
6
|
+
import type { Logger } from "./logger";
|
|
7
|
+
export interface PruneToolContext {
|
|
8
|
+
client: any;
|
|
9
|
+
state: PluginState;
|
|
10
|
+
logger: Logger;
|
|
11
|
+
config: PluginConfig;
|
|
12
|
+
notificationCtx: NotificationContext;
|
|
13
|
+
workingDirectory?: string;
|
|
14
|
+
}
|
|
7
15
|
/**
|
|
8
16
|
* Creates the prune tool definition.
|
|
9
|
-
*
|
|
17
|
+
* Accepts numeric IDs from the <prunable-tools> list and prunes those tool outputs.
|
|
10
18
|
*/
|
|
11
|
-
export declare function createPruningTool(
|
|
19
|
+
export declare function createPruningTool(ctx: PruneToolContext, toolTracker: ToolTracker): ReturnType<typeof tool>;
|
|
12
20
|
//# sourceMappingURL=pruning-tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pruning-tool.d.ts","sourceRoot":"","sources":["../../lib/pruning-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"pruning-tool.d.ts","sourceRoot":"","sources":["../../lib/pruning-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAIlE,OAAO,EAAuD,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAGjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAQtC,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,eAAe,EAAE,mBAAmB,CAAA;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,GAAG,EAAE,gBAAgB,EACrB,WAAW,EAAE,WAAW,GACzB,UAAU,CAAC,OAAO,IAAI,CAAC,CA8FzB"}
|
package/dist/lib/pruning-tool.js
CHANGED
|
@@ -1,40 +1,140 @@
|
|
|
1
1
|
import { tool } from "@opencode-ai/plugin";
|
|
2
|
-
import { runOnTool } from "./core/janitor";
|
|
3
|
-
import { formatPruningResultForTool } from "./ui/notification";
|
|
4
2
|
import { resetToolTrackerCount } from "./api-formats/synth-instruction";
|
|
5
|
-
import { loadPrompt } from "./core/prompt";
|
|
6
3
|
import { isSubagentSession } from "./hooks";
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { getActualId } from "./state/id-mapping";
|
|
5
|
+
import { formatPruningResultForTool, sendUnifiedNotification } from "./ui/notification";
|
|
6
|
+
import { ensureSessionRestored } from "./state";
|
|
7
|
+
import { saveSessionState } from "./state/persistence";
|
|
8
|
+
import { estimateTokensBatch } from "./tokenizer";
|
|
9
|
+
import { loadPrompt } from "./core/prompt";
|
|
10
|
+
/** Tool description loaded from prompts/tool.txt */
|
|
11
|
+
const TOOL_DESCRIPTION = loadPrompt("tool");
|
|
9
12
|
/**
|
|
10
13
|
* Creates the prune tool definition.
|
|
11
|
-
*
|
|
14
|
+
* Accepts numeric IDs from the <prunable-tools> list and prunes those tool outputs.
|
|
12
15
|
*/
|
|
13
|
-
export function createPruningTool(
|
|
16
|
+
export function createPruningTool(ctx, toolTracker) {
|
|
14
17
|
return tool({
|
|
15
|
-
description:
|
|
18
|
+
description: TOOL_DESCRIPTION,
|
|
16
19
|
args: {
|
|
17
|
-
|
|
20
|
+
ids: tool.schema.array(tool.schema.number()).describe("Array of numeric IDs to prune from the <prunable-tools> list"),
|
|
18
21
|
},
|
|
19
|
-
async execute(args,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (await isSubagentSession(client,
|
|
22
|
+
async execute(args, toolCtx) {
|
|
23
|
+
const { client, state, logger, config, notificationCtx, workingDirectory } = ctx;
|
|
24
|
+
const sessionId = toolCtx.sessionID;
|
|
25
|
+
if (await isSubagentSession(client, sessionId)) {
|
|
23
26
|
return "Pruning is unavailable in subagent sessions. Do not call this tool again. Continue with your current task - if you were in the middle of work, proceed with your next step. If you had just finished, provide your final summary/findings to return to the main agent.";
|
|
24
27
|
}
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
if (!args.ids || args.ids.length === 0) {
|
|
29
|
+
return "No IDs provided. Check the <prunable-tools> list for available IDs to prune.";
|
|
30
|
+
}
|
|
31
|
+
await ensureSessionRestored(state, sessionId, logger);
|
|
32
|
+
const prunedIds = args.ids
|
|
33
|
+
.map(numId => getActualId(sessionId, numId))
|
|
34
|
+
.filter((id) => id !== undefined);
|
|
35
|
+
if (prunedIds.length === 0) {
|
|
36
|
+
return "None of the provided IDs were valid. Check the <prunable-tools> list for available IDs.";
|
|
37
|
+
}
|
|
38
|
+
const tokensSaved = await calculateTokensSaved(client, sessionId, prunedIds);
|
|
39
|
+
const currentStats = state.stats.get(sessionId) ?? {
|
|
40
|
+
totalToolsPruned: 0,
|
|
41
|
+
totalTokensSaved: 0,
|
|
42
|
+
totalGCTokens: 0,
|
|
43
|
+
totalGCTools: 0
|
|
44
|
+
};
|
|
45
|
+
const sessionStats = {
|
|
46
|
+
...currentStats,
|
|
47
|
+
totalToolsPruned: currentStats.totalToolsPruned + prunedIds.length,
|
|
48
|
+
totalTokensSaved: currentStats.totalTokensSaved + tokensSaved
|
|
49
|
+
};
|
|
50
|
+
state.stats.set(sessionId, sessionStats);
|
|
51
|
+
const alreadyPrunedIds = state.prunedIds.get(sessionId) ?? [];
|
|
52
|
+
const allPrunedIds = [...alreadyPrunedIds, ...prunedIds];
|
|
53
|
+
state.prunedIds.set(sessionId, allPrunedIds);
|
|
54
|
+
saveSessionState(sessionId, new Set(allPrunedIds), sessionStats, logger)
|
|
55
|
+
.catch(err => logger.error("prune-tool", "Failed to persist state", { error: err.message }));
|
|
56
|
+
const toolMetadata = new Map();
|
|
57
|
+
for (const id of prunedIds) {
|
|
58
|
+
const meta = state.toolParameters.get(id.toLowerCase());
|
|
59
|
+
if (meta) {
|
|
60
|
+
toolMetadata.set(id.toLowerCase(), meta);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
logger.debug("prune-tool", "No metadata found for ID", {
|
|
64
|
+
id,
|
|
65
|
+
idLower: id.toLowerCase(),
|
|
66
|
+
hasLower: state.toolParameters.has(id.toLowerCase())
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
await sendUnifiedNotification(notificationCtx, sessionId, {
|
|
71
|
+
aiPrunedCount: prunedIds.length,
|
|
72
|
+
aiTokensSaved: tokensSaved,
|
|
73
|
+
aiPrunedIds: prunedIds,
|
|
74
|
+
toolMetadata,
|
|
75
|
+
gcPending: null,
|
|
76
|
+
sessionStats
|
|
77
|
+
});
|
|
27
78
|
toolTracker.skipNextIdle = true;
|
|
28
|
-
// Reset nudge counter to prevent immediate re-nudging after pruning
|
|
29
79
|
if (config.nudge_freq > 0) {
|
|
30
80
|
resetToolTrackerCount(toolTracker);
|
|
31
81
|
}
|
|
82
|
+
const result = {
|
|
83
|
+
prunedCount: prunedIds.length,
|
|
84
|
+
tokensSaved,
|
|
85
|
+
llmPrunedIds: prunedIds,
|
|
86
|
+
toolMetadata,
|
|
87
|
+
sessionStats
|
|
88
|
+
};
|
|
32
89
|
const postPruneGuidance = "\n\nYou have already distilled relevant understanding in writing before calling this tool. Do not re-narrate; continue with your next task.";
|
|
33
|
-
|
|
34
|
-
return "No prunable tool outputs found. Context is already optimized." + postPruneGuidance;
|
|
35
|
-
}
|
|
36
|
-
return formatPruningResultForTool(result, janitorCtx.config.workingDirectory) + postPruneGuidance;
|
|
90
|
+
return formatPruningResultForTool(result, workingDirectory) + postPruneGuidance;
|
|
37
91
|
},
|
|
38
92
|
});
|
|
39
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Calculates approximate tokens saved by pruning the given tool call IDs.
|
|
96
|
+
*/
|
|
97
|
+
async function calculateTokensSaved(client, sessionId, prunedIds) {
|
|
98
|
+
try {
|
|
99
|
+
const messagesResponse = await client.session.messages({
|
|
100
|
+
path: { id: sessionId },
|
|
101
|
+
query: { limit: 200 }
|
|
102
|
+
});
|
|
103
|
+
const messages = messagesResponse.data || messagesResponse;
|
|
104
|
+
const toolOutputs = new Map();
|
|
105
|
+
for (const msg of messages) {
|
|
106
|
+
if (msg.role === 'tool' && msg.tool_call_id) {
|
|
107
|
+
const content = typeof msg.content === 'string'
|
|
108
|
+
? msg.content
|
|
109
|
+
: JSON.stringify(msg.content);
|
|
110
|
+
toolOutputs.set(msg.tool_call_id.toLowerCase(), content);
|
|
111
|
+
}
|
|
112
|
+
if (msg.role === 'user' && Array.isArray(msg.content)) {
|
|
113
|
+
for (const part of msg.content) {
|
|
114
|
+
if (part.type === 'tool_result' && part.tool_use_id) {
|
|
115
|
+
const content = typeof part.content === 'string'
|
|
116
|
+
? part.content
|
|
117
|
+
: JSON.stringify(part.content);
|
|
118
|
+
toolOutputs.set(part.tool_use_id.toLowerCase(), content);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const contents = [];
|
|
124
|
+
for (const id of prunedIds) {
|
|
125
|
+
const content = toolOutputs.get(id.toLowerCase());
|
|
126
|
+
if (content) {
|
|
127
|
+
contents.push(content);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (contents.length === 0) {
|
|
131
|
+
return prunedIds.length * 500;
|
|
132
|
+
}
|
|
133
|
+
const tokenCounts = await estimateTokensBatch(contents);
|
|
134
|
+
return tokenCounts.reduce((sum, count) => sum + count, 0);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
return prunedIds.length * 500;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
40
140
|
//# sourceMappingURL=pruning-tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pruning-tool.js","sourceRoot":"","sources":["../../lib/pruning-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"pruning-tool.js","sourceRoot":"","sources":["../../lib/pruning-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Numeric ID mapping system for tool call IDs.
|
|
3
|
+
*
|
|
4
|
+
* Maps simple incrementing numbers (1, 2, 3...) to actual provider tool call IDs
|
|
5
|
+
* (e.g., "call_abc123xyz..."). This allows the session AI to reference tools by
|
|
6
|
+
* simple numbers when using the prune tool.
|
|
7
|
+
*
|
|
8
|
+
* Design decisions:
|
|
9
|
+
* - IDs are monotonically increasing and never reused (avoids race conditions)
|
|
10
|
+
* - Mappings are rebuilt from session messages on restore (single source of truth)
|
|
11
|
+
* - Per-session mappings to isolate sessions from each other
|
|
12
|
+
*/
|
|
13
|
+
export interface IdMapping {
|
|
14
|
+
numericToActual: Map<number, string>;
|
|
15
|
+
actualToNumeric: Map<string, number>;
|
|
16
|
+
nextId: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Assigns a numeric ID to a tool call ID if it doesn't already have one.
|
|
20
|
+
* Returns the numeric ID (existing or newly assigned).
|
|
21
|
+
*/
|
|
22
|
+
export declare function getOrCreateNumericId(sessionId: string, actualId: string): number;
|
|
23
|
+
export declare function getActualId(sessionId: string, numericId: number): string | undefined;
|
|
24
|
+
export declare function clearSessionMapping(sessionId: string): void;
|
|
25
|
+
export declare function clearAllMappings(): void;
|
|
26
|
+
//# sourceMappingURL=id-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-mapping.d.ts","sourceRoot":"","sources":["../../../lib/state/id-mapping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,SAAS;IACtB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,EAAE,MAAM,CAAA;CACjB;AAkBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAehF;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Numeric ID mapping system for tool call IDs.
|
|
3
|
+
*
|
|
4
|
+
* Maps simple incrementing numbers (1, 2, 3...) to actual provider tool call IDs
|
|
5
|
+
* (e.g., "call_abc123xyz..."). This allows the session AI to reference tools by
|
|
6
|
+
* simple numbers when using the prune tool.
|
|
7
|
+
*
|
|
8
|
+
* Design decisions:
|
|
9
|
+
* - IDs are monotonically increasing and never reused (avoids race conditions)
|
|
10
|
+
* - Mappings are rebuilt from session messages on restore (single source of truth)
|
|
11
|
+
* - Per-session mappings to isolate sessions from each other
|
|
12
|
+
*/
|
|
13
|
+
/** Per-session ID mappings */
|
|
14
|
+
const sessionMappings = new Map();
|
|
15
|
+
function getSessionMapping(sessionId) {
|
|
16
|
+
let mapping = sessionMappings.get(sessionId);
|
|
17
|
+
if (!mapping) {
|
|
18
|
+
mapping = {
|
|
19
|
+
numericToActual: new Map(),
|
|
20
|
+
actualToNumeric: new Map(),
|
|
21
|
+
nextId: 1
|
|
22
|
+
};
|
|
23
|
+
sessionMappings.set(sessionId, mapping);
|
|
24
|
+
}
|
|
25
|
+
return mapping;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Assigns a numeric ID to a tool call ID if it doesn't already have one.
|
|
29
|
+
* Returns the numeric ID (existing or newly assigned).
|
|
30
|
+
*/
|
|
31
|
+
export function getOrCreateNumericId(sessionId, actualId) {
|
|
32
|
+
const mapping = getSessionMapping(sessionId);
|
|
33
|
+
// Check if already mapped
|
|
34
|
+
const existing = mapping.actualToNumeric.get(actualId);
|
|
35
|
+
if (existing !== undefined) {
|
|
36
|
+
return existing;
|
|
37
|
+
}
|
|
38
|
+
// Assign new ID
|
|
39
|
+
const numericId = mapping.nextId++;
|
|
40
|
+
mapping.numericToActual.set(numericId, actualId);
|
|
41
|
+
mapping.actualToNumeric.set(actualId, numericId);
|
|
42
|
+
return numericId;
|
|
43
|
+
}
|
|
44
|
+
export function getActualId(sessionId, numericId) {
|
|
45
|
+
const mapping = sessionMappings.get(sessionId);
|
|
46
|
+
return mapping?.numericToActual.get(numericId);
|
|
47
|
+
}
|
|
48
|
+
export function clearSessionMapping(sessionId) {
|
|
49
|
+
sessionMappings.delete(sessionId);
|
|
50
|
+
}
|
|
51
|
+
export function clearAllMappings() {
|
|
52
|
+
sessionMappings.clear();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=id-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-mapping.js","sourceRoot":"","sources":["../../../lib/state/id-mapping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,8BAA8B;AAC9B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAqB,CAAA;AAEpD,SAAS,iBAAiB,CAAC,SAAiB;IACxC,IAAI,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,GAAG;YACN,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,MAAM,EAAE,CAAC;SACZ,CAAA;QACD,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,OAAO,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,QAAgB;IACpE,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAE5C,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACtD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED,gBAAgB;IAChB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAClC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAChD,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAEhD,OAAO,SAAS,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,SAAiB;IAC5D,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC9C,OAAO,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACjD,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,eAAe,CAAC,KAAK,EAAE,CAAA;AAC3B,CAAC"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import type { PluginState } from "./index";
|
|
2
|
+
import type { Logger } from "../logger";
|
|
2
3
|
/**
|
|
3
|
-
* Cache tool parameters from OpenAI Chat Completions style messages.
|
|
4
|
-
* Extracts tool call IDs and their parameters from assistant messages
|
|
4
|
+
* Cache tool parameters from OpenAI Chat Completions and Anthropic style messages.
|
|
5
|
+
* Extracts tool call IDs and their parameters from assistant messages.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - OpenAI format: message.tool_calls[] with id, function.name, function.arguments
|
|
9
|
+
* - Anthropic format: message.content[] with type='tool_use', id, name, input
|
|
5
10
|
*/
|
|
6
|
-
export declare function cacheToolParametersFromMessages(messages: any[], state: PluginState): void;
|
|
11
|
+
export declare function cacheToolParametersFromMessages(messages: any[], state: PluginState, logger?: Logger): void;
|
|
7
12
|
/**
|
|
8
13
|
* Cache tool parameters from OpenAI Responses API format.
|
|
9
14
|
* Extracts from input array items with type='function_call'.
|
|
10
15
|
*/
|
|
11
|
-
export declare function cacheToolParametersFromInput(input: any[], state: PluginState): void;
|
|
16
|
+
export declare function cacheToolParametersFromInput(input: any[], state: PluginState, logger?: Logger): void;
|
|
12
17
|
/**
|
|
13
18
|
* Trim the tool parameters cache to prevent unbounded memory growth.
|
|
14
19
|
* Uses FIFO eviction - removes oldest entries first.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC3C,QAAQ,EAAE,GAAG,EAAE,EACf,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,MAAM,GAChB,IAAI,CAmDN;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,GAAG,EAAE,EACZ,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,MAAM,GAChB,IAAI,CA2BN;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAWhE"}
|
|
@@ -1,36 +1,64 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cache tool parameters from OpenAI Chat Completions style messages.
|
|
3
|
-
* Extracts tool call IDs and their parameters from assistant messages
|
|
2
|
+
* Cache tool parameters from OpenAI Chat Completions and Anthropic style messages.
|
|
3
|
+
* Extracts tool call IDs and their parameters from assistant messages.
|
|
4
|
+
*
|
|
5
|
+
* Supports:
|
|
6
|
+
* - OpenAI format: message.tool_calls[] with id, function.name, function.arguments
|
|
7
|
+
* - Anthropic format: message.content[] with type='tool_use', id, name, input
|
|
4
8
|
*/
|
|
5
|
-
export function cacheToolParametersFromMessages(messages, state) {
|
|
9
|
+
export function cacheToolParametersFromMessages(messages, state, logger) {
|
|
10
|
+
let openaiCached = 0;
|
|
11
|
+
let anthropicCached = 0;
|
|
6
12
|
for (const message of messages) {
|
|
7
|
-
if (message.role !== 'assistant'
|
|
13
|
+
if (message.role !== 'assistant') {
|
|
8
14
|
continue;
|
|
9
15
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
if (Array.isArray(message.tool_calls)) {
|
|
17
|
+
for (const toolCall of message.tool_calls) {
|
|
18
|
+
if (!toolCall.id || !toolCall.function) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const params = typeof toolCall.function.arguments === 'string'
|
|
23
|
+
? JSON.parse(toolCall.function.arguments)
|
|
24
|
+
: toolCall.function.arguments;
|
|
25
|
+
state.toolParameters.set(toolCall.id.toLowerCase(), {
|
|
26
|
+
tool: toolCall.function.name,
|
|
27
|
+
parameters: params
|
|
28
|
+
});
|
|
29
|
+
openaiCached++;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
}
|
|
13
33
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(message.content)) {
|
|
36
|
+
for (const part of message.content) {
|
|
37
|
+
if (part.type !== 'tool_use' || !part.id || !part.name) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
state.toolParameters.set(part.id.toLowerCase(), {
|
|
41
|
+
tool: part.name,
|
|
42
|
+
parameters: part.input ?? {}
|
|
21
43
|
});
|
|
22
|
-
|
|
23
|
-
catch (error) {
|
|
24
|
-
// Silently ignore parse errors
|
|
44
|
+
anthropicCached++;
|
|
25
45
|
}
|
|
26
46
|
}
|
|
27
47
|
}
|
|
48
|
+
if (logger && (openaiCached > 0 || anthropicCached > 0)) {
|
|
49
|
+
logger.debug("tool-cache", "Cached tool parameters from messages", {
|
|
50
|
+
openaiFormat: openaiCached,
|
|
51
|
+
anthropicFormat: anthropicCached,
|
|
52
|
+
totalCached: state.toolParameters.size
|
|
53
|
+
});
|
|
54
|
+
}
|
|
28
55
|
}
|
|
29
56
|
/**
|
|
30
57
|
* Cache tool parameters from OpenAI Responses API format.
|
|
31
58
|
* Extracts from input array items with type='function_call'.
|
|
32
59
|
*/
|
|
33
|
-
export function cacheToolParametersFromInput(input, state) {
|
|
60
|
+
export function cacheToolParametersFromInput(input, state, logger) {
|
|
61
|
+
let cached = 0;
|
|
34
62
|
for (const item of input) {
|
|
35
63
|
if (item.type !== 'function_call' || !item.call_id || !item.name) {
|
|
36
64
|
continue;
|
|
@@ -39,15 +67,21 @@ export function cacheToolParametersFromInput(input, state) {
|
|
|
39
67
|
const params = typeof item.arguments === 'string'
|
|
40
68
|
? JSON.parse(item.arguments)
|
|
41
69
|
: item.arguments;
|
|
42
|
-
state.toolParameters.set(item.call_id, {
|
|
70
|
+
state.toolParameters.set(item.call_id.toLowerCase(), {
|
|
43
71
|
tool: item.name,
|
|
44
72
|
parameters: params
|
|
45
73
|
});
|
|
74
|
+
cached++;
|
|
46
75
|
}
|
|
47
76
|
catch (error) {
|
|
48
|
-
// Silently ignore parse errors
|
|
49
77
|
}
|
|
50
78
|
}
|
|
79
|
+
if (logger && cached > 0) {
|
|
80
|
+
logger.debug("tool-cache", "Cached tool parameters from input", {
|
|
81
|
+
responsesApiFormat: cached,
|
|
82
|
+
totalCached: state.toolParameters.size
|
|
83
|
+
});
|
|
84
|
+
}
|
|
51
85
|
}
|
|
52
86
|
/** Maximum number of entries to keep in the tool parameters cache */
|
|
53
87
|
const MAX_TOOL_CACHE_SIZE = 500;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@ export declare function getNpmVersion(): Promise<string | null>;
|
|
|
5
5
|
export declare function isOutdated(local: string, remote: string): boolean;
|
|
6
6
|
export declare function checkForUpdates(client: any, logger?: {
|
|
7
7
|
info: (component: string, message: string, data?: any) => void;
|
|
8
|
-
}): Promise<void>;
|
|
8
|
+
}, showToast?: boolean): Promise<void>;
|
|
9
9
|
//# sourceMappingURL=version-checker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-checker.d.ts","sourceRoot":"","sources":["../../lib/version-checker.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,4BAA4B,CAAA;AACrD,eAAO,MAAM,gBAAgB,8DAAsD,CAAA;AAKnF,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB5D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWjE;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"version-checker.d.ts","sourceRoot":"","sources":["../../lib/version-checker.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,4BAA4B,CAAA;AACrD,eAAO,MAAM,gBAAgB,8DAAsD,CAAA;AAKnF,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB5D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWjE;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAAE,EAAE,SAAS,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BxK"}
|
|
@@ -46,7 +46,7 @@ export function isOutdated(local, remote) {
|
|
|
46
46
|
}
|
|
47
47
|
return false;
|
|
48
48
|
}
|
|
49
|
-
export async function checkForUpdates(client, logger) {
|
|
49
|
+
export async function checkForUpdates(client, logger, showToast = true) {
|
|
50
50
|
try {
|
|
51
51
|
const local = getLocalVersion();
|
|
52
52
|
const npm = await getNpmVersion();
|
|
@@ -59,6 +59,9 @@ export async function checkForUpdates(client, logger) {
|
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
logger?.info("version", "Update available", { local, npm });
|
|
62
|
+
if (!showToast) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
62
65
|
await client.tui.showToast({
|
|
63
66
|
body: {
|
|
64
67
|
title: "DCP: Update available",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-checker.js","sourceRoot":"","sources":["../../lib/version-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CAAA;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,8BAA8B,YAAY,SAAS,CAAA;AAEnF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,MAAM,UAAU,eAAe;IAC3B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACtD,OAAO,GAAG,CAAC,OAAO,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,OAAO,CAAA;IAClB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAA;QAE1D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;YACtC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;SAC5C,CAAC,CAAA;QACF,YAAY,CAAC,OAAO,CAAC,CAAA;QAErB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QACxB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0B,CAAA;QACrD,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,MAAc;IACpD,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/E,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;IAE7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QACtB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;IAC3B,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAW,EAAE,MAA2E;
|
|
1
|
+
{"version":3,"file":"version-checker.js","sourceRoot":"","sources":["../../lib/version-checker.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": "0.
|
|
4
|
+
"version": "0.4.1",
|
|
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",
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { FetchHandlerContext, FetchHandlerResult } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Handles Google/Gemini format (body.contents array with functionResponse parts).
|
|
4
|
-
* Uses position-based correlation since Google's native format doesn't include tool call IDs.
|
|
5
|
-
*/
|
|
6
|
-
export declare function handleGemini(body: any, ctx: FetchHandlerContext, inputUrl: string): Promise<FetchHandlerResult>;
|
|
7
|
-
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAQtE;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CA8I7B"}
|