@yolk-sdk/agent 0.1.0-canary.47 → 0.1.0-canary.49
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 +42 -7
- package/dist/providers/anthropic/claude-provider.d.mts +3 -3
- package/dist/providers/anthropic/claude-provider.d.mts.map +1 -1
- package/dist/providers/anthropic/claude-provider.mjs +2 -3
- package/dist/providers/anthropic/claude-provider.mjs.map +1 -1
- package/dist/providers/openai/codex-provider.d.mts +4 -1
- package/dist/providers/openai/codex-provider.d.mts.map +1 -1
- package/dist/providers/openai/codex-provider.mjs +3 -2
- package/dist/providers/openai/codex-provider.mjs.map +1 -1
- package/dist/providers/openai/provider.d.mts +3 -3
- package/dist/providers/openai/provider.d.mts.map +1 -1
- package/dist/providers/openai/provider.mjs +6 -3
- package/dist/providers/openai/provider.mjs.map +1 -1
- package/dist/providers/openai/speech.d.mts +3 -2
- package/dist/providers/openai/speech.d.mts.map +1 -1
- package/dist/providers/openai/speech.mjs +3 -2
- package/dist/providers/openai/speech.mjs.map +1 -1
- package/package.json +1 -1
- package/src/client/README.md +5 -0
- package/src/providers/anthropic/claude-provider.ts +4 -5
- package/src/providers/openai/codex-provider.ts +7 -3
- package/src/providers/openai/provider.ts +6 -5
- package/src/providers/openai/speech.ts +3 -2
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Canary APIs are unstable. Keep all `@yolk-sdk/*` packages on the same version.
|
|
|
17
17
|
## Subpaths
|
|
18
18
|
|
|
19
19
|
| Subpath | Purpose |
|
|
20
|
-
| ----------------------------------------------------- |
|
|
20
|
+
| ----------------------------------------------------- | -------------------------------------------------------------- |
|
|
21
21
|
| `@yolk-sdk/agent/protocol` | Wire messages, events, content, usage, tool schemas |
|
|
22
22
|
| `@yolk-sdk/agent/loop` | Stateless LLM/tool loop |
|
|
23
23
|
| `@yolk-sdk/agent/loop/testing` | Faux provider and tool executor test helpers |
|
|
@@ -107,6 +107,21 @@ const program = run({
|
|
|
107
107
|
// Provide LLM provider, loop config, context transformer, and tool executor layers in the host app.
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
## Provider configuration
|
|
111
|
+
|
|
112
|
+
Provider output limits are required and host-owned. Yolk does not infer model limits or apply hidden
|
|
113
|
+
fallbacks.
|
|
114
|
+
|
|
115
|
+
| Provider factory | Required output-limit field |
|
|
116
|
+
| ---------------------------------- | --------------------------- |
|
|
117
|
+
| `makeOpenAiProviderLayer` | `maxCompletionTokens` |
|
|
118
|
+
| `makeOpenAiCodexProviderLayer` | `maxOutputTokens` |
|
|
119
|
+
| `makeAnthropicClaudeProviderLayer` | `maxTokens` |
|
|
120
|
+
|
|
121
|
+
The public `toOpenAiRequestBody`, `toOpenAiCodexRequestBody`, and
|
|
122
|
+
`toAnthropicClaudeRequestBody` helpers require the same limit configuration. `OpenAiProviderLayer`
|
|
123
|
+
reads both `OPENAI_API_KEY` and integer `OPENAI_MAX_COMPLETION_TOKENS` through Effect Config.
|
|
124
|
+
|
|
110
125
|
## Provider failures and retries
|
|
111
126
|
|
|
112
127
|
Provider adapters classify safe failure metadata at the boundary. The loop owns bounded retry
|
|
@@ -121,6 +136,10 @@ policy and emits protocol-visible retry/error state:
|
|
|
121
136
|
- Client and React state keep `error: string | null` for compatibility and add typed `errorInfo` /
|
|
122
137
|
`retryInfo`.
|
|
123
138
|
- `buildAgentChatItems` can project active retry state as an `AgentChatItem` with `_tag: 'Retry'`.
|
|
139
|
+
- Anthropic prompt-too-long responses become non-retryable `context_overflow`; the host-owned
|
|
140
|
+
compaction wrapper may compact and retry once.
|
|
141
|
+
- Anthropic `max_tokens` completion fails as non-retryable `invalid_response` instead of reporting
|
|
142
|
+
a truncated turn as complete.
|
|
124
143
|
|
|
125
144
|
Raw provider response bodies stay out of protocol/UI. Hosts own durable persistence and display of
|
|
126
145
|
typed retry/error state.
|
|
@@ -134,9 +153,10 @@ persist or display.
|
|
|
134
153
|
|
|
135
154
|
## Context compaction
|
|
136
155
|
|
|
137
|
-
`@yolk-sdk/agent/compaction` provides pure
|
|
138
|
-
|
|
139
|
-
|
|
156
|
+
`@yolk-sdk/agent/compaction` provides pure budgeting, planning, estimation, checkpoint, and
|
|
157
|
+
formatting utilities plus Effect-native context-transformer and provider-retry adapters. It does
|
|
158
|
+
not summarize or persist checkpoints. Hosts own thresholds, summary policy, durable storage, and
|
|
159
|
+
active-run guards. The one-shot context-overflow wrapper calls your host compactor.
|
|
140
160
|
|
|
141
161
|
```ts
|
|
142
162
|
import {
|
|
@@ -160,6 +180,13 @@ const ContextLayer = makeWindowCompactionTransformer({
|
|
|
160
180
|
})
|
|
161
181
|
```
|
|
162
182
|
|
|
183
|
+
The default estimator uses provider-neutral character and media heuristics. Pass
|
|
184
|
+
`TokenEstimateOptions.countTextTokens` to improve estimates for selected message text, reasoning,
|
|
185
|
+
and host tool-call identifiers, or pass a whole-transcript `estimateTokens` to planners and
|
|
186
|
+
transformers. Exact provider-request accounting must also include system prompts, tool definitions,
|
|
187
|
+
vendor framing, and a safety margin. Reuse one estimator for warnings, planning, and before/after
|
|
188
|
+
checks; tokenizer dependencies remain host-owned.
|
|
189
|
+
|
|
163
190
|
## Protocol content
|
|
164
191
|
|
|
165
192
|
`Content` is either plain text or ordered parts:
|
|
@@ -341,8 +368,9 @@ handler, approval HITL, transcript projection, and one-shot TTS/STT contracts.
|
|
|
341
368
|
after reconnect, optionally prefixing user seeds with author display names via
|
|
342
369
|
`{ includeAuthors: true }` for multi-user transcripts.
|
|
343
370
|
- `makeWebSocketVoiceTransport` covers Node/server realtime sessions;
|
|
344
|
-
`@yolk-sdk/agent/providers/openai/speech` provides `
|
|
345
|
-
`
|
|
371
|
+
`@yolk-sdk/agent/providers/openai/speech` provides `makeOpenAiSpeechSynthesizerLayer` and
|
|
372
|
+
`makeOpenAiTranscriberLayer` for the provider-neutral voice services.
|
|
373
|
+
`VoiceSpeechRequest.instructions` steers delivery style only, and
|
|
346
374
|
provider 429s (rate limit or exhausted credits) surface as `VoiceSpeechError` code
|
|
347
375
|
`rate_limited` so hosts can distinguish quota from outage.
|
|
348
376
|
|
|
@@ -378,6 +406,7 @@ aborts, and implementation bugs outside typed tool execution.
|
|
|
378
406
|
## Host responsibilities
|
|
379
407
|
|
|
380
408
|
- Choose models/providers and provide an LLM provider layer, using SDK provider subpaths or host adapters.
|
|
409
|
+
- Configure model-specific provider output-token limits.
|
|
381
410
|
- Persist sessions, transcripts, and append logs.
|
|
382
411
|
- Persist/return one `ToolResultMessage` for every host tool call, including `isError` failures.
|
|
383
412
|
- Persist terminal provider failures and clear active run ids where applicable.
|
|
@@ -387,11 +416,17 @@ aborts, and implementation bugs outside typed tool execution.
|
|
|
387
416
|
## Boundaries
|
|
388
417
|
|
|
389
418
|
- Core loop/protocol/runtime/tools have no React, Next.js, provider SDKs, auth, storage drivers, or app concepts.
|
|
390
|
-
- `@yolk-sdk/agent/compaction`
|
|
419
|
+
- `@yolk-sdk/agent/compaction` combines pure planning/formatting helpers with Effect-native transformer and retry adapters; hosts own thresholds, summaries, compaction payloads, and durable compactor policy.
|
|
391
420
|
- `@yolk-sdk/agent/react` is headless and uses React as an optional peer.
|
|
392
421
|
- Provider subpaths own vendor wire/auth mechanics only; hosts own token storage, refresh, routing, and policy.
|
|
422
|
+
- `@yolk-sdk/agent/providers/openai/speech` is server integration requiring runtime
|
|
423
|
+
`FormData`/`Blob`, a host `HttpClient` layer, and a secret API key; do not invoke it from browser
|
|
424
|
+
code.
|
|
393
425
|
- Loop stays stateless: transcript in, events out.
|
|
394
426
|
- Runtime owns generic session orchestration only; host apps own persistence adapters and policy.
|
|
427
|
+
- Client HTTP helpers are runtime-portable with a host `HttpClient` layer. Attachment helpers need
|
|
428
|
+
`Blob`/`File` and may use `FileReader`; the Cloudflare WebSocket transport needs the global
|
|
429
|
+
`WebSocket` constructor when its stream runs. None read browser globals at import time.
|
|
395
430
|
- Tools model generic metadata/execution; host apps own concrete tool catalogs.
|
|
396
431
|
- `task` is the standard subagent delegation tool. Packages define the schema; host apps execute subagents and omit `task` from subagent toolsets in v1.
|
|
397
432
|
|
|
@@ -7,7 +7,7 @@ import { OAuthAccessToken } from "@yolk-sdk/agent/oauth";
|
|
|
7
7
|
type AnthropicClaudeProviderConfig = {
|
|
8
8
|
readonly token: OAuthAccessToken;
|
|
9
9
|
readonly messagesUrl?: string;
|
|
10
|
-
readonly maxTokens
|
|
10
|
+
readonly maxTokens: number;
|
|
11
11
|
readonly extraHeaders?: Readonly<Record<string, string>>;
|
|
12
12
|
};
|
|
13
13
|
type AnthropicTextBlock = {
|
|
@@ -73,8 +73,8 @@ type AnthropicRequestBody = {
|
|
|
73
73
|
readonly stream?: true;
|
|
74
74
|
readonly tools?: ReadonlyArray<AnthropicTool>;
|
|
75
75
|
};
|
|
76
|
-
declare const toAnthropicClaudeRequestBody: (request: LLMRequest, config
|
|
77
|
-
readonly maxTokens
|
|
76
|
+
declare const toAnthropicClaudeRequestBody: (request: LLMRequest, config: {
|
|
77
|
+
readonly maxTokens: number;
|
|
78
78
|
readonly stream?: boolean;
|
|
79
79
|
}) => Effect.Effect<AnthropicRequestBody, LLMError>;
|
|
80
80
|
declare const streamAnthropicClaudeResponse: (response: HttpClientResponse.HttpClientResponse) => Stream.Stream<LLMEvent, LLMError>;
|
|
@@ -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,+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,
|
|
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,cA4zBpB,4BAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SAAmB,SAAA;EAAA,SAA4B,MAAA;AAAA,MAC9C,MAAA,CAAO,MAAA,CAAO,oBAAA,EAAsB,QAAA;AAAA,cA8lB1B,6BAAA,GACX,QAAA,EAAU,kBAAA,CAAmB,kBAAA,KAC5B,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAA;AAAA,cAoGd,gCAAA,GAAoC,MAAA,EAAQ,6BAAA,KAA6B,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA"}
|
|
@@ -43,7 +43,6 @@ const unprefixClaudeToolName = (name) => {
|
|
|
43
43
|
return `${unprefixed.charAt(0).toLowerCase()}${unprefixed.slice(1)}`;
|
|
44
44
|
};
|
|
45
45
|
const anthropicClaudeMessagesUrl = "https://api.anthropic.com/v1/messages?beta=true";
|
|
46
|
-
const anthropicClaudeMaxTokens = 8192;
|
|
47
46
|
const anthropicClaudeIdentitySystemBlock = {
|
|
48
47
|
type: "text",
|
|
49
48
|
text: anthropicClaudeSystemIdentity
|
|
@@ -483,9 +482,9 @@ const toAnthropicClaudeRequestBody = (request, config) => Effect.gen(function* (
|
|
|
483
482
|
model: request.model,
|
|
484
483
|
system: [billingSystemBlock, anthropicClaudeIdentitySystemBlock],
|
|
485
484
|
messages,
|
|
486
|
-
max_tokens: config
|
|
485
|
+
max_tokens: config.maxTokens
|
|
487
486
|
};
|
|
488
|
-
const body = config
|
|
487
|
+
const body = config.stream === true ? {
|
|
489
488
|
...baseBody,
|
|
490
489
|
stream: true
|
|
491
490
|
} : baseBody;
|
|
@@ -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 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\ntype AnthropicHttpErrorInfo = {\n readonly message?: string\n readonly providerCode?: string\n}\n\nconst maxAnthropicHttpErrorMessageCharacters = 1_000\n\nconst boundedAnthropicHttpErrorMessage = (message: string) =>\n message.length <= maxAnthropicHttpErrorMessageCharacters\n ? message\n : `${message.slice(0, maxAnthropicHttpErrorMessageCharacters)}…`\n\nconst decodeAnthropicHttpErrorInfo = (\n raw: string\n): Effect.Effect<AnthropicHttpErrorInfo> =>\n Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(raw).pipe(\n Effect.map(parsed => {\n const error = field(parsed, 'error')\n const message = stringField(error, 'message')\n const providerCode = stringField(error, 'type') ?? stringField(error, 'code')\n\n return {\n ...(message === undefined\n ? {}\n : { message: boundedAnthropicHttpErrorMessage(message) }),\n ...(providerCode === undefined ? {} : { providerCode })\n }\n }),\n Effect.catch(() => Effect.succeed({}))\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 if (response.stop_reason === 'max_tokens') {\n return yield* Effect.fail(anthropicMaxTokensError())\n }\n\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 stopReason?: string\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 anthropicMaxTokensError = () =>\n new LLMError({\n cause: 'invalid_response',\n message: 'Anthropic Claude stopped after reaching max_tokens',\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 const delta = field(data, 'delta')\n const stopReason = stringField(delta, 'stop_reason')\n\n return Effect.succeed({\n state: {\n ...state,\n usage: step.snapshot,\n ...(stopReason === undefined ? {} : { stopReason })\n },\n events: step.events\n })\n }\n\n if (type === 'message_stop') {\n if (state.stopReason === 'max_tokens') return Effect.fail(anthropicMaxTokensError())\n\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.stopReason === 'max_tokens') {\n return yield* Effect.fail(anthropicMaxTokensError())\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 const errorInfo = yield* decodeAnthropicHttpErrorInfo(errorText)\n\n const provider = classifyProviderFailure({\n provider: anthropicClaudeProvider,\n status: response.status,\n headers: response.headers,\n body: errorText,\n ...(errorInfo.message === undefined ? {} : { message: errorInfo.message }),\n ...(errorInfo.providerCode === undefined\n ? {}\n : { providerCode: errorInfo.providerCode })\n })\n const message =\n errorInfo.message === undefined\n ? `Anthropic Claude returned ${response.status}`\n : `Anthropic Claude returned ${response.status}: ${errorInfo.message}`\n\n return yield* Effect.fail(\n new LLMError({\n cause: providerFailureCause(provider.kind),\n message,\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 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\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\ntype AnthropicHttpErrorInfo = {\n readonly message?: string\n readonly providerCode?: string\n}\n\nconst maxAnthropicHttpErrorMessageCharacters = 1_000\n\nconst boundedAnthropicHttpErrorMessage = (message: string) =>\n message.length <= maxAnthropicHttpErrorMessageCharacters\n ? message\n : `${message.slice(0, maxAnthropicHttpErrorMessageCharacters)}…`\n\nconst decodeAnthropicHttpErrorInfo = (\n raw: string\n): Effect.Effect<AnthropicHttpErrorInfo> =>\n Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(raw).pipe(\n Effect.map(parsed => {\n const error = field(parsed, 'error')\n const message = stringField(error, 'message')\n const providerCode = stringField(error, 'type') ?? stringField(error, 'code')\n\n return {\n ...(message === undefined\n ? {}\n : { message: boundedAnthropicHttpErrorMessage(message) }),\n ...(providerCode === undefined ? {} : { providerCode })\n }\n }),\n Effect.catch(() => Effect.succeed({}))\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 if (response.stop_reason === 'max_tokens') {\n return yield* Effect.fail(anthropicMaxTokensError())\n }\n\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 stopReason?: string\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 anthropicMaxTokensError = () =>\n new LLMError({\n cause: 'invalid_response',\n message: 'Anthropic Claude stopped after reaching max_tokens',\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 const delta = field(data, 'delta')\n const stopReason = stringField(delta, 'stop_reason')\n\n return Effect.succeed({\n state: {\n ...state,\n usage: step.snapshot,\n ...(stopReason === undefined ? {} : { stopReason })\n },\n events: step.events\n })\n }\n\n if (type === 'message_stop') {\n if (state.stopReason === 'max_tokens') return Effect.fail(anthropicMaxTokensError())\n\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.stopReason === 'max_tokens') {\n return yield* Effect.fail(anthropicMaxTokensError())\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 const errorInfo = yield* decodeAnthropicHttpErrorInfo(errorText)\n\n const provider = classifyProviderFailure({\n provider: anthropicClaudeProvider,\n status: response.status,\n headers: response.headers,\n body: errorText,\n ...(errorInfo.message === undefined ? {} : { message: errorInfo.message }),\n ...(errorInfo.providerCode === undefined\n ? {}\n : { providerCode: errorInfo.providerCode })\n })\n const message =\n errorInfo.message === undefined\n ? `Anthropic Claude returned ${response.status}`\n : `Anthropic Claude returned ${response.status}: ${errorInfo.message}`\n\n return yield* Effect.fail(\n new LLMError({\n cause: providerFailureCause(provider.kind),\n message,\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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"}
|
|
@@ -8,6 +8,7 @@ import { OAuthAccessToken } from "@yolk-sdk/agent/oauth";
|
|
|
8
8
|
type OpenAiCodexReasoningSummary = 'auto' | 'concise' | 'detailed';
|
|
9
9
|
type OpenAiCodexProviderConfig = {
|
|
10
10
|
readonly token: OAuthAccessToken;
|
|
11
|
+
readonly maxOutputTokens: number;
|
|
11
12
|
readonly responsesUrl?: string;
|
|
12
13
|
readonly extraHeaders?: Readonly<Record<string, string>>;
|
|
13
14
|
readonly defaultReasoningEffort?: AgentReasoningEffort;
|
|
@@ -57,6 +58,7 @@ type OpenAiCodexRequestBody = {
|
|
|
57
58
|
readonly model: string;
|
|
58
59
|
readonly instructions: string;
|
|
59
60
|
readonly input: ReadonlyArray<OpenAiCodexInputItem>;
|
|
61
|
+
readonly max_output_tokens: number;
|
|
60
62
|
readonly store: false;
|
|
61
63
|
readonly stream: true;
|
|
62
64
|
readonly reasoning: {
|
|
@@ -66,7 +68,8 @@ type OpenAiCodexRequestBody = {
|
|
|
66
68
|
readonly tools?: ReadonlyArray<OpenAiCodexTool>;
|
|
67
69
|
readonly parallel_tool_calls?: true;
|
|
68
70
|
};
|
|
69
|
-
declare const toOpenAiCodexRequestBody: (request: LLMRequest, config
|
|
71
|
+
declare const toOpenAiCodexRequestBody: (request: LLMRequest, config: {
|
|
72
|
+
readonly maxOutputTokens: number;
|
|
70
73
|
readonly defaultReasoningEffort?: AgentReasoningEffort;
|
|
71
74
|
readonly reasoningSummary?: OpenAiCodexReasoningSummary;
|
|
72
75
|
}) => Effect.Effect<OpenAiCodexRequestBody, LLMError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-provider.d.mts","names":[],"sources":["../../../src/providers/openai/codex-provider.ts"],"mappings":";;;;;;;KAiDY,2BAAA;AAAA,KAEA,yBAAA;EAAA,SACD,KAAA,EAAO,gBAAA;EAAA,SACP,YAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;EAAA,SACxB,sBAAA,GAAyB,oBAAA;EAAA,SACzB,gBAAA,GAAmB,2BAAA;AAAA;AAAA,KAGzB,uBAAA;EAAA,SACM,IAAA;EAAA,SACA,OAAA,WAAkB,aAAa,CAAC,2BAAA;AAAA;AAAA,KAGtC,wBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,yBAAA;EAAA,SACM,IAAA;EAAA,SACA,SAAS;AAAA;AAAA,KAGf,wBAAA;EAAA,SAEU,IAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGV,2BAAA,GACD,wBAAA,GACA,yBAAA,GACA,wBAAA;AAAA,KAEC,yBAAA,YAAqC,aAAa,CAAC,2BAAA;AAAA,KAEnD,4BAAA;EAAA,SACM,IAAA;EAAA,SACA,OAAA;EAAA,SACA,IAAA;EAAA,SACA,SAAA;AAAA;AAAA,KAGN,8BAAA;EAAA,SACM,IAAA;EAAA,SACA,OAAA;EAAA,SACA,MAAA,EAAQ,yBAAyB;AAAA;AAAA,KAGvC,oBAAA,GACD,uBAAA,GACA,4BAAA,GACA,8BAAA;AAAA,KAEC,eAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAA;EAAA,SACA,WAAA;EAAA,SACA,UAAA;AAAA;AAAA,KAGN,sBAAA;EAAA,SACM,KAAA;EAAA,SACA,YAAA;EAAA,SACA,KAAA,EAAO,aAAA,CAAc,oBAAA;EAAA,SACrB,KAAA;EAAA,SACA,MAAA;EAAA,SACA,SAAA;IAAA,SACE,MAAA,EAAQ,oBAAA;IAAA,SACR,OAAA,EAAS,2BAAA;EAAA;EAAA,SAEX,KAAA,GAAQ,aAAA,CAAc,eAAA;EAAA,SACtB,mBAAA;AAAA;AAAA,cA2RE,wBAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SACW,sBAAA,GAAyB,oBAAA;EAAA,SACzB,gBAAA,GAAmB,2BAAA;AAAA,MAE7B,MAAA,CAAO,MAAA,CAAO,sBAAA,EAAwB,QAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"codex-provider.d.mts","names":[],"sources":["../../../src/providers/openai/codex-provider.ts"],"mappings":";;;;;;;KAiDY,2BAAA;AAAA,KAEA,yBAAA;EAAA,SACD,KAAA,EAAO,gBAAA;EAAA,SACP,eAAA;EAAA,SACA,YAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;EAAA,SACxB,sBAAA,GAAyB,oBAAA;EAAA,SACzB,gBAAA,GAAmB,2BAAA;AAAA;AAAA,KAGzB,uBAAA;EAAA,SACM,IAAA;EAAA,SACA,OAAA,WAAkB,aAAa,CAAC,2BAAA;AAAA;AAAA,KAGtC,wBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,yBAAA;EAAA,SACM,IAAA;EAAA,SACA,SAAS;AAAA;AAAA,KAGf,wBAAA;EAAA,SAEU,IAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGV,2BAAA,GACD,wBAAA,GACA,yBAAA,GACA,wBAAA;AAAA,KAEC,yBAAA,YAAqC,aAAa,CAAC,2BAAA;AAAA,KAEnD,4BAAA;EAAA,SACM,IAAA;EAAA,SACA,OAAA;EAAA,SACA,IAAA;EAAA,SACA,SAAA;AAAA;AAAA,KAGN,8BAAA;EAAA,SACM,IAAA;EAAA,SACA,OAAA;EAAA,SACA,MAAA,EAAQ,yBAAyB;AAAA;AAAA,KAGvC,oBAAA,GACD,uBAAA,GACA,4BAAA,GACA,8BAAA;AAAA,KAEC,eAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAA;EAAA,SACA,WAAA;EAAA,SACA,UAAA;AAAA;AAAA,KAGN,sBAAA;EAAA,SACM,KAAA;EAAA,SACA,YAAA;EAAA,SACA,KAAA,EAAO,aAAA,CAAc,oBAAA;EAAA,SACrB,iBAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA;EAAA,SACA,SAAA;IAAA,SACE,MAAA,EAAQ,oBAAA;IAAA,SACR,OAAA,EAAS,2BAAA;EAAA;EAAA,SAEX,KAAA,GAAQ,aAAA,CAAc,eAAA;EAAA,SACtB,mBAAA;AAAA;AAAA,cA2RE,wBAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SACW,eAAA;EAAA,SACA,sBAAA,GAAyB,oBAAA;EAAA,SACzB,gBAAA,GAAmB,2BAAA;AAAA,MAE7B,MAAA,CAAO,MAAA,CAAO,sBAAA,EAAwB,QAAA;AAAA,cA2lB5B,yBAAA,GACX,QAAA,EAAU,kBAAA,CAAmB,kBAAA,KAC5B,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAA;AAAA,cA0Fd,4BAAA,GAAgC,MAAA,EAAQ,yBAAA,KAAyB,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA"}
|
|
@@ -168,11 +168,12 @@ const toOpenAiCodexRequestBody = (request, config) => Effect.gen(function* () {
|
|
|
168
168
|
model: request.model,
|
|
169
169
|
instructions: request.systemPrompt,
|
|
170
170
|
input,
|
|
171
|
+
max_output_tokens: config.maxOutputTokens,
|
|
171
172
|
store: false,
|
|
172
173
|
stream: true,
|
|
173
174
|
reasoning: {
|
|
174
|
-
effort: request.reasoningEffort ?? config
|
|
175
|
-
summary: config
|
|
175
|
+
effort: request.reasoningEffort ?? config.defaultReasoningEffort ?? "low",
|
|
176
|
+
summary: config.reasoningSummary ?? "auto"
|
|
176
177
|
}
|
|
177
178
|
};
|
|
178
179
|
if (request.tools.length === 0) return body;
|