@tarquinen/opencode-dcp 0.3.30 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +10 -10
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +22 -8
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/api-formats/prunable-list.d.ts +49 -0
  6. package/dist/lib/api-formats/prunable-list.d.ts.map +1 -0
  7. package/dist/lib/api-formats/prunable-list.js +112 -0
  8. package/dist/lib/api-formats/prunable-list.js.map +1 -0
  9. package/dist/lib/api-formats/synth-instruction.d.ts +29 -0
  10. package/dist/lib/api-formats/synth-instruction.d.ts.map +1 -0
  11. package/dist/lib/api-formats/synth-instruction.js +171 -0
  12. package/dist/lib/api-formats/synth-instruction.js.map +1 -0
  13. package/dist/lib/config.d.ts +1 -0
  14. package/dist/lib/config.d.ts.map +1 -1
  15. package/dist/lib/config.js +13 -7
  16. package/dist/lib/config.js.map +1 -1
  17. package/dist/lib/core/janitor.d.ts +60 -0
  18. package/dist/lib/core/janitor.d.ts.map +1 -0
  19. package/dist/lib/core/janitor.js +301 -0
  20. package/dist/lib/core/janitor.js.map +1 -0
  21. package/dist/lib/core/prompt.d.ts.map +1 -0
  22. package/dist/lib/{prompt.js → core/prompt.js} +1 -1
  23. package/dist/lib/core/prompt.js.map +1 -0
  24. package/dist/lib/core/strategies/deduplication.d.ts +7 -0
  25. package/dist/lib/core/strategies/deduplication.d.ts.map +1 -0
  26. package/dist/lib/core/strategies/deduplication.js +76 -0
  27. package/dist/lib/core/strategies/deduplication.js.map +1 -0
  28. package/dist/lib/core/strategies/index.d.ts +21 -0
  29. package/dist/lib/core/strategies/index.d.ts.map +1 -0
  30. package/dist/lib/core/strategies/index.js +48 -0
  31. package/dist/lib/core/strategies/index.js.map +1 -0
  32. package/dist/lib/core/strategies/types.d.ts +35 -0
  33. package/dist/lib/core/strategies/types.d.ts.map +1 -0
  34. package/dist/lib/core/strategies/types.js +6 -0
  35. package/dist/lib/core/strategies/types.js.map +1 -0
  36. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +14 -0
  37. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +1 -0
  38. package/dist/lib/fetch-wrapper/formats/bedrock.js +128 -0
  39. package/dist/lib/fetch-wrapper/formats/bedrock.js.map +1 -0
  40. package/dist/lib/fetch-wrapper/formats/gemini.d.ts +14 -0
  41. package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +1 -0
  42. package/dist/lib/fetch-wrapper/formats/gemini.js +138 -0
  43. package/dist/lib/fetch-wrapper/formats/gemini.js.map +1 -0
  44. package/dist/lib/fetch-wrapper/formats/index.d.ts +5 -0
  45. package/dist/lib/fetch-wrapper/formats/index.d.ts.map +1 -0
  46. package/dist/lib/fetch-wrapper/formats/index.js +5 -0
  47. package/dist/lib/fetch-wrapper/formats/index.js.map +1 -0
  48. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +14 -0
  49. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +1 -0
  50. package/dist/lib/fetch-wrapper/formats/openai-chat.js +106 -0
  51. package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +1 -0
  52. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +11 -0
  53. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +1 -0
  54. package/dist/lib/fetch-wrapper/formats/openai-responses.js +69 -0
  55. package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +1 -0
  56. package/dist/lib/fetch-wrapper/gc-tracker.d.ts +4 -0
  57. package/dist/lib/fetch-wrapper/gc-tracker.d.ts.map +1 -0
  58. package/dist/lib/fetch-wrapper/gc-tracker.js +61 -0
  59. package/dist/lib/fetch-wrapper/gc-tracker.js.map +1 -0
  60. package/dist/lib/fetch-wrapper/handler.d.ts +13 -0
  61. package/dist/lib/fetch-wrapper/handler.d.ts.map +1 -0
  62. package/dist/lib/fetch-wrapper/handler.js +85 -0
  63. package/dist/lib/fetch-wrapper/handler.js.map +1 -0
  64. package/dist/lib/fetch-wrapper/index.d.ts +3 -2
  65. package/dist/lib/fetch-wrapper/index.d.ts.map +1 -1
  66. package/dist/lib/fetch-wrapper/index.js +41 -15
  67. package/dist/lib/fetch-wrapper/index.js.map +1 -1
  68. package/dist/lib/fetch-wrapper/types.d.ts +36 -1
  69. package/dist/lib/fetch-wrapper/types.d.ts.map +1 -1
  70. package/dist/lib/fetch-wrapper/types.js +7 -1
  71. package/dist/lib/fetch-wrapper/types.js.map +1 -1
  72. package/dist/lib/hooks.d.ts +3 -3
  73. package/dist/lib/hooks.d.ts.map +1 -1
  74. package/dist/lib/hooks.js +25 -15
  75. package/dist/lib/hooks.js.map +1 -1
  76. package/dist/lib/prompts/tool.txt +18 -5
  77. package/dist/lib/pruning-tool.d.ts +14 -6
  78. package/dist/lib/pruning-tool.d.ts.map +1 -1
  79. package/dist/lib/pruning-tool.js +121 -19
  80. package/dist/lib/pruning-tool.js.map +1 -1
  81. package/dist/lib/state/id-mapping.d.ts +26 -0
  82. package/dist/lib/state/id-mapping.d.ts.map +1 -0
  83. package/dist/lib/state/id-mapping.js +54 -0
  84. package/dist/lib/state/id-mapping.js.map +1 -0
  85. package/dist/lib/state/index.d.ts +25 -0
  86. package/dist/lib/state/index.d.ts.map +1 -0
  87. package/dist/lib/{state.js → state/index.js} +10 -6
  88. package/dist/lib/state/index.js.map +1 -0
  89. package/dist/lib/{state-persistence.d.ts → state/persistence.d.ts} +3 -3
  90. package/dist/lib/state/persistence.d.ts.map +1 -0
  91. package/dist/lib/{state-persistence.js → state/persistence.js} +1 -1
  92. package/dist/lib/state/persistence.js.map +1 -0
  93. package/dist/lib/state/tool-cache.d.ts +22 -0
  94. package/dist/lib/state/tool-cache.d.ts.map +1 -0
  95. package/dist/lib/state/tool-cache.js +102 -0
  96. package/dist/lib/state/tool-cache.js.map +1 -0
  97. package/dist/lib/tokenizer.js +2 -2
  98. package/dist/lib/tokenizer.js.map +1 -1
  99. package/dist/lib/ui/display-utils.d.ts.map +1 -0
  100. package/dist/lib/{display-utils.js → ui/display-utils.js} +0 -3
  101. package/dist/lib/ui/display-utils.js.map +1 -0
  102. package/dist/lib/ui/notification.d.ts +32 -0
  103. package/dist/lib/ui/notification.d.ts.map +1 -0
  104. package/dist/lib/ui/notification.js +180 -0
  105. package/dist/lib/ui/notification.js.map +1 -0
  106. package/dist/lib/version-checker.d.ts +1 -1
  107. package/dist/lib/version-checker.d.ts.map +1 -1
  108. package/dist/lib/version-checker.js +4 -1
  109. package/dist/lib/version-checker.js.map +1 -1
  110. package/package.json +6 -6
  111. package/dist/lib/deduplicator.d.ts +0 -16
  112. package/dist/lib/deduplicator.d.ts.map +0 -1
  113. package/dist/lib/deduplicator.js +0 -68
  114. package/dist/lib/deduplicator.js.map +0 -1
  115. package/dist/lib/display-utils.d.ts.map +0 -1
  116. package/dist/lib/display-utils.js.map +0 -1
  117. package/dist/lib/fetch-wrapper/gemini.d.ts +0 -7
  118. package/dist/lib/fetch-wrapper/gemini.d.ts.map +0 -1
  119. package/dist/lib/fetch-wrapper/gemini.js +0 -120
  120. package/dist/lib/fetch-wrapper/gemini.js.map +0 -1
  121. package/dist/lib/fetch-wrapper/openai-chat.d.ts +0 -7
  122. package/dist/lib/fetch-wrapper/openai-chat.d.ts.map +0 -1
  123. package/dist/lib/fetch-wrapper/openai-chat.js +0 -101
  124. package/dist/lib/fetch-wrapper/openai-chat.js.map +0 -1
  125. package/dist/lib/fetch-wrapper/openai-responses.d.ts +0 -7
  126. package/dist/lib/fetch-wrapper/openai-responses.d.ts.map +0 -1
  127. package/dist/lib/fetch-wrapper/openai-responses.js +0 -74
  128. package/dist/lib/fetch-wrapper/openai-responses.js.map +0 -1
  129. package/dist/lib/janitor.d.ts +0 -57
  130. package/dist/lib/janitor.d.ts.map +0 -1
  131. package/dist/lib/janitor.js +0 -547
  132. package/dist/lib/janitor.js.map +0 -1
  133. package/dist/lib/prompt.d.ts.map +0 -1
  134. package/dist/lib/prompt.js.map +0 -1
  135. package/dist/lib/state-persistence.d.ts.map +0 -1
  136. package/dist/lib/state-persistence.js.map +0 -1
  137. package/dist/lib/state.d.ts +0 -43
  138. package/dist/lib/state.d.ts.map +0 -1
  139. package/dist/lib/state.js.map +0 -1
  140. package/dist/lib/synth-instruction.d.ts +0 -16
  141. package/dist/lib/synth-instruction.d.ts.map +0 -1
  142. package/dist/lib/synth-instruction.js +0 -209
  143. package/dist/lib/synth-instruction.js.map +0 -1
  144. package/dist/lib/tool-cache.d.ts +0 -12
  145. package/dist/lib/tool-cache.d.ts.map +0 -1
  146. package/dist/lib/tool-cache.js +0 -52
  147. package/dist/lib/tool-cache.js.map +0 -1
  148. /package/dist/lib/{prompt.d.ts → core/prompt.d.ts} +0 -0
  149. /package/dist/lib/{display-utils.d.ts → ui/display-utils.d.ts} +0 -0
@@ -0,0 +1,180 @@
1
+ import { formatTokenCount } from "../tokenizer";
2
+ import { extractParameterKey } from "./display-utils";
3
+ export async function sendIgnoredMessage(ctx, sessionID, text, agent) {
4
+ try {
5
+ await ctx.client.session.prompt({
6
+ path: { id: sessionID },
7
+ body: {
8
+ noReply: true,
9
+ agent: agent,
10
+ parts: [{
11
+ type: 'text',
12
+ text: text,
13
+ ignored: true
14
+ }]
15
+ }
16
+ });
17
+ }
18
+ catch (error) {
19
+ ctx.logger.error("notification", "Failed to send notification", { error: error.message });
20
+ }
21
+ }
22
+ export async function sendUnifiedNotification(ctx, sessionID, data, agent) {
23
+ const hasAiPruning = data.aiPrunedCount > 0;
24
+ const hasGcActivity = data.gcPending && data.gcPending.toolsDeduped > 0;
25
+ if (!hasAiPruning && !hasGcActivity) {
26
+ return false;
27
+ }
28
+ if (ctx.config.pruningSummary === 'off') {
29
+ return false;
30
+ }
31
+ const message = ctx.config.pruningSummary === 'minimal'
32
+ ? buildMinimalMessage(data)
33
+ : buildDetailedMessage(data, ctx.config.workingDirectory);
34
+ await sendIgnoredMessage(ctx, sessionID, message, agent);
35
+ return true;
36
+ }
37
+ function buildMinimalMessage(data) {
38
+ const { justNowTokens, totalTokens } = calculateStats(data);
39
+ return formatStatsHeader(totalTokens, justNowTokens);
40
+ }
41
+ function calculateStats(data) {
42
+ const justNowTokens = data.aiTokensSaved + (data.gcPending?.tokensCollected ?? 0);
43
+ const totalTokens = data.sessionStats
44
+ ? data.sessionStats.totalTokensSaved + data.sessionStats.totalGCTokens
45
+ : justNowTokens;
46
+ return { justNowTokens, totalTokens };
47
+ }
48
+ function formatStatsHeader(totalTokens, justNowTokens) {
49
+ const totalTokensStr = `~${formatTokenCount(totalTokens)}`;
50
+ const justNowTokensStr = `~${formatTokenCount(justNowTokens)}`;
51
+ const maxTokenLen = Math.max(totalTokensStr.length, justNowTokensStr.length);
52
+ const totalTokensPadded = totalTokensStr.padStart(maxTokenLen);
53
+ const justNowTokensPadded = justNowTokensStr.padStart(maxTokenLen);
54
+ return [
55
+ `▣ DCP Stats`,
56
+ ` Total saved │ ${totalTokensPadded}`,
57
+ ` Just now │ ${justNowTokensPadded}`,
58
+ ].join('\n');
59
+ }
60
+ function buildDetailedMessage(data, workingDirectory) {
61
+ const { justNowTokens, totalTokens } = calculateStats(data);
62
+ let message = formatStatsHeader(totalTokens, justNowTokens);
63
+ if (data.aiPrunedCount > 0) {
64
+ message += '\n\n▣ Pruned tools:';
65
+ for (const prunedId of data.aiPrunedIds) {
66
+ const normalizedId = prunedId.toLowerCase();
67
+ const metadata = data.toolMetadata.get(normalizedId);
68
+ if (metadata) {
69
+ const paramKey = extractParameterKey(metadata);
70
+ if (paramKey) {
71
+ const displayKey = truncate(shortenPath(paramKey, workingDirectory), 60);
72
+ message += `\n→ ${metadata.tool}: ${displayKey}`;
73
+ }
74
+ else {
75
+ message += `\n→ ${metadata.tool}`;
76
+ }
77
+ }
78
+ }
79
+ const knownCount = data.aiPrunedIds.filter(id => data.toolMetadata.has(id.toLowerCase())).length;
80
+ const unknownCount = data.aiPrunedIds.length - knownCount;
81
+ if (unknownCount > 0) {
82
+ message += `\n→ (${unknownCount} tool${unknownCount > 1 ? 's' : ''} with unknown metadata)`;
83
+ }
84
+ }
85
+ return message.trim();
86
+ }
87
+ export function formatPruningResultForTool(result, workingDirectory) {
88
+ const lines = [];
89
+ lines.push(`Context pruning complete. Pruned ${result.prunedCount} tool outputs.`);
90
+ lines.push('');
91
+ if (result.llmPrunedIds.length > 0) {
92
+ lines.push(`Semantically pruned (${result.llmPrunedIds.length}):`);
93
+ const toolsSummary = buildToolsSummary(result.llmPrunedIds, result.toolMetadata, workingDirectory);
94
+ lines.push(...formatToolSummaryLines(toolsSummary));
95
+ }
96
+ return lines.join('\n').trim();
97
+ }
98
+ export function buildToolsSummary(prunedIds, toolMetadata, workingDirectory) {
99
+ const toolsSummary = new Map();
100
+ for (const prunedId of prunedIds) {
101
+ const normalizedId = prunedId.toLowerCase();
102
+ const metadata = toolMetadata.get(normalizedId);
103
+ if (metadata) {
104
+ const toolName = metadata.tool;
105
+ if (!toolsSummary.has(toolName)) {
106
+ toolsSummary.set(toolName, []);
107
+ }
108
+ const paramKey = extractParameterKey(metadata);
109
+ if (paramKey) {
110
+ const displayKey = truncate(shortenPath(paramKey, workingDirectory), 80);
111
+ toolsSummary.get(toolName).push(displayKey);
112
+ }
113
+ else {
114
+ toolsSummary.get(toolName).push('(default)');
115
+ }
116
+ }
117
+ }
118
+ return toolsSummary;
119
+ }
120
+ export function formatToolSummaryLines(toolsSummary, indent = ' ') {
121
+ const lines = [];
122
+ for (const [toolName, params] of toolsSummary.entries()) {
123
+ if (params.length === 1) {
124
+ lines.push(`${indent}${toolName}: ${params[0]}`);
125
+ }
126
+ else if (params.length > 1) {
127
+ lines.push(`${indent}${toolName} (${params.length}):`);
128
+ for (const param of params) {
129
+ lines.push(`${indent} ${param}`);
130
+ }
131
+ }
132
+ }
133
+ return lines;
134
+ }
135
+ function truncate(str, maxLen = 60) {
136
+ if (str.length <= maxLen)
137
+ return str;
138
+ return str.slice(0, maxLen - 3) + '...';
139
+ }
140
+ function shortenPath(input, workingDirectory) {
141
+ const inPathMatch = input.match(/^(.+) in (.+)$/);
142
+ if (inPathMatch) {
143
+ const prefix = inPathMatch[1];
144
+ const pathPart = inPathMatch[2];
145
+ const shortenedPath = shortenSinglePath(pathPart, workingDirectory);
146
+ return `${prefix} in ${shortenedPath}`;
147
+ }
148
+ return shortenSinglePath(input, workingDirectory);
149
+ }
150
+ function shortenSinglePath(path, workingDirectory) {
151
+ const homeDir = require('os').homedir();
152
+ if (workingDirectory) {
153
+ if (path.startsWith(workingDirectory + '/')) {
154
+ return path.slice(workingDirectory.length + 1);
155
+ }
156
+ if (path === workingDirectory) {
157
+ return '.';
158
+ }
159
+ }
160
+ if (path.startsWith(homeDir)) {
161
+ path = '~' + path.slice(homeDir.length);
162
+ }
163
+ const nodeModulesMatch = path.match(/node_modules\/(@[^\/]+\/[^\/]+|[^\/]+)\/(.*)/);
164
+ if (nodeModulesMatch) {
165
+ return `${nodeModulesMatch[1]}/${nodeModulesMatch[2]}`;
166
+ }
167
+ if (workingDirectory) {
168
+ const workingDirWithTilde = workingDirectory.startsWith(homeDir)
169
+ ? '~' + workingDirectory.slice(homeDir.length)
170
+ : null;
171
+ if (workingDirWithTilde && path.startsWith(workingDirWithTilde + '/')) {
172
+ return path.slice(workingDirWithTilde.length + 1);
173
+ }
174
+ if (workingDirWithTilde && path === workingDirWithTilde) {
175
+ return '.';
176
+ }
177
+ }
178
+ return path;
179
+ }
180
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.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,CA2B7I"}
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":"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"}
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.3.30",
4
+ "version": "0.4.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",
@@ -38,18 +38,18 @@
38
38
  "@opencode-ai/plugin": ">=0.13.7"
39
39
  },
40
40
  "dependencies": {
41
- "@ai-sdk/openai-compatible": "^1.0.27",
41
+ "@ai-sdk/openai-compatible": "^1.0.28",
42
42
  "@opencode-ai/sdk": "latest",
43
- "@tarquinen/opencode-auth-provider": "^0.1.6",
44
- "ai": "^5.0.98",
43
+ "@tarquinen/opencode-auth-provider": "^0.1.7",
44
+ "ai": "^5.0.106",
45
45
  "gpt-tokenizer": "^3.4.0",
46
46
  "jsonc-parser": "^3.3.1",
47
- "zod": "^4.1.12"
47
+ "zod": "^4.1.13"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@opencode-ai/plugin": ">=0.13.7",
51
51
  "@types/node": "^24.10.1",
52
- "tsx": "^4.20.6",
52
+ "tsx": "^4.21.0",
53
53
  "typescript": "^5.9.3"
54
54
  },
55
55
  "files": [
@@ -1,16 +0,0 @@
1
- export interface DuplicateDetectionResult {
2
- duplicateIds: string[];
3
- deduplicationDetails: Map<string, {
4
- toolName: string;
5
- parameterKey: string;
6
- duplicateCount: number;
7
- prunedIds: string[];
8
- keptId: string;
9
- }>;
10
- }
11
- export declare function detectDuplicates(toolMetadata: Map<string, {
12
- tool: string;
13
- parameters?: any;
14
- }>, unprunedToolCallIds: string[], // In chronological order
15
- protectedTools: string[]): DuplicateDetectionResult;
16
- //# sourceMappingURL=deduplicator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deduplicator.d.ts","sourceRoot":"","sources":["../../lib/deduplicator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACrC,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAA;QAChB,YAAY,EAAE,MAAM,CAAA;QACpB,cAAc,EAAE,MAAM,CAAA;QACtB,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;KACjB,CAAC,CAAA;CACL;AAED,wBAAgB,gBAAgB,CAC5B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,EAC7D,mBAAmB,EAAE,MAAM,EAAE,EAAG,yBAAyB;AACzD,cAAc,EAAE,MAAM,EAAE,GACzB,wBAAwB,CAuC1B"}
@@ -1,68 +0,0 @@
1
- import { extractParameterKey } from "./display-utils";
2
- export function detectDuplicates(toolMetadata, unprunedToolCallIds, // In chronological order
3
- protectedTools) {
4
- const signatureMap = new Map();
5
- const deduplicatableIds = unprunedToolCallIds.filter(id => {
6
- const metadata = toolMetadata.get(id);
7
- return !metadata || !protectedTools.includes(metadata.tool);
8
- });
9
- for (const id of deduplicatableIds) {
10
- const metadata = toolMetadata.get(id);
11
- if (!metadata)
12
- continue;
13
- const signature = createToolSignature(metadata.tool, metadata.parameters);
14
- if (!signatureMap.has(signature)) {
15
- signatureMap.set(signature, []);
16
- }
17
- signatureMap.get(signature).push(id);
18
- }
19
- const duplicateIds = [];
20
- const deduplicationDetails = new Map();
21
- for (const [signature, ids] of signatureMap.entries()) {
22
- if (ids.length > 1) {
23
- const metadata = toolMetadata.get(ids[0]);
24
- const idsToRemove = ids.slice(0, -1); // All except last
25
- duplicateIds.push(...idsToRemove);
26
- deduplicationDetails.set(signature, {
27
- toolName: metadata.tool,
28
- parameterKey: extractParameterKey(metadata),
29
- duplicateCount: ids.length,
30
- prunedIds: idsToRemove,
31
- keptId: ids[ids.length - 1]
32
- });
33
- }
34
- }
35
- return { duplicateIds, deduplicationDetails };
36
- }
37
- function createToolSignature(tool, parameters) {
38
- if (!parameters)
39
- return tool;
40
- const normalized = normalizeParameters(parameters);
41
- const sorted = sortObjectKeys(normalized);
42
- return `${tool}::${JSON.stringify(sorted)}`;
43
- }
44
- function normalizeParameters(params) {
45
- if (typeof params !== 'object' || params === null)
46
- return params;
47
- if (Array.isArray(params))
48
- return params;
49
- const normalized = {};
50
- for (const [key, value] of Object.entries(params)) {
51
- if (value !== undefined && value !== null) {
52
- normalized[key] = value;
53
- }
54
- }
55
- return normalized;
56
- }
57
- function sortObjectKeys(obj) {
58
- if (typeof obj !== 'object' || obj === null)
59
- return obj;
60
- if (Array.isArray(obj))
61
- return obj.map(sortObjectKeys);
62
- const sorted = {};
63
- for (const key of Object.keys(obj).sort()) {
64
- sorted[key] = sortObjectKeys(obj[key]);
65
- }
66
- return sorted;
67
- }
68
- //# sourceMappingURL=deduplicator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deduplicator.js","sourceRoot":"","sources":["../../lib/deduplicator.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-utils.d.ts","sourceRoot":"","sources":["../../lib/display-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,MAAM,CAuExF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-utils.js","sourceRoot":"","sources":["../../lib/display-utils.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,120 +0,0 @@
1
- import { PRUNED_CONTENT_MESSAGE, getAllPrunedIds, fetchSessionMessages } from "./types";
2
- import { injectNudgeGemini, injectSynthGemini } from "../synth-instruction";
3
- /**
4
- * Handles Google/Gemini format (body.contents array with functionResponse parts).
5
- * Uses position-based correlation since Google's native format doesn't include tool call IDs.
6
- */
7
- export async function handleGemini(body, ctx, inputUrl) {
8
- if (!body.contents || !Array.isArray(body.contents)) {
9
- return { modified: false, body };
10
- }
11
- let modified = false;
12
- // Inject synthetic instructions if onTool strategies are enabled
13
- if (ctx.config.strategies.onTool.length > 0) {
14
- const skipIdleBefore = ctx.toolTracker.skipNextIdle;
15
- // Inject periodic nudge based on tool result count
16
- if (ctx.config.nudge_freq > 0) {
17
- if (injectNudgeGemini(body.contents, ctx.toolTracker, ctx.prompts.nudgeInstruction, ctx.config.nudge_freq)) {
18
- // ctx.logger.info("fetch", "Injected nudge instruction (Gemini)")
19
- modified = true;
20
- }
21
- }
22
- if (skipIdleBefore && !ctx.toolTracker.skipNextIdle) {
23
- ctx.logger.debug("fetch", "skipNextIdle was reset by new tool results (Gemini)");
24
- }
25
- if (injectSynthGemini(body.contents, ctx.prompts.synthInstruction, ctx.prompts.nudgeInstruction)) {
26
- // ctx.logger.info("fetch", "Injected synthetic instruction (Gemini)")
27
- modified = true;
28
- }
29
- }
30
- // Check for functionResponse parts in any content item
31
- const hasFunctionResponses = body.contents.some((content) => Array.isArray(content.parts) &&
32
- content.parts.some((part) => part.functionResponse));
33
- if (!hasFunctionResponses) {
34
- return { modified, body };
35
- }
36
- const { allSessions, allPrunedIds } = await getAllPrunedIds(ctx.client, ctx.state, ctx.logger);
37
- if (allPrunedIds.size === 0) {
38
- return { modified, body };
39
- }
40
- // Find the active session to get the position mapping
41
- const activeSessions = allSessions.data?.filter((s) => !s.parentID) || [];
42
- let positionMapping;
43
- for (const session of activeSessions) {
44
- const mapping = ctx.state.googleToolCallMapping.get(session.id);
45
- if (mapping && mapping.size > 0) {
46
- positionMapping = mapping;
47
- break;
48
- }
49
- }
50
- if (!positionMapping) {
51
- ctx.logger.info("fetch", "No Google tool call mapping found, skipping pruning for Gemini format");
52
- return { modified, body };
53
- }
54
- // Build position counters to track occurrence of each tool name
55
- const toolPositionCounters = new Map();
56
- let replacedCount = 0;
57
- let totalFunctionResponses = 0;
58
- body.contents = body.contents.map((content) => {
59
- if (!Array.isArray(content.parts))
60
- return content;
61
- let contentModified = false;
62
- const newParts = content.parts.map((part) => {
63
- if (part.functionResponse) {
64
- totalFunctionResponses++;
65
- const funcName = part.functionResponse.name?.toLowerCase();
66
- if (funcName) {
67
- // Get current position for this tool name and increment counter
68
- const currentIndex = toolPositionCounters.get(funcName) || 0;
69
- toolPositionCounters.set(funcName, currentIndex + 1);
70
- // Look up the tool call ID using position
71
- const positionKey = `${funcName}:${currentIndex}`;
72
- const toolCallId = positionMapping.get(positionKey);
73
- if (toolCallId && allPrunedIds.has(toolCallId)) {
74
- contentModified = true;
75
- replacedCount++;
76
- // Preserve thoughtSignature if present (required for Gemini 3 Pro)
77
- // response must be a Struct (object), not a plain string
78
- return {
79
- ...part,
80
- functionResponse: {
81
- ...part.functionResponse,
82
- response: {
83
- name: part.functionResponse.name,
84
- content: PRUNED_CONTENT_MESSAGE
85
- }
86
- }
87
- };
88
- }
89
- }
90
- }
91
- return part;
92
- });
93
- if (contentModified) {
94
- return { ...content, parts: newParts };
95
- }
96
- return content;
97
- });
98
- if (replacedCount > 0) {
99
- ctx.logger.info("fetch", "Replaced pruned tool outputs (Google/Gemini)", {
100
- replaced: replacedCount,
101
- total: totalFunctionResponses
102
- });
103
- if (ctx.logger.enabled) {
104
- let sessionMessages;
105
- if (activeSessions.length > 0) {
106
- const mostRecentSession = activeSessions[0];
107
- sessionMessages = await fetchSessionMessages(ctx.client, mostRecentSession.id);
108
- }
109
- await ctx.logger.saveWrappedContext("global", body.contents, {
110
- url: inputUrl,
111
- replacedCount,
112
- totalContents: body.contents.length,
113
- format: 'google-gemini'
114
- }, sessionMessages);
115
- }
116
- return { modified: true, body };
117
- }
118
- return { modified, body };
119
- }
120
- //# sourceMappingURL=gemini.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/gemini.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { FetchHandlerContext, FetchHandlerResult } from "./types";
2
- /**
3
- * Handles OpenAI Chat Completions format (body.messages with role='tool').
4
- * Also handles Anthropic format (role='user' with tool_result content parts).
5
- */
6
- export declare function handleOpenAIChatAndAnthropic(body: any, ctx: FetchHandlerContext, inputUrl: string): Promise<FetchHandlerResult>;
7
- //# sourceMappingURL=openai-chat.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-chat.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/openai-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAUtE;;;GAGG;AACH,wBAAsB,4BAA4B,CAC9C,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAiH7B"}
@@ -1,101 +0,0 @@
1
- import { PRUNED_CONTENT_MESSAGE, getAllPrunedIds, fetchSessionMessages, getMostRecentActiveSession } from "./types";
2
- import { cacheToolParametersFromMessages } from "../tool-cache";
3
- import { injectNudge, injectSynth } from "../synth-instruction";
4
- /**
5
- * Handles OpenAI Chat Completions format (body.messages with role='tool').
6
- * Also handles Anthropic format (role='user' with tool_result content parts).
7
- */
8
- export async function handleOpenAIChatAndAnthropic(body, ctx, inputUrl) {
9
- if (!body.messages || !Array.isArray(body.messages)) {
10
- return { modified: false, body };
11
- }
12
- // Cache tool parameters from messages
13
- cacheToolParametersFromMessages(body.messages, ctx.state);
14
- let modified = false;
15
- // Inject synthetic instructions if onTool strategies are enabled
16
- if (ctx.config.strategies.onTool.length > 0) {
17
- const skipIdleBefore = ctx.toolTracker.skipNextIdle;
18
- // Inject periodic nudge based on tool result count
19
- if (ctx.config.nudge_freq > 0) {
20
- if (injectNudge(body.messages, ctx.toolTracker, ctx.prompts.nudgeInstruction, ctx.config.nudge_freq)) {
21
- // ctx.logger.info("fetch", "Injected nudge instruction")
22
- modified = true;
23
- }
24
- }
25
- if (skipIdleBefore && !ctx.toolTracker.skipNextIdle) {
26
- ctx.logger.debug("fetch", "skipNextIdle was reset by new tool results");
27
- }
28
- if (injectSynth(body.messages, ctx.prompts.synthInstruction, ctx.prompts.nudgeInstruction)) {
29
- // ctx.logger.info("fetch", "Injected synthetic instruction")
30
- modified = true;
31
- }
32
- }
33
- // Check for tool messages in both formats:
34
- // 1. OpenAI style: role === 'tool'
35
- // 2. Anthropic style: role === 'user' with content containing tool_result
36
- const toolMessages = body.messages.filter((m) => {
37
- if (m.role === 'tool')
38
- return true;
39
- if (m.role === 'user' && Array.isArray(m.content)) {
40
- for (const part of m.content) {
41
- if (part.type === 'tool_result')
42
- return true;
43
- }
44
- }
45
- return false;
46
- });
47
- const { allSessions, allPrunedIds } = await getAllPrunedIds(ctx.client, ctx.state, ctx.logger);
48
- if (toolMessages.length === 0 || allPrunedIds.size === 0) {
49
- return { modified, body };
50
- }
51
- let replacedCount = 0;
52
- body.messages = body.messages.map((m) => {
53
- // OpenAI style: role === 'tool' with tool_call_id
54
- if (m.role === 'tool' && allPrunedIds.has(m.tool_call_id?.toLowerCase())) {
55
- replacedCount++;
56
- return {
57
- ...m,
58
- content: PRUNED_CONTENT_MESSAGE
59
- };
60
- }
61
- // Anthropic style: role === 'user' with content array containing tool_result
62
- if (m.role === 'user' && Array.isArray(m.content)) {
63
- let messageModified = false;
64
- const newContent = m.content.map((part) => {
65
- if (part.type === 'tool_result' && allPrunedIds.has(part.tool_use_id?.toLowerCase())) {
66
- messageModified = true;
67
- replacedCount++;
68
- return {
69
- ...part,
70
- content: PRUNED_CONTENT_MESSAGE
71
- };
72
- }
73
- return part;
74
- });
75
- if (messageModified) {
76
- return { ...m, content: newContent };
77
- }
78
- }
79
- return m;
80
- });
81
- if (replacedCount > 0) {
82
- ctx.logger.info("fetch", "Replaced pruned tool outputs", {
83
- replaced: replacedCount,
84
- total: toolMessages.length
85
- });
86
- if (ctx.logger.enabled) {
87
- const mostRecentSession = getMostRecentActiveSession(allSessions);
88
- const sessionMessages = mostRecentSession
89
- ? await fetchSessionMessages(ctx.client, mostRecentSession.id)
90
- : undefined;
91
- await ctx.logger.saveWrappedContext("global", body.messages, {
92
- url: inputUrl,
93
- replacedCount,
94
- totalMessages: body.messages.length
95
- }, sessionMessages);
96
- }
97
- return { modified: true, body };
98
- }
99
- return { modified, body };
100
- }
101
- //# sourceMappingURL=openai-chat.js.map