@tarquinen/opencode-dcp 1.0.4 → 1.1.0-beta.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 +30 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -16
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +20 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +153 -33
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/messages/prune.d.ts.map +1 -1
- package/dist/lib/messages/prune.js +67 -15
- package/dist/lib/messages/prune.js.map +1 -1
- package/dist/lib/prompt.js +1 -1
- package/dist/lib/prompt.js.map +1 -1
- package/dist/lib/prompts/discard-tool-spec.txt +56 -0
- package/dist/lib/prompts/extract-tool-spec.txt +79 -0
- package/dist/lib/prompts/nudge/nudge-both.txt +10 -0
- package/dist/lib/prompts/nudge/nudge-discard.txt +9 -0
- package/dist/lib/prompts/nudge/nudge-extract.txt +9 -0
- package/dist/lib/prompts/{synthetic.txt → system/system-prompt-both.txt} +23 -13
- package/dist/lib/prompts/system/system-prompt-discard.txt +49 -0
- package/dist/lib/prompts/system/system-prompt-extract.txt +49 -0
- package/dist/lib/state/state.d.ts +1 -0
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +20 -2
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +27 -7
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +2 -0
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.js +1 -1
- package/dist/lib/strategies/deduplication.js.map +1 -1
- package/dist/lib/strategies/index.d.ts +1 -1
- package/dist/lib/strategies/index.d.ts.map +1 -1
- package/dist/lib/strategies/index.js +1 -1
- package/dist/lib/strategies/index.js.map +1 -1
- package/dist/lib/strategies/on-idle.d.ts.map +1 -1
- package/dist/lib/strategies/on-idle.js +2 -1
- package/dist/lib/strategies/on-idle.js.map +1 -1
- package/dist/lib/strategies/{prune-tool.d.ts → tools.d.ts} +3 -6
- package/dist/lib/strategies/tools.d.ts.map +1 -0
- package/dist/lib/strategies/tools.js +121 -0
- package/dist/lib/strategies/tools.js.map +1 -0
- package/dist/lib/strategies/utils.d.ts +0 -1
- package/dist/lib/strategies/utils.d.ts.map +1 -1
- package/dist/lib/strategies/utils.js +0 -1
- package/dist/lib/strategies/utils.js.map +1 -1
- package/dist/lib/ui/notification.d.ts +1 -0
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +21 -0
- package/dist/lib/ui/notification.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/prompts/nudge.txt +0 -10
- package/dist/lib/prompts/tool.txt +0 -72
- package/dist/lib/strategies/prune-tool.d.ts.map +0 -1
- package/dist/lib/strategies/prune-tool.js +0 -88
- package/dist/lib/strategies/prune-tool.js.map +0 -1
- /package/dist/lib/prompts/{pruning.txt → on-idle-analysis.txt} +0 -0
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { tool } from "@opencode-ai/plugin";
|
|
2
|
-
import { buildToolIdList } from "../messages/utils";
|
|
3
|
-
import { sendUnifiedNotification } from "../ui/notification";
|
|
4
|
-
import { formatPruningResultForTool } from "../ui/utils";
|
|
5
|
-
import { ensureSessionInitialized } from "../state";
|
|
6
|
-
import { saveSessionState } from "../state/persistence";
|
|
7
|
-
import { loadPrompt } from "../prompt";
|
|
8
|
-
import { calculateTokensSaved, getCurrentParams } from "./utils";
|
|
9
|
-
/** Tool description loaded from prompts/tool.txt */
|
|
10
|
-
const TOOL_DESCRIPTION = loadPrompt("tool");
|
|
11
|
-
/**
|
|
12
|
-
* Creates the prune tool definition.
|
|
13
|
-
* Accepts numeric IDs from the <prunable-tools> list and prunes those tool outputs.
|
|
14
|
-
*/
|
|
15
|
-
export function createPruneTool(ctx) {
|
|
16
|
-
return tool({
|
|
17
|
-
description: TOOL_DESCRIPTION,
|
|
18
|
-
args: {
|
|
19
|
-
ids: tool.schema.array(tool.schema.string()).describe("First element is the reason ('completion', 'noise', 'consolidation'), followed by numeric IDs as strings to prune"),
|
|
20
|
-
},
|
|
21
|
-
async execute(args, toolCtx) {
|
|
22
|
-
const { client, state, logger, config, workingDirectory } = ctx;
|
|
23
|
-
const sessionId = toolCtx.sessionID;
|
|
24
|
-
logger.info("Prune tool invoked");
|
|
25
|
-
logger.info(JSON.stringify(args));
|
|
26
|
-
if (!args.ids || args.ids.length === 0) {
|
|
27
|
-
logger.debug("Prune tool called but args.ids is empty or undefined: " + JSON.stringify(args));
|
|
28
|
-
return "No IDs provided. Check the <prunable-tools> list for available IDs to prune.";
|
|
29
|
-
}
|
|
30
|
-
// Parse reason from first element, numeric IDs from the rest
|
|
31
|
-
const reason = args.ids[0];
|
|
32
|
-
const validReasons = ["completion", "noise", "consolidation"];
|
|
33
|
-
if (typeof reason !== "string" || !validReasons.includes(reason)) {
|
|
34
|
-
logger.debug("Invalid pruning reason provided: " + reason);
|
|
35
|
-
return "No valid pruning reason found. Use 'completion', 'noise', or 'consolidation' as the first element.";
|
|
36
|
-
}
|
|
37
|
-
const numericToolIds = args.ids.slice(1)
|
|
38
|
-
.map(id => parseInt(id, 10))
|
|
39
|
-
.filter((n) => !isNaN(n));
|
|
40
|
-
if (numericToolIds.length === 0) {
|
|
41
|
-
logger.debug("No numeric tool IDs provided for pruning, yet prune tool was called: " + JSON.stringify(args));
|
|
42
|
-
return "No numeric IDs provided. Format: [reason, id1, id2, ...] where reason is 'completion', 'noise', or 'consolidation'.";
|
|
43
|
-
}
|
|
44
|
-
// Fetch messages to calculate tokens and find current agent
|
|
45
|
-
const messagesResponse = await client.session.messages({
|
|
46
|
-
path: { id: sessionId }
|
|
47
|
-
});
|
|
48
|
-
const messages = messagesResponse.data || messagesResponse;
|
|
49
|
-
await ensureSessionInitialized(ctx.client, state, sessionId, logger, messages);
|
|
50
|
-
const currentParams = getCurrentParams(messages, logger);
|
|
51
|
-
const toolIdList = buildToolIdList(state, messages, logger);
|
|
52
|
-
// Validate that all numeric IDs are within bounds
|
|
53
|
-
if (numericToolIds.some(id => id < 0 || id >= toolIdList.length)) {
|
|
54
|
-
logger.debug("Invalid tool IDs provided: " + numericToolIds.join(", "));
|
|
55
|
-
return "Invalid IDs provided. Only use numeric IDs from the <prunable-tools> list.";
|
|
56
|
-
}
|
|
57
|
-
// Check for protected tools (model hallucinated an ID not in the prunable list)
|
|
58
|
-
for (const index of numericToolIds) {
|
|
59
|
-
const id = toolIdList[index];
|
|
60
|
-
const metadata = state.toolParameters.get(id);
|
|
61
|
-
if (metadata && config.strategies.pruneTool.protectedTools.includes(metadata.tool)) {
|
|
62
|
-
return "Invalid IDs provided. Only use numeric IDs from the <prunable-tools> list.";
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const pruneToolIds = numericToolIds.map(index => toolIdList[index]);
|
|
66
|
-
state.prune.toolIds.push(...pruneToolIds);
|
|
67
|
-
const toolMetadata = new Map();
|
|
68
|
-
for (const id of pruneToolIds) {
|
|
69
|
-
const toolParameters = state.toolParameters.get(id);
|
|
70
|
-
if (toolParameters) {
|
|
71
|
-
toolMetadata.set(id, toolParameters);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
logger.debug("No metadata found for ID", { id });
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
state.stats.pruneTokenCounter += calculateTokensSaved(state, messages, pruneToolIds);
|
|
78
|
-
await sendUnifiedNotification(client, logger, config, state, sessionId, pruneToolIds, toolMetadata, reason, currentParams, workingDirectory);
|
|
79
|
-
state.stats.totalPruneTokens += state.stats.pruneTokenCounter;
|
|
80
|
-
state.stats.pruneTokenCounter = 0;
|
|
81
|
-
state.nudgeCounter = 0;
|
|
82
|
-
saveSessionState(state, logger)
|
|
83
|
-
.catch(err => logger.error("Failed to persist state", { error: err.message }));
|
|
84
|
-
return formatPruningResultForTool(pruneToolIds, toolMetadata, workingDirectory);
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=prune-tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prune-tool.js","sourceRoot":"","sources":["../../../lib/strategies/prune-tool.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|