@tarquinen/opencode-dcp 0.4.17 → 1.0.0-beta.2
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 +58 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -59
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +30 -13
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +339 -121
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts +5 -13
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +26 -125
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/logger.d.ts +5 -9
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +30 -160
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/messages/index.d.ts +2 -0
- package/dist/lib/messages/index.d.ts.map +1 -0
- package/dist/lib/messages/index.js +2 -0
- package/dist/lib/messages/index.js.map +1 -0
- package/dist/lib/messages/prune.d.ts +6 -0
- package/dist/lib/messages/prune.d.ts.map +1 -0
- package/dist/lib/messages/prune.js +85 -0
- package/dist/lib/messages/prune.js.map +1 -0
- package/dist/lib/messages/utils.d.ts +10 -0
- package/dist/lib/messages/utils.d.ts.map +1 -0
- package/dist/lib/messages/utils.js +103 -0
- package/dist/lib/messages/utils.js.map +1 -0
- package/dist/lib/model-selector.js +3 -3
- package/dist/lib/model-selector.js.map +1 -1
- package/dist/lib/{core/prompt.d.ts → prompt.d.ts} +1 -1
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/{core/prompt.js → prompt.js} +2 -6
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/prompts/pruning.txt +1 -1
- package/dist/lib/prompts/tool.txt +3 -3
- package/dist/lib/state/index.d.ts +3 -27
- package/dist/lib/state/index.d.ts.map +1 -1
- package/dist/lib/state/index.js +3 -40
- package/dist/lib/state/index.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +4 -4
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +24 -20
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts +7 -0
- package/dist/lib/state/state.d.ts.map +1 -0
- package/dist/lib/state/state.js +76 -0
- package/dist/lib/state/state.js.map +1 -0
- package/dist/lib/state/tool-cache.d.ts +4 -6
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +20 -46
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +30 -0
- package/dist/lib/state/types.d.ts.map +1 -0
- package/dist/lib/state/types.js +2 -0
- package/dist/lib/state/types.js.map +1 -0
- package/dist/lib/strategies/deduplication.d.ts +10 -0
- package/dist/lib/strategies/deduplication.d.ts.map +1 -0
- package/dist/lib/strategies/deduplication.js +89 -0
- package/dist/lib/strategies/deduplication.js.map +1 -0
- package/dist/lib/strategies/index.d.ts +4 -0
- package/dist/lib/strategies/index.d.ts.map +1 -0
- package/dist/lib/strategies/index.js +4 -0
- package/dist/lib/strategies/index.js.map +1 -0
- package/dist/lib/strategies/on-idle.d.ts +14 -0
- package/dist/lib/strategies/on-idle.d.ts.map +1 -0
- package/dist/lib/strategies/on-idle.js +216 -0
- package/dist/lib/strategies/on-idle.js.map +1 -0
- package/dist/lib/strategies/prune-tool.d.ts +17 -0
- package/dist/lib/strategies/prune-tool.d.ts.map +1 -0
- package/dist/lib/strategies/prune-tool.js +70 -0
- package/dist/lib/strategies/prune-tool.js.map +1 -0
- package/dist/lib/ui/display-utils.d.ts +3 -12
- package/dist/lib/ui/display-utils.d.ts.map +1 -1
- package/dist/lib/ui/display-utils.js +12 -79
- package/dist/lib/ui/display-utils.js.map +1 -1
- package/dist/lib/ui/notification.d.ts +7 -23
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +38 -47
- package/dist/lib/ui/notification.js.map +1 -1
- package/dist/lib/utils.d.ts +9 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +61 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +1 -1
- package/dist/lib/core/janitor.d.ts +0 -38
- package/dist/lib/core/janitor.d.ts.map +0 -1
- package/dist/lib/core/janitor.js +0 -294
- package/dist/lib/core/janitor.js.map +0 -1
- package/dist/lib/core/prompt.d.ts.map +0 -1
- package/dist/lib/core/prompt.js.map +0 -1
- package/dist/lib/core/strategies/deduplication.d.ts +0 -7
- package/dist/lib/core/strategies/deduplication.d.ts.map +0 -1
- package/dist/lib/core/strategies/deduplication.js +0 -76
- package/dist/lib/core/strategies/deduplication.js.map +0 -1
- package/dist/lib/core/strategies/index.d.ts +0 -51
- package/dist/lib/core/strategies/index.d.ts.map +0 -1
- package/dist/lib/core/strategies/index.js +0 -48
- package/dist/lib/core/strategies/index.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/anthropic.d.ts +0 -8
- package/dist/lib/fetch-wrapper/formats/anthropic.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/anthropic.js +0 -96
- package/dist/lib/fetch-wrapper/formats/anthropic.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +0 -8
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/bedrock.js +0 -97
- package/dist/lib/fetch-wrapper/formats/bedrock.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts +0 -8
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/gemini.js +0 -134
- package/dist/lib/fetch-wrapper/formats/gemini.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/index.d.ts +0 -6
- package/dist/lib/fetch-wrapper/formats/index.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/index.js +0 -6
- package/dist/lib/fetch-wrapper/formats/index.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +0 -3
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-chat.js +0 -100
- package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +0 -3
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-responses.js +0 -63
- package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +0 -1
- package/dist/lib/fetch-wrapper/gc-tracker.d.ts +0 -4
- package/dist/lib/fetch-wrapper/gc-tracker.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/gc-tracker.js +0 -61
- package/dist/lib/fetch-wrapper/gc-tracker.js.map +0 -1
- package/dist/lib/fetch-wrapper/handler.d.ts +0 -3
- package/dist/lib/fetch-wrapper/handler.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/handler.js +0 -118
- package/dist/lib/fetch-wrapper/handler.js.map +0 -1
- package/dist/lib/fetch-wrapper/index.d.ts +0 -18
- package/dist/lib/fetch-wrapper/index.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/index.js +0 -107
- package/dist/lib/fetch-wrapper/index.js.map +0 -1
- package/dist/lib/fetch-wrapper/prunable-list.d.ts +0 -8
- package/dist/lib/fetch-wrapper/prunable-list.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/prunable-list.js +0 -38
- package/dist/lib/fetch-wrapper/prunable-list.js.map +0 -1
- package/dist/lib/fetch-wrapper/tool-tracker.d.ts +0 -9
- package/dist/lib/fetch-wrapper/tool-tracker.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/tool-tracker.js +0 -12
- package/dist/lib/fetch-wrapper/tool-tracker.js.map +0 -1
- package/dist/lib/fetch-wrapper/types.d.ts +0 -62
- package/dist/lib/fetch-wrapper/types.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/types.js +0 -7
- package/dist/lib/fetch-wrapper/types.js.map +0 -1
- package/dist/lib/pruning-tool.d.ts +0 -20
- package/dist/lib/pruning-tool.d.ts.map +0 -1
- package/dist/lib/pruning-tool.js +0 -160
- package/dist/lib/pruning-tool.js.map +0 -1
- package/dist/lib/state/id-mapping.d.ts +0 -25
- package/dist/lib/state/id-mapping.d.ts.map +0 -1
- package/dist/lib/state/id-mapping.js +0 -51
- package/dist/lib/state/id-mapping.js.map +0 -1
- package/dist/lib/tokenizer.d.ts +0 -3
- package/dist/lib/tokenizer.d.ts.map +0 -1
- package/dist/lib/tokenizer.js +0 -16
- package/dist/lib/tokenizer.js.map +0 -1
- package/dist/lib/version-checker.d.ts +0 -9
- package/dist/lib/version-checker.d.ts.map +0 -1
- package/dist/lib/version-checker.js +0 -77
- package/dist/lib/version-checker.js.map +0 -1
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { PruningResult } from "../core/janitor";
|
|
3
|
-
/**
|
|
4
|
-
* Extracts a human-readable key from tool metadata for display purposes.
|
|
5
|
-
* Used by both deduplication and AI analysis to show what was pruned.
|
|
6
|
-
*/
|
|
7
|
-
export declare function extractParameterKey(metadata: {
|
|
8
|
-
tool: string;
|
|
9
|
-
parameters?: any;
|
|
10
|
-
}): string;
|
|
1
|
+
import { ToolParameterEntry } from "../state";
|
|
11
2
|
export declare function truncate(str: string, maxLen?: number): string;
|
|
12
3
|
export declare function shortenPath(input: string, workingDirectory?: string): string;
|
|
13
4
|
/**
|
|
14
5
|
* Formats a list of pruned items in the style: "→ tool: parameter"
|
|
15
6
|
*/
|
|
16
|
-
export declare function formatPrunedItemsList(
|
|
7
|
+
export declare function formatPrunedItemsList(pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string): string[];
|
|
17
8
|
/**
|
|
18
9
|
* Formats a PruningResult into a human-readable string for the prune tool output.
|
|
19
10
|
*/
|
|
20
|
-
export declare function formatPruningResultForTool(
|
|
11
|
+
export declare function formatPruningResultForTool(prunedIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string): string;
|
|
21
12
|
//# sourceMappingURL=display-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-utils.d.ts","sourceRoot":"","sources":["../../../lib/ui/display-utils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"display-utils.d.ts","sourceRoot":"","sources":["../../../lib/ui/display-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAG7C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5E;AAeD;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,EAAE,CA4BV;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAWR"}
|
|
@@ -1,70 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Extracts a human-readable key from tool metadata for display purposes.
|
|
3
|
-
* Used by both deduplication and AI analysis to show what was pruned.
|
|
4
|
-
*/
|
|
5
|
-
export function extractParameterKey(metadata) {
|
|
6
|
-
if (!metadata.parameters)
|
|
7
|
-
return '';
|
|
8
|
-
const { tool, parameters } = metadata;
|
|
9
|
-
if (tool === "read" && parameters.filePath) {
|
|
10
|
-
return parameters.filePath;
|
|
11
|
-
}
|
|
12
|
-
if (tool === "write" && parameters.filePath) {
|
|
13
|
-
return parameters.filePath;
|
|
14
|
-
}
|
|
15
|
-
if (tool === "edit" && parameters.filePath) {
|
|
16
|
-
return parameters.filePath;
|
|
17
|
-
}
|
|
18
|
-
if (tool === "list") {
|
|
19
|
-
return parameters.path || '(current directory)';
|
|
20
|
-
}
|
|
21
|
-
if (tool === "glob") {
|
|
22
|
-
if (parameters.pattern) {
|
|
23
|
-
const pathInfo = parameters.path ? ` in ${parameters.path}` : "";
|
|
24
|
-
return `"${parameters.pattern}"${pathInfo}`;
|
|
25
|
-
}
|
|
26
|
-
return '(unknown pattern)';
|
|
27
|
-
}
|
|
28
|
-
if (tool === "grep") {
|
|
29
|
-
if (parameters.pattern) {
|
|
30
|
-
const pathInfo = parameters.path ? ` in ${parameters.path}` : "";
|
|
31
|
-
return `"${parameters.pattern}"${pathInfo}`;
|
|
32
|
-
}
|
|
33
|
-
return '(unknown pattern)';
|
|
34
|
-
}
|
|
35
|
-
if (tool === "bash") {
|
|
36
|
-
if (parameters.description)
|
|
37
|
-
return parameters.description;
|
|
38
|
-
if (parameters.command) {
|
|
39
|
-
return parameters.command.length > 50
|
|
40
|
-
? parameters.command.substring(0, 50) + "..."
|
|
41
|
-
: parameters.command;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (tool === "webfetch" && parameters.url) {
|
|
45
|
-
return parameters.url;
|
|
46
|
-
}
|
|
47
|
-
if (tool === "websearch" && parameters.query) {
|
|
48
|
-
return `"${parameters.query}"`;
|
|
49
|
-
}
|
|
50
|
-
if (tool === "codesearch" && parameters.query) {
|
|
51
|
-
return `"${parameters.query}"`;
|
|
52
|
-
}
|
|
53
|
-
if (tool === "todowrite") {
|
|
54
|
-
return `${parameters.todos?.length || 0} todos`;
|
|
55
|
-
}
|
|
56
|
-
if (tool === "todoread") {
|
|
57
|
-
return "read todo list";
|
|
58
|
-
}
|
|
59
|
-
if (tool === "task" && parameters.description) {
|
|
60
|
-
return parameters.description;
|
|
61
|
-
}
|
|
62
|
-
const paramStr = JSON.stringify(parameters);
|
|
63
|
-
if (paramStr === '{}' || paramStr === '[]' || paramStr === 'null') {
|
|
64
|
-
return '';
|
|
65
|
-
}
|
|
66
|
-
return paramStr.substring(0, 50);
|
|
67
|
-
}
|
|
1
|
+
import { extractParameterKey } from "../messages/utils";
|
|
68
2
|
export function truncate(str, maxLen = 60) {
|
|
69
3
|
if (str.length <= maxLen)
|
|
70
4
|
return str;
|
|
@@ -94,13 +28,12 @@ function shortenSinglePath(path, workingDirectory) {
|
|
|
94
28
|
/**
|
|
95
29
|
* Formats a list of pruned items in the style: "→ tool: parameter"
|
|
96
30
|
*/
|
|
97
|
-
export function formatPrunedItemsList(
|
|
31
|
+
export function formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirectory) {
|
|
98
32
|
const lines = [];
|
|
99
|
-
for (const
|
|
100
|
-
const
|
|
101
|
-
const metadata = toolMetadata.get(normalizedId);
|
|
33
|
+
for (const id of pruneToolIds) {
|
|
34
|
+
const metadata = toolMetadata.get(id);
|
|
102
35
|
if (metadata) {
|
|
103
|
-
const paramKey = extractParameterKey(metadata);
|
|
36
|
+
const paramKey = extractParameterKey(metadata.tool, metadata.parameters);
|
|
104
37
|
if (paramKey) {
|
|
105
38
|
// Use 60 char limit to match notification style
|
|
106
39
|
const displayKey = truncate(shortenPath(paramKey, workingDirectory), 60);
|
|
@@ -111,8 +44,8 @@ export function formatPrunedItemsList(prunedIds, toolMetadata, workingDirectory)
|
|
|
111
44
|
}
|
|
112
45
|
}
|
|
113
46
|
}
|
|
114
|
-
const knownCount =
|
|
115
|
-
const unknownCount =
|
|
47
|
+
const knownCount = pruneToolIds.filter(id => toolMetadata.has(id)).length;
|
|
48
|
+
const unknownCount = pruneToolIds.length - knownCount;
|
|
116
49
|
if (unknownCount > 0) {
|
|
117
50
|
lines.push(`→ (${unknownCount} tool${unknownCount > 1 ? 's' : ''} with unknown metadata)`);
|
|
118
51
|
}
|
|
@@ -121,13 +54,13 @@ export function formatPrunedItemsList(prunedIds, toolMetadata, workingDirectory)
|
|
|
121
54
|
/**
|
|
122
55
|
* Formats a PruningResult into a human-readable string for the prune tool output.
|
|
123
56
|
*/
|
|
124
|
-
export function formatPruningResultForTool(
|
|
57
|
+
export function formatPruningResultForTool(prunedIds, toolMetadata, workingDirectory) {
|
|
125
58
|
const lines = [];
|
|
126
|
-
lines.push(`Context pruning complete. Pruned ${
|
|
59
|
+
lines.push(`Context pruning complete. Pruned ${prunedIds.length} tool outputs.`);
|
|
127
60
|
lines.push('');
|
|
128
|
-
if (
|
|
129
|
-
lines.push(`Semantically pruned (${
|
|
130
|
-
lines.push(...formatPrunedItemsList(
|
|
61
|
+
if (prunedIds.length > 0) {
|
|
62
|
+
lines.push(`Semantically pruned (${prunedIds.length}):`);
|
|
63
|
+
lines.push(...formatPrunedItemsList(prunedIds, toolMetadata, workingDirectory));
|
|
131
64
|
}
|
|
132
65
|
return lines.join('\n').trim();
|
|
133
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-utils.js","sourceRoot":"","sources":["../../../lib/ui/display-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"display-utils.js","sourceRoot":"","sources":["../../../lib/ui/display-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,9 @@
|
|
|
1
1
|
import type { Logger } from "../logger";
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export interface NotificationContext {
|
|
10
|
-
client: any;
|
|
11
|
-
logger: Logger;
|
|
12
|
-
config: NotificationConfig;
|
|
13
|
-
}
|
|
14
|
-
export interface NotificationData {
|
|
15
|
-
aiPrunedCount: number;
|
|
16
|
-
aiTokensSaved: number;
|
|
17
|
-
aiPrunedIds: string[];
|
|
18
|
-
toolMetadata: Map<string, ToolMetadata>;
|
|
19
|
-
gcPending: GCStats | null;
|
|
20
|
-
sessionStats: SessionStats | null;
|
|
21
|
-
reason?: PruneReason;
|
|
22
|
-
}
|
|
23
|
-
export declare function sendUnifiedNotification(ctx: NotificationContext, sessionID: string, data: NotificationData, agent?: string): Promise<boolean>;
|
|
24
|
-
export declare function sendIgnoredMessage(ctx: NotificationContext, sessionID: string, text: string, agent?: string): Promise<void>;
|
|
2
|
+
import type { SessionState } from "../state";
|
|
3
|
+
import { ToolParameterEntry } from "../state";
|
|
4
|
+
import { PluginConfig } from "../config";
|
|
5
|
+
export type PruneReason = "completion" | "noise" | "consolidation";
|
|
6
|
+
export declare const PRUNE_REASON_LABELS: Record<PruneReason, string>;
|
|
7
|
+
export declare function sendUnifiedNotification(client: any, logger: Logger, config: PluginConfig, state: SessionState, sessionId: string, pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, reason: PruneReason | undefined, agent: string | undefined, workingDirectory: string): Promise<boolean>;
|
|
8
|
+
export declare function sendIgnoredMessage(client: any, logger: Logger, sessionID: string, text: string, agent?: string): Promise<void>;
|
|
25
9
|
//# sourceMappingURL=notification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,CAAA;AAClE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI3D,CAAA;AA4CD,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,gBAAgB,EAAE,MAAM,GACzB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -1,24 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { formatTokenCount } from "../tokenizer";
|
|
1
|
+
import { formatTokenCount } from "../utils";
|
|
3
2
|
import { formatPrunedItemsList } from "./display-utils";
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
export const PRUNE_REASON_LABELS = {
|
|
4
|
+
completion: "Task Complete",
|
|
5
|
+
noise: "Noise Removal",
|
|
6
|
+
consolidation: "Consolidation"
|
|
7
|
+
};
|
|
8
|
+
function formatStatsHeader(totalTokensSaved, pruneTokenCounter) {
|
|
9
|
+
const totalTokensSavedStr = `~${formatTokenCount(totalTokensSaved + pruneTokenCounter)}`;
|
|
10
|
+
return [
|
|
11
|
+
`▣ DCP | ${totalTokensSavedStr} saved total`,
|
|
12
|
+
].join('\n');
|
|
13
|
+
}
|
|
14
|
+
function buildMinimalMessage(state, reason) {
|
|
15
|
+
const reasonSuffix = reason ? ` [${PRUNE_REASON_LABELS[reason]}]` : '';
|
|
16
|
+
return formatStatsHeader(state.stats.totalPruneTokens, state.stats.pruneTokenCounter) + reasonSuffix;
|
|
17
|
+
}
|
|
18
|
+
function buildDetailedMessage(state, reason, pruneToolIds, toolMetadata, workingDirectory) {
|
|
19
|
+
let message = formatStatsHeader(state.stats.totalPruneTokens, state.stats.pruneTokenCounter);
|
|
20
|
+
if (pruneToolIds.length > 0) {
|
|
21
|
+
const pruneTokenCounterStr = `~${formatTokenCount(state.stats.pruneTokenCounter)}`;
|
|
22
|
+
const reasonLabel = reason ? ` — ${PRUNE_REASON_LABELS[reason]}` : '';
|
|
23
|
+
message += `\n\n▣ Pruned tools (${pruneTokenCounterStr})${reasonLabel}`;
|
|
24
|
+
const itemLines = formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirectory);
|
|
25
|
+
message += '\n' + itemLines.join('\n');
|
|
26
|
+
}
|
|
27
|
+
return message.trim();
|
|
28
|
+
}
|
|
29
|
+
export async function sendUnifiedNotification(client, logger, config, state, sessionId, pruneToolIds, toolMetadata, reason, agent, workingDirectory) {
|
|
30
|
+
const hasPruned = pruneToolIds.length > 0;
|
|
31
|
+
if (!hasPruned) {
|
|
8
32
|
return false;
|
|
9
33
|
}
|
|
10
|
-
if (
|
|
34
|
+
if (config.pruningSummary === 'off') {
|
|
11
35
|
return false;
|
|
12
36
|
}
|
|
13
|
-
const message =
|
|
14
|
-
? buildMinimalMessage(
|
|
15
|
-
: buildDetailedMessage(
|
|
16
|
-
await sendIgnoredMessage(
|
|
37
|
+
const message = config.pruningSummary === 'minimal'
|
|
38
|
+
? buildMinimalMessage(state, reason)
|
|
39
|
+
: buildDetailedMessage(state, reason, pruneToolIds, toolMetadata, workingDirectory);
|
|
40
|
+
await sendIgnoredMessage(client, logger, sessionId, message, agent);
|
|
17
41
|
return true;
|
|
18
42
|
}
|
|
19
|
-
export async function sendIgnoredMessage(
|
|
43
|
+
export async function sendIgnoredMessage(client, logger, sessionID, text, agent) {
|
|
20
44
|
try {
|
|
21
|
-
await
|
|
45
|
+
await client.session.prompt({
|
|
22
46
|
path: { id: sessionID },
|
|
23
47
|
body: {
|
|
24
48
|
noReply: true,
|
|
@@ -32,40 +56,7 @@ export async function sendIgnoredMessage(ctx, sessionID, text, agent) {
|
|
|
32
56
|
});
|
|
33
57
|
}
|
|
34
58
|
catch (error) {
|
|
35
|
-
|
|
59
|
+
logger.error("Failed to send notification", { error: error.message });
|
|
36
60
|
}
|
|
37
61
|
}
|
|
38
|
-
function buildMinimalMessage(data) {
|
|
39
|
-
const { justNowTokens, totalTokens } = calculateStats(data);
|
|
40
|
-
const reasonSuffix = data.reason ? ` [${PRUNE_REASON_LABELS[data.reason]}]` : '';
|
|
41
|
-
return formatStatsHeader(totalTokens, justNowTokens) + reasonSuffix;
|
|
42
|
-
}
|
|
43
|
-
function buildDetailedMessage(data, workingDirectory) {
|
|
44
|
-
const { justNowTokens, totalTokens } = calculateStats(data);
|
|
45
|
-
let message = formatStatsHeader(totalTokens, justNowTokens);
|
|
46
|
-
if (data.aiPrunedCount > 0) {
|
|
47
|
-
const justNowTokensStr = `~${formatTokenCount(justNowTokens)}`;
|
|
48
|
-
const reasonLabel = data.reason ? ` — ${PRUNE_REASON_LABELS[data.reason]}` : '';
|
|
49
|
-
message += `\n\n▣ Pruned tools (${justNowTokensStr})${reasonLabel}`;
|
|
50
|
-
const itemLines = formatPrunedItemsList(data.aiPrunedIds, data.toolMetadata, workingDirectory);
|
|
51
|
-
message += '\n' + itemLines.join('\n');
|
|
52
|
-
}
|
|
53
|
-
return message.trim();
|
|
54
|
-
}
|
|
55
|
-
function calculateStats(data) {
|
|
56
|
-
const justNowTokens = data.aiTokensSaved + (data.gcPending?.tokensCollected ?? 0);
|
|
57
|
-
const totalTokens = data.sessionStats
|
|
58
|
-
? data.sessionStats.totalTokensSaved + data.sessionStats.totalGCTokens
|
|
59
|
-
: justNowTokens;
|
|
60
|
-
return { justNowTokens, totalTokens };
|
|
61
|
-
}
|
|
62
|
-
function formatStatsHeader(totalTokens, justNowTokens) {
|
|
63
|
-
const totalTokensStr = `~${formatTokenCount(totalTokens)}`;
|
|
64
|
-
const justNowTokensStr = `~${formatTokenCount(justNowTokens)}`;
|
|
65
|
-
const maxTokenLen = Math.max(totalTokensStr.length, justNowTokensStr.length);
|
|
66
|
-
const totalTokensPadded = totalTokensStr.padStart(maxTokenLen);
|
|
67
|
-
return [
|
|
68
|
-
`▣ DCP | ${totalTokensPadded} saved total`,
|
|
69
|
-
].join('\n');
|
|
70
|
-
}
|
|
71
62
|
//# sourceMappingURL=notification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WithParts } from "./state";
|
|
2
|
+
/**
|
|
3
|
+
* Calculates approximate tokens saved by pruning the given tool call IDs.
|
|
4
|
+
* TODO: Make it count message content that are not tool outputs. Currently it ONLY covers tool outputs and errors
|
|
5
|
+
*/
|
|
6
|
+
export declare const calculateTokensSaved: (messages: WithParts[], pruneToolIds: string[]) => number;
|
|
7
|
+
export declare function formatTokenCount(tokens: number): string;
|
|
8
|
+
export declare function isSubAgentSession(client: any, sessionID: string): Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAcnC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC7B,UAAU,SAAS,EAAE,EACrB,cAAc,MAAM,EAAE,KACvB,MA2BF,CAAA;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { encode } from 'gpt-tokenizer';
|
|
2
|
+
/**
|
|
3
|
+
* Estimates token counts for a batch of texts using gpt-tokenizer.
|
|
4
|
+
*/
|
|
5
|
+
function estimateTokensBatch(texts) {
|
|
6
|
+
try {
|
|
7
|
+
return texts.map(text => encode(text).length);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return texts.map(text => Math.round(text.length / 4));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Calculates approximate tokens saved by pruning the given tool call IDs.
|
|
15
|
+
* TODO: Make it count message content that are not tool outputs. Currently it ONLY covers tool outputs and errors
|
|
16
|
+
*/
|
|
17
|
+
export const calculateTokensSaved = (messages, pruneToolIds) => {
|
|
18
|
+
try {
|
|
19
|
+
const contents = [];
|
|
20
|
+
for (const msg of messages) {
|
|
21
|
+
for (const part of msg.parts) {
|
|
22
|
+
if (part.type !== 'tool' || !pruneToolIds.includes(part.callID)) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (part.state.status === "completed") {
|
|
26
|
+
const content = typeof part.state.output === 'string'
|
|
27
|
+
? part.state.output
|
|
28
|
+
: JSON.stringify(part.state.output);
|
|
29
|
+
contents.push(content);
|
|
30
|
+
}
|
|
31
|
+
if (part.state.status === "error") {
|
|
32
|
+
const content = typeof part.state.error === 'string'
|
|
33
|
+
? part.state.error
|
|
34
|
+
: JSON.stringify(part.state.error);
|
|
35
|
+
contents.push(content);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const tokenCounts = estimateTokensBatch(contents);
|
|
40
|
+
return tokenCounts.reduce((sum, count) => sum + count, 0);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
export function formatTokenCount(tokens) {
|
|
47
|
+
if (tokens >= 1000) {
|
|
48
|
+
return `${(tokens / 1000).toFixed(1)}K`.replace('.0K', 'K') + ' tokens';
|
|
49
|
+
}
|
|
50
|
+
return tokens.toString() + ' tokens';
|
|
51
|
+
}
|
|
52
|
+
export async function isSubAgentSession(client, sessionID) {
|
|
53
|
+
try {
|
|
54
|
+
const result = await client.session.get({ path: { id: sessionID } });
|
|
55
|
+
return !!result.data?.parentID;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/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": "0.
|
|
4
|
+
"version": "1.0.0-beta.2",
|
|
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,38 +0,0 @@
|
|
|
1
|
-
import type { Logger } from "../logger";
|
|
2
|
-
import type { PruningStrategy } from "../config";
|
|
3
|
-
import type { PluginState } from "../state";
|
|
4
|
-
import type { ToolMetadata, SessionStats, GCStats, PruningResult } from "../fetch-wrapper/types";
|
|
5
|
-
import { type NotificationContext } from "../ui/notification";
|
|
6
|
-
export type { SessionStats, GCStats, PruningResult };
|
|
7
|
-
export interface PruningOptions {
|
|
8
|
-
reason?: string;
|
|
9
|
-
trigger: 'idle' | 'tool';
|
|
10
|
-
}
|
|
11
|
-
export interface JanitorConfig {
|
|
12
|
-
protectedTools: string[];
|
|
13
|
-
model?: string;
|
|
14
|
-
showModelErrorToasts: boolean;
|
|
15
|
-
strictModelSelection: boolean;
|
|
16
|
-
pruningSummary: "off" | "minimal" | "detailed";
|
|
17
|
-
workingDirectory?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface JanitorContext {
|
|
20
|
-
client: any;
|
|
21
|
-
state: PluginState;
|
|
22
|
-
logger: Logger;
|
|
23
|
-
config: JanitorConfig;
|
|
24
|
-
notificationCtx: NotificationContext;
|
|
25
|
-
}
|
|
26
|
-
export declare function createJanitorContext(client: any, state: PluginState, logger: Logger, config: JanitorConfig): JanitorContext;
|
|
27
|
-
/**
|
|
28
|
-
* Run pruning on idle trigger.
|
|
29
|
-
* Note: onTool pruning is now handled directly by pruning-tool.ts
|
|
30
|
-
*/
|
|
31
|
-
export declare function runOnIdle(ctx: JanitorContext, sessionID: string, strategies: PruningStrategy[]): Promise<PruningResult | null>;
|
|
32
|
-
interface ParsedMessages {
|
|
33
|
-
toolCallIds: string[];
|
|
34
|
-
toolOutputs: Map<string, string>;
|
|
35
|
-
toolMetadata: Map<string, ToolMetadata>;
|
|
36
|
-
}
|
|
37
|
-
export declare function parseMessages(messages: any[], toolParametersCache: Map<string, any>): ParsedMessages;
|
|
38
|
-
//# sourceMappingURL=janitor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"janitor.d.ts","sourceRoot":"","sources":["../../../lib/core/janitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAOhG,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;AAEpD,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB,EAAE,OAAO,CAAA;IAC7B,oBAAoB,EAAE,OAAO,CAAA;IAC7B,cAAc,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,aAAa,CAAA;IACrB,eAAe,EAAE,mBAAmB,CAAA;CACvC;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,GACtB,cAAc,CAehB;AAMD;;;GAGG;AACH,wBAAsB,SAAS,CAC3B,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAE/B;AAiTD,UAAU,cAAc;IACpB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAC1C;AAED,wBAAgB,aAAa,CACzB,QAAQ,EAAE,GAAG,EAAE,EACf,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GACtC,cAAc,CA6BhB"}
|