@tarquinen/opencode-dcp 0.4.2 → 0.4.12

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 +122 -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 +25 -45
  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 +30 -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 +33 -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 +29 -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 +18 -30
  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
@@ -1,46 +1,78 @@
1
- import { PRUNED_CONTENT_MESSAGE, getAllPrunedIds, fetchSessionMessages } from "./types";
2
- import { buildPrunableToolsList, buildEndInjection } from "../api-formats/prunable-list";
3
- /**
4
- * Generic format handler that processes any API format using a FormatDescriptor.
5
- *
6
- * This consolidates the common logic from all format-specific handlers:
7
- * 1. Cache tool parameters
8
- * 2. Inject synthetic instructions (if strategies enabled)
9
- * 3. Build and inject prunable tools list
10
- * 4. Replace pruned tool outputs
11
- * 5. Log and save context
12
- */
1
+ import { ensureSessionRestored } from "../state";
2
+ import { buildPrunableToolsList, buildAssistantInjection } from "./prunable-list";
3
+ import { syncToolCache } from "../state/tool-cache";
4
+ import { loadPrompt } from "../core/prompt";
5
+ const SYNTHETIC_INSTRUCTION = loadPrompt("synthetic");
6
+ const PRUNED_CONTENT_MESSAGE = '[Output removed to save context - information superseded or no longer needed]';
7
+ function getMostRecentActiveSession(allSessions) {
8
+ const activeSessions = allSessions.data?.filter((s) => !s.parentID) || [];
9
+ return activeSessions.length > 0 ? activeSessions[0] : undefined;
10
+ }
11
+ async function fetchSessionMessages(client, sessionId) {
12
+ try {
13
+ const messagesResponse = await client.session.messages({
14
+ path: { id: sessionId },
15
+ query: { limit: 500 }
16
+ });
17
+ return Array.isArray(messagesResponse.data)
18
+ ? messagesResponse.data
19
+ : Array.isArray(messagesResponse) ? messagesResponse : undefined;
20
+ }
21
+ catch (e) {
22
+ return undefined;
23
+ }
24
+ }
25
+ async function getAllPrunedIds(client, state, logger) {
26
+ const allSessions = await client.session.list();
27
+ const allPrunedIds = new Set();
28
+ const currentSession = getMostRecentActiveSession(allSessions);
29
+ if (currentSession) {
30
+ await ensureSessionRestored(state, currentSession.id, logger);
31
+ const prunedIds = state.prunedIds.get(currentSession.id) ?? [];
32
+ prunedIds.forEach((id) => allPrunedIds.add(id.toLowerCase()));
33
+ if (logger && prunedIds.length > 0) {
34
+ logger.debug("fetch", "Loaded pruned IDs for replacement", {
35
+ sessionId: currentSession.id,
36
+ prunedCount: prunedIds.length
37
+ });
38
+ }
39
+ }
40
+ return { allSessions, allPrunedIds };
41
+ }
13
42
  export async function handleFormat(body, ctx, inputUrl, format) {
14
43
  const data = format.getDataArray(body);
15
44
  if (!data) {
16
45
  return { modified: false, body };
17
46
  }
18
47
  let modified = false;
19
- format.cacheToolParameters(data, ctx.state, ctx.logger);
20
- if (ctx.config.strategies.onTool.length > 0) {
21
- if (format.injectSynth(data, ctx.prompts.synthInstruction, ctx.prompts.nudgeInstruction)) {
22
- modified = true;
23
- }
24
- const sessionId = ctx.state.lastSeenSessionId;
25
- if (sessionId) {
26
- const toolIds = Array.from(ctx.state.toolParameters.keys());
27
- const alreadyPruned = ctx.state.prunedIds.get(sessionId) ?? [];
28
- const alreadyPrunedLower = new Set(alreadyPruned.map(id => id.toLowerCase()));
29
- const unprunedIds = toolIds.filter(id => !alreadyPrunedLower.has(id.toLowerCase()));
30
- const { list: prunableList, numericIds } = buildPrunableToolsList(sessionId, unprunedIds, ctx.state.toolParameters, ctx.config.protectedTools);
31
- if (prunableList) {
32
- const protectedSet = new Set(ctx.config.protectedTools);
33
- format.trackNewToolResults(data, ctx.toolTracker, protectedSet);
34
- const includeNudge = ctx.config.nudge_freq > 0 && ctx.toolTracker.toolResultCount > ctx.config.nudge_freq;
35
- const endInjection = buildEndInjection(prunableList, includeNudge);
36
- if (format.injectPrunableList(data, endInjection)) {
37
- ctx.logger.debug("fetch", `Injected prunable tools list (${format.name})`, {
38
- ids: numericIds,
39
- nudge: includeNudge,
40
- toolsSincePrune: ctx.toolTracker.toolResultCount
41
- });
42
- modified = true;
43
- }
48
+ // Sync tool parameters from OpenCode's session API (single source of truth)
49
+ // Also tracks new tool results for nudge injection
50
+ const sessionId = ctx.state.lastSeenSessionId;
51
+ const protectedSet = new Set(ctx.config.protectedTools);
52
+ if (sessionId) {
53
+ await ensureSessionRestored(ctx.state, sessionId, ctx.logger);
54
+ await syncToolCache(ctx.client, sessionId, ctx.state, ctx.toolTracker, protectedSet, ctx.logger);
55
+ }
56
+ if (ctx.config.strategies.onTool.length > 0 && sessionId) {
57
+ const toolIds = Array.from(ctx.state.toolParameters.keys());
58
+ const alreadyPruned = ctx.state.prunedIds.get(sessionId) ?? [];
59
+ const alreadyPrunedLower = new Set(alreadyPruned.map(id => id.toLowerCase()));
60
+ const unprunedIds = toolIds.filter(id => !alreadyPrunedLower.has(id.toLowerCase()));
61
+ const { list: prunableList, numericIds } = buildPrunableToolsList(sessionId, unprunedIds, ctx.state.toolParameters, ctx.config.protectedTools);
62
+ if (prunableList) {
63
+ const includeNudge = ctx.config.nudge_freq > 0 && ctx.toolTracker.toolResultCount > ctx.config.nudge_freq;
64
+ if (format.injectSystemMessage(body, SYNTHETIC_INSTRUCTION)) {
65
+ modified = true;
66
+ }
67
+ const assistantInjection = buildAssistantInjection(prunableList, includeNudge);
68
+ if (format.appendToLastAssistantMessage && format.appendToLastAssistantMessage(body, assistantInjection)) {
69
+ const nudgeMsg = includeNudge ? " with nudge" : "";
70
+ ctx.logger.debug("fetch", `Appended prunable tools list${nudgeMsg} to last assistant message (${format.name})`, {
71
+ ids: numericIds,
72
+ nudge: includeNudge,
73
+ toolsSincePrune: ctx.toolTracker.toolResultCount
74
+ });
75
+ modified = true;
44
76
  }
45
77
  }
46
78
  }
@@ -52,12 +84,13 @@ export async function handleFormat(body, ctx, inputUrl, format) {
52
84
  return { modified, body };
53
85
  }
54
86
  const toolOutputs = format.extractToolOutputs(data, ctx.state);
55
- const protectedToolsLower = new Set(ctx.config.protectedTools.map(t => t.toLowerCase()));
56
87
  let replacedCount = 0;
88
+ let prunableCount = 0;
57
89
  for (const output of toolOutputs) {
58
- if (output.toolName && protectedToolsLower.has(output.toolName.toLowerCase())) {
90
+ // Skip tools not in cache (protected tools are excluded from cache)
91
+ if (!output.toolName)
59
92
  continue;
60
- }
93
+ prunableCount++;
61
94
  if (allPrunedIds.has(output.id)) {
62
95
  if (format.replaceToolOutput(data, output.id, PRUNED_CONTENT_MESSAGE, ctx.state)) {
63
96
  replacedCount++;
@@ -67,7 +100,7 @@ export async function handleFormat(body, ctx, inputUrl, format) {
67
100
  if (replacedCount > 0) {
68
101
  ctx.logger.info("fetch", `Replaced pruned tool outputs (${format.name})`, {
69
102
  replaced: replacedCount,
70
- total: toolOutputs.length
103
+ total: prunableCount
71
104
  });
72
105
  if (ctx.logger.enabled) {
73
106
  const activeSessions = allSessions.data?.filter((s) => !s.parentID) || [];
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAElE,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,qBAAqB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;AACrD,MAAM,sBAAsB,GAAG,+EAA+E,CAAA;AAE9G,SAAS,0BAA0B,CAAC,WAAgB;IAChD,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC9E,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACpE,CAAC;AAED,KAAK,UAAU,oBAAoB,CAC/B,MAAW,EACX,SAAiB;IAEjB,IAAI,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnD,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;SACxB,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,gBAAgB,CAAC,IAAI;YACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAC1B,MAAW,EACX,KAAkB,EAClB,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;IAEtC,MAAM,cAAc,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAA;IAC9D,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;QAC9D,SAAS,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAErE,IAAI,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,mCAAmC,EAAE;gBACvD,SAAS,EAAE,cAAc,CAAC,EAAE;gBAC5B,WAAW,EAAE,SAAS,CAAC,MAAM;aAChC,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,IAAS,EACT,GAAwB,EACxB,QAAgB,EAChB,MAAwB;IAExB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACpC,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,4EAA4E;IAC5E,mDAAmD;IACnD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAA;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IACvD,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC7D,MAAM,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpG,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QAC9D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAEnF,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,sBAAsB,CAC7D,SAAS,EACT,WAAW,EACX,GAAG,CAAC,KAAK,CAAC,cAAc,EACxB,GAAG,CAAC,MAAM,CAAC,cAAc,CAC5B,CAAA;QAED,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAA;YACzG,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,CAAC;gBAC1D,QAAQ,GAAG,IAAI,CAAA;YACnB,CAAC;YAED,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;YAE9E,IAAI,MAAM,CAAC,4BAA4B,IAAI,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBACvG,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAA;gBAClD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,+BAA+B,QAAQ,+BAA+B,MAAM,CAAC,IAAI,GAAG,EAAE;oBAC5G,GAAG,EAAE,UAAU;oBACf,KAAK,EAAE,YAAY;oBACnB,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,eAAe;iBACnD,CAAC,CAAA;gBACF,QAAQ,GAAG,IAAI,CAAA;YACnB,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAE9F,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;IAC9D,IAAI,aAAa,GAAG,CAAC,CAAA;IACrB,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QAC/B,oEAAoE;QACpE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,SAAQ;QAC9B,aAAa,EAAE,CAAA;QAEf,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,sBAAsB,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/E,aAAa,EAAE,CAAA;YACnB,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,iCAAiC,MAAM,CAAC,IAAI,GAAG,EAAE;YACtE,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,aAAa;SACvB,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC9E,IAAI,eAAkC,CAAA;YACtC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAC3C,eAAe,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAClF,CAAC;YAED,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAC/B,QAAQ,EACR,IAAI,EACJ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,EACpD,eAAe,CAClB,CAAA;QACL,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AAC7B,CAAC"}
@@ -1,19 +1,18 @@
1
1
  import type { PluginState } from "../state";
2
2
  import type { Logger } from "../logger";
3
- import type { SynthPrompts } from "./types";
4
- import type { ToolTracker } from "../api-formats/synth-instruction";
3
+ import type { ToolTracker } from "./types";
5
4
  import type { PluginConfig } from "../config";
6
- export type { FetchHandlerContext, FetchHandlerResult, SynthPrompts } from "./types";
5
+ export type { FetchHandlerContext, FetchHandlerResult } from "./types";
7
6
  /**
8
7
  * Creates a wrapped global fetch that intercepts API calls and performs
9
8
  * context pruning on tool outputs that have been marked for removal.
10
9
  *
11
10
  * Supports five API formats:
12
11
  * 1. OpenAI Chat Completions (body.messages with role='tool')
13
- * 2. Anthropic (body.messages with role='user' containing tool_result)
12
+ * 2. Anthropic Messages API (body.system + body.messages with tool_result)
14
13
  * 3. Google/Gemini (body.contents with functionResponse parts)
15
14
  * 4. OpenAI Responses API (body.input with function_call_output items)
16
15
  * 5. AWS Bedrock Converse API (body.system + body.messages with toolResult blocks)
17
16
  */
18
- export declare function installFetchWrapper(state: PluginState, logger: Logger, client: any, config: PluginConfig, toolTracker: ToolTracker, prompts: SynthPrompts): () => void;
17
+ export declare function installFetchWrapper(state: PluginState, logger: Logger, client: any, config: PluginConfig, toolTracker: ToolTracker): () => void;
19
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAO7C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEpF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,YAAY,GACtB,MAAM,IAAI,CA8FZ"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAO7C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,GACzB,MAAM,IAAI,CAuGZ"}
@@ -1,4 +1,4 @@
1
- import { openaiChatFormat, openaiResponsesFormat, geminiFormat, bedrockFormat } from "./formats";
1
+ import { openaiChatFormat, openaiResponsesFormat, geminiFormat, bedrockFormat, anthropicFormat } from "./formats";
2
2
  import { handleFormat } from "./handler";
3
3
  import { runStrategies } from "../core/strategies";
4
4
  import { accumulateGCStats } from "./gc-tracker";
@@ -9,20 +9,19 @@ import { trimToolParametersCache } from "../state/tool-cache";
9
9
  *
10
10
  * Supports five API formats:
11
11
  * 1. OpenAI Chat Completions (body.messages with role='tool')
12
- * 2. Anthropic (body.messages with role='user' containing tool_result)
12
+ * 2. Anthropic Messages API (body.system + body.messages with tool_result)
13
13
  * 3. Google/Gemini (body.contents with functionResponse parts)
14
14
  * 4. OpenAI Responses API (body.input with function_call_output items)
15
15
  * 5. AWS Bedrock Converse API (body.system + body.messages with toolResult blocks)
16
16
  */
17
- export function installFetchWrapper(state, logger, client, config, toolTracker, prompts) {
17
+ export function installFetchWrapper(state, logger, client, config, toolTracker) {
18
18
  const originalGlobalFetch = globalThis.fetch;
19
19
  const ctx = {
20
20
  state,
21
21
  logger,
22
22
  client,
23
23
  config,
24
- toolTracker,
25
- prompts
24
+ toolTracker
26
25
  };
27
26
  globalThis.fetch = async (input, init) => {
28
27
  if (state.lastSeenSessionId && state.subagentSessions.has(state.lastSeenSessionId)) {
@@ -38,8 +37,12 @@ export function installFetchWrapper(state, logger, client, config, toolTracker,
38
37
  let modified = false;
39
38
  const toolIdsBefore = new Set(state.toolParameters.keys());
40
39
  // Mutually exclusive format handlers
41
- // Note: bedrockFormat must be checked before openaiChatFormat since both have messages[]
42
- // but Bedrock has distinguishing system[] array and inferenceConfig
40
+ // Order matters: More specific formats first to avoid incorrect detection
41
+ // 1. OpenAI Responses API: has body.input (not body.messages)
42
+ // 2. Bedrock: has body.system + body.inferenceConfig + body.messages
43
+ // 3. Anthropic: has body.system + body.messages (no inferenceConfig)
44
+ // 4. OpenAI Chat: has body.messages (no top-level system)
45
+ // 5. Gemini: has body.contents
43
46
  if (openaiResponsesFormat.detect(body)) {
44
47
  const result = await handleFormat(body, ctx, inputUrl, openaiResponsesFormat);
45
48
  if (result.modified) {
@@ -52,6 +55,12 @@ export function installFetchWrapper(state, logger, client, config, toolTracker,
52
55
  modified = true;
53
56
  }
54
57
  }
58
+ else if (anthropicFormat.detect(body)) {
59
+ const result = await handleFormat(body, ctx, inputUrl, anthropicFormat);
60
+ if (result.modified) {
61
+ modified = true;
62
+ }
63
+ }
55
64
  else if (openaiChatFormat.detect(body)) {
56
65
  const result = await handleFormat(body, ctx, inputUrl, openaiChatFormat);
57
66
  if (result.modified) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ToolMetadata } from './types';
2
+ export interface PrunableListResult {
3
+ list: string;
4
+ numericIds: number[];
5
+ }
6
+ export declare function buildPrunableToolsList(sessionId: string, unprunedToolCallIds: string[], toolMetadata: Map<string, ToolMetadata>, protectedTools: string[]): PrunableListResult;
7
+ export declare function buildAssistantInjection(prunableList: string, includeNudge: boolean): string;
8
+ //# sourceMappingURL=prunable-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prunable-list.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/prunable-list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,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,CAyBpB;AAED,wBAAgB,uBAAuB,CACnC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,OAAO,GACtB,MAAM,CAYR"}
@@ -0,0 +1,38 @@
1
+ import { extractParameterKey } from '../ui/display-utils';
2
+ import { getOrCreateNumericId } from '../state/id-mapping';
3
+ import { loadPrompt } from '../core/prompt';
4
+ const NUDGE_INSTRUCTION = loadPrompt("nudge");
5
+ export function buildPrunableToolsList(sessionId, unprunedToolCallIds, toolMetadata, protectedTools) {
6
+ const lines = [];
7
+ const numericIds = [];
8
+ for (const actualId of unprunedToolCallIds) {
9
+ const metadata = toolMetadata.get(actualId);
10
+ if (!metadata)
11
+ continue;
12
+ if (protectedTools.includes(metadata.tool))
13
+ continue;
14
+ const numericId = getOrCreateNumericId(sessionId, actualId);
15
+ numericIds.push(numericId);
16
+ const paramKey = extractParameterKey(metadata);
17
+ const description = paramKey ? `${metadata.tool}, ${paramKey}` : metadata.tool;
18
+ lines.push(`${numericId}: ${description}`);
19
+ }
20
+ if (lines.length === 0) {
21
+ return { list: '', numericIds: [] };
22
+ }
23
+ return {
24
+ list: `<prunable-tools>\n${lines.join('\n')}\n</prunable-tools>`,
25
+ numericIds
26
+ };
27
+ }
28
+ export function buildAssistantInjection(prunableList, includeNudge) {
29
+ if (!prunableList) {
30
+ return '';
31
+ }
32
+ const parts = [prunableList];
33
+ if (includeNudge) {
34
+ parts.push(NUDGE_INSTRUCTION);
35
+ }
36
+ return parts.join('\n\n');
37
+ }
38
+ //# sourceMappingURL=prunable-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prunable-list.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/prunable-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3C,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAO7C,MAAM,UAAU,sBAAsB,CAClC,SAAiB,EACjB,mBAA6B,EAC7B,YAAuC,EACvC,cAAwB;IAExB,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,UAAU,GAAa,EAAE,CAAA;IAE/B,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACvB,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAQ;QAEpD,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAC3D,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE1B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAA;QAC9E,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,WAAW,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACH,IAAI,EAAE,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB;QAChE,UAAU;KACb,CAAA;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,YAAoB,EACpB,YAAqB;IAErB,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACb,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,CAAA;IAE5B,IAAI,YAAY,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ToolTracker {
2
+ seenToolResultIds: Set<string>;
3
+ toolResultCount: number;
4
+ skipNextIdle: boolean;
5
+ }
6
+ export declare function createToolTracker(): ToolTracker;
7
+ export declare function resetToolTrackerCount(tracker: ToolTracker): void;
8
+ //# sourceMappingURL=tool-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-tracker.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/tool-tracker.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;CACxB;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAE/C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAEhE"}
@@ -0,0 +1,7 @@
1
+ export function createToolTracker() {
2
+ return { seenToolResultIds: new Set(), toolResultCount: 0, skipNextIdle: false };
3
+ }
4
+ export function resetToolTrackerCount(tracker) {
5
+ tracker.toolResultCount = 0;
6
+ }
7
+ //# sourceMappingURL=tool-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-tracker.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/tool-tracker.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,iBAAiB;IAC7B,OAAO,EAAE,iBAAiB,EAAE,IAAI,GAAG,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAoB;IACtD,OAAO,CAAC,eAAe,GAAG,CAAC,CAAA;AAC/B,CAAC"}
@@ -1,77 +1,62 @@
1
- import { type PluginState } from "../state";
1
+ import type { PluginState } from "../state";
2
2
  import type { Logger } from "../logger";
3
- import type { ToolTracker } from "../api-formats/synth-instruction";
4
3
  import type { PluginConfig } from "../config";
5
- /** The message used to replace pruned tool output content */
6
- export declare const PRUNED_CONTENT_MESSAGE = "[Output removed to save context - information superseded or no longer needed]";
7
- /** Represents a tool output that can be pruned */
4
+ import type { ToolTracker } from "./tool-tracker";
5
+ export type { ToolTracker } from "./tool-tracker";
8
6
  export interface ToolOutput {
9
- /** The tool call ID (tool_call_id, call_id, tool_use_id, or position key for Gemini) */
10
7
  id: string;
11
- /** The tool name (for protected tool checking) */
12
8
  toolName?: string;
13
9
  }
14
- /**
15
- * Describes how to handle a specific API format (OpenAI Chat, Anthropic, Gemini, etc.)
16
- * Each format implements this interface to provide format-specific logic.
17
- */
10
+ export interface ToolMetadata {
11
+ tool: string;
12
+ parameters?: any;
13
+ }
18
14
  export interface FormatDescriptor {
19
- /** Human-readable name for logging */
20
15
  name: string;
21
- /** Check if this format matches the request body */
22
16
  detect(body: any): boolean;
23
- /** Get the data array to process (messages, contents, input, etc.) */
24
17
  getDataArray(body: any): any[] | undefined;
25
- /** Cache tool parameters from the data array */
26
- cacheToolParameters(data: any[], state: PluginState, logger?: Logger): void;
27
- /** Inject synthetic instruction into the last user message */
28
- injectSynth(data: any[], instruction: string, nudgeText: string): boolean;
29
- /** Track new tool results for nudge frequency */
30
- trackNewToolResults(data: any[], tracker: ToolTracker, protectedTools: Set<string>): number;
31
- /** Inject prunable list at end of conversation */
32
- injectPrunableList(data: any[], injection: string): boolean;
33
- /** Extract all tool outputs from the data for pruning */
18
+ injectSystemMessage(body: any, injection: string): boolean;
19
+ appendToLastAssistantMessage?(body: any, injection: string): boolean;
34
20
  extractToolOutputs(data: any[], state: PluginState): ToolOutput[];
35
- /** Replace a pruned tool output with the pruned message. Returns true if replaced. */
36
21
  replaceToolOutput(data: any[], toolId: string, prunedMessage: string, state: PluginState): boolean;
37
- /** Check if data has any tool outputs worth processing */
38
22
  hasToolOutputs(data: any[]): boolean;
39
- /** Get metadata for logging after replacements */
40
23
  getLogMetadata(data: any[], replacedCount: number, inputUrl: string): Record<string, any>;
41
24
  }
42
- /** Prompts used for synthetic instruction injection */
43
- export interface SynthPrompts {
44
- synthInstruction: string;
45
- nudgeInstruction: string;
46
- }
47
- /** Context passed to each format-specific handler */
48
25
  export interface FetchHandlerContext {
49
26
  state: PluginState;
50
27
  logger: Logger;
51
28
  client: any;
52
29
  config: PluginConfig;
53
30
  toolTracker: ToolTracker;
54
- prompts: SynthPrompts;
55
31
  }
56
- /** Result from a format handler indicating what happened */
57
32
  export interface FetchHandlerResult {
58
- /** Whether the body was modified and should be re-serialized */
59
33
  modified: boolean;
60
- /** The potentially modified body object */
61
34
  body: any;
62
35
  }
63
- /** Session data returned from getAllPrunedIds */
64
36
  export interface PrunedIdData {
65
37
  allSessions: any;
66
38
  allPrunedIds: Set<string>;
67
39
  }
68
- export declare function getAllPrunedIds(client: any, state: PluginState, logger?: Logger): Promise<PrunedIdData>;
69
- /**
70
- * Fetch session messages for logging purposes.
71
- */
72
- export declare function fetchSessionMessages(client: any, sessionId: string): Promise<any[] | undefined>;
73
- /**
74
- * Get the most recent active (non-subagent) session.
75
- */
76
- export declare function getMostRecentActiveSession(allSessions: any): any | undefined;
40
+ /** The 3 scenarios that trigger explicit LLM pruning */
41
+ export type PruneReason = "completion" | "noise" | "consolidation";
42
+ /** Human-readable labels for prune reasons */
43
+ export declare const PRUNE_REASON_LABELS: Record<PruneReason, string>;
44
+ export interface SessionStats {
45
+ totalToolsPruned: number;
46
+ totalTokensSaved: number;
47
+ totalGCTokens: number;
48
+ totalGCTools: number;
49
+ }
50
+ export interface GCStats {
51
+ tokensCollected: number;
52
+ toolsDeduped: number;
53
+ }
54
+ export interface PruningResult {
55
+ prunedCount: number;
56
+ tokensSaved: number;
57
+ llmPrunedIds: string[];
58
+ toolMetadata: Map<string, ToolMetadata>;
59
+ sessionStats: SessionStats;
60
+ reason?: PruneReason;
61
+ }
77
62
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAA;IAC1B,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,SAAS,CAAA;IAC1C,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1D,4BAA4B,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IACpE,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,EAAE,CAAA;IACjE,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAA;IAClG,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IACpC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC5F;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,GAAG,CAAA;IACX,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,GAAG,CAAA;CACZ;AAED,MAAM,WAAW,YAAY;IACzB,WAAW,EAAE,GAAG,CAAA;IAChB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,CAAA;AAElE,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI3D,CAAA;AAED,MAAM,WAAW,YAAY;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,OAAO;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACvC,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAA;CACvB"}
@@ -1,45 +1,7 @@
1
- import { ensureSessionRestored } from "../state";
2
- /** The message used to replace pruned tool output content */
3
- export const PRUNED_CONTENT_MESSAGE = '[Output removed to save context - information superseded or no longer needed]';
4
- export async function getAllPrunedIds(client, state, logger) {
5
- const allSessions = await client.session.list();
6
- const allPrunedIds = new Set();
7
- const currentSession = getMostRecentActiveSession(allSessions);
8
- if (currentSession) {
9
- await ensureSessionRestored(state, currentSession.id, logger);
10
- const prunedIds = state.prunedIds.get(currentSession.id) ?? [];
11
- prunedIds.forEach((id) => allPrunedIds.add(id.toLowerCase()));
12
- if (logger && prunedIds.length > 0) {
13
- logger.debug("fetch", "Loaded pruned IDs for replacement", {
14
- sessionId: currentSession.id,
15
- prunedCount: prunedIds.length
16
- });
17
- }
18
- }
19
- return { allSessions, allPrunedIds };
20
- }
21
- /**
22
- * Fetch session messages for logging purposes.
23
- */
24
- export async function fetchSessionMessages(client, sessionId) {
25
- try {
26
- const messagesResponse = await client.session.messages({
27
- path: { id: sessionId },
28
- query: { limit: 100 }
29
- });
30
- return Array.isArray(messagesResponse.data)
31
- ? messagesResponse.data
32
- : Array.isArray(messagesResponse) ? messagesResponse : undefined;
33
- }
34
- catch (e) {
35
- return undefined;
36
- }
37
- }
38
- /**
39
- * Get the most recent active (non-subagent) session.
40
- */
41
- export function getMostRecentActiveSession(allSessions) {
42
- const activeSessions = allSessions.data?.filter((s) => !s.parentID) || [];
43
- return activeSessions.length > 0 ? activeSessions[0] : undefined;
44
- }
1
+ /** Human-readable labels for prune reasons */
2
+ export const PRUNE_REASON_LABELS = {
3
+ completion: "Task Complete",
4
+ noise: "Noise Removal",
5
+ consolidation: "Consolidation"
6
+ };
45
7
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAKlE,6DAA6D;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,+EAA+E,CAAA;AAmFrH,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,MAAW,EACX,KAAkB,EAClB,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;IAEtC,MAAM,cAAc,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAA;IAC9D,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;QAC9D,SAAS,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAErE,IAAI,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,mCAAmC,EAAE;gBACvD,SAAS,EAAE,cAAc,CAAC,EAAE;gBAC5B,WAAW,EAAE,SAAS,CAAC,MAAM;aAChC,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,MAAW,EACX,SAAiB;IAEjB,IAAI,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnD,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;SACxB,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,gBAAgB,CAAC,IAAI;YACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAAgB;IACvD,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC9E,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACpE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/types.ts"],"names":[],"mappings":"AAiDA,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC5D,UAAU,EAAE,eAAe;IAC3B,KAAK,EAAE,eAAe;IACtB,aAAa,EAAE,eAAe;CACjC,CAAA"}
@@ -2,7 +2,7 @@ import type { PluginState } from "./state";
2
2
  import type { Logger } from "./logger";
3
3
  import type { JanitorContext } from "./core/janitor";
4
4
  import type { PluginConfig } from "./config";
5
- import type { ToolTracker } from "./api-formats/synth-instruction";
5
+ import type { ToolTracker } from "./fetch-wrapper/tool-tracker";
6
6
  export declare function isSubagentSession(client: any, sessionID: string): Promise<boolean>;
7
7
  export declare function createEventHandler(client: any, janitorCtx: JanitorContext, logger: Logger, config: PluginConfig, toolTracker?: ToolTracker): ({ event }: {
8
8
  event: any;
@@ -10,5 +10,9 @@ export declare function createEventHandler(client: any, janitorCtx: JanitorConte
10
10
  /**
11
11
  * Creates the chat.params hook for model caching and Google tool call mapping.
12
12
  */
13
- export declare function createChatParamsHandler(client: any, state: PluginState, logger: Logger): (input: any, _output: any) => Promise<void>;
13
+ export declare function createChatParamsHandler(client: any, state: PluginState, logger: Logger, toolTracker?: ToolTracker): (input: any, _output: any) => Promise<void>;
14
+ /**
15
+ * Finds the current agent from messages by scanning backward for user messages.
16
+ */
17
+ export declare function findCurrentAgent(messages: any[]): string | undefined;
14
18
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,UAAU,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAIlE,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAMD,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,WAAW,CAAC,EAAE,WAAW,IAEX,WAAW;IAAE,KAAK,EAAE,GAAG,CAAA;CAAE,mBAyB1C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,IAEA,OAAO,GAAG,EAAE,SAAS,GAAG,mBA4FzC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,UAAU,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAI/D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAMD,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,WAAW,CAAC,EAAE,WAAW,IAEX,WAAW;IAAE,KAAK,EAAE,GAAG,CAAA;CAAE,mBAyB1C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,IAEX,OAAO,GAAG,EAAE,SAAS,GAAG,mBAwFzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,CASpE"}