@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.
- package/README.md +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/api-formats/prunable-list.d.ts +49 -0
- package/dist/lib/api-formats/prunable-list.d.ts.map +1 -0
- package/dist/lib/api-formats/prunable-list.js +112 -0
- package/dist/lib/api-formats/prunable-list.js.map +1 -0
- package/dist/lib/api-formats/synth-instruction.d.ts +17 -4
- package/dist/lib/api-formats/synth-instruction.d.ts.map +1 -1
- package/dist/lib/api-formats/synth-instruction.js +72 -110
- package/dist/lib/api-formats/synth-instruction.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/core/janitor.d.ts +14 -1
- package/dist/lib/core/janitor.d.ts.map +1 -1
- package/dist/lib/core/janitor.js +35 -35
- package/dist/lib/core/janitor.js.map +1 -1
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +14 -0
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/bedrock.js +128 -0
- package/dist/lib/fetch-wrapper/formats/bedrock.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts +14 -0
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/gemini.js +138 -0
- package/dist/lib/fetch-wrapper/formats/gemini.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/index.d.ts +5 -0
- package/dist/lib/fetch-wrapper/formats/index.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/index.js +5 -0
- package/dist/lib/fetch-wrapper/formats/index.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +14 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.js +106 -0
- package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +11 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.js +69 -0
- package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +1 -0
- package/dist/lib/fetch-wrapper/handler.d.ts +13 -0
- package/dist/lib/fetch-wrapper/handler.d.ts.map +1 -0
- package/dist/lib/fetch-wrapper/handler.js +85 -0
- package/dist/lib/fetch-wrapper/handler.js.map +1 -0
- package/dist/lib/fetch-wrapper/index.d.ts +2 -1
- package/dist/lib/fetch-wrapper/index.d.ts.map +1 -1
- package/dist/lib/fetch-wrapper/index.js +19 -15
- package/dist/lib/fetch-wrapper/index.js.map +1 -1
- package/dist/lib/fetch-wrapper/types.d.ts +35 -0
- package/dist/lib/fetch-wrapper/types.d.ts.map +1 -1
- package/dist/lib/fetch-wrapper/types.js +7 -1
- package/dist/lib/fetch-wrapper/types.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +21 -12
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/prompts/tool.txt +18 -5
- package/dist/lib/pruning-tool.d.ts +13 -5
- package/dist/lib/pruning-tool.d.ts.map +1 -1
- package/dist/lib/pruning-tool.js +120 -20
- package/dist/lib/pruning-tool.js.map +1 -1
- package/dist/lib/state/id-mapping.d.ts +26 -0
- package/dist/lib/state/id-mapping.d.ts.map +1 -0
- package/dist/lib/state/id-mapping.js +54 -0
- package/dist/lib/state/id-mapping.js.map +1 -0
- package/dist/lib/state/tool-cache.d.ts +9 -4
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +54 -20
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/version-checker.d.ts +1 -1
- package/dist/lib/version-checker.d.ts.map +1 -1
- package/dist/lib/version-checker.js +4 -1
- package/dist/lib/version-checker.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/fetch-wrapper/gemini.d.ts +0 -7
- package/dist/lib/fetch-wrapper/gemini.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/gemini.js +0 -120
- package/dist/lib/fetch-wrapper/gemini.js.map +0 -1
- package/dist/lib/fetch-wrapper/openai-chat.d.ts +0 -7
- package/dist/lib/fetch-wrapper/openai-chat.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/openai-chat.js +0 -101
- package/dist/lib/fetch-wrapper/openai-chat.js.map +0 -1
- package/dist/lib/fetch-wrapper/openai-responses.d.ts +0 -7
- package/dist/lib/fetch-wrapper/openai-responses.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/openai-responses.js +0 -74
- 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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"}
|