@tarquinen/opencode-dcp 0.4.2 → 0.4.13

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 (101) hide show
  1. package/README.md +8 -6
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -15
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/config.js +2 -2
  6. package/dist/lib/config.js.map +1 -1
  7. package/dist/lib/core/janitor.d.ts +3 -25
  8. package/dist/lib/core/janitor.d.ts.map +1 -1
  9. package/dist/lib/core/janitor.js +2 -11
  10. package/dist/lib/core/janitor.js.map +1 -1
  11. package/dist/lib/core/strategies/deduplication.d.ts +1 -1
  12. package/dist/lib/core/strategies/index.d.ts +32 -2
  13. package/dist/lib/core/strategies/index.d.ts.map +1 -1
  14. package/dist/lib/core/strategies/index.js.map +1 -1
  15. package/dist/lib/fetch-wrapper/formats/anthropic.d.ts +8 -0
  16. package/dist/lib/fetch-wrapper/formats/anthropic.d.ts.map +1 -0
  17. package/dist/lib/fetch-wrapper/formats/anthropic.js +96 -0
  18. package/dist/lib/fetch-wrapper/formats/anthropic.js.map +1 -0
  19. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +3 -9
  20. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +1 -1
  21. package/dist/lib/fetch-wrapper/formats/bedrock.js +15 -46
  22. package/dist/lib/fetch-wrapper/formats/bedrock.js.map +1 -1
  23. package/dist/lib/fetch-wrapper/formats/gemini.d.ts +1 -7
  24. package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +1 -1
  25. package/dist/lib/fetch-wrapper/formats/gemini.js +19 -23
  26. package/dist/lib/fetch-wrapper/formats/gemini.js.map +1 -1
  27. package/dist/lib/fetch-wrapper/formats/index.d.ts +1 -0
  28. package/dist/lib/fetch-wrapper/formats/index.d.ts.map +1 -1
  29. package/dist/lib/fetch-wrapper/formats/index.js +1 -0
  30. package/dist/lib/fetch-wrapper/formats/index.js.map +1 -1
  31. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +0 -11
  32. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +1 -1
  33. package/dist/lib/fetch-wrapper/formats/openai-chat.js +19 -25
  34. package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +1 -1
  35. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +0 -8
  36. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +1 -1
  37. package/dist/lib/fetch-wrapper/formats/openai-responses.js +15 -21
  38. package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +1 -1
  39. package/dist/lib/fetch-wrapper/handler.d.ts +0 -10
  40. package/dist/lib/fetch-wrapper/handler.d.ts.map +1 -1
  41. package/dist/lib/fetch-wrapper/handler.js +74 -41
  42. package/dist/lib/fetch-wrapper/handler.js.map +1 -1
  43. package/dist/lib/fetch-wrapper/index.d.ts +4 -5
  44. package/dist/lib/fetch-wrapper/index.d.ts.map +1 -1
  45. package/dist/lib/fetch-wrapper/index.js +16 -7
  46. package/dist/lib/fetch-wrapper/index.js.map +1 -1
  47. package/dist/lib/fetch-wrapper/prunable-list.d.ts +8 -0
  48. package/dist/lib/fetch-wrapper/prunable-list.d.ts.map +1 -0
  49. package/dist/lib/fetch-wrapper/prunable-list.js +38 -0
  50. package/dist/lib/fetch-wrapper/prunable-list.js.map +1 -0
  51. package/dist/lib/fetch-wrapper/tool-tracker.d.ts +8 -0
  52. package/dist/lib/fetch-wrapper/tool-tracker.d.ts.map +1 -0
  53. package/dist/lib/fetch-wrapper/tool-tracker.js +7 -0
  54. package/dist/lib/fetch-wrapper/tool-tracker.js.map +1 -0
  55. package/dist/lib/fetch-wrapper/types.d.ts +31 -46
  56. package/dist/lib/fetch-wrapper/types.d.ts.map +1 -1
  57. package/dist/lib/fetch-wrapper/types.js +6 -44
  58. package/dist/lib/fetch-wrapper/types.js.map +1 -1
  59. package/dist/lib/hooks.d.ts +6 -2
  60. package/dist/lib/hooks.d.ts.map +1 -1
  61. package/dist/lib/hooks.js +21 -11
  62. package/dist/lib/hooks.js.map +1 -1
  63. package/dist/lib/prompts/nudge.txt +8 -5
  64. package/dist/lib/prompts/synthetic.txt +30 -28
  65. package/dist/lib/prompts/tool.txt +46 -63
  66. package/dist/lib/pruning-tool.d.ts +1 -1
  67. package/dist/lib/pruning-tool.d.ts.map +1 -1
  68. package/dist/lib/pruning-tool.js +30 -23
  69. package/dist/lib/pruning-tool.js.map +1 -1
  70. package/dist/lib/state/id-mapping.d.ts +0 -1
  71. package/dist/lib/state/id-mapping.d.ts.map +1 -1
  72. package/dist/lib/state/id-mapping.js +0 -3
  73. package/dist/lib/state/id-mapping.js.map +1 -1
  74. package/dist/lib/state/index.d.ts +3 -0
  75. package/dist/lib/state/index.d.ts.map +1 -1
  76. package/dist/lib/state/index.js.map +1 -1
  77. package/dist/lib/state/tool-cache.d.ts +5 -12
  78. package/dist/lib/state/tool-cache.d.ts.map +1 -1
  79. package/dist/lib/state/tool-cache.js +47 -72
  80. package/dist/lib/state/tool-cache.js.map +1 -1
  81. package/dist/lib/ui/display-utils.d.ts +12 -0
  82. package/dist/lib/ui/display-utils.d.ts.map +1 -1
  83. package/dist/lib/ui/display-utils.js +66 -0
  84. package/dist/lib/ui/display-utils.js.map +1 -1
  85. package/dist/lib/ui/notification.d.ts +5 -12
  86. package/dist/lib/ui/notification.d.ts.map +1 -1
  87. package/dist/lib/ui/notification.js +31 -138
  88. package/dist/lib/ui/notification.js.map +1 -1
  89. package/package.json +1 -1
  90. package/dist/lib/api-formats/prunable-list.d.ts +0 -49
  91. package/dist/lib/api-formats/prunable-list.d.ts.map +0 -1
  92. package/dist/lib/api-formats/prunable-list.js +0 -112
  93. package/dist/lib/api-formats/prunable-list.js.map +0 -1
  94. package/dist/lib/api-formats/synth-instruction.d.ts +0 -29
  95. package/dist/lib/api-formats/synth-instruction.d.ts.map +0 -1
  96. package/dist/lib/api-formats/synth-instruction.js +0 -171
  97. package/dist/lib/api-formats/synth-instruction.js.map +0 -1
  98. package/dist/lib/core/strategies/types.d.ts +0 -35
  99. package/dist/lib/core/strategies/types.d.ts.map +0 -1
  100. package/dist/lib/core/strategies/types.js +0 -6
  101. package/dist/lib/core/strategies/types.js.map +0 -1
@@ -65,4 +65,70 @@ export function extractParameterKey(metadata) {
65
65
  }
66
66
  return paramStr.substring(0, 50);
67
67
  }
68
+ export function truncate(str, maxLen = 60) {
69
+ if (str.length <= maxLen)
70
+ return str;
71
+ return str.slice(0, maxLen - 3) + '...';
72
+ }
73
+ export function shortenPath(input, workingDirectory) {
74
+ const inPathMatch = input.match(/^(.+) in (.+)$/);
75
+ if (inPathMatch) {
76
+ const prefix = inPathMatch[1];
77
+ const pathPart = inPathMatch[2];
78
+ const shortenedPath = shortenSinglePath(pathPart, workingDirectory);
79
+ return `${prefix} in ${shortenedPath}`;
80
+ }
81
+ return shortenSinglePath(input, workingDirectory);
82
+ }
83
+ function shortenSinglePath(path, workingDirectory) {
84
+ if (workingDirectory) {
85
+ if (path.startsWith(workingDirectory + '/')) {
86
+ return path.slice(workingDirectory.length + 1);
87
+ }
88
+ if (path === workingDirectory) {
89
+ return '.';
90
+ }
91
+ }
92
+ return path;
93
+ }
94
+ /**
95
+ * Formats a list of pruned items in the style: "→ tool: parameter"
96
+ */
97
+ export function formatPrunedItemsList(prunedIds, toolMetadata, workingDirectory) {
98
+ const lines = [];
99
+ for (const prunedId of prunedIds) {
100
+ const normalizedId = prunedId.toLowerCase();
101
+ const metadata = toolMetadata.get(normalizedId);
102
+ if (metadata) {
103
+ const paramKey = extractParameterKey(metadata);
104
+ if (paramKey) {
105
+ // Use 60 char limit to match notification style
106
+ const displayKey = truncate(shortenPath(paramKey, workingDirectory), 60);
107
+ lines.push(`→ ${metadata.tool}: ${displayKey}`);
108
+ }
109
+ else {
110
+ lines.push(`→ ${metadata.tool}`);
111
+ }
112
+ }
113
+ }
114
+ const knownCount = prunedIds.filter(id => toolMetadata.has(id.toLowerCase())).length;
115
+ const unknownCount = prunedIds.length - knownCount;
116
+ if (unknownCount > 0) {
117
+ lines.push(`→ (${unknownCount} tool${unknownCount > 1 ? 's' : ''} with unknown metadata)`);
118
+ }
119
+ return lines;
120
+ }
121
+ /**
122
+ * Formats a PruningResult into a human-readable string for the prune tool output.
123
+ */
124
+ export function formatPruningResultForTool(result, workingDirectory) {
125
+ const lines = [];
126
+ lines.push(`Context pruning complete. Pruned ${result.prunedCount} tool outputs.`);
127
+ lines.push('');
128
+ if (result.llmPrunedIds.length > 0) {
129
+ lines.push(`Semantically pruned (${result.llmPrunedIds.length}):`);
130
+ lines.push(...formatPrunedItemsList(result.llmPrunedIds, result.toolMetadata, workingDirectory));
131
+ }
132
+ return lines.join('\n').trim();
133
+ }
68
134
  //# sourceMappingURL=display-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"display-utils.js","sourceRoot":"","sources":["../../../lib/ui/display-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display-utils.js","sourceRoot":"","sources":["../../../lib/ui/display-utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Logger } from "../logger";
2
- import type { SessionStats, GCStats, PruningResult } from "../core/janitor";
2
+ import type { SessionStats, GCStats } from "../core/janitor";
3
+ import type { ToolMetadata, PruneReason } from "../fetch-wrapper/types";
3
4
  export type PruningSummaryLevel = "off" | "minimal" | "detailed";
4
5
  export interface NotificationConfig {
5
6
  pruningSummary: PruningSummaryLevel;
@@ -14,19 +15,11 @@ export interface NotificationData {
14
15
  aiPrunedCount: number;
15
16
  aiTokensSaved: number;
16
17
  aiPrunedIds: string[];
17
- toolMetadata: Map<string, {
18
- tool: string;
19
- parameters?: any;
20
- }>;
18
+ toolMetadata: Map<string, ToolMetadata>;
21
19
  gcPending: GCStats | null;
22
20
  sessionStats: SessionStats | null;
21
+ reason?: PruneReason;
23
22
  }
24
- export declare function sendIgnoredMessage(ctx: NotificationContext, sessionID: string, text: string, agent?: string): Promise<void>;
25
23
  export declare function sendUnifiedNotification(ctx: NotificationContext, sessionID: string, data: NotificationData, agent?: string): Promise<boolean>;
26
- export declare function formatPruningResultForTool(result: PruningResult, workingDirectory?: string): string;
27
- export declare function buildToolsSummary(prunedIds: string[], toolMetadata: Map<string, {
28
- tool: string;
29
- parameters?: any;
30
- }>, workingDirectory?: string): Map<string, string[]>;
31
- export declare function formatToolSummaryLines(toolsSummary: Map<string, string[]>, indent?: string): string[];
24
+ export declare function sendIgnoredMessage(ctx: NotificationContext, sessionID: string, text: string, agent?: string): Promise<void>;
32
25
  //# 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,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAI3E,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;AAEhE,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,mBAAmB,CAAA;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,GAAG,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,kBAAkB,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IAC7D,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;CACpC;AAED,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,uBAAuB,CACzC,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAyED,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,aAAa,EACrB,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAYR;AAED,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,EAC7D,gBAAgB,CAAC,EAAE,MAAM,GAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAuBvB;AAED,wBAAgB,sBAAsB,CAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACnC,MAAM,GAAE,MAAa,GACtB,MAAM,EAAE,CAeV"}
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,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAKvE,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;AAEhE,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,mBAAmB,CAAA;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,GAAG,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,kBAAkB,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACvC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACvB;AAED,wBAAsB,uBAAuB,CACzC,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -1,5 +1,21 @@
1
+ import { PRUNE_REASON_LABELS } from "../fetch-wrapper/types";
1
2
  import { formatTokenCount } from "../tokenizer";
2
- import { extractParameterKey } from "./display-utils";
3
+ import { formatPrunedItemsList } from "./display-utils";
4
+ export async function sendUnifiedNotification(ctx, sessionID, data, agent) {
5
+ const hasAiPruning = data.aiPrunedCount > 0;
6
+ const hasGcActivity = data.gcPending && data.gcPending.toolsDeduped > 0;
7
+ if (!hasAiPruning && !hasGcActivity) {
8
+ return false;
9
+ }
10
+ if (ctx.config.pruningSummary === 'off') {
11
+ return false;
12
+ }
13
+ const message = ctx.config.pruningSummary === 'minimal'
14
+ ? buildMinimalMessage(data)
15
+ : buildDetailedMessage(data, ctx.config.workingDirectory);
16
+ await sendIgnoredMessage(ctx, sessionID, message, agent);
17
+ return true;
18
+ }
3
19
  export async function sendIgnoredMessage(ctx, sessionID, text, agent) {
4
20
  try {
5
21
  await ctx.client.session.prompt({
@@ -19,24 +35,22 @@ export async function sendIgnoredMessage(ctx, sessionID, text, agent) {
19
35
  ctx.logger.error("notification", "Failed to send notification", { error: error.message });
20
36
  }
21
37
  }
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
38
  function buildMinimalMessage(data) {
38
39
  const { justNowTokens, totalTokens } = calculateStats(data);
39
- return formatStatsHeader(totalTokens, justNowTokens);
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();
40
54
  }
41
55
  function calculateStats(data) {
42
56
  const justNowTokens = data.aiTokensSaved + (data.gcPending?.tokensCollected ?? 0);
@@ -54,125 +68,4 @@ function formatStatsHeader(totalTokens, justNowTokens) {
54
68
  `▣ DCP | ${totalTokensPadded} saved total`,
55
69
  ].join('\n');
56
70
  }
57
- function buildDetailedMessage(data, workingDirectory) {
58
- const { justNowTokens, totalTokens } = calculateStats(data);
59
- let message = formatStatsHeader(totalTokens, justNowTokens);
60
- if (data.aiPrunedCount > 0) {
61
- const justNowTokensStr = `~${formatTokenCount(justNowTokens)}`;
62
- message += `\n\n▣ Pruned tools (${justNowTokensStr})`;
63
- for (const prunedId of data.aiPrunedIds) {
64
- const normalizedId = prunedId.toLowerCase();
65
- const metadata = data.toolMetadata.get(normalizedId);
66
- if (metadata) {
67
- const paramKey = extractParameterKey(metadata);
68
- if (paramKey) {
69
- const displayKey = truncate(shortenPath(paramKey, workingDirectory), 60);
70
- message += `\n→ ${metadata.tool}: ${displayKey}`;
71
- }
72
- else {
73
- message += `\n→ ${metadata.tool}`;
74
- }
75
- }
76
- }
77
- const knownCount = data.aiPrunedIds.filter(id => data.toolMetadata.has(id.toLowerCase())).length;
78
- const unknownCount = data.aiPrunedIds.length - knownCount;
79
- if (unknownCount > 0) {
80
- message += `\n→ (${unknownCount} tool${unknownCount > 1 ? 's' : ''} with unknown metadata)`;
81
- }
82
- }
83
- return message.trim();
84
- }
85
- export function formatPruningResultForTool(result, workingDirectory) {
86
- const lines = [];
87
- lines.push(`Context pruning complete. Pruned ${result.prunedCount} tool outputs.`);
88
- lines.push('');
89
- if (result.llmPrunedIds.length > 0) {
90
- lines.push(`Semantically pruned (${result.llmPrunedIds.length}):`);
91
- const toolsSummary = buildToolsSummary(result.llmPrunedIds, result.toolMetadata, workingDirectory);
92
- lines.push(...formatToolSummaryLines(toolsSummary));
93
- }
94
- return lines.join('\n').trim();
95
- }
96
- export function buildToolsSummary(prunedIds, toolMetadata, workingDirectory) {
97
- const toolsSummary = new Map();
98
- for (const prunedId of prunedIds) {
99
- const normalizedId = prunedId.toLowerCase();
100
- const metadata = toolMetadata.get(normalizedId);
101
- if (metadata) {
102
- const toolName = metadata.tool;
103
- if (!toolsSummary.has(toolName)) {
104
- toolsSummary.set(toolName, []);
105
- }
106
- const paramKey = extractParameterKey(metadata);
107
- if (paramKey) {
108
- const displayKey = truncate(shortenPath(paramKey, workingDirectory), 80);
109
- toolsSummary.get(toolName).push(displayKey);
110
- }
111
- else {
112
- toolsSummary.get(toolName).push('(default)');
113
- }
114
- }
115
- }
116
- return toolsSummary;
117
- }
118
- export function formatToolSummaryLines(toolsSummary, indent = ' ') {
119
- const lines = [];
120
- for (const [toolName, params] of toolsSummary.entries()) {
121
- if (params.length === 1) {
122
- lines.push(`${indent}${toolName}: ${params[0]}`);
123
- }
124
- else if (params.length > 1) {
125
- lines.push(`${indent}${toolName} (${params.length}):`);
126
- for (const param of params) {
127
- lines.push(`${indent} ${param}`);
128
- }
129
- }
130
- }
131
- return lines;
132
- }
133
- function truncate(str, maxLen = 60) {
134
- if (str.length <= maxLen)
135
- return str;
136
- return str.slice(0, maxLen - 3) + '...';
137
- }
138
- function shortenPath(input, workingDirectory) {
139
- const inPathMatch = input.match(/^(.+) in (.+)$/);
140
- if (inPathMatch) {
141
- const prefix = inPathMatch[1];
142
- const pathPart = inPathMatch[2];
143
- const shortenedPath = shortenSinglePath(pathPart, workingDirectory);
144
- return `${prefix} in ${shortenedPath}`;
145
- }
146
- return shortenSinglePath(input, workingDirectory);
147
- }
148
- function shortenSinglePath(path, workingDirectory) {
149
- const homeDir = require('os').homedir();
150
- if (workingDirectory) {
151
- if (path.startsWith(workingDirectory + '/')) {
152
- return path.slice(workingDirectory.length + 1);
153
- }
154
- if (path === workingDirectory) {
155
- return '.';
156
- }
157
- }
158
- if (path.startsWith(homeDir)) {
159
- path = '~' + path.slice(homeDir.length);
160
- }
161
- const nodeModulesMatch = path.match(/node_modules\/(@[^\/]+\/[^\/]+|[^\/]+)\/(.*)/);
162
- if (nodeModulesMatch) {
163
- return `${nodeModulesMatch[1]}/${nodeModulesMatch[2]}`;
164
- }
165
- if (workingDirectory) {
166
- const workingDirWithTilde = workingDirectory.startsWith(homeDir)
167
- ? '~' + workingDirectory.slice(homeDir.length)
168
- : null;
169
- if (workingDirWithTilde && path.startsWith(workingDirWithTilde + '/')) {
170
- return path.slice(workingDirWithTilde.length + 1);
171
- }
172
- if (workingDirWithTilde && path === workingDirWithTilde) {
173
- return '.';
174
- }
175
- }
176
- return path;
177
- }
178
71
  //# sourceMappingURL=notification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAwBrD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,GAAwB,EACxB,SAAiB,EACjB,IAAY,EACZ,KAAc;IAEd,IAAI,CAAC;QACD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE;gBACF,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC;wBACJ,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,IAAI;qBAChB,CAAC;aACL;SACJ,CAAC,CAAA;IACN,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,6BAA6B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,GAAwB,EACxB,SAAiB,EACjB,IAAsB,EACtB,KAAc;IAEd,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAA;IAEvE,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS;QACnD,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAE7D,MAAM,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IACxD,OAAO,IAAI,CAAA;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAsB;IAC/C,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IAE3D,OAAO,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,IAAsB;IAI1C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,IAAI,CAAC,CAAC,CAAA;IAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY;QACjC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;QACtE,CAAC,CAAC,aAAa,CAAA;IAEnB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AACzC,CAAC;AAED,SAAS,iBAAiB,CACtB,WAAmB,EACnB,aAAqB;IAErB,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAA;IAC1D,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAA;IAE9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC5E,MAAM,iBAAiB,GAAG,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAE9D,OAAO;QACH,WAAW,iBAAiB,cAAc;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAsB,EAAE,gBAAyB;IAC3E,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IAE3D,IAAI,OAAO,GAAG,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAE3D,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAA;QAC9D,OAAO,IAAI,uBAAuB,gBAAgB,GAAG,CAAA;QAErD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAEpD,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;gBAC9C,IAAI,QAAQ,EAAE,CAAC;oBACX,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAA;oBACxE,OAAO,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAA;gBACpD,CAAC;qBAAM,CAAC;oBACJ,OAAO,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;gBACrC,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAC1C,CAAC,MAAM,CAAA;QACR,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,UAAU,CAAA;QAEzD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,QAAQ,YAAY,QAAQ,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAA;QAC/F,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACtC,MAAqB,EACrB,gBAAyB;IAEzB,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,WAAW,gBAAgB,CAAC,CAAA;IAClF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,CAAA;QAClE,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;QAClG,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,SAAmB,EACnB,YAA6D,EAC7D,gBAAyB;IAEzB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAA;IAEhD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAA;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAClC,CAAC;YAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;YAC9C,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAA;gBACxE,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACJ,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACjD,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,YAAmC,EACnC,SAAiB,IAAI;IAErB,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACpD,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;YACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC,CAAA;YACrC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,SAAiB,EAAE;IAC9C,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAA;IACpC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,gBAAyB;IACzD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACjD,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;QACnE,OAAO,GAAG,MAAM,OAAO,aAAa,EAAE,CAAA;IAC1C,CAAC;IAED,OAAO,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,gBAAyB;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAEvC,IAAI,gBAAgB,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAA;QACd,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACnF,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1D,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC;YAC5D,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAA;QAEV,IAAI,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,IAAI,mBAAmB,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtD,OAAO,GAAG,CAAA;QACd,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.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.2",
4
+ "version": "0.4.13",
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,49 +0,0 @@
1
- /**
2
- * Prunable tools list and nudge injection for DCP.
3
- *
4
- * Builds and injects a single message at the end of the conversation containing:
5
- * - Nudge instruction (when toolResultCount > nudge_freq)
6
- * - Prunable tools list
7
- *
8
- * Note: The base synthetic instructions (signal_management, context_window_management,
9
- * context_pruning) are still appended to the last user message separately via
10
- * synth-instruction.ts - that behavior is unchanged.
11
- */
12
- export interface ToolMetadata {
13
- tool: string;
14
- parameters?: any;
15
- }
16
- export interface PrunableListResult {
17
- list: string;
18
- numericIds: number[];
19
- }
20
- /**
21
- * Builds the prunable tools list section.
22
- * Returns both the formatted list and the numeric IDs for logging.
23
- */
24
- export declare function buildPrunableToolsList(sessionId: string, unprunedToolCallIds: string[], toolMetadata: Map<string, ToolMetadata>, protectedTools: string[]): PrunableListResult;
25
- /**
26
- * Builds the end-of-conversation injection message.
27
- * Contains the system reminder, nudge (if active), and the prunable tools list.
28
- *
29
- * @param prunableList - The prunable tools list string (or empty string if none)
30
- * @param includeNudge - Whether to include the nudge instruction
31
- * @returns The injection string, or empty string if nothing to inject
32
- */
33
- export declare function buildEndInjection(prunableList: string, includeNudge: boolean): string;
34
- /**
35
- * Injects the prunable list (and optionally nudge) at the end of OpenAI/Anthropic messages.
36
- * Appends a new user message at the end.
37
- */
38
- export declare function injectPrunableList(messages: any[], injection: string): boolean;
39
- /**
40
- * Injects the prunable list (and optionally nudge) at the end of Gemini contents.
41
- * Appends a new user content at the end.
42
- */
43
- export declare function injectPrunableListGemini(contents: any[], injection: string): boolean;
44
- /**
45
- * Injects the prunable list (and optionally nudge) at the end of OpenAI Responses API input.
46
- * Appends a new user message at the end.
47
- */
48
- export declare function injectPrunableListResponses(input: any[], injection: string): boolean;
49
- //# sourceMappingURL=prunable-list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prunable-list.d.ts","sourceRoot":"","sources":["../../../lib/api-formats/prunable-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,GAAG,CAAA;CACnB;AAkBD,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,cAAc,EAAE,MAAM,EAAE,GACzB,kBAAkB,CA6BpB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,OAAO,GACtB,MAAM,CAeR;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,QAAQ,EAAE,GAAG,EAAE,EACf,SAAS,EAAE,MAAM,GAClB,OAAO,CAIT;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,GAAG,EAAE,EACf,SAAS,EAAE,MAAM,GAClB,OAAO,CAIT;AAMD;;;GAGG;AACH,wBAAgB,2BAA2B,CACvC,KAAK,EAAE,GAAG,EAAE,EACZ,SAAS,EAAE,MAAM,GAClB,OAAO,CAIT"}
@@ -1,112 +0,0 @@
1
- /**
2
- * Prunable tools list and nudge injection for DCP.
3
- *
4
- * Builds and injects a single message at the end of the conversation containing:
5
- * - Nudge instruction (when toolResultCount > nudge_freq)
6
- * - Prunable tools list
7
- *
8
- * Note: The base synthetic instructions (signal_management, context_window_management,
9
- * context_pruning) are still appended to the last user message separately via
10
- * synth-instruction.ts - that behavior is unchanged.
11
- */
12
- import { extractParameterKey } from '../ui/display-utils';
13
- import { getOrCreateNumericId } from '../state/id-mapping';
14
- // ============================================================================
15
- // Prompt Content
16
- // ============================================================================
17
- const SYSTEM_REMINDER = `<system-reminder>
18
- These instructions are injected by a plugin and are invisible to the user. Do not acknowledge or reference them in your response - simply follow them silently.
19
- </system-reminder>`;
20
- const NUDGE_INSTRUCTION = `<instruction name=agent_nudge>
21
- You have accumulated several tool outputs. If you have completed a discrete unit of work and distilled relevant understanding in writing for the user to keep, use the prune tool to remove obsolete tool outputs from this conversation and optimize token usage.
22
- </instruction>`;
23
- /**
24
- * Builds the prunable tools list section.
25
- * Returns both the formatted list and the numeric IDs for logging.
26
- */
27
- export function buildPrunableToolsList(sessionId, unprunedToolCallIds, toolMetadata, protectedTools) {
28
- const lines = [];
29
- const numericIds = [];
30
- for (const actualId of unprunedToolCallIds) {
31
- const metadata = toolMetadata.get(actualId);
32
- // Skip if no metadata or if tool is protected
33
- if (!metadata)
34
- continue;
35
- if (protectedTools.includes(metadata.tool))
36
- continue;
37
- // Get or create numeric ID for this tool call
38
- const numericId = getOrCreateNumericId(sessionId, actualId);
39
- numericIds.push(numericId);
40
- // Format: "1: read, src/components/Button.tsx"
41
- const paramKey = extractParameterKey(metadata);
42
- const description = paramKey ? `${metadata.tool}, ${paramKey}` : metadata.tool;
43
- lines.push(`${numericId}: ${description}`);
44
- }
45
- if (lines.length === 0) {
46
- return { list: '', numericIds: [] };
47
- }
48
- return {
49
- list: `<prunable-tools>\n${lines.join('\n')}\n</prunable-tools>`,
50
- numericIds
51
- };
52
- }
53
- /**
54
- * Builds the end-of-conversation injection message.
55
- * Contains the system reminder, nudge (if active), and the prunable tools list.
56
- *
57
- * @param prunableList - The prunable tools list string (or empty string if none)
58
- * @param includeNudge - Whether to include the nudge instruction
59
- * @returns The injection string, or empty string if nothing to inject
60
- */
61
- export function buildEndInjection(prunableList, includeNudge) {
62
- // If no prunable tools, don't inject anything
63
- if (!prunableList) {
64
- return '';
65
- }
66
- const parts = [SYSTEM_REMINDER];
67
- if (includeNudge) {
68
- parts.push(NUDGE_INSTRUCTION);
69
- }
70
- parts.push(prunableList);
71
- return parts.join('\n\n');
72
- }
73
- // ============================================================================
74
- // OpenAI Chat / Anthropic Format
75
- // ============================================================================
76
- /**
77
- * Injects the prunable list (and optionally nudge) at the end of OpenAI/Anthropic messages.
78
- * Appends a new user message at the end.
79
- */
80
- export function injectPrunableList(messages, injection) {
81
- if (!injection)
82
- return false;
83
- messages.push({ role: 'user', content: injection });
84
- return true;
85
- }
86
- // ============================================================================
87
- // Google/Gemini Format
88
- // ============================================================================
89
- /**
90
- * Injects the prunable list (and optionally nudge) at the end of Gemini contents.
91
- * Appends a new user content at the end.
92
- */
93
- export function injectPrunableListGemini(contents, injection) {
94
- if (!injection)
95
- return false;
96
- contents.push({ role: 'user', parts: [{ text: injection }] });
97
- return true;
98
- }
99
- // ============================================================================
100
- // OpenAI Responses API Format
101
- // ============================================================================
102
- /**
103
- * Injects the prunable list (and optionally nudge) at the end of OpenAI Responses API input.
104
- * Appends a new user message at the end.
105
- */
106
- export function injectPrunableListResponses(input, injection) {
107
- if (!injection)
108
- return false;
109
- input.push({ type: 'message', role: 'user', content: injection });
110
- return true;
111
- }
112
- //# sourceMappingURL=prunable-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prunable-list.js","sourceRoot":"","sources":["../../../lib/api-formats/prunable-list.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- export interface ToolTracker {
2
- seenToolResultIds: Set<string>;
3
- toolResultCount: number;
4
- skipNextIdle: boolean;
5
- getToolName?: (callId: string) => string | undefined;
6
- }
7
- export declare function createToolTracker(): ToolTracker;
8
- export declare function resetToolTrackerCount(tracker: ToolTracker): void;
9
- /**
10
- * Track new tool results in OpenAI/Anthropic messages.
11
- * Increments toolResultCount only for tools not already seen and not protected.
12
- * Returns the number of NEW tools found (since last call).
13
- */
14
- export declare function trackNewToolResults(messages: any[], tracker: ToolTracker, protectedTools: Set<string>): number;
15
- /**
16
- * Track new tool results in Gemini contents.
17
- * Uses position-based tracking since Gemini doesn't have tool call IDs.
18
- * Returns the number of NEW tools found (since last call).
19
- */
20
- export declare function trackNewToolResultsGemini(contents: any[], tracker: ToolTracker, protectedTools: Set<string>): number;
21
- /**
22
- * Track new tool results in OpenAI Responses API input.
23
- * Returns the number of NEW tools found (since last call).
24
- */
25
- export declare function trackNewToolResultsResponses(input: any[], tracker: ToolTracker, protectedTools: Set<string>): number;
26
- export declare function injectSynth(messages: any[], instruction: string, nudgeText: string): boolean;
27
- export declare function injectSynthGemini(contents: any[], instruction: string, nudgeText: string): boolean;
28
- export declare function injectSynthResponses(input: any[], instruction: string, nudgeText: string): boolean;
29
- //# sourceMappingURL=synth-instruction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"synth-instruction.d.ts","sourceRoot":"","sources":["../../../lib/api-formats/synth-instruction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IACxB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;CACvD;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAE/C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CA4B9G;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAqBpH;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAepH;AASD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAqB5F;AAUD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAgBlG;AASD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAqBlG"}