@yolk-sdk/agent 0.1.0-canary.43 → 0.1.0-canary.44

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 CHANGED
@@ -176,6 +176,10 @@ durable URLs for app-owned uploads, or persist `Ref` values and call
176
176
  `resolveContentAttachmentSources` at your storage boundary before provider execution. Host apps own
177
177
  upload, auth, retention, URL durability, and ref hydration policy.
178
178
 
179
+ Anthropic Claude preserves supported rich `ToolResultMessage` parts as nested tool-result content:
180
+ text, images, inline text documents, and URL/base64 PDFs. Audio and unresolved `Ref` sources still
181
+ fail before the provider request.
182
+
179
183
  ```ts
180
184
  import { ImagePart, UserMessage, urlAttachmentSource } from '@yolk-sdk/agent/protocol'
181
185
 
@@ -44,10 +44,11 @@ type AnthropicToolUseBlock = {
44
44
  readonly name: string;
45
45
  readonly input: unknown;
46
46
  };
47
+ type AnthropicToolResultContentBlock = AnthropicTextBlock | AnthropicImageBlock | AnthropicDocumentBlock;
47
48
  type AnthropicToolResultBlock = {
48
49
  readonly type: 'tool_result';
49
50
  readonly tool_use_id: string;
50
- readonly content: string;
51
+ readonly content: string | ReadonlyArray<AnthropicToolResultContentBlock>;
51
52
  readonly is_error?: boolean;
52
53
  };
53
54
  type AnthropicUserBlock = AnthropicTextBlock | AnthropicImageBlock | AnthropicDocumentBlock | AnthropicToolResultBlock;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-provider.d.mts","names":[],"sources":["../../../src/providers/anthropic/claude-provider.ts"],"mappings":";;;;;;KAoDY,6BAAA;EAAA,SACD,KAAA,EAAO,gBAAA;EAAA,SACP,WAAA;EAAA,SACA,SAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;AAAA;AAAA,KAG9B,kBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,oBAAA,GAAuB,kBAAkB;AAAA,KAEzC,mBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;AAAA;AAAA,KAIZ,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;EAAA,SAEN,KAAA;AAAA;AAAA,KAGN,qBAAA;EAAA,SACM,IAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGN,wBAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,OAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGN,kBAAA,GACD,kBAAA,GACA,mBAAA,GACA,sBAAA,GACA,wBAAA;AAAA,KACC,uBAAA,GAA0B,kBAAA,GAAqB,qBAAqB;AAAA,KAEpE,gBAAA;EAAA,SACU,IAAA;EAAA,SAAuB,OAAA,WAAkB,aAAA,CAAc,kBAAA;AAAA;EAAA,SACvD,IAAA;EAAA,SAA4B,OAAA,EAAS,aAAA,CAAc,uBAAA;AAAA;AAAA,KAS7D,aAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA;AAAA;AAAA,KAGN,oBAAA;EAAA,SACM,KAAA;EAAA,SACA,MAAA,EAAQ,aAAA,CAAc,oBAAA;EAAA,SACtB,QAAA,EAAU,aAAA,CAAc,gBAAA;EAAA,SACxB,UAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA,GAAQ,aAAA,CAAc,aAAA;AAAA;AAAA,cA4zBpB,4BAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SAAoB,SAAA;EAAA,SAA6B,MAAA;AAAA,MAChD,MAAA,CAAO,MAAA,CAAO,oBAAA,EAAsB,QAAA;AAAA,cAoiB1B,6BAAA,GACX,QAAA,EAAU,kBAAA,CAAmB,kBAAA,KAC5B,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAA;AAAA,cA2Fd,gCAAA,GAAoC,MAAA,EAAQ,6BAAA,KAA6B,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA"}
1
+ {"version":3,"file":"claude-provider.d.mts","names":[],"sources":["../../../src/providers/anthropic/claude-provider.ts"],"mappings":";;;;;;KAoDY,6BAAA;EAAA,SACD,KAAA,EAAO,gBAAA;EAAA,SACP,WAAA;EAAA,SACA,SAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;AAAA;AAAA,KAG9B,kBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,oBAAA,GAAuB,kBAAkB;AAAA,KAEzC,mBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;AAAA;AAAA,KAIZ,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;EAAA,SAEN,KAAA;AAAA;AAAA,KAGN,qBAAA;EAAA,SACM,IAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGN,+BAAA,GACD,kBAAA,GACA,mBAAA,GACA,sBAAA;AAAA,KAEC,wBAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,OAAA,WAAkB,aAAa,CAAC,+BAAA;EAAA,SAChC,QAAA;AAAA;AAAA,KAGN,kBAAA,GACD,kBAAA,GACA,mBAAA,GACA,sBAAA,GACA,wBAAA;AAAA,KACC,uBAAA,GAA0B,kBAAA,GAAqB,qBAAqB;AAAA,KAEpE,gBAAA;EAAA,SACU,IAAA;EAAA,SAAuB,OAAA,WAAkB,aAAA,CAAc,kBAAA;AAAA;EAAA,SACvD,IAAA;EAAA,SAA4B,OAAA,EAAS,aAAA,CAAc,uBAAA;AAAA;AAAA,KAS7D,aAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA;AAAA;AAAA,KAGN,oBAAA;EAAA,SACM,KAAA;EAAA,SACA,MAAA,EAAQ,aAAA,CAAc,oBAAA;EAAA,SACtB,QAAA,EAAU,aAAA,CAAc,gBAAA;EAAA,SACxB,UAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA,GAAQ,aAAA,CAAc,aAAA;AAAA;AAAA,cA6zBpB,4BAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SAAoB,SAAA;EAAA,SAA6B,MAAA;AAAA,MAChD,MAAA,CAAO,MAAA,CAAO,oBAAA,EAAsB,QAAA;AAAA,cAoiB1B,6BAAA,GACX,QAAA,EAAU,kBAAA,CAAmB,kBAAA,KAC5B,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAA;AAAA,cA2Fd,gCAAA,GAAoC,MAAA,EAAQ,6BAAA,KAA6B,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA"}
@@ -244,7 +244,7 @@ const textDocumentToAnthropicBlock = (part) => attachmentSourceText(part.source)
244
244
  return Effect.succeed(block);
245
245
  }
246
246
  })));
247
- const contentPartToUserBlock = (part) => {
247
+ const contentPartToAnthropicBlock = (part) => {
248
248
  switch (part._tag) {
249
249
  case "Text": return Effect.succeed({
250
250
  type: "text",
@@ -255,7 +255,7 @@ const contentPartToUserBlock = (part) => {
255
255
  case "Audio": return Effect.fail(unsupportedContentError("Audio"));
256
256
  }
257
257
  };
258
- const contentToUserContent = (content) => typeof content === "string" ? Effect.succeed(content) : Effect.forEach(content, contentPartToUserBlock);
258
+ const contentToAnthropicContent = (content) => typeof content === "string" ? Effect.succeed(content) : Effect.forEach(content, contentPartToAnthropicBlock);
259
259
  const contentPartToText = (part, owner) => {
260
260
  switch (part._tag) {
261
261
  case "Text": return Effect.succeed(part.text);
@@ -444,7 +444,7 @@ const toAnthropicMessage = (message) => Effect.gen(function* () {
444
444
  switch (message._tag) {
445
445
  case "User": return {
446
446
  role: "user",
447
- content: yield* contentToUserContent(prependMessageContextToContent(message.content, messageContextText(message)))
447
+ content: yield* contentToAnthropicContent(prependMessageContextToContent(message.content, messageContextText(message)))
448
448
  };
449
449
  case "Assistant": {
450
450
  const text = yield* contentToText(prependMessageContextToContent(assistantContent(message), messageContextText(message)), "Assistant");
@@ -463,7 +463,7 @@ const toAnthropicMessage = (message) => Effect.gen(function* () {
463
463
  content: [{
464
464
  type: "tool_result",
465
465
  tool_use_id: message.toolCallId,
466
- content: yield* contentToText(prependMessageContextToContent(message.content, messageContextText(message)), "Tool result"),
466
+ content: yield* contentToAnthropicContent(prependMessageContextToContent(message.content, messageContextText(message))),
467
467
  is_error: message.isError
468
468
  }]
469
469
  };
@@ -1 +1 @@
1
- {"version":3,"file":"claude-provider.mjs","names":["LLMTextDelta","LLMReasoningDelta"],"sources":["../../../src/providers/anthropic/claude-provider.ts"],"sourcesContent":["import { Effect, Layer, Option, Ref, Result, Stream } from 'effect'\nimport {\n HttpClient,\n HttpClientRequest,\n type HttpClientError,\n type HttpClientResponse\n} from 'effect/unstable/http'\nimport * as Schema from 'effect/Schema'\nimport {\n AgentInputUsage,\n AgentOutputUsage,\n AgentUsage,\n ToolCall,\n attachmentSourceText,\n assistantContent,\n assistantHostToolCalls,\n isTextDocumentMimeType,\n messageContextText,\n replaceLoneSurrogatesDeep,\n prependMessageContextToContent,\n type AgentMessage,\n type Content,\n type ContentPart,\n type ProviderFailureKind,\n type ToolDef\n} from '@yolk-sdk/agent/protocol'\nimport {\n LLMError,\n LLMDone,\n LLMProvider,\n LLMReasoningDelta,\n LLMTextDelta,\n LLMToolCall,\n LLMUsage,\n type LLMEvent,\n type LLMRequest\n} from '@yolk-sdk/agent/loop'\nimport {\n anthropicClaudeAuthorizationHeaders,\n anthropicClaudeCodeEntrypoint,\n anthropicClaudeCodeVersion,\n anthropicClaudeOAuthUserAgent\n} from './claude.ts'\nimport type { OAuthAccessToken } from '@yolk-sdk/agent/oauth'\nimport {\n classifyProviderFailure,\n providerErrorInfo,\n providerFailureCause,\n providerFailureRetryable\n} from '../provider-error.ts'\nimport { validateProviderTranscript } from '../transcript.ts'\n\nexport type AnthropicClaudeProviderConfig = {\n readonly token: OAuthAccessToken\n readonly messagesUrl?: string\n readonly maxTokens?: number\n readonly extraHeaders?: Readonly<Record<string, string>>\n}\n\ntype AnthropicTextBlock = {\n readonly type: 'text'\n readonly text: string\n}\n\ntype AnthropicSystemBlock = AnthropicTextBlock\n\ntype AnthropicImageBlock = {\n readonly type: 'image'\n readonly source:\n | {\n readonly type: 'base64'\n readonly media_type: string\n readonly data: string\n }\n | {\n readonly type: 'url'\n readonly url: string\n }\n}\n\ntype AnthropicDocumentBlock = {\n readonly type: 'document'\n readonly source:\n | {\n readonly type: 'base64'\n readonly media_type: 'application/pdf'\n readonly data: string\n }\n | {\n readonly type: 'url'\n readonly url: string\n }\n readonly title?: string\n}\n\ntype AnthropicToolUseBlock = {\n readonly type: 'tool_use'\n readonly id: string\n readonly name: string\n readonly input: unknown\n}\n\ntype AnthropicToolResultBlock = {\n readonly type: 'tool_result'\n readonly tool_use_id: string\n readonly content: string\n readonly is_error?: boolean\n}\n\ntype AnthropicUserBlock =\n | AnthropicTextBlock\n | AnthropicImageBlock\n | AnthropicDocumentBlock\n | AnthropicToolResultBlock\ntype AnthropicAssistantBlock = AnthropicTextBlock | AnthropicToolUseBlock\n\ntype AnthropicMessage =\n | { readonly role: 'user'; readonly content: string | ReadonlyArray<AnthropicUserBlock> }\n | { readonly role: 'assistant'; readonly content: ReadonlyArray<AnthropicAssistantBlock> }\n\ntype JsonObject = Readonly<Record<string, unknown>>\ntype TopLevelJsonSchemaCombinatorKey = 'anyOf' | 'oneOf' | 'allOf'\ntype TopLevelJsonSchemaCombinator = {\n readonly key: TopLevelJsonSchemaCombinatorKey\n readonly items: ReadonlyArray<unknown>\n}\n\ntype AnthropicTool = {\n readonly name: string\n readonly description: string\n readonly input_schema: unknown\n}\n\ntype AnthropicRequestBody = {\n readonly model: string\n readonly system: ReadonlyArray<AnthropicSystemBlock>\n readonly messages: ReadonlyArray<AnthropicMessage>\n readonly max_tokens: number\n readonly stream?: true\n readonly tools?: ReadonlyArray<AnthropicTool>\n}\n\ntype AnthropicToolBlockState = {\n readonly id: string\n readonly name: string\n readonly partialJson: string\n}\n\nconst anthropicClaudeSystemIdentity = \"You are Claude Code, Anthropic's official CLI for Claude.\"\nconst anthropicClaudeBillingPrefix = 'x-anthropic-billing-header:'\nconst anthropicClaudeToolPrefix = 'mcp_'\nconst anthropicClaudeVersion = '2023-06-01'\nconst anthropicClaudeCchSalt = '59cf53e54c78'\nconst anthropicClaudeCchPositions: ReadonlyArray<number> = [4, 7, 20]\nconst anthropicClaudeEffortBeta = 'effort-2025-11-24'\nconst anthropicClaudeInterleavedThinkingBeta = 'interleaved-thinking-2025-05-14'\nconst anthropicClaudeRequiredBetas: ReadonlyArray<string> = [\n 'claude-code-20250219',\n 'oauth-2025-04-20',\n anthropicClaudeInterleavedThinkingBeta,\n 'prompt-caching-scope-2026-01-05',\n 'context-management-2025-06-27',\n 'advisor-tool-2026-03-01'\n]\nconst anthropicClaudeSystemTextReplacements: ReadonlyArray<{\n readonly match: string\n readonly replacement: string\n}> = [\n {\n match: 'if OpenCode honestly',\n replacement: 'if the assistant honestly'\n },\n {\n match: 'Here is some useful information about the environment you are running in:',\n replacement: 'Environment context you are running in:'\n }\n]\nconst anthropicClaudeStainlessPackageVersion = '0.81.0'\n\n// Claude subscription OAuth is fingerprinted against Claude Code tool names.\nconst prefixClaudeToolName = (name: string) =>\n `${anthropicClaudeToolPrefix}${name.charAt(0).toUpperCase()}${name.slice(1)}`\n\nconst unprefixClaudeToolName = (name: string) => {\n if (!name.startsWith(anthropicClaudeToolPrefix)) {\n return name\n }\n\n const unprefixed = name.slice(anthropicClaudeToolPrefix.length)\n\n if (unprefixed === 'StructuredOutput') {\n return unprefixed\n }\n\n return `${unprefixed.charAt(0).toLowerCase()}${unprefixed.slice(1)}`\n}\n\nconst anthropicClaudeMessagesUrl = 'https://api.anthropic.com/v1/messages?beta=true'\nconst anthropicClaudeMaxTokens = 8192\nconst anthropicClaudeIdentitySystemBlock: AnthropicSystemBlock = {\n type: 'text',\n text: anthropicClaudeSystemIdentity\n}\n\nconst randomHex = (byteLength: number) => {\n const crypto = globalThis.crypto\n const bytes = new Uint8Array(byteLength)\n\n if (crypto !== undefined && typeof crypto.getRandomValues === 'function') {\n crypto.getRandomValues(bytes)\n }\n\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('')\n}\n\nconst makeAnthropicClaudeRequestId = () => {\n const crypto = globalThis.crypto\n\n if (crypto !== undefined && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID()\n }\n\n return randomHex(16)\n}\n\nconst sha256Hex = (value: string): Effect.Effect<string, LLMError> => {\n const crypto = globalThis.crypto\n\n if (crypto === undefined || crypto.subtle === undefined) {\n return Effect.fail(\n new LLMError({\n cause: 'provider_error',\n message: 'Web Crypto SHA-256 is required for Anthropic Claude OAuth billing headers',\n retryable: false\n })\n )\n }\n\n return Effect.tryPromise({\n try: () =>\n crypto.subtle\n .digest('SHA-256', new TextEncoder().encode(value))\n .then(buffer =>\n Array.from(new Uint8Array(buffer), byte => byte.toString(16).padStart(2, '0')).join('')\n ),\n catch: error =>\n new LLMError({\n cause: 'provider_error',\n message: `Could not compute Anthropic Claude OAuth billing header: ${unknownToMessage(error)}`,\n retryable: false\n })\n })\n}\n\nconst computeAnthropicClaudeCch = (messageText: string) =>\n sha256Hex(messageText).pipe(Effect.map(hash => hash.slice(0, 5)))\n\nconst computeAnthropicClaudeVersionSuffix = (messageText: string) => {\n const chars = anthropicClaudeCchPositions.map(index => messageText[index] ?? '0').join('')\n\n return sha256Hex(`${anthropicClaudeCchSalt}${chars}${anthropicClaudeCodeVersion}`).pipe(\n Effect.map(hash => hash.slice(0, 3))\n )\n}\n\nconst firstUserMessageText = (messages: ReadonlyArray<AnthropicMessage>) => {\n for (const message of messages) {\n if (message.role !== 'user') {\n continue\n }\n\n if (typeof message.content === 'string') {\n return message.content\n }\n\n for (const block of message.content) {\n if (block.type === 'text') {\n return block.text\n }\n }\n }\n\n return ''\n}\n\nconst makeAnthropicClaudeBillingSystemBlock = (\n messages: ReadonlyArray<AnthropicMessage>\n): Effect.Effect<AnthropicSystemBlock, LLMError> => {\n const text = firstUserMessageText(messages)\n\n return Effect.all({\n cch: computeAnthropicClaudeCch(text),\n suffix: computeAnthropicClaudeVersionSuffix(text)\n }).pipe(\n Effect.map(\n ({ cch, suffix }): AnthropicSystemBlock => ({\n type: 'text',\n text:\n `${anthropicClaudeBillingPrefix} ` +\n `cc_version=${anthropicClaudeCodeVersion}.${suffix}; ` +\n `cc_entrypoint=${anthropicClaudeCodeEntrypoint}; ` +\n `cch=${cch};`\n })\n )\n )\n}\n\nconst sanitizeAnthropicClaudeSystemText = (text: string) => {\n let result = text\n\n for (const rule of anthropicClaudeSystemTextReplacements) {\n result = result.split(rule.match).join(rule.replacement)\n }\n\n return result\n}\n\nconst anthropicClaudeBetaHeader = (model: string) => {\n const lowerModel = model.toLowerCase()\n const baseBetas = lowerModel.includes('haiku')\n ? anthropicClaudeRequiredBetas.filter(beta => beta !== anthropicClaudeInterleavedThinkingBeta)\n : anthropicClaudeRequiredBetas\n\n if (\n !lowerModel.includes('haiku') &&\n (lowerModel.includes('4-6') || lowerModel.includes('4-7')) &&\n !baseBetas.includes(anthropicClaudeEffortBeta)\n ) {\n return [...baseBetas, anthropicClaudeEffortBeta].join(',')\n }\n\n return baseBetas.join(',')\n}\n\nconst makeAnthropicClaudeCompatibilityHeaders = (input: {\n readonly model: string\n readonly sessionId: string\n}) => ({\n 'anthropic-beta': anthropicClaudeBetaHeader(input.model),\n 'anthropic-dangerous-direct-browser-access': 'true',\n 'anthropic-version': anthropicClaudeVersion,\n 'user-agent': anthropicClaudeOAuthUserAgent,\n 'x-app': 'cli',\n 'x-client-request-id': makeAnthropicClaudeRequestId(),\n 'X-Claude-Code-Session-Id': input.sessionId,\n 'x-stainless-arch': 'unknown',\n 'x-stainless-lang': 'js',\n 'x-stainless-os': 'unknown',\n 'x-stainless-package-version': anthropicClaudeStainlessPackageVersion,\n 'x-stainless-retry-count': '0',\n 'x-stainless-runtime': 'node',\n 'x-stainless-runtime-version': 'unknown',\n 'x-stainless-timeout': '600'\n})\n\n// Keep app instructions out of `system[]`; Anthropic can reject/limit otherwise.\nconst prependSystemPromptToFirstUserMessage = (\n messages: ReadonlyArray<AnthropicMessage>,\n systemPrompt: string\n): ReadonlyArray<AnthropicMessage> => {\n const sanitizedSystemPrompt = sanitizeAnthropicClaudeSystemText(systemPrompt).trim()\n\n if (sanitizedSystemPrompt.length === 0) {\n return messages\n }\n\n let relocated = false\n\n return messages.map(message => {\n if (relocated || message.role !== 'user') {\n return message\n }\n\n relocated = true\n\n if (typeof message.content === 'string') {\n return { ...message, content: `${sanitizedSystemPrompt}\\n\\n${message.content}` }\n }\n\n return {\n ...message,\n content: [{ type: 'text', text: sanitizedSystemPrompt }, ...message.content]\n }\n })\n}\n\nclass AnthropicTextResponseBlock extends Schema.Class<AnthropicTextResponseBlock>(\n 'AnthropicTextResponseBlock'\n)({\n type: Schema.Literal('text'),\n text: Schema.String\n}) {}\n\nclass AnthropicThinkingResponseBlock extends Schema.Class<AnthropicThinkingResponseBlock>(\n 'AnthropicThinkingResponseBlock'\n)({\n type: Schema.Literal('thinking'),\n thinking: Schema.String\n}) {}\n\nclass AnthropicToolUseResponseBlock extends Schema.Class<AnthropicToolUseResponseBlock>(\n 'AnthropicToolUseResponseBlock'\n)({\n type: Schema.Literal('tool_use'),\n id: Schema.String,\n name: Schema.String,\n input: Schema.Unknown\n}) {}\n\nconst AnthropicContentResponseBlock = Schema.Union([\n AnthropicTextResponseBlock,\n AnthropicThinkingResponseBlock,\n AnthropicToolUseResponseBlock\n])\n\nclass AnthropicUsageResponse extends Schema.Class<AnthropicUsageResponse>('AnthropicUsageResponse')(\n {\n input_tokens: Schema.Number,\n output_tokens: Schema.Number,\n cache_read_input_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n cache_creation_input_tokens: Schema.optional(Schema.NullOr(Schema.Number))\n }\n) {}\n\nclass AnthropicStreamUsageResponse extends Schema.Class<AnthropicStreamUsageResponse>(\n 'AnthropicStreamUsageResponse'\n)({\n input_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n output_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n cache_read_input_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n cache_creation_input_tokens: Schema.optional(Schema.NullOr(Schema.Number))\n}) {}\n\nclass AnthropicMessageResponse extends Schema.Class<AnthropicMessageResponse>(\n 'AnthropicMessageResponse'\n)({\n content: Schema.Array(AnthropicContentResponseBlock),\n stop_reason: Schema.NullOr(Schema.String),\n usage: Schema.optional(AnthropicUsageResponse)\n}) {}\n\nconst unknownToMessage = (error: unknown) =>\n error instanceof Error ? error.message : String(error)\n\nconst encodeJsonString = (value: unknown, message: string) =>\n Schema.encodeUnknownEffect(Schema.UnknownFromJsonString)(value).pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'provider_error',\n message: `${message}: ${unknownToMessage(error)}`,\n retryable: false\n })\n )\n )\n\nconst unsupportedContentError = (contentType: string) =>\n new LLMError({\n cause: 'provider_error',\n message: `${contentType} content is not supported by the Anthropic Claude provider yet`,\n retryable: false\n })\n\nconst imageToAnthropicBlock = (\n part: Extract<ContentPart, { readonly _tag: 'Image' }>\n): Effect.Effect<AnthropicImageBlock, LLMError> => {\n switch (part.source._tag) {\n case 'InlineBase64':\n return Effect.succeed({\n type: 'image',\n source: {\n type: 'base64',\n media_type: part.mimeType,\n data: part.source.data\n }\n })\n case 'Url':\n return Effect.succeed({\n type: 'image',\n source: {\n type: 'url',\n url: part.source.url\n }\n })\n case 'Ref':\n return Effect.fail(unsupportedContentError('Unresolved image source'))\n }\n}\n\nconst pdfDocumentToAnthropicBlock = (\n part: Extract<ContentPart, { readonly _tag: 'Document' }>\n): Effect.Effect<AnthropicDocumentBlock, LLMError> => {\n switch (part.source._tag) {\n case 'InlineBase64':\n return Effect.succeed({\n type: 'document',\n source: {\n type: 'base64',\n media_type: 'application/pdf',\n data: part.source.data\n },\n title: part.title ?? part.filename\n })\n case 'Url':\n return Effect.succeed({\n type: 'document',\n source: {\n type: 'url',\n url: part.source.url\n },\n title: part.title ?? part.filename\n })\n case 'Ref':\n return Effect.fail(unsupportedContentError('Unresolved document source'))\n }\n}\n\nconst textDocumentToAnthropicBlock = (part: Extract<ContentPart, { readonly _tag: 'Document' }>) =>\n attachmentSourceText(part.source).pipe(\n Effect.mapError(() => unsupportedContentError('Invalid document text')),\n Effect.flatMap(\n Option.match({\n onNone: () => Effect.fail(unsupportedContentError('Unresolved document source')),\n onSome: text => {\n const block: AnthropicTextBlock = {\n type: 'text',\n text: `Document: ${part.title ?? part.filename}\\n\\n${text}`\n }\n\n return Effect.succeed(block)\n }\n })\n )\n )\n\nconst contentPartToUserBlock = (part: ContentPart): Effect.Effect<AnthropicUserBlock, LLMError> => {\n switch (part._tag) {\n case 'Text':\n return Effect.succeed({ type: 'text', text: part.text })\n case 'Image':\n return imageToAnthropicBlock(part)\n case 'Document':\n return isTextDocumentMimeType(part.mimeType)\n ? textDocumentToAnthropicBlock(part)\n : part.mimeType === 'application/pdf'\n ? pdfDocumentToAnthropicBlock(part)\n : Effect.fail(unsupportedContentError(`Document ${part.mimeType}`))\n case 'Audio':\n return Effect.fail(unsupportedContentError('Audio'))\n }\n}\n\nconst contentToUserContent = (\n content: Content\n): Effect.Effect<string | ReadonlyArray<AnthropicUserBlock>, LLMError> =>\n typeof content === 'string'\n ? Effect.succeed(content)\n : Effect.forEach(content, contentPartToUserBlock)\n\nconst contentPartToText = (part: ContentPart, owner: string): Effect.Effect<string, LLMError> => {\n switch (part._tag) {\n case 'Text':\n return Effect.succeed(part.text)\n case 'Image':\n return Effect.fail(unsupportedContentError(`${owner} image`))\n case 'Document':\n return Effect.fail(unsupportedContentError(`${owner} document`))\n case 'Audio':\n return Effect.fail(unsupportedContentError(`${owner} audio`))\n }\n}\n\nconst contentToText = (content: Content, owner: string): Effect.Effect<string, LLMError> =>\n typeof content === 'string'\n ? Effect.succeed(content)\n : Effect.forEach(content, part => contentPartToText(part, owner)).pipe(\n Effect.map(textParts => textParts.join('\\n'))\n )\n\nconst toolCallToAnthropicBlock = (call: ToolCall): AnthropicToolUseBlock => ({\n type: 'tool_use',\n id: call.id,\n name: prefixClaudeToolName(call.name),\n input: call.params\n})\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst jsonObjectField = (value: JsonObject, key: string) =>\n Object.getOwnPropertyDescriptor(value, key)?.value\n\nconst topLevelJsonSchemaCombinatorKeys: ReadonlyArray<TopLevelJsonSchemaCombinatorKey> = [\n 'anyOf',\n 'oneOf',\n 'allOf'\n]\n\nconst isTopLevelJsonSchemaCombinatorKey = (key: string): key is TopLevelJsonSchemaCombinatorKey =>\n key === 'anyOf' || key === 'oneOf' || key === 'allOf'\n\nconst topLevelJsonSchemaCombinator = (\n schema: JsonObject\n): TopLevelJsonSchemaCombinator | undefined => {\n for (const key of topLevelJsonSchemaCombinatorKeys) {\n const value = jsonObjectField(schema, key)\n\n if (Array.isArray(value)) {\n return { key, items: value }\n }\n }\n\n return undefined\n}\n\nconst withoutTopLevelJsonSchemaCombinators = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(schema).filter(([key]) => !isTopLevelJsonSchemaCombinatorKey(key))\n )\n\nconst withoutJsonSchemaCombinatorsAndTupleHints = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(schema).filter(\n ([key]) => !isTopLevelJsonSchemaCombinatorKey(key) && key !== 'prefixItems'\n )\n )\n\nconst jsonSchemaProperties = (schema: JsonObject) => {\n const properties = jsonObjectField(schema, 'properties')\n\n return isJsonObject(properties) ? properties : {}\n}\n\nconst jsonSchemaDefinitions = (schema: JsonObject) => {\n const definitions = jsonObjectField(schema, '$defs')\n\n return isJsonObject(definitions) ? definitions : {}\n}\n\nconst jsonSchemaRequired = (schema: JsonObject) => {\n const required = jsonObjectField(schema, 'required')\n\n return Array.isArray(required) ? required.filter(item => typeof item === 'string') : []\n}\n\nconst jsonValueKey = (value: unknown) =>\n Result.try(() => JSON.stringify(value)).pipe(\n Result.match({\n onFailure: () => undefined,\n onSuccess: encoded => encoded\n })\n )\n\nconst uniqueUnknownArray = (items: ReadonlyArray<unknown>): ReadonlyArray<unknown> => {\n const seen = new Set<string>()\n const result: Array<unknown> = []\n\n for (const item of items) {\n const key = jsonValueKey(item)\n\n if (key === undefined || seen.has(key)) {\n continue\n }\n\n seen.add(key)\n result.push(item)\n }\n\n return result\n}\n\nconst mergeEnumPropertySchemas = (left: unknown, right: unknown): unknown | undefined => {\n if (!isJsonObject(left) || !isJsonObject(right)) {\n return undefined\n }\n\n const leftEnum = jsonObjectField(left, 'enum')\n const rightEnum = jsonObjectField(right, 'enum')\n\n if (!Array.isArray(leftEnum) || !Array.isArray(rightEnum)) {\n return undefined\n }\n\n const leftType = jsonObjectField(left, 'type')\n const rightType = jsonObjectField(right, 'type')\n\n if (leftType !== rightType) {\n return undefined\n }\n\n return { ...left, ...right, enum: uniqueUnknownArray([...leftEnum, ...rightEnum]) }\n}\n\nconst jsonSchemaAnyOfItems = (schema: unknown) => {\n if (!isJsonObject(schema)) {\n return [schema]\n }\n\n const anyOf = jsonObjectField(schema, 'anyOf')\n\n return Array.isArray(anyOf) ? anyOf : [schema]\n}\n\nconst mergePropertySchemas = (left: unknown, right: unknown): unknown => {\n const leftKey = jsonValueKey(left)\n\n if (leftKey !== undefined && leftKey === jsonValueKey(right)) {\n return left\n }\n\n const mergedEnum = mergeEnumPropertySchemas(left, right)\n\n if (mergedEnum !== undefined) {\n return mergedEnum\n }\n\n return {\n anyOf: uniqueUnknownArray([...jsonSchemaAnyOfItems(left), ...jsonSchemaAnyOfItems(right)])\n }\n}\n\nconst mergeJsonSchemaObjects = (objects: ReadonlyArray<JsonObject>): JsonObject => {\n const merged = new Map<string, unknown>()\n\n for (const object of objects) {\n for (const [key, value] of Object.entries(object)) {\n if (merged.has(key)) {\n merged.set(key, mergePropertySchemas(merged.get(key), value))\n } else {\n merged.set(key, value)\n }\n }\n }\n\n return Object.fromEntries(merged)\n}\n\nconst normalizeJsonSchemaObjectFields = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(withoutJsonSchemaCombinatorsAndTupleHints(schema)).map(([key, value]) => [\n key,\n normalizeAnthropicToolSchema(value)\n ])\n )\n\nconst jsonSchemaType = (schema: JsonObject) => {\n const type = jsonObjectField(schema, 'type')\n\n return typeof type === 'string' ? type : undefined\n}\n\nconst isNullJsonSchema = (schema: JsonObject) => jsonSchemaType(schema) === 'null'\n\nconst firstJsonObject = (items: ReadonlyArray<JsonObject>) => items[0]\n\nconst mergeCompatibleVariants = (\n variants: ReadonlyArray<JsonObject>\n): JsonObject | undefined => {\n const first = firstJsonObject(variants)\n if (first === undefined) return undefined\n\n let merged: unknown = first\n\n for (const variant of variants.slice(1)) {\n merged = mergePropertySchemas(merged, variant)\n }\n\n if (!isJsonObject(merged)) return undefined\n\n if (Array.isArray(jsonObjectField(merged, 'anyOf'))) return undefined\n\n\n return merged\n}\n\nconst samePrimitiveTypeVariant = (variants: ReadonlyArray<JsonObject>): JsonObject | undefined => {\n const first = firstJsonObject(variants)\n const type = first === undefined ? undefined : jsonSchemaType(first)\n\n if (type === undefined || type === 'object' || type === 'array' || type === 'null') {\n return undefined\n }\n\n return variants.every(variant => jsonSchemaType(variant) === type) ? first : undefined\n}\n\nconst objectVariant = (variants: ReadonlyArray<JsonObject>): JsonObject | undefined => {\n if (\n variants.length === 0 ||\n variants.some(variant => {\n const type = jsonSchemaType(variant)\n\n return type !== undefined && type !== 'object'\n })\n ) {\n return undefined\n }\n\n return {\n type: 'object',\n properties: mergeJsonSchemaObjects(variants.map(jsonSchemaProperties)),\n required: mergeJsonSchemaRequired('oneOf', variants),\n $defs: mergeJsonSchemaObjects(variants.map(jsonSchemaDefinitions)),\n additionalProperties: mergeAdditionalProperties(variants) ?? false\n }\n}\n\nconst normalizeJsonSchemaCombinator = (\n schema: JsonObject,\n combinator: TopLevelJsonSchemaCombinator\n): JsonObject => {\n const base = normalizeJsonSchemaObjectFields(schema)\n const variants = combinator.items\n .map(normalizeAnthropicToolSchema)\n .filter(isJsonObject)\n .filter(variant => !isNullJsonSchema(variant))\n const first = firstJsonObject(variants)\n\n if (first === undefined) return base\n\n if (combinator.key === 'allOf') {\n return mergeJsonSchemaObjects([base, ...variants])\n }\n\n const merged =\n mergeCompatibleVariants(variants) ?? samePrimitiveTypeVariant(variants) ?? objectVariant(variants)\n\n return mergeJsonSchemaObjects([base, merged ?? first])\n}\n\nfunction normalizeAnthropicToolSchema(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(normalizeAnthropicToolSchema)\n if (!isJsonObject(value)) return value\n\n const combinator = topLevelJsonSchemaCombinator(value)\n if (combinator !== undefined) return normalizeJsonSchemaCombinator(value, combinator)\n\n return normalizeJsonSchemaObjectFields(value)\n}\n\nconst mergeJsonSchemaRequired = (\n combinatorKey: TopLevelJsonSchemaCombinatorKey,\n objects: ReadonlyArray<JsonObject>\n): ReadonlyArray<string> => {\n const requiredSets = objects.map(jsonSchemaRequired)\n\n if (requiredSets.length === 0) {\n return []\n }\n\n if (combinatorKey === 'allOf') {\n return Array.from(new Set(requiredSets.flat()))\n }\n\n const first = requiredSets[0] ?? []\n\n return first.filter(item => requiredSets.every(required => required.includes(item)))\n}\n\nconst mergeAdditionalProperties = (objects: ReadonlyArray<JsonObject>) => {\n const values = objects.map(object => jsonObjectField(object, 'additionalProperties'))\n\n if (values.every(value => value === false)) {\n return false\n }\n\n if (values.every(value => value === true)) {\n return true\n }\n\n return undefined\n}\n\n// Anthropic rejects root combinators. This widens provider-facing guidance only;\n// tool execution still validates calls against the original registry schema.\nconst flattenTopLevelCombinatorToolSchema = (\n schema: JsonObject,\n combinator: TopLevelJsonSchemaCombinator\n): JsonObject => {\n const base = withoutTopLevelJsonSchemaCombinators(schema)\n const objectVariants = combinator.items.filter(isJsonObject)\n const additionalProperties = mergeAdditionalProperties(objectVariants)\n const flattened = {\n ...base,\n type: 'object',\n properties: mergeJsonSchemaObjects(objectVariants.map(jsonSchemaProperties)),\n required: mergeJsonSchemaRequired(combinator.key, objectVariants),\n $defs: mergeJsonSchemaObjects([\n jsonSchemaDefinitions(schema),\n ...objectVariants.map(jsonSchemaDefinitions)\n ])\n }\n\n if (additionalProperties === undefined) {\n return flattened\n }\n\n return { ...flattened, additionalProperties }\n}\n\nconst anthropicToolInputSchema = (schema: unknown): unknown => {\n if (!isJsonObject(schema)) {\n return {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false\n }\n }\n\n const combinator = topLevelJsonSchemaCombinator(schema)\n\n if (combinator !== undefined) {\n return normalizeAnthropicToolSchema(flattenTopLevelCombinatorToolSchema(schema, combinator))\n }\n\n if (jsonObjectField(schema, 'type') !== undefined) {\n return normalizeAnthropicToolSchema(schema)\n }\n\n return normalizeAnthropicToolSchema({ ...schema, type: 'object' })\n}\n\nconst toAnthropicMessage = (message: AgentMessage): Effect.Effect<AnthropicMessage, LLMError> =>\n Effect.gen(function* () {\n switch (message._tag) {\n case 'User':\n return {\n role: 'user',\n content: yield* contentToUserContent(\n prependMessageContextToContent(message.content, messageContextText(message))\n )\n }\n case 'Assistant': {\n const text = yield* contentToText(\n prependMessageContextToContent(assistantContent(message), messageContextText(message)),\n 'Assistant'\n )\n const textBlocks: ReadonlyArray<AnthropicTextBlock> =\n text.length === 0 ? [] : [{ type: 'text', text }]\n const toolBlocks = assistantHostToolCalls(message).map(toolCallToAnthropicBlock)\n return { role: 'assistant', content: [...textBlocks, ...toolBlocks] }\n }\n case 'ToolResult':\n return {\n role: 'user',\n content: [\n {\n type: 'tool_result',\n tool_use_id: message.toolCallId,\n content: yield* contentToText(\n prependMessageContextToContent(message.content, messageContextText(message)),\n 'Tool result'\n ),\n is_error: message.isError\n }\n ]\n }\n }\n })\n\nconst toAnthropicTool = (tool: ToolDef): AnthropicTool => ({\n name: prefixClaudeToolName(tool.name),\n description: tool.description,\n input_schema: anthropicToolInputSchema(tool.parameters)\n})\n\nexport const toAnthropicClaudeRequestBody = (\n request: LLMRequest,\n config?: { readonly maxTokens?: number; readonly stream?: boolean }\n): Effect.Effect<AnthropicRequestBody, LLMError> =>\n Effect.gen(function* () {\n yield* validateProviderTranscript(request.messages)\n const rawMessages = yield* Effect.forEach(request.messages, toAnthropicMessage)\n const billingSystemBlock = yield* makeAnthropicClaudeBillingSystemBlock(rawMessages)\n const messages = prependSystemPromptToFirstUserMessage(rawMessages, request.systemPrompt)\n const baseBody = {\n model: request.model,\n system: [billingSystemBlock, anthropicClaudeIdentitySystemBlock],\n messages,\n max_tokens: config?.maxTokens ?? anthropicClaudeMaxTokens\n }\n const body: AnthropicRequestBody =\n config?.stream === true ? { ...baseBody, stream: true } : baseBody\n\n if (request.tools.length === 0) {\n return body\n }\n\n return {\n ...body,\n tools: request.tools.map(toAnthropicTool)\n }\n })\n\nconst anthropicClaudeProvider = 'anthropic_claude'\n\nconst toHttpClientLlmError =\n (message: string, retryable: boolean, kind: ProviderFailureKind = 'network') =>\n (error: HttpClientError.HttpClientError) =>\n new LLMError({\n cause: 'provider_error',\n message: `${message}: ${error.message}`,\n retryable,\n provider: providerErrorInfo({\n provider: anthropicClaudeProvider,\n kind: retryable ? kind : 'unknown'\n })\n })\n\nconst decodeJsonString = (raw: string, message: string) =>\n Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(raw).pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'invalid_response',\n message: `${message}: ${unknownToMessage(error)}`,\n retryable: false\n })\n )\n )\n\nconst isRecord = (value: unknown): value is Readonly<Record<string, unknown>> =>\n typeof value === 'object' && value !== null\n\nconst field = (value: unknown, key: string) =>\n isRecord(value) ? Object.getOwnPropertyDescriptor(value, key)?.value : undefined\n\nconst stringField = (value: unknown, key: string) => {\n const raw = field(value, key)\n return typeof raw === 'string' ? raw : undefined\n}\n\nconst providerSignalError = (input: {\n readonly message: string\n readonly providerCode?: string\n readonly fallbackKind?: ProviderFailureKind\n}) => {\n const provider = classifyProviderFailure({\n provider: anthropicClaudeProvider,\n message: input.message,\n ...(input.providerCode === undefined ? {} : { providerCode: input.providerCode }),\n ...(input.fallbackKind === undefined ? {} : { fallbackKind: input.fallbackKind })\n })\n\n return new LLMError({\n cause: providerFailureCause(provider.kind),\n message: input.message,\n retryable: providerFailureRetryable(provider.kind),\n provider\n })\n}\n\nconst numberField = (value: unknown, key: string) => {\n const raw = field(value, key)\n return typeof raw === 'number' ? raw : undefined\n}\n\nconst sseDataFromBlock = (block: string) =>\n block\n .split('\\n')\n .filter(line => line.startsWith('data:'))\n .map(line => line.slice('data:'.length).trimStart())\n .join('\\n')\n .trim()\n\nconst dataFromSseBlock = (block: string) => {\n const data = sseDataFromBlock(block)\n\n if (data.length === 0 || data === '[DONE]') {\n return undefined\n }\n\n return data\n}\n\nconst normalizeNewlines = (text: string) => text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n')\n\nconst splitCompleteSseBlocks = (buffer: string) => {\n const blocks = buffer.split('\\n\\n')\n const tail = blocks.at(-1) ?? ''\n\n return { completeBlocks: blocks.slice(0, -1), tail }\n}\n\nconst parseToolParams = (raw: string) => {\n const trimmed = raw.trim()\n\n if (trimmed.length === 0) return Effect.succeed({})\n\n return decodeJsonString(trimmed, 'Invalid Anthropic Claude tool arguments JSON')\n}\n\ntype AnthropicUsageComponents = {\n readonly inputTokens: number\n readonly outputTokens: number\n readonly cacheReadInputTokens: number\n readonly cacheCreationInputTokens: number\n}\n\nconst zeroAnthropicUsageComponents: AnthropicUsageComponents = {\n inputTokens: 0,\n outputTokens: 0,\n cacheReadInputTokens: 0,\n cacheCreationInputTokens: 0\n}\n\nconst positiveOrUndefined = (value: number) => (value > 0 ? value : undefined)\n\nconst toAgentUsageFromComponents = (usage: AnthropicUsageComponents) =>\n AgentUsage.make({\n input: AgentInputUsage.make({\n total: usage.inputTokens + usage.cacheReadInputTokens + usage.cacheCreationInputTokens,\n uncached: positiveOrUndefined(usage.inputTokens),\n cacheRead: positiveOrUndefined(usage.cacheReadInputTokens),\n cacheWrite: positiveOrUndefined(usage.cacheCreationInputTokens)\n }),\n output: AgentOutputUsage.make({\n total: usage.outputTokens,\n text: positiveOrUndefined(usage.outputTokens)\n })\n })\n\nconst toAgentUsage = (usage: AnthropicUsageResponse) =>\n toAgentUsageFromComponents({\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheReadInputTokens: usage.cache_read_input_tokens ?? 0,\n cacheCreationInputTokens: usage.cache_creation_input_tokens ?? 0\n })\n\nconst nextAnthropicUsageSnapshot = (\n previous: AnthropicUsageComponents,\n usage: AnthropicStreamUsageResponse\n): AnthropicUsageComponents => ({\n inputTokens: usage.input_tokens ?? previous.inputTokens,\n outputTokens: usage.output_tokens ?? previous.outputTokens,\n cacheReadInputTokens: usage.cache_read_input_tokens ?? previous.cacheReadInputTokens,\n cacheCreationInputTokens: usage.cache_creation_input_tokens ?? previous.cacheCreationInputTokens\n})\n\nconst usageComponentDelta = (previous: number, next: number) => Math.max(0, next - previous)\n\nconst anthropicUsageDelta = (\n previous: AnthropicUsageComponents,\n next: AnthropicUsageComponents\n): AnthropicUsageComponents => ({\n inputTokens: usageComponentDelta(previous.inputTokens, next.inputTokens),\n outputTokens: usageComponentDelta(previous.outputTokens, next.outputTokens),\n cacheReadInputTokens: usageComponentDelta(\n previous.cacheReadInputTokens,\n next.cacheReadInputTokens\n ),\n cacheCreationInputTokens: usageComponentDelta(\n previous.cacheCreationInputTokens,\n next.cacheCreationInputTokens\n )\n})\n\nconst hasAnthropicUsage = (usage: AnthropicUsageComponents) =>\n usage.inputTokens > 0 ||\n usage.outputTokens > 0 ||\n usage.cacheReadInputTokens > 0 ||\n usage.cacheCreationInputTokens > 0\n\ntype AnthropicStreamUsageStep = {\n readonly snapshot: AnthropicUsageComponents\n readonly events: ReadonlyArray<LLMEvent>\n}\n\nconst usageStepFromUnknown = (\n usage: unknown,\n previous: AnthropicUsageComponents\n): AnthropicStreamUsageStep => {\n const parsed = Schema.decodeUnknownOption(AnthropicStreamUsageResponse)(usage)\n\n if (parsed._tag === 'None') {\n return { snapshot: previous, events: [] }\n }\n\n const value = parsed.value\n const snapshot = nextAnthropicUsageSnapshot(previous, value)\n const delta = anthropicUsageDelta(previous, snapshot)\n\n return {\n snapshot,\n events: hasAnthropicUsage(delta)\n ? [LLMUsage.make({ usage: toAgentUsageFromComponents(delta) })]\n : []\n }\n}\n\nconst toLlmEvents = (\n response: AnthropicMessageResponse\n): Effect.Effect<ReadonlyArray<LLMEvent>, LLMError> =>\n Effect.gen(function* () {\n const events = yield* Effect.forEach(response.content, block => {\n switch (block.type) {\n case 'text':\n return Effect.succeed<LLMEvent>(LLMTextDelta.make({ text: block.text }))\n case 'thinking':\n return Effect.succeed<LLMEvent>(LLMReasoningDelta.make({ text: block.thinking }))\n case 'tool_use':\n return Effect.succeed<LLMEvent>(\n LLMToolCall.make({\n call: ToolCall.make({\n id: block.id,\n name: unprefixClaudeToolName(block.name),\n params: block.input\n })\n })\n )\n }\n })\n const stopReason = response.stop_reason === 'tool_use' ? 'tool_use' : 'stop'\n const usageEvent =\n response.usage === undefined ? [] : [LLMUsage.make({ usage: toAgentUsage(response.usage) })]\n\n return [...events, LLMDone.make({ stopReason }), ...usageEvent]\n })\n\nconst decodeAnthropicMessageResponse = (json: unknown) =>\n Schema.decodeUnknownEffect(AnthropicMessageResponse)(json).pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'invalid_response',\n message: `Invalid Anthropic Claude response: ${unknownToMessage(error)}`,\n retryable: false\n })\n )\n )\n\nconst parseAnthropicJsonResponse = (\n raw: string\n): Effect.Effect<ReadonlyArray<LLMEvent>, LLMError> =>\n Effect.gen(function* () {\n const json = yield* decodeJsonString(raw, 'Could not parse Anthropic Claude response JSON')\n const parsed = yield* decodeAnthropicMessageResponse(json)\n\n return yield* toLlmEvents(parsed)\n })\n\ntype AnthropicBodyFormat = 'undecided' | 'sse' | 'json'\n\ntype AnthropicSseState = {\n readonly hasToolCall: boolean\n readonly hasDone: boolean\n readonly usage: AnthropicUsageComponents\n}\n\ntype AnthropicSseStep = {\n readonly state: AnthropicSseState\n readonly events: ReadonlyArray<LLMEvent>\n}\n\ntype AnthropicBodyState = {\n readonly format: AnthropicBodyFormat\n readonly buffer: string\n readonly sse: AnthropicSseState\n}\n\nconst initialSseState: AnthropicSseState = {\n hasToolCall: false,\n hasDone: false,\n usage: zeroAnthropicUsageComponents\n}\n\nconst initialBodyState: AnthropicBodyState = {\n format: 'undecided',\n buffer: '',\n sse: initialSseState\n}\n\nconst classifyAnthropicBody = (buffer: string): AnthropicBodyFormat => {\n const trimmed = buffer.trimStart()\n\n if (trimmed.length === 0) {\n return 'undecided'\n }\n\n if (trimmed.startsWith('event:') || trimmed.startsWith('data:')) {\n return 'sse'\n }\n\n if ('event:'.startsWith(trimmed) || 'data:'.startsWith(trimmed)) {\n return 'undecided'\n }\n\n return 'json'\n}\n\nconst invalidToolUseStartError = () =>\n new LLMError({\n cause: 'invalid_response',\n message: 'Invalid Anthropic Claude tool_use stream block',\n retryable: false\n })\n\nconst makeAnthropicStreamEmitter = () => {\n const toolBlocks = new Map<number, AnthropicToolBlockState>()\n\n return (state: AnthropicSseState, data: unknown): Effect.Effect<AnthropicSseStep, LLMError> => {\n const type = stringField(data, 'type')\n\n if (type === 'message_start') {\n const message = field(data, 'message')\n const step = usageStepFromUnknown(field(message, 'usage'), state.usage)\n\n return Effect.succeed({ state: { ...state, usage: step.snapshot }, events: step.events })\n }\n\n if (type === 'content_block_start') {\n const index = numberField(data, 'index')\n const block = field(data, 'content_block')\n\n if (index !== undefined && stringField(block, 'type') === 'tool_use') {\n const id = stringField(block, 'id')\n const name = stringField(block, 'name')\n\n if (id === undefined || name === undefined) {\n return Effect.fail(invalidToolUseStartError())\n }\n\n toolBlocks.set(index, {\n id,\n name: unprefixClaudeToolName(name),\n partialJson: ''\n })\n }\n\n return Effect.succeed({ state, events: [] })\n }\n\n if (type === 'content_block_delta') {\n const index = numberField(data, 'index')\n const delta = field(data, 'delta')\n const deltaType = stringField(delta, 'type')\n const text = stringField(delta, 'text')\n const thinking = stringField(delta, 'thinking')\n const partialJson = stringField(delta, 'partial_json')\n\n if (deltaType === 'text_delta' && text !== undefined) {\n return Effect.succeed({ state, events: [LLMTextDelta.make({ text })] })\n }\n\n if (deltaType === 'thinking_delta' && thinking !== undefined) {\n return Effect.succeed({ state, events: [LLMReasoningDelta.make({ text: thinking })] })\n }\n\n if (index !== undefined && deltaType === 'input_json_delta' && partialJson !== undefined) {\n const current = toolBlocks.get(index)\n if (current !== undefined) {\n toolBlocks.set(index, { ...current, partialJson: `${current.partialJson}${partialJson}` })\n }\n }\n\n return Effect.succeed({ state, events: [] })\n }\n\n if (type === 'content_block_stop') {\n const index = numberField(data, 'index')\n const toolBlock = index === undefined ? undefined : toolBlocks.get(index)\n\n if (toolBlock === undefined) return Effect.succeed({ state, events: [] })\n\n return parseToolParams(toolBlock.partialJson).pipe(\n Effect.map(params => {\n if (index !== undefined) toolBlocks.delete(index)\n\n return {\n state: { ...state, hasToolCall: true },\n events: [\n LLMToolCall.make({\n call: ToolCall.make({\n id: toolBlock.id,\n name: toolBlock.name,\n params\n })\n })\n ]\n }\n })\n )\n }\n\n if (type === 'message_delta') {\n const step = usageStepFromUnknown(field(data, 'usage'), state.usage)\n\n return Effect.succeed({ state: { ...state, usage: step.snapshot }, events: step.events })\n }\n\n if (type === 'message_stop') {\n return Effect.succeed({\n state: { ...state, hasDone: true },\n events: [LLMDone.make({ stopReason: state.hasToolCall ? 'tool_use' : 'stop' })]\n })\n }\n\n if (type === 'error') {\n const error = field(data, 'error')\n const providerCode = stringField(error, 'type') ?? stringField(error, 'code')\n\n return Effect.fail(\n providerSignalError({\n message: stringField(error, 'message') ?? 'Anthropic Claude stream error',\n ...(providerCode === undefined ? {} : { providerCode })\n })\n )\n }\n\n return Effect.succeed({ state, events: [] })\n }\n}\n\nconst processSseData = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicSseState,\n data: string\n): Effect.Effect<AnthropicSseStep, LLMError> =>\n decodeJsonString(data, 'Could not parse Anthropic Claude stream event JSON').pipe(\n Effect.flatMap(parsed => emitData(state, parsed))\n )\n\nconst processSseBlock = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicSseState,\n block: string\n): Effect.Effect<AnthropicSseStep, LLMError> => {\n const data = dataFromSseBlock(block)\n\n if (data === undefined) {\n return Effect.succeed({ state, events: [] })\n }\n\n return processSseData(emitData, state, data)\n}\n\nconst processSseBlocks = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicSseState,\n blocks: ReadonlyArray<string>\n): Effect.Effect<AnthropicSseStep, LLMError> =>\n Effect.gen(function* () {\n const events: Array<LLMEvent> = []\n let currentState = state\n\n for (const block of blocks) {\n const step = yield* processSseBlock(emitData, currentState, block)\n currentState = step.state\n events.push(...step.events)\n }\n\n return { state: currentState, events }\n })\n\nconst processBodyChunk = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicBodyState,\n chunk: string\n): Effect.Effect<AnthropicSseStep & { readonly bodyState: AnthropicBodyState }, LLMError> =>\n Effect.gen(function* () {\n const buffer = normalizeNewlines(`${state.buffer}${chunk}`)\n const format = state.format === 'undecided' ? classifyAnthropicBody(buffer) : state.format\n\n if (format !== 'sse') {\n return {\n state: state.sse,\n bodyState: { ...state, format, buffer },\n events: []\n }\n }\n\n const split = splitCompleteSseBlocks(buffer)\n const step = yield* processSseBlocks(emitData, state.sse, split.completeBlocks)\n\n return {\n state: step.state,\n bodyState: { format, buffer: split.tail, sse: step.state },\n events: step.events\n }\n })\n\nconst finalizeBodyState = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicBodyState\n): Effect.Effect<ReadonlyArray<LLMEvent>, LLMError> =>\n Effect.gen(function* () {\n const buffer = normalizeNewlines(state.buffer)\n const format = state.format === 'undecided' ? classifyAnthropicBody(buffer) : state.format\n\n if (format === 'json') {\n return yield* parseAnthropicJsonResponse(buffer)\n }\n\n const events: Array<LLMEvent> = []\n let sseState = state.sse\n\n if (format === 'sse') {\n const split = splitCompleteSseBlocks(buffer)\n const step = yield* processSseBlocks(emitData, sseState, split.completeBlocks)\n sseState = step.state\n events.push(...step.events)\n\n if (split.tail.trim().length > 0) {\n const tailStep = yield* processSseBlock(emitData, sseState, split.tail)\n sseState = tailStep.state\n events.push(...tailStep.events)\n }\n }\n\n if (!sseState.hasDone) {\n events.push(LLMDone.make({ stopReason: sseState.hasToolCall ? 'tool_use' : 'stop' }))\n }\n\n return events\n })\n\nexport const streamAnthropicClaudeResponse = (\n response: HttpClientResponse.HttpClientResponse\n): Stream.Stream<LLMEvent, LLMError> =>\n Stream.unwrap(\n Ref.make(initialBodyState).pipe(\n Effect.map(bodyStateRef => {\n const emitData = makeAnthropicStreamEmitter()\n const chunks = response.stream.pipe(\n Stream.mapError(\n toHttpClientLlmError('Could not read Anthropic Claude stream', true, 'stream')\n ),\n Stream.decodeText,\n Stream.mapEffect(chunk =>\n Effect.gen(function* () {\n const state = yield* Ref.get(bodyStateRef)\n const step = yield* processBodyChunk(emitData, state, chunk)\n yield* Ref.set(bodyStateRef, step.bodyState)\n return step.events\n })\n ),\n Stream.flatMap(events => Stream.fromIterable(events))\n )\n const finalEvents = Stream.fromEffect(\n Ref.get(bodyStateRef).pipe(Effect.flatMap(state => finalizeBodyState(emitData, state)))\n ).pipe(Stream.flatMap(events => Stream.fromIterable(events)))\n\n return chunks.pipe(Stream.concat(finalEvents))\n })\n )\n )\n\nconst sendAnthropicClaudeRequest = (\n config: AnthropicClaudeProviderConfig,\n request: LLMRequest,\n client: HttpClient.HttpClient,\n sessionId: string\n): Effect.Effect<HttpClientResponse.HttpClientResponse, LLMError> =>\n Effect.gen(function* () {\n const body = yield* toAnthropicClaudeRequestBody(request, { ...config, stream: true })\n // Replayed transcripts can carry lone surrogates; harden the lowered\n // body so one bad historical string cannot poison every model call.\n const serializedBody = yield* encodeJsonString(\n replaceLoneSurrogatesDeep(body),\n 'Could not serialize Anthropic Claude request'\n )\n const httpRequest = HttpClientRequest.post(\n config.messagesUrl ?? anthropicClaudeMessagesUrl\n ).pipe(\n HttpClientRequest.setHeaders({\n accept: 'text/event-stream',\n ...anthropicClaudeAuthorizationHeaders(config.token),\n 'content-type': 'application/json',\n ...makeAnthropicClaudeCompatibilityHeaders({ model: request.model, sessionId }),\n ...config.extraHeaders\n }),\n HttpClientRequest.bodyText(serializedBody, 'application/json')\n )\n const response = yield* client\n .execute(httpRequest)\n .pipe(Effect.mapError(toHttpClientLlmError('Anthropic Claude request failed', true)))\n\n if (response.status < 200 || response.status >= 300) {\n const errorText = yield* response.text.pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'provider_error',\n message: `Could not read Anthropic Claude error body: ${error.message}`,\n retryable: false\n })\n )\n )\n\n const provider = classifyProviderFailure({\n provider: anthropicClaudeProvider,\n status: response.status,\n headers: response.headers,\n body: errorText\n })\n\n return yield* Effect.fail(\n new LLMError({\n cause: providerFailureCause(provider.kind),\n message: `Anthropic Claude returned ${response.status}`,\n retryable: providerFailureRetryable(provider.kind),\n provider\n })\n )\n }\n\n return response\n }).pipe(Effect.withSpan('AnthropicClaudeProvider.stream'))\n\nexport const makeAnthropicClaudeProviderLayer = (config: AnthropicClaudeProviderConfig) =>\n Layer.effect(\n LLMProvider,\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const sessionId = makeAnthropicClaudeRequestId()\n\n return LLMProvider.of({\n stream: request =>\n Stream.fromEffect(sendAnthropicClaudeRequest(config, request, client, sessionId)).pipe(\n Stream.flatMap(streamAnthropicClaudeResponse)\n )\n })\n })\n )\n"],"mappings":"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"}
1
+ {"version":3,"file":"claude-provider.mjs","names":["LLMTextDelta","LLMReasoningDelta"],"sources":["../../../src/providers/anthropic/claude-provider.ts"],"sourcesContent":["import { Effect, Layer, Option, Ref, Result, Stream } from 'effect'\nimport {\n HttpClient,\n HttpClientRequest,\n type HttpClientError,\n type HttpClientResponse\n} from 'effect/unstable/http'\nimport * as Schema from 'effect/Schema'\nimport {\n AgentInputUsage,\n AgentOutputUsage,\n AgentUsage,\n ToolCall,\n attachmentSourceText,\n assistantContent,\n assistantHostToolCalls,\n isTextDocumentMimeType,\n messageContextText,\n replaceLoneSurrogatesDeep,\n prependMessageContextToContent,\n type AgentMessage,\n type Content,\n type ContentPart,\n type ProviderFailureKind,\n type ToolDef\n} from '@yolk-sdk/agent/protocol'\nimport {\n LLMError,\n LLMDone,\n LLMProvider,\n LLMReasoningDelta,\n LLMTextDelta,\n LLMToolCall,\n LLMUsage,\n type LLMEvent,\n type LLMRequest\n} from '@yolk-sdk/agent/loop'\nimport {\n anthropicClaudeAuthorizationHeaders,\n anthropicClaudeCodeEntrypoint,\n anthropicClaudeCodeVersion,\n anthropicClaudeOAuthUserAgent\n} from './claude.ts'\nimport type { OAuthAccessToken } from '@yolk-sdk/agent/oauth'\nimport {\n classifyProviderFailure,\n providerErrorInfo,\n providerFailureCause,\n providerFailureRetryable\n} from '../provider-error.ts'\nimport { validateProviderTranscript } from '../transcript.ts'\n\nexport type AnthropicClaudeProviderConfig = {\n readonly token: OAuthAccessToken\n readonly messagesUrl?: string\n readonly maxTokens?: number\n readonly extraHeaders?: Readonly<Record<string, string>>\n}\n\ntype AnthropicTextBlock = {\n readonly type: 'text'\n readonly text: string\n}\n\ntype AnthropicSystemBlock = AnthropicTextBlock\n\ntype AnthropicImageBlock = {\n readonly type: 'image'\n readonly source:\n | {\n readonly type: 'base64'\n readonly media_type: string\n readonly data: string\n }\n | {\n readonly type: 'url'\n readonly url: string\n }\n}\n\ntype AnthropicDocumentBlock = {\n readonly type: 'document'\n readonly source:\n | {\n readonly type: 'base64'\n readonly media_type: 'application/pdf'\n readonly data: string\n }\n | {\n readonly type: 'url'\n readonly url: string\n }\n readonly title?: string\n}\n\ntype AnthropicToolUseBlock = {\n readonly type: 'tool_use'\n readonly id: string\n readonly name: string\n readonly input: unknown\n}\n\ntype AnthropicToolResultContentBlock =\n | AnthropicTextBlock\n | AnthropicImageBlock\n | AnthropicDocumentBlock\n\ntype AnthropicToolResultBlock = {\n readonly type: 'tool_result'\n readonly tool_use_id: string\n readonly content: string | ReadonlyArray<AnthropicToolResultContentBlock>\n readonly is_error?: boolean\n}\n\ntype AnthropicUserBlock =\n | AnthropicTextBlock\n | AnthropicImageBlock\n | AnthropicDocumentBlock\n | AnthropicToolResultBlock\ntype AnthropicAssistantBlock = AnthropicTextBlock | AnthropicToolUseBlock\n\ntype AnthropicMessage =\n | { readonly role: 'user'; readonly content: string | ReadonlyArray<AnthropicUserBlock> }\n | { readonly role: 'assistant'; readonly content: ReadonlyArray<AnthropicAssistantBlock> }\n\ntype JsonObject = Readonly<Record<string, unknown>>\ntype TopLevelJsonSchemaCombinatorKey = 'anyOf' | 'oneOf' | 'allOf'\ntype TopLevelJsonSchemaCombinator = {\n readonly key: TopLevelJsonSchemaCombinatorKey\n readonly items: ReadonlyArray<unknown>\n}\n\ntype AnthropicTool = {\n readonly name: string\n readonly description: string\n readonly input_schema: unknown\n}\n\ntype AnthropicRequestBody = {\n readonly model: string\n readonly system: ReadonlyArray<AnthropicSystemBlock>\n readonly messages: ReadonlyArray<AnthropicMessage>\n readonly max_tokens: number\n readonly stream?: true\n readonly tools?: ReadonlyArray<AnthropicTool>\n}\n\ntype AnthropicToolBlockState = {\n readonly id: string\n readonly name: string\n readonly partialJson: string\n}\n\nconst anthropicClaudeSystemIdentity = \"You are Claude Code, Anthropic's official CLI for Claude.\"\nconst anthropicClaudeBillingPrefix = 'x-anthropic-billing-header:'\nconst anthropicClaudeToolPrefix = 'mcp_'\nconst anthropicClaudeVersion = '2023-06-01'\nconst anthropicClaudeCchSalt = '59cf53e54c78'\nconst anthropicClaudeCchPositions: ReadonlyArray<number> = [4, 7, 20]\nconst anthropicClaudeEffortBeta = 'effort-2025-11-24'\nconst anthropicClaudeInterleavedThinkingBeta = 'interleaved-thinking-2025-05-14'\nconst anthropicClaudeRequiredBetas: ReadonlyArray<string> = [\n 'claude-code-20250219',\n 'oauth-2025-04-20',\n anthropicClaudeInterleavedThinkingBeta,\n 'prompt-caching-scope-2026-01-05',\n 'context-management-2025-06-27',\n 'advisor-tool-2026-03-01'\n]\nconst anthropicClaudeSystemTextReplacements: ReadonlyArray<{\n readonly match: string\n readonly replacement: string\n}> = [\n {\n match: 'if OpenCode honestly',\n replacement: 'if the assistant honestly'\n },\n {\n match: 'Here is some useful information about the environment you are running in:',\n replacement: 'Environment context you are running in:'\n }\n]\nconst anthropicClaudeStainlessPackageVersion = '0.81.0'\n\n// Claude subscription OAuth is fingerprinted against Claude Code tool names.\nconst prefixClaudeToolName = (name: string) =>\n `${anthropicClaudeToolPrefix}${name.charAt(0).toUpperCase()}${name.slice(1)}`\n\nconst unprefixClaudeToolName = (name: string) => {\n if (!name.startsWith(anthropicClaudeToolPrefix)) {\n return name\n }\n\n const unprefixed = name.slice(anthropicClaudeToolPrefix.length)\n\n if (unprefixed === 'StructuredOutput') {\n return unprefixed\n }\n\n return `${unprefixed.charAt(0).toLowerCase()}${unprefixed.slice(1)}`\n}\n\nconst anthropicClaudeMessagesUrl = 'https://api.anthropic.com/v1/messages?beta=true'\nconst anthropicClaudeMaxTokens = 8192\nconst anthropicClaudeIdentitySystemBlock: AnthropicSystemBlock = {\n type: 'text',\n text: anthropicClaudeSystemIdentity\n}\n\nconst randomHex = (byteLength: number) => {\n const crypto = globalThis.crypto\n const bytes = new Uint8Array(byteLength)\n\n if (crypto !== undefined && typeof crypto.getRandomValues === 'function') {\n crypto.getRandomValues(bytes)\n }\n\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('')\n}\n\nconst makeAnthropicClaudeRequestId = () => {\n const crypto = globalThis.crypto\n\n if (crypto !== undefined && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID()\n }\n\n return randomHex(16)\n}\n\nconst sha256Hex = (value: string): Effect.Effect<string, LLMError> => {\n const crypto = globalThis.crypto\n\n if (crypto === undefined || crypto.subtle === undefined) {\n return Effect.fail(\n new LLMError({\n cause: 'provider_error',\n message: 'Web Crypto SHA-256 is required for Anthropic Claude OAuth billing headers',\n retryable: false\n })\n )\n }\n\n return Effect.tryPromise({\n try: () =>\n crypto.subtle\n .digest('SHA-256', new TextEncoder().encode(value))\n .then(buffer =>\n Array.from(new Uint8Array(buffer), byte => byte.toString(16).padStart(2, '0')).join('')\n ),\n catch: error =>\n new LLMError({\n cause: 'provider_error',\n message: `Could not compute Anthropic Claude OAuth billing header: ${unknownToMessage(error)}`,\n retryable: false\n })\n })\n}\n\nconst computeAnthropicClaudeCch = (messageText: string) =>\n sha256Hex(messageText).pipe(Effect.map(hash => hash.slice(0, 5)))\n\nconst computeAnthropicClaudeVersionSuffix = (messageText: string) => {\n const chars = anthropicClaudeCchPositions.map(index => messageText[index] ?? '0').join('')\n\n return sha256Hex(`${anthropicClaudeCchSalt}${chars}${anthropicClaudeCodeVersion}`).pipe(\n Effect.map(hash => hash.slice(0, 3))\n )\n}\n\nconst firstUserMessageText = (messages: ReadonlyArray<AnthropicMessage>) => {\n for (const message of messages) {\n if (message.role !== 'user') {\n continue\n }\n\n if (typeof message.content === 'string') {\n return message.content\n }\n\n for (const block of message.content) {\n if (block.type === 'text') {\n return block.text\n }\n }\n }\n\n return ''\n}\n\nconst makeAnthropicClaudeBillingSystemBlock = (\n messages: ReadonlyArray<AnthropicMessage>\n): Effect.Effect<AnthropicSystemBlock, LLMError> => {\n const text = firstUserMessageText(messages)\n\n return Effect.all({\n cch: computeAnthropicClaudeCch(text),\n suffix: computeAnthropicClaudeVersionSuffix(text)\n }).pipe(\n Effect.map(\n ({ cch, suffix }): AnthropicSystemBlock => ({\n type: 'text',\n text:\n `${anthropicClaudeBillingPrefix} ` +\n `cc_version=${anthropicClaudeCodeVersion}.${suffix}; ` +\n `cc_entrypoint=${anthropicClaudeCodeEntrypoint}; ` +\n `cch=${cch};`\n })\n )\n )\n}\n\nconst sanitizeAnthropicClaudeSystemText = (text: string) => {\n let result = text\n\n for (const rule of anthropicClaudeSystemTextReplacements) {\n result = result.split(rule.match).join(rule.replacement)\n }\n\n return result\n}\n\nconst anthropicClaudeBetaHeader = (model: string) => {\n const lowerModel = model.toLowerCase()\n const baseBetas = lowerModel.includes('haiku')\n ? anthropicClaudeRequiredBetas.filter(beta => beta !== anthropicClaudeInterleavedThinkingBeta)\n : anthropicClaudeRequiredBetas\n\n if (\n !lowerModel.includes('haiku') &&\n (lowerModel.includes('4-6') || lowerModel.includes('4-7')) &&\n !baseBetas.includes(anthropicClaudeEffortBeta)\n ) {\n return [...baseBetas, anthropicClaudeEffortBeta].join(',')\n }\n\n return baseBetas.join(',')\n}\n\nconst makeAnthropicClaudeCompatibilityHeaders = (input: {\n readonly model: string\n readonly sessionId: string\n}) => ({\n 'anthropic-beta': anthropicClaudeBetaHeader(input.model),\n 'anthropic-dangerous-direct-browser-access': 'true',\n 'anthropic-version': anthropicClaudeVersion,\n 'user-agent': anthropicClaudeOAuthUserAgent,\n 'x-app': 'cli',\n 'x-client-request-id': makeAnthropicClaudeRequestId(),\n 'X-Claude-Code-Session-Id': input.sessionId,\n 'x-stainless-arch': 'unknown',\n 'x-stainless-lang': 'js',\n 'x-stainless-os': 'unknown',\n 'x-stainless-package-version': anthropicClaudeStainlessPackageVersion,\n 'x-stainless-retry-count': '0',\n 'x-stainless-runtime': 'node',\n 'x-stainless-runtime-version': 'unknown',\n 'x-stainless-timeout': '600'\n})\n\n// Keep app instructions out of `system[]`; Anthropic can reject/limit otherwise.\nconst prependSystemPromptToFirstUserMessage = (\n messages: ReadonlyArray<AnthropicMessage>,\n systemPrompt: string\n): ReadonlyArray<AnthropicMessage> => {\n const sanitizedSystemPrompt = sanitizeAnthropicClaudeSystemText(systemPrompt).trim()\n\n if (sanitizedSystemPrompt.length === 0) {\n return messages\n }\n\n let relocated = false\n\n return messages.map(message => {\n if (relocated || message.role !== 'user') {\n return message\n }\n\n relocated = true\n\n if (typeof message.content === 'string') {\n return { ...message, content: `${sanitizedSystemPrompt}\\n\\n${message.content}` }\n }\n\n return {\n ...message,\n content: [{ type: 'text', text: sanitizedSystemPrompt }, ...message.content]\n }\n })\n}\n\nclass AnthropicTextResponseBlock extends Schema.Class<AnthropicTextResponseBlock>(\n 'AnthropicTextResponseBlock'\n)({\n type: Schema.Literal('text'),\n text: Schema.String\n}) {}\n\nclass AnthropicThinkingResponseBlock extends Schema.Class<AnthropicThinkingResponseBlock>(\n 'AnthropicThinkingResponseBlock'\n)({\n type: Schema.Literal('thinking'),\n thinking: Schema.String\n}) {}\n\nclass AnthropicToolUseResponseBlock extends Schema.Class<AnthropicToolUseResponseBlock>(\n 'AnthropicToolUseResponseBlock'\n)({\n type: Schema.Literal('tool_use'),\n id: Schema.String,\n name: Schema.String,\n input: Schema.Unknown\n}) {}\n\nconst AnthropicContentResponseBlock = Schema.Union([\n AnthropicTextResponseBlock,\n AnthropicThinkingResponseBlock,\n AnthropicToolUseResponseBlock\n])\n\nclass AnthropicUsageResponse extends Schema.Class<AnthropicUsageResponse>('AnthropicUsageResponse')(\n {\n input_tokens: Schema.Number,\n output_tokens: Schema.Number,\n cache_read_input_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n cache_creation_input_tokens: Schema.optional(Schema.NullOr(Schema.Number))\n }\n) {}\n\nclass AnthropicStreamUsageResponse extends Schema.Class<AnthropicStreamUsageResponse>(\n 'AnthropicStreamUsageResponse'\n)({\n input_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n output_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n cache_read_input_tokens: Schema.optional(Schema.NullOr(Schema.Number)),\n cache_creation_input_tokens: Schema.optional(Schema.NullOr(Schema.Number))\n}) {}\n\nclass AnthropicMessageResponse extends Schema.Class<AnthropicMessageResponse>(\n 'AnthropicMessageResponse'\n)({\n content: Schema.Array(AnthropicContentResponseBlock),\n stop_reason: Schema.NullOr(Schema.String),\n usage: Schema.optional(AnthropicUsageResponse)\n}) {}\n\nconst unknownToMessage = (error: unknown) =>\n error instanceof Error ? error.message : String(error)\n\nconst encodeJsonString = (value: unknown, message: string) =>\n Schema.encodeUnknownEffect(Schema.UnknownFromJsonString)(value).pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'provider_error',\n message: `${message}: ${unknownToMessage(error)}`,\n retryable: false\n })\n )\n )\n\nconst unsupportedContentError = (contentType: string) =>\n new LLMError({\n cause: 'provider_error',\n message: `${contentType} content is not supported by the Anthropic Claude provider yet`,\n retryable: false\n })\n\nconst imageToAnthropicBlock = (\n part: Extract<ContentPart, { readonly _tag: 'Image' }>\n): Effect.Effect<AnthropicImageBlock, LLMError> => {\n switch (part.source._tag) {\n case 'InlineBase64':\n return Effect.succeed({\n type: 'image',\n source: {\n type: 'base64',\n media_type: part.mimeType,\n data: part.source.data\n }\n })\n case 'Url':\n return Effect.succeed({\n type: 'image',\n source: {\n type: 'url',\n url: part.source.url\n }\n })\n case 'Ref':\n return Effect.fail(unsupportedContentError('Unresolved image source'))\n }\n}\n\nconst pdfDocumentToAnthropicBlock = (\n part: Extract<ContentPart, { readonly _tag: 'Document' }>\n): Effect.Effect<AnthropicDocumentBlock, LLMError> => {\n switch (part.source._tag) {\n case 'InlineBase64':\n return Effect.succeed({\n type: 'document',\n source: {\n type: 'base64',\n media_type: 'application/pdf',\n data: part.source.data\n },\n title: part.title ?? part.filename\n })\n case 'Url':\n return Effect.succeed({\n type: 'document',\n source: {\n type: 'url',\n url: part.source.url\n },\n title: part.title ?? part.filename\n })\n case 'Ref':\n return Effect.fail(unsupportedContentError('Unresolved document source'))\n }\n}\n\nconst textDocumentToAnthropicBlock = (part: Extract<ContentPart, { readonly _tag: 'Document' }>) =>\n attachmentSourceText(part.source).pipe(\n Effect.mapError(() => unsupportedContentError('Invalid document text')),\n Effect.flatMap(\n Option.match({\n onNone: () => Effect.fail(unsupportedContentError('Unresolved document source')),\n onSome: text => {\n const block: AnthropicTextBlock = {\n type: 'text',\n text: `Document: ${part.title ?? part.filename}\\n\\n${text}`\n }\n\n return Effect.succeed(block)\n }\n })\n )\n )\n\nconst contentPartToAnthropicBlock = (\n part: ContentPart\n): Effect.Effect<AnthropicToolResultContentBlock, LLMError> => {\n switch (part._tag) {\n case 'Text':\n return Effect.succeed({ type: 'text', text: part.text })\n case 'Image':\n return imageToAnthropicBlock(part)\n case 'Document':\n return isTextDocumentMimeType(part.mimeType)\n ? textDocumentToAnthropicBlock(part)\n : part.mimeType === 'application/pdf'\n ? pdfDocumentToAnthropicBlock(part)\n : Effect.fail(unsupportedContentError(`Document ${part.mimeType}`))\n case 'Audio':\n return Effect.fail(unsupportedContentError('Audio'))\n }\n}\n\nconst contentToAnthropicContent = (\n content: Content\n): Effect.Effect<string | ReadonlyArray<AnthropicToolResultContentBlock>, LLMError> =>\n typeof content === 'string'\n ? Effect.succeed(content)\n : Effect.forEach(content, contentPartToAnthropicBlock)\n\nconst contentPartToText = (part: ContentPart, owner: string): Effect.Effect<string, LLMError> => {\n switch (part._tag) {\n case 'Text':\n return Effect.succeed(part.text)\n case 'Image':\n return Effect.fail(unsupportedContentError(`${owner} image`))\n case 'Document':\n return Effect.fail(unsupportedContentError(`${owner} document`))\n case 'Audio':\n return Effect.fail(unsupportedContentError(`${owner} audio`))\n }\n}\n\nconst contentToText = (content: Content, owner: string): Effect.Effect<string, LLMError> =>\n typeof content === 'string'\n ? Effect.succeed(content)\n : Effect.forEach(content, part => contentPartToText(part, owner)).pipe(\n Effect.map(textParts => textParts.join('\\n'))\n )\n\nconst toolCallToAnthropicBlock = (call: ToolCall): AnthropicToolUseBlock => ({\n type: 'tool_use',\n id: call.id,\n name: prefixClaudeToolName(call.name),\n input: call.params\n})\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst jsonObjectField = (value: JsonObject, key: string) =>\n Object.getOwnPropertyDescriptor(value, key)?.value\n\nconst topLevelJsonSchemaCombinatorKeys: ReadonlyArray<TopLevelJsonSchemaCombinatorKey> = [\n 'anyOf',\n 'oneOf',\n 'allOf'\n]\n\nconst isTopLevelJsonSchemaCombinatorKey = (key: string): key is TopLevelJsonSchemaCombinatorKey =>\n key === 'anyOf' || key === 'oneOf' || key === 'allOf'\n\nconst topLevelJsonSchemaCombinator = (\n schema: JsonObject\n): TopLevelJsonSchemaCombinator | undefined => {\n for (const key of topLevelJsonSchemaCombinatorKeys) {\n const value = jsonObjectField(schema, key)\n\n if (Array.isArray(value)) {\n return { key, items: value }\n }\n }\n\n return undefined\n}\n\nconst withoutTopLevelJsonSchemaCombinators = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(schema).filter(([key]) => !isTopLevelJsonSchemaCombinatorKey(key))\n )\n\nconst withoutJsonSchemaCombinatorsAndTupleHints = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(schema).filter(\n ([key]) => !isTopLevelJsonSchemaCombinatorKey(key) && key !== 'prefixItems'\n )\n )\n\nconst jsonSchemaProperties = (schema: JsonObject) => {\n const properties = jsonObjectField(schema, 'properties')\n\n return isJsonObject(properties) ? properties : {}\n}\n\nconst jsonSchemaDefinitions = (schema: JsonObject) => {\n const definitions = jsonObjectField(schema, '$defs')\n\n return isJsonObject(definitions) ? definitions : {}\n}\n\nconst jsonSchemaRequired = (schema: JsonObject) => {\n const required = jsonObjectField(schema, 'required')\n\n return Array.isArray(required) ? required.filter(item => typeof item === 'string') : []\n}\n\nconst jsonValueKey = (value: unknown) =>\n Result.try(() => JSON.stringify(value)).pipe(\n Result.match({\n onFailure: () => undefined,\n onSuccess: encoded => encoded\n })\n )\n\nconst uniqueUnknownArray = (items: ReadonlyArray<unknown>): ReadonlyArray<unknown> => {\n const seen = new Set<string>()\n const result: Array<unknown> = []\n\n for (const item of items) {\n const key = jsonValueKey(item)\n\n if (key === undefined || seen.has(key)) {\n continue\n }\n\n seen.add(key)\n result.push(item)\n }\n\n return result\n}\n\nconst mergeEnumPropertySchemas = (left: unknown, right: unknown): unknown | undefined => {\n if (!isJsonObject(left) || !isJsonObject(right)) {\n return undefined\n }\n\n const leftEnum = jsonObjectField(left, 'enum')\n const rightEnum = jsonObjectField(right, 'enum')\n\n if (!Array.isArray(leftEnum) || !Array.isArray(rightEnum)) {\n return undefined\n }\n\n const leftType = jsonObjectField(left, 'type')\n const rightType = jsonObjectField(right, 'type')\n\n if (leftType !== rightType) {\n return undefined\n }\n\n return { ...left, ...right, enum: uniqueUnknownArray([...leftEnum, ...rightEnum]) }\n}\n\nconst jsonSchemaAnyOfItems = (schema: unknown) => {\n if (!isJsonObject(schema)) {\n return [schema]\n }\n\n const anyOf = jsonObjectField(schema, 'anyOf')\n\n return Array.isArray(anyOf) ? anyOf : [schema]\n}\n\nconst mergePropertySchemas = (left: unknown, right: unknown): unknown => {\n const leftKey = jsonValueKey(left)\n\n if (leftKey !== undefined && leftKey === jsonValueKey(right)) {\n return left\n }\n\n const mergedEnum = mergeEnumPropertySchemas(left, right)\n\n if (mergedEnum !== undefined) {\n return mergedEnum\n }\n\n return {\n anyOf: uniqueUnknownArray([...jsonSchemaAnyOfItems(left), ...jsonSchemaAnyOfItems(right)])\n }\n}\n\nconst mergeJsonSchemaObjects = (objects: ReadonlyArray<JsonObject>): JsonObject => {\n const merged = new Map<string, unknown>()\n\n for (const object of objects) {\n for (const [key, value] of Object.entries(object)) {\n if (merged.has(key)) {\n merged.set(key, mergePropertySchemas(merged.get(key), value))\n } else {\n merged.set(key, value)\n }\n }\n }\n\n return Object.fromEntries(merged)\n}\n\nconst normalizeJsonSchemaObjectFields = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(withoutJsonSchemaCombinatorsAndTupleHints(schema)).map(([key, value]) => [\n key,\n normalizeAnthropicToolSchema(value)\n ])\n )\n\nconst jsonSchemaType = (schema: JsonObject) => {\n const type = jsonObjectField(schema, 'type')\n\n return typeof type === 'string' ? type : undefined\n}\n\nconst isNullJsonSchema = (schema: JsonObject) => jsonSchemaType(schema) === 'null'\n\nconst firstJsonObject = (items: ReadonlyArray<JsonObject>) => items[0]\n\nconst mergeCompatibleVariants = (\n variants: ReadonlyArray<JsonObject>\n): JsonObject | undefined => {\n const first = firstJsonObject(variants)\n if (first === undefined) return undefined\n\n let merged: unknown = first\n\n for (const variant of variants.slice(1)) {\n merged = mergePropertySchemas(merged, variant)\n }\n\n if (!isJsonObject(merged)) return undefined\n\n if (Array.isArray(jsonObjectField(merged, 'anyOf'))) return undefined\n\n\n return merged\n}\n\nconst samePrimitiveTypeVariant = (variants: ReadonlyArray<JsonObject>): JsonObject | undefined => {\n const first = firstJsonObject(variants)\n const type = first === undefined ? undefined : jsonSchemaType(first)\n\n if (type === undefined || type === 'object' || type === 'array' || type === 'null') {\n return undefined\n }\n\n return variants.every(variant => jsonSchemaType(variant) === type) ? first : undefined\n}\n\nconst objectVariant = (variants: ReadonlyArray<JsonObject>): JsonObject | undefined => {\n if (\n variants.length === 0 ||\n variants.some(variant => {\n const type = jsonSchemaType(variant)\n\n return type !== undefined && type !== 'object'\n })\n ) {\n return undefined\n }\n\n return {\n type: 'object',\n properties: mergeJsonSchemaObjects(variants.map(jsonSchemaProperties)),\n required: mergeJsonSchemaRequired('oneOf', variants),\n $defs: mergeJsonSchemaObjects(variants.map(jsonSchemaDefinitions)),\n additionalProperties: mergeAdditionalProperties(variants) ?? false\n }\n}\n\nconst normalizeJsonSchemaCombinator = (\n schema: JsonObject,\n combinator: TopLevelJsonSchemaCombinator\n): JsonObject => {\n const base = normalizeJsonSchemaObjectFields(schema)\n const variants = combinator.items\n .map(normalizeAnthropicToolSchema)\n .filter(isJsonObject)\n .filter(variant => !isNullJsonSchema(variant))\n const first = firstJsonObject(variants)\n\n if (first === undefined) return base\n\n if (combinator.key === 'allOf') {\n return mergeJsonSchemaObjects([base, ...variants])\n }\n\n const merged =\n mergeCompatibleVariants(variants) ?? samePrimitiveTypeVariant(variants) ?? objectVariant(variants)\n\n return mergeJsonSchemaObjects([base, merged ?? first])\n}\n\nfunction normalizeAnthropicToolSchema(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(normalizeAnthropicToolSchema)\n if (!isJsonObject(value)) return value\n\n const combinator = topLevelJsonSchemaCombinator(value)\n if (combinator !== undefined) return normalizeJsonSchemaCombinator(value, combinator)\n\n return normalizeJsonSchemaObjectFields(value)\n}\n\nconst mergeJsonSchemaRequired = (\n combinatorKey: TopLevelJsonSchemaCombinatorKey,\n objects: ReadonlyArray<JsonObject>\n): ReadonlyArray<string> => {\n const requiredSets = objects.map(jsonSchemaRequired)\n\n if (requiredSets.length === 0) {\n return []\n }\n\n if (combinatorKey === 'allOf') {\n return Array.from(new Set(requiredSets.flat()))\n }\n\n const first = requiredSets[0] ?? []\n\n return first.filter(item => requiredSets.every(required => required.includes(item)))\n}\n\nconst mergeAdditionalProperties = (objects: ReadonlyArray<JsonObject>) => {\n const values = objects.map(object => jsonObjectField(object, 'additionalProperties'))\n\n if (values.every(value => value === false)) {\n return false\n }\n\n if (values.every(value => value === true)) {\n return true\n }\n\n return undefined\n}\n\n// Anthropic rejects root combinators. This widens provider-facing guidance only;\n// tool execution still validates calls against the original registry schema.\nconst flattenTopLevelCombinatorToolSchema = (\n schema: JsonObject,\n combinator: TopLevelJsonSchemaCombinator\n): JsonObject => {\n const base = withoutTopLevelJsonSchemaCombinators(schema)\n const objectVariants = combinator.items.filter(isJsonObject)\n const additionalProperties = mergeAdditionalProperties(objectVariants)\n const flattened = {\n ...base,\n type: 'object',\n properties: mergeJsonSchemaObjects(objectVariants.map(jsonSchemaProperties)),\n required: mergeJsonSchemaRequired(combinator.key, objectVariants),\n $defs: mergeJsonSchemaObjects([\n jsonSchemaDefinitions(schema),\n ...objectVariants.map(jsonSchemaDefinitions)\n ])\n }\n\n if (additionalProperties === undefined) {\n return flattened\n }\n\n return { ...flattened, additionalProperties }\n}\n\nconst anthropicToolInputSchema = (schema: unknown): unknown => {\n if (!isJsonObject(schema)) {\n return {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false\n }\n }\n\n const combinator = topLevelJsonSchemaCombinator(schema)\n\n if (combinator !== undefined) {\n return normalizeAnthropicToolSchema(flattenTopLevelCombinatorToolSchema(schema, combinator))\n }\n\n if (jsonObjectField(schema, 'type') !== undefined) {\n return normalizeAnthropicToolSchema(schema)\n }\n\n return normalizeAnthropicToolSchema({ ...schema, type: 'object' })\n}\n\nconst toAnthropicMessage = (message: AgentMessage): Effect.Effect<AnthropicMessage, LLMError> =>\n Effect.gen(function* () {\n switch (message._tag) {\n case 'User':\n return {\n role: 'user',\n content: yield* contentToAnthropicContent(\n prependMessageContextToContent(message.content, messageContextText(message))\n )\n }\n case 'Assistant': {\n const text = yield* contentToText(\n prependMessageContextToContent(assistantContent(message), messageContextText(message)),\n 'Assistant'\n )\n const textBlocks: ReadonlyArray<AnthropicTextBlock> =\n text.length === 0 ? [] : [{ type: 'text', text }]\n const toolBlocks = assistantHostToolCalls(message).map(toolCallToAnthropicBlock)\n return { role: 'assistant', content: [...textBlocks, ...toolBlocks] }\n }\n case 'ToolResult':\n return {\n role: 'user',\n content: [\n {\n type: 'tool_result',\n tool_use_id: message.toolCallId,\n content: yield* contentToAnthropicContent(\n prependMessageContextToContent(message.content, messageContextText(message))\n ),\n is_error: message.isError\n }\n ]\n }\n }\n })\n\nconst toAnthropicTool = (tool: ToolDef): AnthropicTool => ({\n name: prefixClaudeToolName(tool.name),\n description: tool.description,\n input_schema: anthropicToolInputSchema(tool.parameters)\n})\n\nexport const toAnthropicClaudeRequestBody = (\n request: LLMRequest,\n config?: { readonly maxTokens?: number; readonly stream?: boolean }\n): Effect.Effect<AnthropicRequestBody, LLMError> =>\n Effect.gen(function* () {\n yield* validateProviderTranscript(request.messages)\n const rawMessages = yield* Effect.forEach(request.messages, toAnthropicMessage)\n const billingSystemBlock = yield* makeAnthropicClaudeBillingSystemBlock(rawMessages)\n const messages = prependSystemPromptToFirstUserMessage(rawMessages, request.systemPrompt)\n const baseBody = {\n model: request.model,\n system: [billingSystemBlock, anthropicClaudeIdentitySystemBlock],\n messages,\n max_tokens: config?.maxTokens ?? anthropicClaudeMaxTokens\n }\n const body: AnthropicRequestBody =\n config?.stream === true ? { ...baseBody, stream: true } : baseBody\n\n if (request.tools.length === 0) {\n return body\n }\n\n return {\n ...body,\n tools: request.tools.map(toAnthropicTool)\n }\n })\n\nconst anthropicClaudeProvider = 'anthropic_claude'\n\nconst toHttpClientLlmError =\n (message: string, retryable: boolean, kind: ProviderFailureKind = 'network') =>\n (error: HttpClientError.HttpClientError) =>\n new LLMError({\n cause: 'provider_error',\n message: `${message}: ${error.message}`,\n retryable,\n provider: providerErrorInfo({\n provider: anthropicClaudeProvider,\n kind: retryable ? kind : 'unknown'\n })\n })\n\nconst decodeJsonString = (raw: string, message: string) =>\n Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(raw).pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'invalid_response',\n message: `${message}: ${unknownToMessage(error)}`,\n retryable: false\n })\n )\n )\n\nconst isRecord = (value: unknown): value is Readonly<Record<string, unknown>> =>\n typeof value === 'object' && value !== null\n\nconst field = (value: unknown, key: string) =>\n isRecord(value) ? Object.getOwnPropertyDescriptor(value, key)?.value : undefined\n\nconst stringField = (value: unknown, key: string) => {\n const raw = field(value, key)\n return typeof raw === 'string' ? raw : undefined\n}\n\nconst providerSignalError = (input: {\n readonly message: string\n readonly providerCode?: string\n readonly fallbackKind?: ProviderFailureKind\n}) => {\n const provider = classifyProviderFailure({\n provider: anthropicClaudeProvider,\n message: input.message,\n ...(input.providerCode === undefined ? {} : { providerCode: input.providerCode }),\n ...(input.fallbackKind === undefined ? {} : { fallbackKind: input.fallbackKind })\n })\n\n return new LLMError({\n cause: providerFailureCause(provider.kind),\n message: input.message,\n retryable: providerFailureRetryable(provider.kind),\n provider\n })\n}\n\nconst numberField = (value: unknown, key: string) => {\n const raw = field(value, key)\n return typeof raw === 'number' ? raw : undefined\n}\n\nconst sseDataFromBlock = (block: string) =>\n block\n .split('\\n')\n .filter(line => line.startsWith('data:'))\n .map(line => line.slice('data:'.length).trimStart())\n .join('\\n')\n .trim()\n\nconst dataFromSseBlock = (block: string) => {\n const data = sseDataFromBlock(block)\n\n if (data.length === 0 || data === '[DONE]') {\n return undefined\n }\n\n return data\n}\n\nconst normalizeNewlines = (text: string) => text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n')\n\nconst splitCompleteSseBlocks = (buffer: string) => {\n const blocks = buffer.split('\\n\\n')\n const tail = blocks.at(-1) ?? ''\n\n return { completeBlocks: blocks.slice(0, -1), tail }\n}\n\nconst parseToolParams = (raw: string) => {\n const trimmed = raw.trim()\n\n if (trimmed.length === 0) return Effect.succeed({})\n\n return decodeJsonString(trimmed, 'Invalid Anthropic Claude tool arguments JSON')\n}\n\ntype AnthropicUsageComponents = {\n readonly inputTokens: number\n readonly outputTokens: number\n readonly cacheReadInputTokens: number\n readonly cacheCreationInputTokens: number\n}\n\nconst zeroAnthropicUsageComponents: AnthropicUsageComponents = {\n inputTokens: 0,\n outputTokens: 0,\n cacheReadInputTokens: 0,\n cacheCreationInputTokens: 0\n}\n\nconst positiveOrUndefined = (value: number) => (value > 0 ? value : undefined)\n\nconst toAgentUsageFromComponents = (usage: AnthropicUsageComponents) =>\n AgentUsage.make({\n input: AgentInputUsage.make({\n total: usage.inputTokens + usage.cacheReadInputTokens + usage.cacheCreationInputTokens,\n uncached: positiveOrUndefined(usage.inputTokens),\n cacheRead: positiveOrUndefined(usage.cacheReadInputTokens),\n cacheWrite: positiveOrUndefined(usage.cacheCreationInputTokens)\n }),\n output: AgentOutputUsage.make({\n total: usage.outputTokens,\n text: positiveOrUndefined(usage.outputTokens)\n })\n })\n\nconst toAgentUsage = (usage: AnthropicUsageResponse) =>\n toAgentUsageFromComponents({\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheReadInputTokens: usage.cache_read_input_tokens ?? 0,\n cacheCreationInputTokens: usage.cache_creation_input_tokens ?? 0\n })\n\nconst nextAnthropicUsageSnapshot = (\n previous: AnthropicUsageComponents,\n usage: AnthropicStreamUsageResponse\n): AnthropicUsageComponents => ({\n inputTokens: usage.input_tokens ?? previous.inputTokens,\n outputTokens: usage.output_tokens ?? previous.outputTokens,\n cacheReadInputTokens: usage.cache_read_input_tokens ?? previous.cacheReadInputTokens,\n cacheCreationInputTokens: usage.cache_creation_input_tokens ?? previous.cacheCreationInputTokens\n})\n\nconst usageComponentDelta = (previous: number, next: number) => Math.max(0, next - previous)\n\nconst anthropicUsageDelta = (\n previous: AnthropicUsageComponents,\n next: AnthropicUsageComponents\n): AnthropicUsageComponents => ({\n inputTokens: usageComponentDelta(previous.inputTokens, next.inputTokens),\n outputTokens: usageComponentDelta(previous.outputTokens, next.outputTokens),\n cacheReadInputTokens: usageComponentDelta(\n previous.cacheReadInputTokens,\n next.cacheReadInputTokens\n ),\n cacheCreationInputTokens: usageComponentDelta(\n previous.cacheCreationInputTokens,\n next.cacheCreationInputTokens\n )\n})\n\nconst hasAnthropicUsage = (usage: AnthropicUsageComponents) =>\n usage.inputTokens > 0 ||\n usage.outputTokens > 0 ||\n usage.cacheReadInputTokens > 0 ||\n usage.cacheCreationInputTokens > 0\n\ntype AnthropicStreamUsageStep = {\n readonly snapshot: AnthropicUsageComponents\n readonly events: ReadonlyArray<LLMEvent>\n}\n\nconst usageStepFromUnknown = (\n usage: unknown,\n previous: AnthropicUsageComponents\n): AnthropicStreamUsageStep => {\n const parsed = Schema.decodeUnknownOption(AnthropicStreamUsageResponse)(usage)\n\n if (parsed._tag === 'None') {\n return { snapshot: previous, events: [] }\n }\n\n const value = parsed.value\n const snapshot = nextAnthropicUsageSnapshot(previous, value)\n const delta = anthropicUsageDelta(previous, snapshot)\n\n return {\n snapshot,\n events: hasAnthropicUsage(delta)\n ? [LLMUsage.make({ usage: toAgentUsageFromComponents(delta) })]\n : []\n }\n}\n\nconst toLlmEvents = (\n response: AnthropicMessageResponse\n): Effect.Effect<ReadonlyArray<LLMEvent>, LLMError> =>\n Effect.gen(function* () {\n const events = yield* Effect.forEach(response.content, block => {\n switch (block.type) {\n case 'text':\n return Effect.succeed<LLMEvent>(LLMTextDelta.make({ text: block.text }))\n case 'thinking':\n return Effect.succeed<LLMEvent>(LLMReasoningDelta.make({ text: block.thinking }))\n case 'tool_use':\n return Effect.succeed<LLMEvent>(\n LLMToolCall.make({\n call: ToolCall.make({\n id: block.id,\n name: unprefixClaudeToolName(block.name),\n params: block.input\n })\n })\n )\n }\n })\n const stopReason = response.stop_reason === 'tool_use' ? 'tool_use' : 'stop'\n const usageEvent =\n response.usage === undefined ? [] : [LLMUsage.make({ usage: toAgentUsage(response.usage) })]\n\n return [...events, LLMDone.make({ stopReason }), ...usageEvent]\n })\n\nconst decodeAnthropicMessageResponse = (json: unknown) =>\n Schema.decodeUnknownEffect(AnthropicMessageResponse)(json).pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'invalid_response',\n message: `Invalid Anthropic Claude response: ${unknownToMessage(error)}`,\n retryable: false\n })\n )\n )\n\nconst parseAnthropicJsonResponse = (\n raw: string\n): Effect.Effect<ReadonlyArray<LLMEvent>, LLMError> =>\n Effect.gen(function* () {\n const json = yield* decodeJsonString(raw, 'Could not parse Anthropic Claude response JSON')\n const parsed = yield* decodeAnthropicMessageResponse(json)\n\n return yield* toLlmEvents(parsed)\n })\n\ntype AnthropicBodyFormat = 'undecided' | 'sse' | 'json'\n\ntype AnthropicSseState = {\n readonly hasToolCall: boolean\n readonly hasDone: boolean\n readonly usage: AnthropicUsageComponents\n}\n\ntype AnthropicSseStep = {\n readonly state: AnthropicSseState\n readonly events: ReadonlyArray<LLMEvent>\n}\n\ntype AnthropicBodyState = {\n readonly format: AnthropicBodyFormat\n readonly buffer: string\n readonly sse: AnthropicSseState\n}\n\nconst initialSseState: AnthropicSseState = {\n hasToolCall: false,\n hasDone: false,\n usage: zeroAnthropicUsageComponents\n}\n\nconst initialBodyState: AnthropicBodyState = {\n format: 'undecided',\n buffer: '',\n sse: initialSseState\n}\n\nconst classifyAnthropicBody = (buffer: string): AnthropicBodyFormat => {\n const trimmed = buffer.trimStart()\n\n if (trimmed.length === 0) {\n return 'undecided'\n }\n\n if (trimmed.startsWith('event:') || trimmed.startsWith('data:')) {\n return 'sse'\n }\n\n if ('event:'.startsWith(trimmed) || 'data:'.startsWith(trimmed)) {\n return 'undecided'\n }\n\n return 'json'\n}\n\nconst invalidToolUseStartError = () =>\n new LLMError({\n cause: 'invalid_response',\n message: 'Invalid Anthropic Claude tool_use stream block',\n retryable: false\n })\n\nconst makeAnthropicStreamEmitter = () => {\n const toolBlocks = new Map<number, AnthropicToolBlockState>()\n\n return (state: AnthropicSseState, data: unknown): Effect.Effect<AnthropicSseStep, LLMError> => {\n const type = stringField(data, 'type')\n\n if (type === 'message_start') {\n const message = field(data, 'message')\n const step = usageStepFromUnknown(field(message, 'usage'), state.usage)\n\n return Effect.succeed({ state: { ...state, usage: step.snapshot }, events: step.events })\n }\n\n if (type === 'content_block_start') {\n const index = numberField(data, 'index')\n const block = field(data, 'content_block')\n\n if (index !== undefined && stringField(block, 'type') === 'tool_use') {\n const id = stringField(block, 'id')\n const name = stringField(block, 'name')\n\n if (id === undefined || name === undefined) {\n return Effect.fail(invalidToolUseStartError())\n }\n\n toolBlocks.set(index, {\n id,\n name: unprefixClaudeToolName(name),\n partialJson: ''\n })\n }\n\n return Effect.succeed({ state, events: [] })\n }\n\n if (type === 'content_block_delta') {\n const index = numberField(data, 'index')\n const delta = field(data, 'delta')\n const deltaType = stringField(delta, 'type')\n const text = stringField(delta, 'text')\n const thinking = stringField(delta, 'thinking')\n const partialJson = stringField(delta, 'partial_json')\n\n if (deltaType === 'text_delta' && text !== undefined) {\n return Effect.succeed({ state, events: [LLMTextDelta.make({ text })] })\n }\n\n if (deltaType === 'thinking_delta' && thinking !== undefined) {\n return Effect.succeed({ state, events: [LLMReasoningDelta.make({ text: thinking })] })\n }\n\n if (index !== undefined && deltaType === 'input_json_delta' && partialJson !== undefined) {\n const current = toolBlocks.get(index)\n if (current !== undefined) {\n toolBlocks.set(index, { ...current, partialJson: `${current.partialJson}${partialJson}` })\n }\n }\n\n return Effect.succeed({ state, events: [] })\n }\n\n if (type === 'content_block_stop') {\n const index = numberField(data, 'index')\n const toolBlock = index === undefined ? undefined : toolBlocks.get(index)\n\n if (toolBlock === undefined) return Effect.succeed({ state, events: [] })\n\n return parseToolParams(toolBlock.partialJson).pipe(\n Effect.map(params => {\n if (index !== undefined) toolBlocks.delete(index)\n\n return {\n state: { ...state, hasToolCall: true },\n events: [\n LLMToolCall.make({\n call: ToolCall.make({\n id: toolBlock.id,\n name: toolBlock.name,\n params\n })\n })\n ]\n }\n })\n )\n }\n\n if (type === 'message_delta') {\n const step = usageStepFromUnknown(field(data, 'usage'), state.usage)\n\n return Effect.succeed({ state: { ...state, usage: step.snapshot }, events: step.events })\n }\n\n if (type === 'message_stop') {\n return Effect.succeed({\n state: { ...state, hasDone: true },\n events: [LLMDone.make({ stopReason: state.hasToolCall ? 'tool_use' : 'stop' })]\n })\n }\n\n if (type === 'error') {\n const error = field(data, 'error')\n const providerCode = stringField(error, 'type') ?? stringField(error, 'code')\n\n return Effect.fail(\n providerSignalError({\n message: stringField(error, 'message') ?? 'Anthropic Claude stream error',\n ...(providerCode === undefined ? {} : { providerCode })\n })\n )\n }\n\n return Effect.succeed({ state, events: [] })\n }\n}\n\nconst processSseData = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicSseState,\n data: string\n): Effect.Effect<AnthropicSseStep, LLMError> =>\n decodeJsonString(data, 'Could not parse Anthropic Claude stream event JSON').pipe(\n Effect.flatMap(parsed => emitData(state, parsed))\n )\n\nconst processSseBlock = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicSseState,\n block: string\n): Effect.Effect<AnthropicSseStep, LLMError> => {\n const data = dataFromSseBlock(block)\n\n if (data === undefined) {\n return Effect.succeed({ state, events: [] })\n }\n\n return processSseData(emitData, state, data)\n}\n\nconst processSseBlocks = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicSseState,\n blocks: ReadonlyArray<string>\n): Effect.Effect<AnthropicSseStep, LLMError> =>\n Effect.gen(function* () {\n const events: Array<LLMEvent> = []\n let currentState = state\n\n for (const block of blocks) {\n const step = yield* processSseBlock(emitData, currentState, block)\n currentState = step.state\n events.push(...step.events)\n }\n\n return { state: currentState, events }\n })\n\nconst processBodyChunk = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicBodyState,\n chunk: string\n): Effect.Effect<AnthropicSseStep & { readonly bodyState: AnthropicBodyState }, LLMError> =>\n Effect.gen(function* () {\n const buffer = normalizeNewlines(`${state.buffer}${chunk}`)\n const format = state.format === 'undecided' ? classifyAnthropicBody(buffer) : state.format\n\n if (format !== 'sse') {\n return {\n state: state.sse,\n bodyState: { ...state, format, buffer },\n events: []\n }\n }\n\n const split = splitCompleteSseBlocks(buffer)\n const step = yield* processSseBlocks(emitData, state.sse, split.completeBlocks)\n\n return {\n state: step.state,\n bodyState: { format, buffer: split.tail, sse: step.state },\n events: step.events\n }\n })\n\nconst finalizeBodyState = (\n emitData: ReturnType<typeof makeAnthropicStreamEmitter>,\n state: AnthropicBodyState\n): Effect.Effect<ReadonlyArray<LLMEvent>, LLMError> =>\n Effect.gen(function* () {\n const buffer = normalizeNewlines(state.buffer)\n const format = state.format === 'undecided' ? classifyAnthropicBody(buffer) : state.format\n\n if (format === 'json') {\n return yield* parseAnthropicJsonResponse(buffer)\n }\n\n const events: Array<LLMEvent> = []\n let sseState = state.sse\n\n if (format === 'sse') {\n const split = splitCompleteSseBlocks(buffer)\n const step = yield* processSseBlocks(emitData, sseState, split.completeBlocks)\n sseState = step.state\n events.push(...step.events)\n\n if (split.tail.trim().length > 0) {\n const tailStep = yield* processSseBlock(emitData, sseState, split.tail)\n sseState = tailStep.state\n events.push(...tailStep.events)\n }\n }\n\n if (!sseState.hasDone) {\n events.push(LLMDone.make({ stopReason: sseState.hasToolCall ? 'tool_use' : 'stop' }))\n }\n\n return events\n })\n\nexport const streamAnthropicClaudeResponse = (\n response: HttpClientResponse.HttpClientResponse\n): Stream.Stream<LLMEvent, LLMError> =>\n Stream.unwrap(\n Ref.make(initialBodyState).pipe(\n Effect.map(bodyStateRef => {\n const emitData = makeAnthropicStreamEmitter()\n const chunks = response.stream.pipe(\n Stream.mapError(\n toHttpClientLlmError('Could not read Anthropic Claude stream', true, 'stream')\n ),\n Stream.decodeText,\n Stream.mapEffect(chunk =>\n Effect.gen(function* () {\n const state = yield* Ref.get(bodyStateRef)\n const step = yield* processBodyChunk(emitData, state, chunk)\n yield* Ref.set(bodyStateRef, step.bodyState)\n return step.events\n })\n ),\n Stream.flatMap(events => Stream.fromIterable(events))\n )\n const finalEvents = Stream.fromEffect(\n Ref.get(bodyStateRef).pipe(Effect.flatMap(state => finalizeBodyState(emitData, state)))\n ).pipe(Stream.flatMap(events => Stream.fromIterable(events)))\n\n return chunks.pipe(Stream.concat(finalEvents))\n })\n )\n )\n\nconst sendAnthropicClaudeRequest = (\n config: AnthropicClaudeProviderConfig,\n request: LLMRequest,\n client: HttpClient.HttpClient,\n sessionId: string\n): Effect.Effect<HttpClientResponse.HttpClientResponse, LLMError> =>\n Effect.gen(function* () {\n const body = yield* toAnthropicClaudeRequestBody(request, { ...config, stream: true })\n // Replayed transcripts can carry lone surrogates; harden the lowered\n // body so one bad historical string cannot poison every model call.\n const serializedBody = yield* encodeJsonString(\n replaceLoneSurrogatesDeep(body),\n 'Could not serialize Anthropic Claude request'\n )\n const httpRequest = HttpClientRequest.post(\n config.messagesUrl ?? anthropicClaudeMessagesUrl\n ).pipe(\n HttpClientRequest.setHeaders({\n accept: 'text/event-stream',\n ...anthropicClaudeAuthorizationHeaders(config.token),\n 'content-type': 'application/json',\n ...makeAnthropicClaudeCompatibilityHeaders({ model: request.model, sessionId }),\n ...config.extraHeaders\n }),\n HttpClientRequest.bodyText(serializedBody, 'application/json')\n )\n const response = yield* client\n .execute(httpRequest)\n .pipe(Effect.mapError(toHttpClientLlmError('Anthropic Claude request failed', true)))\n\n if (response.status < 200 || response.status >= 300) {\n const errorText = yield* response.text.pipe(\n Effect.mapError(\n error =>\n new LLMError({\n cause: 'provider_error',\n message: `Could not read Anthropic Claude error body: ${error.message}`,\n retryable: false\n })\n )\n )\n\n const provider = classifyProviderFailure({\n provider: anthropicClaudeProvider,\n status: response.status,\n headers: response.headers,\n body: errorText\n })\n\n return yield* Effect.fail(\n new LLMError({\n cause: providerFailureCause(provider.kind),\n message: `Anthropic Claude returned ${response.status}`,\n retryable: providerFailureRetryable(provider.kind),\n provider\n })\n )\n }\n\n return response\n }).pipe(Effect.withSpan('AnthropicClaudeProvider.stream'))\n\nexport const makeAnthropicClaudeProviderLayer = (config: AnthropicClaudeProviderConfig) =>\n Layer.effect(\n LLMProvider,\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const sessionId = makeAnthropicClaudeRequestId()\n\n return LLMProvider.of({\n stream: request =>\n Stream.fromEffect(sendAnthropicClaudeRequest(config, request, client, sessionId)).pipe(\n Stream.flatMap(streamAnthropicClaudeResponse)\n )\n })\n })\n )\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yolk-sdk/agent",
3
- "version": "0.1.0-canary.43",
3
+ "version": "0.1.0-canary.44",
4
4
  "description": "Protocol, loop, runtime, client, compaction, tools, React, providers, OAuth, skillset, and voice primitives for building Yolk agents.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -100,10 +100,15 @@ type AnthropicToolUseBlock = {
100
100
  readonly input: unknown
101
101
  }
102
102
 
103
+ type AnthropicToolResultContentBlock =
104
+ | AnthropicTextBlock
105
+ | AnthropicImageBlock
106
+ | AnthropicDocumentBlock
107
+
103
108
  type AnthropicToolResultBlock = {
104
109
  readonly type: 'tool_result'
105
110
  readonly tool_use_id: string
106
- readonly content: string
111
+ readonly content: string | ReadonlyArray<AnthropicToolResultContentBlock>
107
112
  readonly is_error?: boolean
108
113
  }
109
114
 
@@ -533,7 +538,9 @@ const textDocumentToAnthropicBlock = (part: Extract<ContentPart, { readonly _tag
533
538
  )
534
539
  )
535
540
 
536
- const contentPartToUserBlock = (part: ContentPart): Effect.Effect<AnthropicUserBlock, LLMError> => {
541
+ const contentPartToAnthropicBlock = (
542
+ part: ContentPart
543
+ ): Effect.Effect<AnthropicToolResultContentBlock, LLMError> => {
537
544
  switch (part._tag) {
538
545
  case 'Text':
539
546
  return Effect.succeed({ type: 'text', text: part.text })
@@ -550,12 +557,12 @@ const contentPartToUserBlock = (part: ContentPart): Effect.Effect<AnthropicUserB
550
557
  }
551
558
  }
552
559
 
553
- const contentToUserContent = (
560
+ const contentToAnthropicContent = (
554
561
  content: Content
555
- ): Effect.Effect<string | ReadonlyArray<AnthropicUserBlock>, LLMError> =>
562
+ ): Effect.Effect<string | ReadonlyArray<AnthropicToolResultContentBlock>, LLMError> =>
556
563
  typeof content === 'string'
557
564
  ? Effect.succeed(content)
558
- : Effect.forEach(content, contentPartToUserBlock)
565
+ : Effect.forEach(content, contentPartToAnthropicBlock)
559
566
 
560
567
  const contentPartToText = (part: ContentPart, owner: string): Effect.Effect<string, LLMError> => {
561
568
  switch (part._tag) {
@@ -927,7 +934,7 @@ const toAnthropicMessage = (message: AgentMessage): Effect.Effect<AnthropicMessa
927
934
  case 'User':
928
935
  return {
929
936
  role: 'user',
930
- content: yield* contentToUserContent(
937
+ content: yield* contentToAnthropicContent(
931
938
  prependMessageContextToContent(message.content, messageContextText(message))
932
939
  )
933
940
  }
@@ -948,9 +955,8 @@ const toAnthropicMessage = (message: AgentMessage): Effect.Effect<AnthropicMessa
948
955
  {
949
956
  type: 'tool_result',
950
957
  tool_use_id: message.toolCallId,
951
- content: yield* contentToText(
952
- prependMessageContextToContent(message.content, messageContextText(message)),
953
- 'Tool result'
958
+ content: yield* contentToAnthropicContent(
959
+ prependMessageContextToContent(message.content, messageContextText(message))
954
960
  ),
955
961
  is_error: message.isError
956
962
  }