@tarquinen/opencode-dcp 0.3.31 → 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 (85) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +10 -3
  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 +17 -4
  10. package/dist/lib/api-formats/synth-instruction.d.ts.map +1 -1
  11. package/dist/lib/api-formats/synth-instruction.js +72 -110
  12. package/dist/lib/api-formats/synth-instruction.js.map +1 -1
  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 +6 -0
  16. package/dist/lib/config.js.map +1 -1
  17. package/dist/lib/core/janitor.d.ts +14 -1
  18. package/dist/lib/core/janitor.d.ts.map +1 -1
  19. package/dist/lib/core/janitor.js +35 -35
  20. package/dist/lib/core/janitor.js.map +1 -1
  21. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +14 -0
  22. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +1 -0
  23. package/dist/lib/fetch-wrapper/formats/bedrock.js +128 -0
  24. package/dist/lib/fetch-wrapper/formats/bedrock.js.map +1 -0
  25. package/dist/lib/fetch-wrapper/formats/gemini.d.ts +14 -0
  26. package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +1 -0
  27. package/dist/lib/fetch-wrapper/formats/gemini.js +138 -0
  28. package/dist/lib/fetch-wrapper/formats/gemini.js.map +1 -0
  29. package/dist/lib/fetch-wrapper/formats/index.d.ts +5 -0
  30. package/dist/lib/fetch-wrapper/formats/index.d.ts.map +1 -0
  31. package/dist/lib/fetch-wrapper/formats/index.js +5 -0
  32. package/dist/lib/fetch-wrapper/formats/index.js.map +1 -0
  33. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +14 -0
  34. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +1 -0
  35. package/dist/lib/fetch-wrapper/formats/openai-chat.js +106 -0
  36. package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +1 -0
  37. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +11 -0
  38. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +1 -0
  39. package/dist/lib/fetch-wrapper/formats/openai-responses.js +69 -0
  40. package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +1 -0
  41. package/dist/lib/fetch-wrapper/handler.d.ts +13 -0
  42. package/dist/lib/fetch-wrapper/handler.d.ts.map +1 -0
  43. package/dist/lib/fetch-wrapper/handler.js +85 -0
  44. package/dist/lib/fetch-wrapper/handler.js.map +1 -0
  45. package/dist/lib/fetch-wrapper/index.d.ts +2 -1
  46. package/dist/lib/fetch-wrapper/index.d.ts.map +1 -1
  47. package/dist/lib/fetch-wrapper/index.js +19 -15
  48. package/dist/lib/fetch-wrapper/index.js.map +1 -1
  49. package/dist/lib/fetch-wrapper/types.d.ts +35 -0
  50. package/dist/lib/fetch-wrapper/types.d.ts.map +1 -1
  51. package/dist/lib/fetch-wrapper/types.js +7 -1
  52. package/dist/lib/fetch-wrapper/types.js.map +1 -1
  53. package/dist/lib/hooks.d.ts.map +1 -1
  54. package/dist/lib/hooks.js +21 -12
  55. package/dist/lib/hooks.js.map +1 -1
  56. package/dist/lib/prompts/tool.txt +18 -5
  57. package/dist/lib/pruning-tool.d.ts +13 -5
  58. package/dist/lib/pruning-tool.d.ts.map +1 -1
  59. package/dist/lib/pruning-tool.js +120 -20
  60. package/dist/lib/pruning-tool.js.map +1 -1
  61. package/dist/lib/state/id-mapping.d.ts +26 -0
  62. package/dist/lib/state/id-mapping.d.ts.map +1 -0
  63. package/dist/lib/state/id-mapping.js +54 -0
  64. package/dist/lib/state/id-mapping.js.map +1 -0
  65. package/dist/lib/state/tool-cache.d.ts +9 -4
  66. package/dist/lib/state/tool-cache.d.ts.map +1 -1
  67. package/dist/lib/state/tool-cache.js +54 -20
  68. package/dist/lib/state/tool-cache.js.map +1 -1
  69. package/dist/lib/version-checker.d.ts +1 -1
  70. package/dist/lib/version-checker.d.ts.map +1 -1
  71. package/dist/lib/version-checker.js +4 -1
  72. package/dist/lib/version-checker.js.map +1 -1
  73. package/package.json +1 -1
  74. package/dist/lib/fetch-wrapper/gemini.d.ts +0 -7
  75. package/dist/lib/fetch-wrapper/gemini.d.ts.map +0 -1
  76. package/dist/lib/fetch-wrapper/gemini.js +0 -120
  77. package/dist/lib/fetch-wrapper/gemini.js.map +0 -1
  78. package/dist/lib/fetch-wrapper/openai-chat.d.ts +0 -7
  79. package/dist/lib/fetch-wrapper/openai-chat.d.ts.map +0 -1
  80. package/dist/lib/fetch-wrapper/openai-chat.js +0 -101
  81. package/dist/lib/fetch-wrapper/openai-chat.js.map +0 -1
  82. package/dist/lib/fetch-wrapper/openai-responses.d.ts +0 -7
  83. package/dist/lib/fetch-wrapper/openai-responses.d.ts.map +0 -1
  84. package/dist/lib/fetch-wrapper/openai-responses.js +0 -74
  85. package/dist/lib/fetch-wrapper/openai-responses.js.map +0 -1
@@ -1,120 +0,0 @@
1
- import { PRUNED_CONTENT_MESSAGE, getAllPrunedIds, fetchSessionMessages } from "./types";
2
- import { injectNudgeGemini, injectSynthGemini } from "../api-formats/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 "../state/tool-cache";
3
- import { injectNudge, injectSynth } from "../api-formats/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
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-chat.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/openai-chat.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { FetchHandlerContext, FetchHandlerResult } from "./types";
2
- /**
3
- * Handles OpenAI Responses API format (body.input array with function_call_output items).
4
- * Used by GPT-5 models via sdk.responses().
5
- */
6
- export declare function handleOpenAIResponses(body: any, ctx: FetchHandlerContext, inputUrl: string): Promise<FetchHandlerResult>;
7
- //# sourceMappingURL=openai-responses.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../../lib/fetch-wrapper/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAUtE;;;GAGG;AACH,wBAAsB,qBAAqB,CACvC,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAuF7B"}
@@ -1,74 +0,0 @@
1
- import { PRUNED_CONTENT_MESSAGE, getAllPrunedIds, fetchSessionMessages, getMostRecentActiveSession } from "./types";
2
- import { cacheToolParametersFromInput } from "../state/tool-cache";
3
- import { injectNudgeResponses, injectSynthResponses } from "../api-formats/synth-instruction";
4
- /**
5
- * Handles OpenAI Responses API format (body.input array with function_call_output items).
6
- * Used by GPT-5 models via sdk.responses().
7
- */
8
- export async function handleOpenAIResponses(body, ctx, inputUrl) {
9
- if (!body.input || !Array.isArray(body.input)) {
10
- return { modified: false, body };
11
- }
12
- // Cache tool parameters from input
13
- cacheToolParametersFromInput(body.input, 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 (injectNudgeResponses(body.input, ctx.toolTracker, ctx.prompts.nudgeInstruction, ctx.config.nudge_freq)) {
21
- // ctx.logger.info("fetch", "Injected nudge instruction (Responses API)")
22
- modified = true;
23
- }
24
- }
25
- if (skipIdleBefore && !ctx.toolTracker.skipNextIdle) {
26
- ctx.logger.debug("fetch", "skipNextIdle was reset by new tool results (Responses API)");
27
- }
28
- if (injectSynthResponses(body.input, ctx.prompts.synthInstruction, ctx.prompts.nudgeInstruction)) {
29
- // ctx.logger.info("fetch", "Injected synthetic instruction (Responses API)")
30
- modified = true;
31
- }
32
- }
33
- // Check for function_call_output items
34
- const functionOutputs = body.input.filter((item) => item.type === 'function_call_output');
35
- if (functionOutputs.length === 0) {
36
- return { modified, body };
37
- }
38
- const { allSessions, allPrunedIds } = await getAllPrunedIds(ctx.client, ctx.state, ctx.logger);
39
- if (allPrunedIds.size === 0) {
40
- return { modified, body };
41
- }
42
- let replacedCount = 0;
43
- body.input = body.input.map((item) => {
44
- if (item.type === 'function_call_output' && allPrunedIds.has(item.call_id?.toLowerCase())) {
45
- replacedCount++;
46
- return {
47
- ...item,
48
- output: PRUNED_CONTENT_MESSAGE
49
- };
50
- }
51
- return item;
52
- });
53
- if (replacedCount > 0) {
54
- ctx.logger.info("fetch", "Replaced pruned tool outputs (Responses API)", {
55
- replaced: replacedCount,
56
- total: functionOutputs.length
57
- });
58
- if (ctx.logger.enabled) {
59
- const mostRecentSession = getMostRecentActiveSession(allSessions);
60
- const sessionMessages = mostRecentSession
61
- ? await fetchSessionMessages(ctx.client, mostRecentSession.id)
62
- : undefined;
63
- await ctx.logger.saveWrappedContext("global", body.input, {
64
- url: inputUrl,
65
- replacedCount,
66
- totalItems: body.input.length,
67
- format: 'openai-responses-api'
68
- }, sessionMessages);
69
- }
70
- return { modified: true, body };
71
- }
72
- return { modified, body };
73
- }
74
- //# sourceMappingURL=openai-responses.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../../lib/fetch-wrapper/openai-responses.ts"],"names":[],"mappings":"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"}