@ank1015/providers 0.0.36 → 0.0.37

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 (123) hide show
  1. package/dist/debug-conversation.d.ts +2 -0
  2. package/dist/debug-conversation.d.ts.map +1 -0
  3. package/dist/debug-conversation.js +98 -0
  4. package/dist/debug-conversation.js.map +1 -0
  5. package/dist/debug-minimal-test.d.ts +2 -0
  6. package/dist/debug-minimal-test.d.ts.map +1 -0
  7. package/dist/debug-minimal-test.js +47 -0
  8. package/dist/debug-minimal-test.js.map +1 -0
  9. package/dist/debug-sdk-tool.d.ts +2 -0
  10. package/dist/debug-sdk-tool.d.ts.map +1 -0
  11. package/dist/debug-sdk-tool.js +99 -0
  12. package/dist/debug-sdk-tool.js.map +1 -0
  13. package/dist/debug-sdk.d.ts +2 -0
  14. package/dist/debug-sdk.d.ts.map +1 -0
  15. package/dist/debug-sdk.js +59 -0
  16. package/dist/debug-sdk.js.map +1 -0
  17. package/dist/debug-session-flow.d.ts +2 -0
  18. package/dist/debug-session-flow.d.ts.map +1 -0
  19. package/dist/debug-session-flow.js +134 -0
  20. package/dist/debug-session-flow.js.map +1 -0
  21. package/dist/debug-session-hack.d.ts +2 -0
  22. package/dist/debug-session-hack.d.ts.map +1 -0
  23. package/dist/debug-session-hack.js +143 -0
  24. package/dist/debug-session-hack.js.map +1 -0
  25. package/dist/llm.d.ts.map +1 -1
  26. package/dist/llm.js +10 -1
  27. package/dist/llm.js.map +1 -1
  28. package/dist/models.generated.d.ts +19 -0
  29. package/dist/models.generated.d.ts.map +1 -1
  30. package/dist/models.generated.js +19 -0
  31. package/dist/models.generated.js.map +1 -1
  32. package/dist/providers/anthropic-agents-sdk/complete.d.ts +3 -0
  33. package/dist/providers/anthropic-agents-sdk/complete.d.ts.map +1 -0
  34. package/dist/providers/anthropic-agents-sdk/complete.js +246 -0
  35. package/dist/providers/anthropic-agents-sdk/complete.js.map +1 -0
  36. package/dist/providers/anthropic-agents-sdk/index.d.ts +4 -0
  37. package/dist/providers/anthropic-agents-sdk/index.d.ts.map +1 -0
  38. package/dist/providers/anthropic-agents-sdk/index.js +4 -0
  39. package/dist/providers/anthropic-agents-sdk/index.js.map +1 -0
  40. package/dist/providers/anthropic-agents-sdk/session.d.ts +37 -0
  41. package/dist/providers/anthropic-agents-sdk/session.d.ts.map +1 -0
  42. package/dist/providers/anthropic-agents-sdk/session.js +188 -0
  43. package/dist/providers/anthropic-agents-sdk/session.js.map +1 -0
  44. package/dist/providers/anthropic-agents-sdk/stream.d.ts +3 -0
  45. package/dist/providers/anthropic-agents-sdk/stream.d.ts.map +1 -0
  46. package/dist/providers/anthropic-agents-sdk/stream.js +402 -0
  47. package/dist/providers/anthropic-agents-sdk/stream.js.map +1 -0
  48. package/dist/providers/anthropic-agents-sdk/types.d.ts +22 -0
  49. package/dist/providers/anthropic-agents-sdk/types.d.ts.map +1 -0
  50. package/dist/providers/anthropic-agents-sdk/types.js +3 -0
  51. package/dist/providers/anthropic-agents-sdk/types.js.map +1 -0
  52. package/dist/providers/anthropic-agents-sdk/utils.d.ts +39 -0
  53. package/dist/providers/anthropic-agents-sdk/utils.d.ts.map +1 -0
  54. package/dist/providers/anthropic-agents-sdk/utils.js +251 -0
  55. package/dist/providers/anthropic-agents-sdk/utils.js.map +1 -0
  56. package/dist/providers/google/utils.d.ts.map +1 -1
  57. package/dist/providers/google/utils.js +2 -0
  58. package/dist/providers/google/utils.js.map +1 -1
  59. package/dist/providers/google-interactions/complete.d.ts +3 -0
  60. package/dist/providers/google-interactions/complete.d.ts.map +1 -0
  61. package/dist/providers/google-interactions/complete.js +63 -0
  62. package/dist/providers/google-interactions/complete.js.map +1 -0
  63. package/dist/providers/google-interactions/index.d.ts +5 -0
  64. package/dist/providers/google-interactions/index.d.ts.map +1 -0
  65. package/dist/providers/google-interactions/index.js +4 -0
  66. package/dist/providers/google-interactions/index.js.map +1 -0
  67. package/dist/providers/google-interactions/poll.d.ts +59 -0
  68. package/dist/providers/google-interactions/poll.d.ts.map +1 -0
  69. package/dist/providers/google-interactions/poll.js +161 -0
  70. package/dist/providers/google-interactions/poll.js.map +1 -0
  71. package/dist/providers/google-interactions/stream.d.ts +3 -0
  72. package/dist/providers/google-interactions/stream.d.ts.map +1 -0
  73. package/dist/providers/google-interactions/stream.js +242 -0
  74. package/dist/providers/google-interactions/stream.js.map +1 -0
  75. package/dist/providers/google-interactions/types.d.ts +10 -0
  76. package/dist/providers/google-interactions/types.d.ts.map +1 -0
  77. package/dist/providers/google-interactions/types.js +2 -0
  78. package/dist/providers/google-interactions/types.js.map +1 -0
  79. package/dist/providers/google-interactions/utils.d.ts +61 -0
  80. package/dist/providers/google-interactions/utils.d.ts.map +1 -0
  81. package/dist/providers/google-interactions/utils.js +252 -0
  82. package/dist/providers/google-interactions/utils.js.map +1 -0
  83. package/dist/providers/zai/complete.d.ts +3 -0
  84. package/dist/providers/zai/complete.d.ts.map +1 -0
  85. package/dist/providers/zai/complete.js +58 -0
  86. package/dist/providers/zai/complete.js.map +1 -0
  87. package/dist/providers/zai/index.d.ts +5 -0
  88. package/dist/providers/zai/index.d.ts.map +1 -0
  89. package/dist/providers/zai/index.js +4 -0
  90. package/dist/providers/zai/index.js.map +1 -0
  91. package/dist/providers/zai/stream.d.ts +3 -0
  92. package/dist/providers/zai/stream.d.ts.map +1 -0
  93. package/dist/providers/zai/stream.js +321 -0
  94. package/dist/providers/zai/stream.js.map +1 -0
  95. package/dist/providers/zai/types.d.ts +13 -0
  96. package/dist/providers/zai/types.d.ts.map +1 -0
  97. package/dist/providers/zai/types.js +2 -0
  98. package/dist/providers/zai/types.js.map +1 -0
  99. package/dist/providers/zai/utils.d.ts +19 -0
  100. package/dist/providers/zai/utils.d.ts.map +1 -0
  101. package/dist/providers/zai/utils.js +253 -0
  102. package/dist/providers/zai/utils.js.map +1 -0
  103. package/dist/test-sdk-direct.d.ts +2 -0
  104. package/dist/test-sdk-direct.d.ts.map +1 -0
  105. package/dist/test-sdk-direct.js +41 -0
  106. package/dist/test-sdk-direct.js.map +1 -0
  107. package/dist/test.d.ts +2 -0
  108. package/dist/test.d.ts.map +1 -0
  109. package/dist/test.js +213 -0
  110. package/dist/test.js.map +1 -0
  111. package/dist/types.d.ts +4 -1
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js +1 -1
  114. package/dist/types.js.map +1 -1
  115. package/dist/utils/oauth/google-antigravity.d.ts +25 -0
  116. package/dist/utils/oauth/google-antigravity.d.ts.map +1 -0
  117. package/dist/utils/oauth/google-antigravity.js +337 -0
  118. package/dist/utils/oauth/google-antigravity.js.map +1 -0
  119. package/dist/utils/oauth/pkce.d.ts +13 -0
  120. package/dist/utils/oauth/pkce.d.ts.map +1 -0
  121. package/dist/utils/oauth/pkce.js +31 -0
  122. package/dist/utils/oauth/pkce.js.map +1 -0
  123. package/package.json +1 -1
@@ -0,0 +1,188 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { randomUUID } from "crypto";
4
+ import { SDK_SESSION_DIR } from "./types.js";
5
+ /**
6
+ * Gets the SDK's actual session directory path.
7
+ * The SDK stores sessions in ~/.claude/projects/{sanitized-cwd}/
8
+ * where sanitized-cwd replaces / with -
9
+ */
10
+ export function getSdkSessionDir() {
11
+ // Resolve the cwd to handle symlinks (e.g., /tmp -> /private/tmp on macOS)
12
+ const resolvedCwd = fs.realpathSync(SDK_SESSION_DIR);
13
+ const sanitizedCwd = resolvedCwd.replace(/\//g, '-');
14
+ const homeDir = process.env.HOME || '~';
15
+ return path.join(homeDir, '.claude', 'projects', sanitizedCwd);
16
+ }
17
+ /**
18
+ * Ensures the SDK session directory exists.
19
+ */
20
+ export function ensureSessionDir() {
21
+ // Ensure our working directory exists (for SDK's cwd option)
22
+ if (!fs.existsSync(SDK_SESSION_DIR)) {
23
+ fs.mkdirSync(SDK_SESSION_DIR, { recursive: true });
24
+ }
25
+ // Note: SDK creates its own session dir, we don't need to create it
26
+ }
27
+ /**
28
+ * Gets the JSONL file path for a session (SDK's actual location).
29
+ */
30
+ export function getSessionFilePath(sessionId) {
31
+ return path.join(getSdkSessionDir(), `${sessionId}.jsonl`);
32
+ }
33
+ /**
34
+ * Appends a tool result to the session JSONL file.
35
+ * This injects the tool result into the SDK's session history so it can be resumed.
36
+ */
37
+ export function appendToolResultToSession(sessionId, toolUseId, result, parentUuid, isError = false) {
38
+ ensureSessionDir();
39
+ const jsonlPath = getSessionFilePath(sessionId);
40
+ // Use the resolved cwd to match what the SDK uses
41
+ const resolvedCwd = fs.realpathSync(SDK_SESSION_DIR);
42
+ const uuid = randomUUID();
43
+ const entry = {
44
+ parentUuid,
45
+ isSidechain: false,
46
+ userType: "external",
47
+ cwd: resolvedCwd,
48
+ sessionId,
49
+ version: "2.1.3",
50
+ type: "user",
51
+ message: {
52
+ role: "user",
53
+ content: [{
54
+ tool_use_id: toolUseId,
55
+ type: "tool_result",
56
+ content: result, // Must be a string, not an array
57
+ is_error: isError
58
+ }]
59
+ },
60
+ uuid,
61
+ timestamp: new Date().toISOString(),
62
+ toolUseResult: result, // Match real session format
63
+ sourceToolAssistantUUID: parentUuid
64
+ };
65
+ fs.appendFileSync(jsonlPath, JSON.stringify(entry) + '\n');
66
+ return uuid;
67
+ }
68
+ /**
69
+ * Looks for SDK session metadata in the context messages.
70
+ * Returns the metadata from the most recent assistant message that has tool calls
71
+ * and corresponding tool results that need to be injected.
72
+ */
73
+ export function findSessionToResume(context) {
74
+ // Find the last assistant message with sdkMetadata
75
+ const messages = context.messages;
76
+ for (let i = messages.length - 1; i >= 0; i--) {
77
+ const msg = messages[i];
78
+ if (msg.role === 'assistant') {
79
+ const assistantMsg = msg;
80
+ if (assistantMsg.sdkMetadata) {
81
+ // Collect all tool results that come after this assistant message
82
+ const toolResults = [];
83
+ for (let j = i + 1; j < messages.length; j++) {
84
+ if (messages[j].role === 'toolResult') {
85
+ toolResults.push(messages[j]);
86
+ }
87
+ else if (messages[j].role === 'user') {
88
+ // Stop at the next user message - that's a new turn
89
+ break;
90
+ }
91
+ }
92
+ if (toolResults.length > 0) {
93
+ return {
94
+ metadata: assistantMsg.sdkMetadata,
95
+ toolResults
96
+ };
97
+ }
98
+ }
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ /**
104
+ * Replaces the SDK's placeholder tool result content with actual results in-place.
105
+ * This preserves the parentUuid chain which is critical for SDK to traverse history.
106
+ *
107
+ * We modify entries in-place rather than removing them to avoid breaking the
108
+ * parent chain that the SDK uses to reconstruct conversation history.
109
+ */
110
+ function replaceToolResultsInPlace(sessionId, toolResultMap) {
111
+ const jsonlPath = getSessionFilePath(sessionId);
112
+ if (!fs.existsSync(jsonlPath)) {
113
+ return;
114
+ }
115
+ const content = fs.readFileSync(jsonlPath, 'utf-8');
116
+ const lines = content.trim().split('\n');
117
+ const modifiedLines = [];
118
+ for (const line of lines) {
119
+ try {
120
+ const entry = JSON.parse(line);
121
+ // Replace placeholder tool result content with real result
122
+ if (entry.type === 'user' && entry.message?.content?.[0]?.type === 'tool_result') {
123
+ const toolUseId = entry.message.content[0].tool_use_id;
124
+ const replacement = toolResultMap.get(toolUseId);
125
+ if (replacement) {
126
+ // Update the content in-place - must be a string, not an array
127
+ entry.message.content[0].content = replacement.text;
128
+ entry.message.content[0].is_error = replacement.isError;
129
+ // Also update the toolUseResult field if present
130
+ if (entry.toolUseResult) {
131
+ entry.toolUseResult = replacement.text;
132
+ }
133
+ modifiedLines.push(JSON.stringify(entry));
134
+ continue;
135
+ }
136
+ }
137
+ // Replace "No response requested." synthetic messages with empty text
138
+ // These messages poison the context by telling the model not to respond
139
+ if (entry.type === 'assistant' &&
140
+ entry.message?.content?.[0]?.type === 'text' &&
141
+ entry.message?.content?.[0]?.text === 'No response requested.') {
142
+ // Replace with benign content that doesn't discourage responding
143
+ entry.message.content[0].text = '';
144
+ modifiedLines.push(JSON.stringify(entry));
145
+ continue;
146
+ }
147
+ // Keep all other entries as-is
148
+ modifiedLines.push(line);
149
+ }
150
+ catch {
151
+ // Keep unparseable lines as-is
152
+ modifiedLines.push(line);
153
+ }
154
+ }
155
+ // Write back the modified content
156
+ fs.writeFileSync(jsonlPath, modifiedLines.join('\n') + '\n');
157
+ }
158
+ /**
159
+ * Injects tool results into the SDK session file.
160
+ * Maps our tool call IDs to SDK tool_use IDs using the metadata.
161
+ * Replaces placeholder content in-place to preserve parent chain.
162
+ */
163
+ export function injectToolResultsIntoSession(metadata, toolResults) {
164
+ // Build a map of tool_use_id -> replacement content
165
+ const toolResultMap = new Map();
166
+ for (const toolResult of toolResults) {
167
+ // Map our toolCallId to SDK's tool_use_id
168
+ const sdkToolUseId = metadata.toolUseMapping[toolResult.toolCallId];
169
+ if (!sdkToolUseId) {
170
+ console.warn(`No SDK tool_use_id mapping for toolCallId: ${toolResult.toolCallId}`);
171
+ continue;
172
+ }
173
+ // Get the result text
174
+ const resultText = toolResult.content
175
+ .filter(c => c.type === 'text')
176
+ .map(c => c.content)
177
+ .join('\n');
178
+ toolResultMap.set(sdkToolUseId, {
179
+ text: resultText,
180
+ isError: toolResult.isError
181
+ });
182
+ }
183
+ // Replace placeholder tool results with real results in-place
184
+ if (toolResultMap.size > 0) {
185
+ replaceToolResultsInPlace(metadata.sessionId, toolResultMap);
186
+ }
187
+ }
188
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/providers/anthropic-agents-sdk/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { StreamFunction } from "../../types.js";
2
+ export declare const streamAnthropicAgentsSdk: StreamFunction<'anthropic-agents-sdk'>;
3
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic-agents-sdk/stream.ts"],"names":[],"mappings":"AASA,OAAO,EACN,cAAc,EAUd,MAAM,gBAAgB,CAAC;AAgBxB,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,sBAAsB,CA4T3E,CAAC"}
@@ -0,0 +1,402 @@
1
+ import { query } from "@anthropic-ai/claude-agent-sdk";
2
+ import { AssistantMessageEventStream } from "../../utils/event-stream.js";
3
+ import { SDK_SESSION_DIR } from "./types.js";
4
+ import { createToolsServer, mapStopReason, mapResultSubtypeToStopReason, getMockBetaMessage, getEmptyUsage, getResponseUsage, stripMcpToolPrefix } from "./utils.js";
5
+ import { sanitizeSurrogates } from "../../utils/sanitize-unicode.js";
6
+ import { parseStreamingJson } from "../../utils/json-parse.js";
7
+ import { findSessionToResume, injectToolResultsIntoSession, ensureSessionDir } from "./session.js";
8
+ export const streamAnthropicAgentsSdk = (model, context, options, id) => {
9
+ const stream = new AssistantMessageEventStream();
10
+ (async () => {
11
+ const startTimestamp = Date.now();
12
+ const output = {
13
+ role: "assistant",
14
+ api: model.api,
15
+ model: model,
16
+ id,
17
+ content: [],
18
+ usage: getEmptyUsage(),
19
+ stopReason: "stop",
20
+ timestamp: startTimestamp,
21
+ duration: 0
22
+ };
23
+ let finalResponse = getMockBetaMessage();
24
+ const blocks = output.content;
25
+ const accumulatedContent = [];
26
+ // Session tracking for multi-turn tool execution
27
+ let sessionId;
28
+ let assistantUuid;
29
+ const toolUseMapping = {}; // our toolCallId -> SDK tool_use_id
30
+ try {
31
+ // Ensure session directory exists
32
+ ensureSessionDir();
33
+ // Check if we need to resume a session (tool results in context)
34
+ const sessionToResume = findSessionToResume(context);
35
+ let resumeSessionId;
36
+ if (sessionToResume) {
37
+ // Inject tool results into the session file
38
+ injectToolResultsIntoSession(sessionToResume.metadata, sessionToResume.toolResults);
39
+ resumeSessionId = sessionToResume.metadata.sessionId;
40
+ }
41
+ // Build SDK options (with resume if needed)
42
+ const sdkOptions = buildSdkOptions(model, context, options, resumeSessionId);
43
+ // Build the prompt
44
+ const prompt = resumeSessionId
45
+ ? "Continue with the tool result." // Non-empty prompt for resume
46
+ : buildPrompt(context);
47
+ // Create abort controller from signal if provided
48
+ if (options?.signal) {
49
+ sdkOptions.abortController = new AbortController();
50
+ options.signal.addEventListener('abort', () => {
51
+ sdkOptions.abortController?.abort();
52
+ });
53
+ }
54
+ // Enable partial messages for streaming
55
+ sdkOptions.includePartialMessages = true;
56
+ // Run the query
57
+ const queryResult = query({ prompt, options: sdkOptions });
58
+ stream.push({ type: "start", message: { ...output, timestamp: Date.now() } });
59
+ let lastAssistantMessage;
60
+ let resultMessage;
61
+ for await (const message of queryResult) {
62
+ // Capture session ID from system init message
63
+ if (message.type === 'system' && message.subtype === 'init') {
64
+ sessionId = message.session_id;
65
+ }
66
+ if (message.type === 'stream_event') {
67
+ // Handle streaming events
68
+ const partialMessage = message;
69
+ const event = partialMessage.event;
70
+ if (event.type === "message_start") {
71
+ finalResponse.id = event.message.id;
72
+ finalResponse.model = event.message.model;
73
+ finalResponse.role = event.message.role;
74
+ output.usage.input = event.message.usage.input_tokens || 0;
75
+ output.usage.output = event.message.usage.output_tokens || 0;
76
+ output.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0;
77
+ output.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0;
78
+ output.usage.totalTokens =
79
+ output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite;
80
+ }
81
+ else if (event.type === "content_block_start") {
82
+ accumulatedContent.push({ index: event.index, ...event.content_block });
83
+ if (event.content_block.type === "text") {
84
+ const block = {
85
+ type: "response",
86
+ content: [{ type: 'text', content: "" }],
87
+ index: event.index,
88
+ };
89
+ output.content.push(block);
90
+ stream.push({ type: "text_start", contentIndex: output.content.length - 1, message: output });
91
+ }
92
+ else if (event.content_block.type === "thinking") {
93
+ const block = {
94
+ type: "thinking",
95
+ thinkingText: "",
96
+ index: event.index,
97
+ };
98
+ output.content.push(block);
99
+ stream.push({ type: "thinking_start", contentIndex: output.content.length - 1, message: output });
100
+ }
101
+ else if (event.content_block.type === "tool_use") {
102
+ const sdkToolUseId = event.content_block.id;
103
+ const block = {
104
+ type: "toolCall",
105
+ toolCallId: sdkToolUseId,
106
+ // Strip MCP prefix so Conversation class can find the tool
107
+ name: stripMcpToolPrefix(event.content_block.name),
108
+ arguments: event.content_block.input,
109
+ partialJson: "",
110
+ index: event.index,
111
+ };
112
+ output.content.push(block);
113
+ // Map our toolCallId to SDK tool_use_id (same value, but stored for session management)
114
+ toolUseMapping[sdkToolUseId] = sdkToolUseId;
115
+ stream.push({ type: "toolcall_start", contentIndex: output.content.length - 1, message: output });
116
+ }
117
+ }
118
+ else if (event.type === "content_block_delta") {
119
+ const accumBlockIndex = accumulatedContent.findIndex(a => a.index === event.index);
120
+ if (event.delta.type === "text_delta") {
121
+ const index = blocks.findIndex((b) => b.index === event.index);
122
+ const block = blocks[index];
123
+ if (block && block.type === "response") {
124
+ const textContentIndex = block.content.findIndex((b) => b.type === 'text');
125
+ block.content[textContentIndex].content += event.delta.text;
126
+ stream.push({
127
+ type: "text_delta",
128
+ contentIndex: index,
129
+ delta: event.delta.text,
130
+ message: output,
131
+ });
132
+ }
133
+ if (accumBlockIndex !== -1) {
134
+ accumulatedContent[accumBlockIndex].text += event.delta.text;
135
+ }
136
+ }
137
+ else if (event.delta.type === "thinking_delta") {
138
+ const index = blocks.findIndex((b) => b.index === event.index);
139
+ const block = blocks[index];
140
+ if (block && block.type === "thinking") {
141
+ block.thinkingText += event.delta.thinking;
142
+ stream.push({
143
+ type: "thinking_delta",
144
+ contentIndex: index,
145
+ delta: event.delta.thinking,
146
+ message: output,
147
+ });
148
+ }
149
+ if (accumBlockIndex !== -1) {
150
+ accumulatedContent[accumBlockIndex].thinking += event.delta.thinking;
151
+ }
152
+ }
153
+ else if (event.delta.type === "input_json_delta") {
154
+ const index = blocks.findIndex((b) => b.index === event.index);
155
+ const block = blocks[index];
156
+ if (block && block.type === "toolCall") {
157
+ block.partialJson += event.delta.partial_json;
158
+ block.arguments = parseStreamingJson(block.partialJson);
159
+ stream.push({
160
+ type: "toolcall_delta",
161
+ contentIndex: index,
162
+ delta: event.delta.partial_json,
163
+ message: output,
164
+ });
165
+ }
166
+ if (accumBlockIndex !== -1) {
167
+ accumulatedContent[accumBlockIndex].partialJson =
168
+ (accumulatedContent[accumBlockIndex].partialJson || '') + event.delta.partial_json;
169
+ }
170
+ }
171
+ else if (event.delta.type === "signature_delta") {
172
+ if (accumBlockIndex !== -1) {
173
+ accumulatedContent[accumBlockIndex].signature =
174
+ (accumulatedContent[accumBlockIndex].signature || '') + event.delta.signature;
175
+ }
176
+ }
177
+ }
178
+ else if (event.type === "content_block_stop") {
179
+ const index = blocks.findIndex((b) => b.index === event.index);
180
+ const block = blocks[index];
181
+ const accumBlockIndex = accumulatedContent.findIndex(a => a.index === event.index);
182
+ if (accumBlockIndex !== -1) {
183
+ if (accumulatedContent[accumBlockIndex].type === 'tool_use') {
184
+ const partialJson = accumulatedContent[accumBlockIndex].partialJson;
185
+ if (partialJson) {
186
+ accumulatedContent[accumBlockIndex].input = parseStreamingJson(partialJson);
187
+ }
188
+ }
189
+ if (accumulatedContent[accumBlockIndex].index !== undefined) {
190
+ delete accumulatedContent[accumBlockIndex].index;
191
+ }
192
+ if (accumulatedContent[accumBlockIndex].partialJson !== undefined) {
193
+ delete accumulatedContent[accumBlockIndex].partialJson;
194
+ }
195
+ }
196
+ if (block) {
197
+ delete block.index;
198
+ if (block.type === "response") {
199
+ stream.push({
200
+ type: "text_end",
201
+ contentIndex: index,
202
+ content: block.content,
203
+ message: output,
204
+ });
205
+ }
206
+ else if (block.type === "thinking") {
207
+ stream.push({
208
+ type: "thinking_end",
209
+ contentIndex: index,
210
+ content: block.thinkingText,
211
+ message: output,
212
+ });
213
+ }
214
+ else if (block.type === "toolCall") {
215
+ block.arguments = parseStreamingJson(block.partialJson);
216
+ delete block.partialJson;
217
+ stream.push({
218
+ type: "toolcall_end",
219
+ contentIndex: index,
220
+ toolCall: block,
221
+ message: output,
222
+ });
223
+ }
224
+ }
225
+ }
226
+ else if (event.type === "message_delta") {
227
+ if (event.delta.stop_reason) {
228
+ output.stopReason = mapStopReason(event.delta.stop_reason);
229
+ finalResponse.stop_reason = event.delta.stop_reason;
230
+ }
231
+ output.usage.output = event.usage.output_tokens || 0;
232
+ output.usage.totalTokens =
233
+ output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite;
234
+ }
235
+ }
236
+ else if (message.type === 'assistant') {
237
+ lastAssistantMessage = message;
238
+ // Capture assistant UUID for session management
239
+ assistantUuid = message.uuid;
240
+ }
241
+ else if (message.type === 'result') {
242
+ resultMessage = message;
243
+ }
244
+ }
245
+ if (options?.signal?.aborted) {
246
+ throw new Error("Request was aborted");
247
+ }
248
+ // Update final response content
249
+ finalResponse.content = accumulatedContent;
250
+ // Update usage from result if available
251
+ if (resultMessage) {
252
+ output.usage = getResponseUsage(resultMessage.usage, resultMessage.total_cost_usd, model);
253
+ if (resultMessage.subtype !== 'success') {
254
+ output.stopReason = mapResultSubtypeToStopReason(resultMessage.subtype);
255
+ if ('errors' in resultMessage) {
256
+ output.errorMessage = resultMessage.errors.join('; ');
257
+ }
258
+ }
259
+ }
260
+ // Use the full assistant message if available
261
+ if (lastAssistantMessage) {
262
+ finalResponse = lastAssistantMessage.message;
263
+ }
264
+ stream.push({ type: "done", reason: output.stopReason, message: { ...output, timestamp: Date.now() } });
265
+ const baseAssistantMessage = {
266
+ ...output,
267
+ message: finalResponse,
268
+ timestamp: Date.now(),
269
+ duration: Date.now() - startTimestamp,
270
+ // Include session metadata for multi-turn tool execution
271
+ sdkMetadata: sessionId && assistantUuid ? {
272
+ sessionId,
273
+ assistantUuid,
274
+ toolUseMapping
275
+ } : undefined
276
+ };
277
+ stream.end(baseAssistantMessage);
278
+ }
279
+ catch (error) {
280
+ for (const block of output.content)
281
+ delete block.index;
282
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
283
+ output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
284
+ stream.push({ type: "error", reason: output.stopReason, message: { ...output, timestamp: Date.now() } });
285
+ finalResponse.content = accumulatedContent;
286
+ const baseAssistantMessage = {
287
+ ...output,
288
+ message: finalResponse,
289
+ timestamp: Date.now(),
290
+ duration: Date.now() - startTimestamp,
291
+ // Include session metadata even on error for debugging
292
+ sdkMetadata: sessionId && assistantUuid ? {
293
+ sessionId,
294
+ assistantUuid,
295
+ toolUseMapping
296
+ } : undefined
297
+ };
298
+ stream.end(baseAssistantMessage);
299
+ }
300
+ })();
301
+ return stream;
302
+ };
303
+ /**
304
+ * Builds SDK options from our context and provider options.
305
+ */
306
+ function buildSdkOptions(model, context, options, resumeSessionId) {
307
+ const { signal, ...restOptions } = options;
308
+ const sdkOptions = {
309
+ ...restOptions,
310
+ model: model.id,
311
+ // Always use single turn - Conversation class handles multi-turn
312
+ maxTurns: 1,
313
+ // Bypass permissions for programmatic use
314
+ permissionMode: options.permissionMode ?? 'bypassPermissions',
315
+ allowDangerouslySkipPermissions: options.allowDangerouslySkipPermissions ?? true,
316
+ // Use fixed session directory
317
+ cwd: SDK_SESSION_DIR,
318
+ };
319
+ // Resume session if we have tool results to continue from
320
+ if (resumeSessionId) {
321
+ sdkOptions.resume = resumeSessionId;
322
+ }
323
+ // Set system prompt - use provided or empty string to avoid default Claude Code prompt
324
+ sdkOptions.systemPrompt = context.systemPrompt
325
+ ? sanitizeSurrogates(context.systemPrompt)
326
+ : '';
327
+ // Disable all built-in tools by explicitly disallowing them
328
+ // This prevents their definitions from being loaded into context
329
+ const builtInTools = [
330
+ 'Task', 'TaskOutput', 'Bash', 'Glob', 'Grep', 'Read', 'Edit', 'Write',
331
+ 'NotebookEdit', 'WebFetch', 'TodoWrite', 'WebSearch', 'KillShell',
332
+ 'AskUserQuestion', 'Skill', 'EnterPlanMode', 'ExitPlanMode'
333
+ ];
334
+ sdkOptions.disallowedTools = builtInTools;
335
+ // Convert tools to MCP server
336
+ if (context.tools && context.tools.length > 0) {
337
+ const toolsServer = createToolsServer(context.tools);
338
+ if (toolsServer) {
339
+ sdkOptions.mcpServers = {
340
+ "custom-tools": toolsServer
341
+ };
342
+ // Only allow our custom tools
343
+ sdkOptions.allowedTools = context.tools.map(t => `mcp__custom-tools__${t.name}`);
344
+ }
345
+ }
346
+ else {
347
+ // No tools provided
348
+ sdkOptions.allowedTools = [];
349
+ }
350
+ return sdkOptions;
351
+ }
352
+ /**
353
+ * Builds the prompt string from context messages.
354
+ * For the SDK, we serialize the entire conversation history into the prompt
355
+ * since the SDK's query function only accepts a string prompt.
356
+ */
357
+ function buildPrompt(context) {
358
+ const parts = [];
359
+ for (const message of context.messages) {
360
+ if (message.role === 'user') {
361
+ const textContent = message.content
362
+ .filter(c => c.type === 'text')
363
+ .map(c => c.content)
364
+ .join('\n');
365
+ if (textContent) {
366
+ parts.push(`User: ${textContent}`);
367
+ }
368
+ }
369
+ else if (message.role === 'assistant') {
370
+ // Include assistant response text and tool calls
371
+ const assistantParts = [];
372
+ const assistantMsg = message;
373
+ for (const content of assistantMsg.content) {
374
+ if (content.type === 'response') {
375
+ const text = content.content
376
+ .filter(c => c.type === 'text')
377
+ .map(c => c.content)
378
+ .join('\n');
379
+ if (text)
380
+ assistantParts.push(text);
381
+ }
382
+ else if (content.type === 'toolCall') {
383
+ assistantParts.push(`[Tool Call: ${content.name} with args ${JSON.stringify(content.arguments)}]`);
384
+ }
385
+ }
386
+ if (assistantParts.length > 0) {
387
+ parts.push(`Assistant: ${assistantParts.join('\n')}`);
388
+ }
389
+ }
390
+ else if (message.role === 'toolResult') {
391
+ const toolResult = message;
392
+ const resultText = toolResult.content
393
+ .filter(c => c.type === 'text')
394
+ .map(c => c.content)
395
+ .join('\n');
396
+ const status = toolResult.isError ? 'Error' : 'Result';
397
+ parts.push(`Tool ${status} (${toolResult.toolName}): ${resultText}`);
398
+ }
399
+ }
400
+ return sanitizeSurrogates(parts.join('\n\n'));
401
+ }
402
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/providers/anthropic-agents-sdk/stream.ts"],"names":[],"mappings":"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"}