agentfootprint 10.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CAPABILITIES.md +3 -1
- package/ai-instructions/claude-code/SKILL.md +1 -1
- package/dist/adapters/forcedToolChoice.js +79 -0
- package/dist/adapters/forcedToolChoice.js.map +1 -0
- package/dist/adapters/llm/AnthropicProvider.js +25 -63
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BedrockProvider.js +37 -8
- package/dist/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserAnthropicProvider.js +29 -7
- package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserOpenAIProvider.js +3 -0
- package/dist/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/FoundryProvider.js +3 -0
- package/dist/adapters/llm/FoundryProvider.js.map +1 -1
- package/dist/adapters/llm/InvokeModelGatewayProvider.js +28 -9
- package/dist/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
- package/dist/adapters/llm/OpenAIProvider.js +3 -0
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/anthropicMessageProjection.js +113 -0
- package/dist/adapters/llm/anthropicMessageProjection.js.map +1 -0
- package/dist/adapters/llm/anthropicMessagesWire.js +189 -213
- package/dist/adapters/llm/anthropicMessagesWire.js.map +1 -1
- package/dist/adapters/llm/anthropicModels.js +187 -0
- package/dist/adapters/llm/anthropicModels.js.map +1 -0
- package/dist/adapters/llm/anthropicReplayLayout.js +241 -0
- package/dist/adapters/llm/anthropicReplayLayout.js.map +1 -0
- package/dist/adapters/llm/anthropicThinkingReplay.js +188 -0
- package/dist/adapters/llm/anthropicThinkingReplay.js.map +1 -0
- package/dist/adapters/llm/anthropicThinkingWire.js +16 -105
- package/dist/adapters/llm/anthropicThinkingWire.js.map +1 -1
- package/dist/adapters/requestRefusal.js +15 -0
- package/dist/adapters/requestRefusal.js.map +1 -0
- package/dist/adapters/types.js.map +1 -1
- package/dist/core/Agent.js +60 -30
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/LLMCall.js +1 -1
- package/dist/core/LLMCall.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +3 -0
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/assistantReplay.js +27 -0
- package/dist/core/agent/assistantReplay.js.map +1 -0
- package/dist/core/agent/buildAgentMessageApiChart.js +1 -1
- package/dist/core/agent/buildAgentMessageApiChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +8 -0
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/buildMessageApiChart.js +1 -1
- package/dist/core/agent/buildMessageApiChart.js.map +1 -1
- package/dist/core/agent/providerTargets.js +14 -0
- package/dist/core/agent/providerTargets.js.map +1 -0
- package/dist/core/agent/stages/callLLM.js +48 -15
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/deliver.js +15 -13
- package/dist/core/agent/stages/deliver.js.map +1 -1
- package/dist/core/agent/stages/outputRetry.js +2 -1
- package/dist/core/agent/stages/outputRetry.js.map +1 -1
- package/dist/core/agent/stages/prepareFinal.js +2 -0
- package/dist/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/core/agent/stages/reliabilityExecution.js +29 -17
- package/dist/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/core/agent/stages/stepNudge.js +2 -1
- package/dist/core/agent/stages/stepNudge.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +2 -0
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/agent/thinkingSupport.js +8 -6
- package/dist/core/agent/thinkingSupport.js.map +1 -1
- package/dist/core/outputSchema.js.map +1 -1
- package/dist/core/runCheckpoint.js +16 -2
- package/dist/core/runCheckpoint.js.map +1 -1
- package/dist/esm/adapters/forcedToolChoice.d.ts +66 -0
- package/dist/esm/adapters/forcedToolChoice.js +74 -0
- package/dist/esm/adapters/forcedToolChoice.js.map +1 -0
- package/dist/esm/adapters/llm/AnthropicProvider.d.ts +3 -14
- package/dist/esm/adapters/llm/AnthropicProvider.js +27 -65
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BedrockProvider.d.ts +5 -0
- package/dist/esm/adapters/llm/BedrockProvider.js +37 -8
- package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.d.ts +2 -0
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +29 -7
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.js +3 -0
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/FoundryProvider.js +3 -0
- package/dist/esm/adapters/llm/FoundryProvider.js.map +1 -1
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.d.ts +2 -0
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js +28 -9
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OpenAIProvider.js +3 -0
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicMessageProjection.d.ts +19 -0
- package/dist/esm/adapters/llm/anthropicMessageProjection.js +108 -0
- package/dist/esm/adapters/llm/anthropicMessageProjection.js.map +1 -0
- package/dist/esm/adapters/llm/anthropicMessagesWire.d.ts +8 -18
- package/dist/esm/adapters/llm/anthropicMessagesWire.js +184 -208
- package/dist/esm/adapters/llm/anthropicMessagesWire.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicModels.d.ts +96 -0
- package/dist/esm/adapters/llm/anthropicModels.js +180 -0
- package/dist/esm/adapters/llm/anthropicModels.js.map +1 -0
- package/dist/esm/adapters/llm/anthropicReplayLayout.d.ts +23 -0
- package/dist/esm/adapters/llm/anthropicReplayLayout.js +232 -0
- package/dist/esm/adapters/llm/anthropicReplayLayout.js.map +1 -0
- package/dist/esm/adapters/llm/anthropicThinkingReplay.d.ts +21 -0
- package/dist/esm/adapters/llm/anthropicThinkingReplay.js +183 -0
- package/dist/esm/adapters/llm/anthropicThinkingReplay.js.map +1 -0
- package/dist/esm/adapters/llm/anthropicThinkingWire.d.ts +12 -36
- package/dist/esm/adapters/llm/anthropicThinkingWire.js +13 -101
- package/dist/esm/adapters/llm/anthropicThinkingWire.js.map +1 -1
- package/dist/esm/adapters/requestRefusal.d.ts +2 -0
- package/dist/esm/adapters/requestRefusal.js +11 -0
- package/dist/esm/adapters/requestRefusal.js.map +1 -0
- package/dist/esm/adapters/types.d.ts +31 -7
- package/dist/esm/adapters/types.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +11 -1
- package/dist/esm/core/Agent.js +63 -33
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/LLMCall.js +1 -1
- package/dist/esm/core/LLMCall.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.js +3 -0
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/assistantReplay.d.ts +11 -0
- package/dist/esm/core/agent/assistantReplay.js +23 -0
- package/dist/esm/core/agent/assistantReplay.js.map +1 -0
- package/dist/esm/core/agent/buildAgentMessageApiChart.js +1 -1
- package/dist/esm/core/agent/buildAgentMessageApiChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +8 -0
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildMessageApiChart.js +1 -1
- package/dist/esm/core/agent/buildMessageApiChart.js.map +1 -1
- package/dist/esm/core/agent/providerTargets.d.ts +11 -0
- package/dist/esm/core/agent/providerTargets.js +10 -0
- package/dist/esm/core/agent/providerTargets.js.map +1 -0
- package/dist/esm/core/agent/stages/callLLM.d.ts +3 -1
- package/dist/esm/core/agent/stages/callLLM.js +48 -15
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/deliver.d.ts +5 -0
- package/dist/esm/core/agent/stages/deliver.js +13 -12
- package/dist/esm/core/agent/stages/deliver.js.map +1 -1
- package/dist/esm/core/agent/stages/outputRetry.js +2 -1
- package/dist/esm/core/agent/stages/outputRetry.js.map +1 -1
- package/dist/esm/core/agent/stages/prepareFinal.js +2 -0
- package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/esm/core/agent/stages/reliabilityExecution.d.ts +8 -1
- package/dist/esm/core/agent/stages/reliabilityExecution.js +29 -17
- package/dist/esm/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/esm/core/agent/stages/stepNudge.js +2 -1
- package/dist/esm/core/agent/stages/stepNudge.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.js +2 -0
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/thinkingSupport.d.ts +5 -2
- package/dist/esm/core/agent/thinkingSupport.js +8 -6
- package/dist/esm/core/agent/thinkingSupport.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +4 -0
- package/dist/esm/core/outputSchema.d.ts +2 -1
- package/dist/esm/core/outputSchema.js.map +1 -1
- package/dist/esm/core/runCheckpoint.d.ts +8 -0
- package/dist/esm/core/runCheckpoint.js +13 -1
- package/dist/esm/core/runCheckpoint.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +10 -0
- package/dist/esm/events/registry.d.ts +3 -1
- package/dist/esm/events/registry.js +2 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/lib/injection-engine/constrainedEnumPick.d.ts +1 -1
- package/dist/esm/lib/injection-engine/constrainedEnumPick.js +5 -2
- package/dist/esm/lib/injection-engine/constrainedEnumPick.js.map +1 -1
- package/dist/esm/lib/injection-engine/llmClassifier.d.ts +2 -2
- package/dist/esm/lib/injection-engine/llmClassifier.js +2 -2
- package/dist/esm/lib/time-travel/receipt.d.ts +10 -0
- package/dist/esm/lib/time-travel/receipt.js +2 -2
- package/dist/esm/lib/time-travel/receipt.js.map +1 -1
- package/dist/esm/lib/time-travel/servedView.d.ts +1 -1
- package/dist/esm/lib/time-travel/servedView.js +11 -0
- package/dist/esm/lib/time-travel/servedView.js.map +1 -1
- package/dist/esm/providers.d.ts +3 -0
- package/dist/esm/providers.js +2 -0
- package/dist/esm/providers.js.map +1 -1
- package/dist/esm/recorders/core/replayHooks.d.ts +10 -0
- package/dist/esm/recorders/core/replayHooks.js +65 -0
- package/dist/esm/recorders/core/replayHooks.js.map +1 -0
- package/dist/esm/recorders/core/resilienceHooks.d.ts +2 -1
- package/dist/esm/recorders/core/resilienceHooks.js +3 -1
- package/dist/esm/recorders/core/resilienceHooks.js.map +1 -1
- package/dist/esm/redaction/knownStrings.js +21 -0
- package/dist/esm/redaction/knownStrings.js.map +1 -1
- package/dist/esm/resilience/replayAttempt.d.ts +21 -0
- package/dist/esm/resilience/replayAttempt.js +96 -0
- package/dist/esm/resilience/replayAttempt.js.map +1 -0
- package/dist/esm/resilience/withCircuitBreaker.d.ts +2 -1
- package/dist/esm/resilience/withCircuitBreaker.js +5 -2
- package/dist/esm/resilience/withCircuitBreaker.js.map +1 -1
- package/dist/esm/resilience/withFallback.d.ts +3 -1
- package/dist/esm/resilience/withFallback.js +33 -32
- package/dist/esm/resilience/withFallback.js.map +1 -1
- package/dist/esm/resilience/withRetry.js +9 -3
- package/dist/esm/resilience/withRetry.js.map +1 -1
- package/dist/esm/thinking/dispatch.d.ts +9 -0
- package/dist/esm/thinking/dispatch.js +44 -0
- package/dist/esm/thinking/dispatch.js.map +1 -0
- package/dist/esm/thinking/errors.d.ts +3 -3
- package/dist/esm/thinking/errors.js +3 -3
- package/dist/esm/thinking/replay.d.ts +67 -0
- package/dist/esm/thinking/replay.js +20 -0
- package/dist/esm/thinking/replay.js.map +1 -0
- package/dist/esm/thinking/replayHistory.d.ts +18 -0
- package/dist/esm/thinking/replayHistory.js +56 -0
- package/dist/esm/thinking/replayHistory.js.map +1 -0
- package/dist/events/registry.js +2 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/lib/injection-engine/constrainedEnumPick.js +5 -2
- package/dist/lib/injection-engine/constrainedEnumPick.js.map +1 -1
- package/dist/lib/injection-engine/llmClassifier.js +2 -2
- package/dist/lib/time-travel/receipt.js +2 -2
- package/dist/lib/time-travel/receipt.js.map +1 -1
- package/dist/lib/time-travel/servedView.js +11 -0
- package/dist/lib/time-travel/servedView.js.map +1 -1
- package/dist/providers.js +6 -1
- package/dist/providers.js.map +1 -1
- package/dist/recorders/core/replayHooks.js +69 -0
- package/dist/recorders/core/replayHooks.js.map +1 -0
- package/dist/recorders/core/resilienceHooks.js +3 -1
- package/dist/recorders/core/resilienceHooks.js.map +1 -1
- package/dist/redaction/knownStrings.js +21 -0
- package/dist/redaction/knownStrings.js.map +1 -1
- package/dist/resilience/replayAttempt.js +100 -0
- package/dist/resilience/replayAttempt.js.map +1 -0
- package/dist/resilience/withCircuitBreaker.js +5 -2
- package/dist/resilience/withCircuitBreaker.js.map +1 -1
- package/dist/resilience/withFallback.js +33 -32
- package/dist/resilience/withFallback.js.map +1 -1
- package/dist/resilience/withRetry.js +9 -3
- package/dist/resilience/withRetry.js.map +1 -1
- package/dist/thinking/dispatch.js +50 -0
- package/dist/thinking/dispatch.js.map +1 -0
- package/dist/thinking/errors.js +3 -3
- package/dist/thinking/replay.js +24 -0
- package/dist/thinking/replay.js.map +1 -0
- package/dist/thinking/replayHistory.js +63 -0
- package/dist/thinking/replayHistory.js.map +1 -0
- package/dist/types/adapters/forcedToolChoice.d.ts +67 -0
- package/dist/types/adapters/forcedToolChoice.d.ts.map +1 -0
- package/dist/types/adapters/llm/AnthropicProvider.d.ts +3 -14
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BedrockProvider.d.ts +5 -0
- package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts +2 -0
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/FoundryProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts +2 -0
- package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicMessageProjection.d.ts +20 -0
- package/dist/types/adapters/llm/anthropicMessageProjection.d.ts.map +1 -0
- package/dist/types/adapters/llm/anthropicMessagesWire.d.ts +8 -18
- package/dist/types/adapters/llm/anthropicMessagesWire.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicModels.d.ts +97 -0
- package/dist/types/adapters/llm/anthropicModels.d.ts.map +1 -0
- package/dist/types/adapters/llm/anthropicReplayLayout.d.ts +24 -0
- package/dist/types/adapters/llm/anthropicReplayLayout.d.ts.map +1 -0
- package/dist/types/adapters/llm/anthropicThinkingReplay.d.ts +22 -0
- package/dist/types/adapters/llm/anthropicThinkingReplay.d.ts.map +1 -0
- package/dist/types/adapters/llm/anthropicThinkingWire.d.ts +12 -36
- package/dist/types/adapters/llm/anthropicThinkingWire.d.ts.map +1 -1
- package/dist/types/adapters/requestRefusal.d.ts +3 -0
- package/dist/types/adapters/requestRefusal.d.ts.map +1 -0
- package/dist/types/adapters/types.d.ts +31 -7
- package/dist/types/adapters/types.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +11 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/assistantReplay.d.ts +12 -0
- package/dist/types/core/agent/assistantReplay.d.ts.map +1 -0
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/providerTargets.d.ts +12 -0
- package/dist/types/core/agent/providerTargets.d.ts.map +1 -0
- package/dist/types/core/agent/stages/callLLM.d.ts +3 -1
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/deliver.d.ts +5 -0
- package/dist/types/core/agent/stages/deliver.d.ts.map +1 -1
- package/dist/types/core/agent/stages/outputRetry.d.ts.map +1 -1
- package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts +8 -1
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts.map +1 -1
- package/dist/types/core/agent/stages/stepNudge.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/thinkingSupport.d.ts +5 -2
- package/dist/types/core/agent/thinkingSupport.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +4 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/outputSchema.d.ts +2 -1
- package/dist/types/core/outputSchema.d.ts.map +1 -1
- package/dist/types/core/runCheckpoint.d.ts +8 -0
- package/dist/types/core/runCheckpoint.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +10 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +3 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/constrainedEnumPick.d.ts +1 -1
- package/dist/types/lib/injection-engine/constrainedEnumPick.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/llmClassifier.d.ts +2 -2
- package/dist/types/lib/time-travel/receipt.d.ts +10 -0
- package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
- package/dist/types/lib/time-travel/servedView.d.ts +1 -1
- package/dist/types/lib/time-travel/servedView.d.ts.map +1 -1
- package/dist/types/providers.d.ts +3 -0
- package/dist/types/providers.d.ts.map +1 -1
- package/dist/types/recorders/core/replayHooks.d.ts +11 -0
- package/dist/types/recorders/core/replayHooks.d.ts.map +1 -0
- package/dist/types/recorders/core/resilienceHooks.d.ts +2 -1
- package/dist/types/recorders/core/resilienceHooks.d.ts.map +1 -1
- package/dist/types/redaction/knownStrings.d.ts.map +1 -1
- package/dist/types/resilience/replayAttempt.d.ts +22 -0
- package/dist/types/resilience/replayAttempt.d.ts.map +1 -0
- package/dist/types/resilience/withCircuitBreaker.d.ts +2 -1
- package/dist/types/resilience/withCircuitBreaker.d.ts.map +1 -1
- package/dist/types/resilience/withFallback.d.ts +3 -1
- package/dist/types/resilience/withFallback.d.ts.map +1 -1
- package/dist/types/resilience/withRetry.d.ts.map +1 -1
- package/dist/types/thinking/dispatch.d.ts +10 -0
- package/dist/types/thinking/dispatch.d.ts.map +1 -0
- package/dist/types/thinking/errors.d.ts +3 -3
- package/dist/types/thinking/replay.d.ts +68 -0
- package/dist/types/thinking/replay.d.ts.map +1 -0
- package/dist/types/thinking/replayHistory.d.ts +19 -0
- package/dist/types/thinking/replayHistory.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* anthropicModels — what each Claude model takes on the Anthropic wire: ONE
|
|
4
|
+
* table of thinking, tool-choice and documented replay-prefix facts.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: declaration + shared family lookup with explicit matching policies.
|
|
7
|
+
* Role: Outer ring. The facts the adapters declare and send from:
|
|
8
|
+
* - `thinking` — which thinking request the model takes (`'adaptive'`,
|
|
9
|
+
* `'budget'` or `'none'`; translated by `anthropicThinkingWire.ts`);
|
|
10
|
+
* - `forcedToolChoice` — whether it takes `tool_choice: { type: 'tool' }`
|
|
11
|
+
* (the `'tool-forced'` output strategy and the constrained pick send one).
|
|
12
|
+
*
|
|
13
|
+
* A model is added here, and nowhere else.
|
|
14
|
+
*
|
|
15
|
+
* The facts, from Anthropic's documentation (fetched 2026-10-09):
|
|
16
|
+
* - thinking per model — see `anthropicThinkingWire.ts` (unchanged from the
|
|
17
|
+
* 9.141.0 table);
|
|
18
|
+
* - Opus 5.5, Sonnet 5.5, Fable 5.1 and Mythos 5.1 reject forced tools:
|
|
19
|
+
* https://platform.claude.com/docs/en/build-with-claude/thinking ("Response
|
|
20
|
+
* prefill and forced tool use"); Haiku 5.5 accepts them:
|
|
21
|
+
* https://platform.claude.com/docs/en/models/haiku-5-5/migration-guide.
|
|
22
|
+
* - Prefix binding is documented for Fable 5.1, Opus 5.5, Sonnet 5.5 and
|
|
23
|
+
* Haiku 5.5, not inferred for other families:
|
|
24
|
+
* https://platform.claude.com/docs/en/build-with-claude/preserved-thinking.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* anthropicModelFacts('claude-opus-5-5');
|
|
28
|
+
* // { thinking: 'adaptive', forcedToolChoice: false, thinkingPrefixBinding: true }
|
|
29
|
+
* anthropicModelFacts('us.anthropic.claude-haiku-4-5-20251001-v1:0');
|
|
30
|
+
* // { thinking: 'budget', forcedToolChoice: true }
|
|
31
|
+
* anthropicModelFacts('claude-opus-6'); // undefined — not in the table
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.anthropicTakesForcedToolChoice = exports.anthropicThinkingMode = exports.anthropicModelFacts = exports.anthropicModelFamily = exports.ANTHROPIC_THINKING_MODES = exports.ANTHROPIC_MODELS = void 0;
|
|
35
|
+
const row = (thinking, forcedToolChoice = true, thinkingPrefixBinding = false) => Object.freeze({
|
|
36
|
+
thinking,
|
|
37
|
+
forcedToolChoice,
|
|
38
|
+
...(thinkingPrefixBinding && { thinkingPrefixBinding: true }),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* The facts per Claude model family, keyed by the family id (the model id
|
|
42
|
+
* without a date, version or platform prefix — matching is
|
|
43
|
+
* {@link anthropicModelFamily}'s). The ONE table.
|
|
44
|
+
*/
|
|
45
|
+
exports.ANTHROPIC_MODELS = Object.freeze({
|
|
46
|
+
// Adaptive only — `budget_tokens` is a 400 (Claude 4.7 and later). Opus 5.5,
|
|
47
|
+
// Sonnet 5.5, Fable 5.1 and Mythos 5.1 also reject a forced tool choice on
|
|
48
|
+
// every request.
|
|
49
|
+
'claude-fable-5-1': row('adaptive', false, true),
|
|
50
|
+
'claude-mythos-5-1': row('adaptive', false),
|
|
51
|
+
'claude-fable-5': row('adaptive'),
|
|
52
|
+
'claude-mythos-5': row('adaptive'),
|
|
53
|
+
'claude-opus-5-5': row('adaptive', false, true),
|
|
54
|
+
'claude-opus-5': row('adaptive'),
|
|
55
|
+
'claude-opus-4-8': row('adaptive'),
|
|
56
|
+
'claude-opus-4-7': row('adaptive'),
|
|
57
|
+
'claude-sonnet-5-5': row('adaptive', false, true),
|
|
58
|
+
'claude-sonnet-5': row('adaptive'),
|
|
59
|
+
'claude-haiku-5-5': row('adaptive', true, true),
|
|
60
|
+
// Takes both. Adaptive: its thinking `display` defaults to "omitted", which
|
|
61
|
+
// a budget body cannot change, so a budget would return empty thinking.
|
|
62
|
+
'claude-mythos-preview': row('adaptive'),
|
|
63
|
+
// Takes both, the budget deprecated but accepted: the budget is sent, as
|
|
64
|
+
// asked. On Opus 4.6 that means no thinking between tool calls — an app that
|
|
65
|
+
// wants it declares the model 'adaptive' with the adapter's `thinkingMode`.
|
|
66
|
+
'claude-opus-4-6': row('budget'),
|
|
67
|
+
'claude-sonnet-4-6': row('budget'),
|
|
68
|
+
// Budget only — `type: 'adaptive'` is a 400.
|
|
69
|
+
'claude-opus-4-5': row('budget'),
|
|
70
|
+
'claude-sonnet-4-5': row('budget'),
|
|
71
|
+
'claude-haiku-4-5': row('budget'),
|
|
72
|
+
'claude-opus-4-1': row('budget'),
|
|
73
|
+
'claude-opus-4': row('budget'),
|
|
74
|
+
'claude-sonnet-4': row('budget'),
|
|
75
|
+
'claude-3-7-sonnet': row('budget'),
|
|
76
|
+
// No thinking. Retired on the Claude API; still served by some platforms
|
|
77
|
+
// (Vertex lists claude-3-5-haiku@20241022). Claude 1, 2 and Instant are
|
|
78
|
+
// served nowhere and are not listed.
|
|
79
|
+
'claude-3-5-sonnet': row('none'),
|
|
80
|
+
'claude-3-5-haiku': row('none'),
|
|
81
|
+
'claude-3-opus': row('none'),
|
|
82
|
+
'claude-3-sonnet': row('none'),
|
|
83
|
+
'claude-3-haiku': row('none'),
|
|
84
|
+
});
|
|
85
|
+
/** The thinking column of {@link ANTHROPIC_MODELS}, family → mode. */
|
|
86
|
+
exports.ANTHROPIC_THINKING_MODES = Object.freeze(Object.fromEntries(Object.entries(exports.ANTHROPIC_MODELS).map(([family, f]) => [family, f.thinking])));
|
|
87
|
+
// The existing thinking lookup intentionally accepts decorated/dotted aliases.
|
|
88
|
+
// Preserve that compatibility, but never use it to assert hard model facts.
|
|
89
|
+
const THINKING_SUFFIX = /^(?:$|-0(?![0-9])|-\d{8}(?![0-9])|-latest(?![a-z0-9])|-v\d|[@:[])/;
|
|
90
|
+
const API_SUFFIX = /^(?:|-0|-\d{8}|-latest|@\d{8})$/;
|
|
91
|
+
const BEDROCK_SUFFIX = /^(?:|-\d{8})(?:-v\d+(?::\d+)?)?$/;
|
|
92
|
+
const BEDROCK_ID = /^(?:(?:us|eu|apac|global|jp|au)\.)?anthropic\.(claude-[a-z0-9:-]+)$/;
|
|
93
|
+
const FOUNDATION_ARN = /^arn:aws(?:-us-gov|-cn)?:bedrock:[a-z0-9-]+::foundation-model\/([^/]+)$/;
|
|
94
|
+
const PROFILE_ARN = /^arn:aws(?:-us-gov|-cn)?:bedrock:[a-z0-9-]+:\d{12}:inference-profile\/([^/]+)$/;
|
|
95
|
+
const VERTEX_ID = /^(?:projects\/[a-z0-9-]+\/locations\/[a-z0-9-]+\/)?publishers\/anthropic\/models\/(claude-[a-z0-9@-]+)$/;
|
|
96
|
+
/** Longest match keeps the one table independent of declaration order. */
|
|
97
|
+
function familyMatching(name, suffix) {
|
|
98
|
+
let match;
|
|
99
|
+
for (const family of Object.keys(exports.ANTHROPIC_MODELS)) {
|
|
100
|
+
if (!name.startsWith(family) || !suffix.test(name.slice(family.length)))
|
|
101
|
+
continue;
|
|
102
|
+
if (match === undefined || family.length > match.length)
|
|
103
|
+
match = family;
|
|
104
|
+
}
|
|
105
|
+
return match;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The table family a Claude model id names, or `undefined` when none does.
|
|
109
|
+
*
|
|
110
|
+
* Accepts complete Claude API, Bedrock foundation/system-profile and Vertex
|
|
111
|
+
* model identifiers. Application profiles, deployment names and router aliases
|
|
112
|
+
* are opaque: a Claude-looking substring is not evidence of the served model.
|
|
113
|
+
* This recognizes a family, not its availability in a particular region.
|
|
114
|
+
*/
|
|
115
|
+
function anthropicModelFamily(model) {
|
|
116
|
+
// Besides refusing decorated aliases, this prevents `$` in the anchored
|
|
117
|
+
// matchers from accepting a final newline as part of a valid identifier.
|
|
118
|
+
if (model !== model.trim())
|
|
119
|
+
return undefined;
|
|
120
|
+
if (model.startsWith('claude-'))
|
|
121
|
+
return familyMatching(model, API_SUFFIX);
|
|
122
|
+
const vertex = VERTEX_ID.exec(model);
|
|
123
|
+
if (vertex)
|
|
124
|
+
return familyMatching(vertex[1], API_SUFFIX);
|
|
125
|
+
const arn = FOUNDATION_ARN.exec(model) ?? PROFILE_ARN.exec(model);
|
|
126
|
+
const bedrock = BEDROCK_ID.exec(arn ? arn[1] : model);
|
|
127
|
+
return bedrock ? familyMatching(bedrock[1], BEDROCK_SUFFIX) : undefined;
|
|
128
|
+
}
|
|
129
|
+
exports.anthropicModelFamily = anthropicModelFamily;
|
|
130
|
+
/** Compatibility only: do not use this permissive lookup for hard refusals. */
|
|
131
|
+
function thinkingFamily(model) {
|
|
132
|
+
const id = model.toLowerCase();
|
|
133
|
+
const start = id.indexOf('claude-');
|
|
134
|
+
if (start < 0)
|
|
135
|
+
return undefined;
|
|
136
|
+
return familyMatching(id.slice(start).replace(/\./g, '-'), THINKING_SUFFIX);
|
|
137
|
+
}
|
|
138
|
+
/** The table's facts for a model id, or `undefined` for an id it does not know. */
|
|
139
|
+
function anthropicModelFacts(model) {
|
|
140
|
+
const family = anthropicModelFamily(model);
|
|
141
|
+
return family === undefined ? undefined : exports.ANTHROPIC_MODELS[family];
|
|
142
|
+
}
|
|
143
|
+
exports.anthropicModelFacts = anthropicModelFacts;
|
|
144
|
+
/**
|
|
145
|
+
* The thinking mode a Claude model id takes on the Anthropic Messages wire.
|
|
146
|
+
*
|
|
147
|
+
* An id no family matches answers `'adaptive'` — what every Claude model since
|
|
148
|
+
* 4.7 takes (they reject a budget), so a model released after this table
|
|
149
|
+
* thinks instead of failing with a 400.
|
|
150
|
+
*
|
|
151
|
+
* The cost of that default, named: an id that does not say which model it
|
|
152
|
+
* serves — an application-inference-profile ARN, a gateway alias, a
|
|
153
|
+
* deployment name — is read as adaptive too, and a budget-only model behind
|
|
154
|
+
* it (Claude 4.5 and earlier) refuses adaptive. The adapters take a
|
|
155
|
+
* `thinkingMode` option for exactly that (`anthropicThinkingWire.ts` ·
|
|
156
|
+
* `thinkingModeWith`).
|
|
157
|
+
*
|
|
158
|
+
* Historical dotted and decorated aliases retain their existing thinking
|
|
159
|
+
* lookup. That compatibility behavior is not a hard fact about the model
|
|
160
|
+
* behind an opaque deployment and does not control forced-tool refusals.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* anthropicThinkingMode('claude-opus-5-5'); // 'adaptive'
|
|
164
|
+
* anthropicThinkingMode('us.anthropic.claude-sonnet-4-5-20250929-v1:0'); // 'budget'
|
|
165
|
+
* anthropicThinkingMode('claude-3-5-haiku@20241022'); // 'none'
|
|
166
|
+
* anthropicThinkingMode('claude-opus-6'); // 'adaptive' — unknown
|
|
167
|
+
*/
|
|
168
|
+
function anthropicThinkingMode(model) {
|
|
169
|
+
const family = thinkingFamily(model);
|
|
170
|
+
return family === undefined ? 'adaptive' : exports.ANTHROPIC_MODELS[family].thinking;
|
|
171
|
+
}
|
|
172
|
+
exports.anthropicThinkingMode = anthropicThinkingMode;
|
|
173
|
+
/**
|
|
174
|
+
* Whether a Claude model id takes a forced tool choice. An id the table does
|
|
175
|
+
* not know is NOT refused: the newest models disagree (Haiku 5.5 takes one,
|
|
176
|
+
* Opus 5.5 does not), so the table makes no claim it cannot source, and the
|
|
177
|
+
* API's own 400 names `tool_choice` until the model has a row.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* anthropicTakesForcedToolChoice('claude-opus-5-5'); // false
|
|
181
|
+
* anthropicTakesForcedToolChoice('anthropic.claude-haiku-5-5'); // true
|
|
182
|
+
*/
|
|
183
|
+
function anthropicTakesForcedToolChoice(model) {
|
|
184
|
+
return anthropicModelFacts(model)?.forcedToolChoice ?? true;
|
|
185
|
+
}
|
|
186
|
+
exports.anthropicTakesForcedToolChoice = anthropicTakesForcedToolChoice;
|
|
187
|
+
//# sourceMappingURL=anthropicModels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropicModels.js","sourceRoot":"","sources":["../../../src/adapters/llm/anthropicModels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.omitAnthropicThinking = exports.restoreAnthropicReplay = exports.captureAnthropicResponseReplay = exports.lossyAnthropicReplay = exports.captureAnthropicReplay = exports.replayDigest = void 0;
|
|
4
|
+
const canonicalJson_js_1 = require("../../lib/canonicalJson.js");
|
|
5
|
+
const sha256_js_1 = require("../../lib/time-travel/sha256.js");
|
|
6
|
+
/** One domain-separated digest owner for response fidelity and request binding. */
|
|
7
|
+
function replayDigest(value, salt) {
|
|
8
|
+
return (0, sha256_js_1.sha256Hex)(`agentfootprint/anthropic-replay/1\u0000${salt}\u0000${(0, canonicalJson_js_1.canonicalJson)(value)}`);
|
|
9
|
+
}
|
|
10
|
+
exports.replayDigest = replayDigest;
|
|
11
|
+
/** Capture only a complete, representable response; unknown fields are not silently lost. */
|
|
12
|
+
function captureAnthropicReplay(content, id, stopReason, binding) {
|
|
13
|
+
if (typeof id !== 'string' || id.length === 0 || typeof stopReason !== 'string')
|
|
14
|
+
return undefined;
|
|
15
|
+
const layout = [];
|
|
16
|
+
let thinking = 0;
|
|
17
|
+
let tools = 0;
|
|
18
|
+
for (const block of content) {
|
|
19
|
+
if (!isSupportedBlock(block))
|
|
20
|
+
return undefined;
|
|
21
|
+
switch (block.type) {
|
|
22
|
+
case 'text':
|
|
23
|
+
layout.push({ type: 'text', length: block.text.length });
|
|
24
|
+
break;
|
|
25
|
+
case 'thinking':
|
|
26
|
+
case 'redacted_thinking':
|
|
27
|
+
layout.push({ type: 'thinking', index: thinking++ });
|
|
28
|
+
break;
|
|
29
|
+
case 'tool_use':
|
|
30
|
+
layout.push({ type: 'tool', index: tools++ });
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return {
|
|
36
|
+
version: 1,
|
|
37
|
+
protocol: 'anthropic-messages',
|
|
38
|
+
id,
|
|
39
|
+
layout,
|
|
40
|
+
stopReason,
|
|
41
|
+
contentDigest: replayDigest(content, binding?.salt ?? id),
|
|
42
|
+
...(binding !== undefined && { binding }),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Non-JSON tool arguments cannot supply an exact saved-response proof.
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.captureAnthropicReplay = captureAnthropicReplay;
|
|
51
|
+
/** Durable negative evidence, without retaining unsupported response values. */
|
|
52
|
+
function lossyAnthropicReplay(content, id, stopReason, binding, observedThinking = false) {
|
|
53
|
+
let thinking = 0;
|
|
54
|
+
const layout = content.flatMap((block) => block.type === 'thinking' || block.type === 'redacted_thinking'
|
|
55
|
+
? [{ type: 'thinking', index: thinking++ }]
|
|
56
|
+
: []);
|
|
57
|
+
// An orphan delta witnesses thinking even when no block can be recovered.
|
|
58
|
+
// This negative marker states presence only, not a reconstructed value/count.
|
|
59
|
+
if (layout.length === 0 && observedThinking)
|
|
60
|
+
layout.push({ type: 'thinking', index: 0 });
|
|
61
|
+
return {
|
|
62
|
+
version: 1,
|
|
63
|
+
protocol: 'anthropic-messages',
|
|
64
|
+
id: typeof id === 'string' ? id : '',
|
|
65
|
+
// Even a block normalization could not keep must remain known to policy.
|
|
66
|
+
layout,
|
|
67
|
+
stopReason: typeof stopReason === 'string' ? stopReason : '',
|
|
68
|
+
contentDigest: '',
|
|
69
|
+
lossy: true,
|
|
70
|
+
...(binding !== undefined && { binding }),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
exports.lossyAnthropicReplay = lossyAnthropicReplay;
|
|
74
|
+
/** Missing identities on old text-only mocks are unknown, not known content loss. */
|
|
75
|
+
function captureAnthropicResponseReplay(content, id, stopReason, binding) {
|
|
76
|
+
const captured = captureAnthropicReplay(content, id, stopReason, binding);
|
|
77
|
+
if (captured !== undefined)
|
|
78
|
+
return captured;
|
|
79
|
+
if (!id &&
|
|
80
|
+
content.every((block) => isSupportedBlock(block) && block.type !== 'thinking' && block.type !== 'redacted_thinking')) {
|
|
81
|
+
try {
|
|
82
|
+
(0, canonicalJson_js_1.canonicalJson)(content);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
/* A non-JSON value is known loss, not a missing identity. */
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return lossyAnthropicReplay(content, id, stopReason, binding);
|
|
90
|
+
}
|
|
91
|
+
exports.captureAnthropicResponseReplay = captureAnthropicResponseReplay;
|
|
92
|
+
/** Reassemble current fields only; no stored original values can be recovered. */
|
|
93
|
+
function reconstructCurrentLayout(message) {
|
|
94
|
+
const replay = message.replay;
|
|
95
|
+
if (replay?.version !== 1 ||
|
|
96
|
+
replay.protocol !== 'anthropic-messages' ||
|
|
97
|
+
replay.lossy === true ||
|
|
98
|
+
typeof replay.id !== 'string' ||
|
|
99
|
+
replay.id.length === 0 ||
|
|
100
|
+
!Array.isArray(replay.layout) ||
|
|
101
|
+
(replay.thinkingRetired === true && (message.thinkingBlocks?.length ?? 0) > 0) ||
|
|
102
|
+
typeof message.content !== 'string')
|
|
103
|
+
return undefined;
|
|
104
|
+
const blocks = [];
|
|
105
|
+
const thinking = message.thinkingBlocks ?? [];
|
|
106
|
+
const tools = message.toolCalls ?? [];
|
|
107
|
+
let textOffset = 0;
|
|
108
|
+
let thinkingIndex = 0;
|
|
109
|
+
let toolIndex = 0;
|
|
110
|
+
for (const part of replay.layout) {
|
|
111
|
+
if (part === null || typeof part !== 'object')
|
|
112
|
+
return undefined;
|
|
113
|
+
if (part.type === 'text') {
|
|
114
|
+
if (!Number.isSafeInteger(part.length) ||
|
|
115
|
+
part.length < 0 ||
|
|
116
|
+
part.length > message.content.length - textOffset)
|
|
117
|
+
return undefined;
|
|
118
|
+
blocks.push({
|
|
119
|
+
type: 'text',
|
|
120
|
+
text: message.content.slice(textOffset, textOffset + part.length),
|
|
121
|
+
});
|
|
122
|
+
textOffset += part.length;
|
|
123
|
+
}
|
|
124
|
+
else if (part.type === 'thinking') {
|
|
125
|
+
if (part.index !== thinkingIndex)
|
|
126
|
+
return undefined;
|
|
127
|
+
const block = thinking[thinkingIndex++];
|
|
128
|
+
if (!block || typeof block.content !== 'string')
|
|
129
|
+
return undefined;
|
|
130
|
+
if (block.type === 'redacted_thinking') {
|
|
131
|
+
if (block.content !== '' || typeof block.signature !== 'string')
|
|
132
|
+
return undefined;
|
|
133
|
+
blocks.push({ type: 'redacted_thinking', data: block.signature });
|
|
134
|
+
}
|
|
135
|
+
else if (block.type === 'thinking') {
|
|
136
|
+
if (block.signature !== undefined && typeof block.signature !== 'string')
|
|
137
|
+
return undefined;
|
|
138
|
+
blocks.push({
|
|
139
|
+
type: 'thinking',
|
|
140
|
+
thinking: block.content,
|
|
141
|
+
...(block.signature !== undefined && { signature: block.signature }),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
else if (part.type === 'tool') {
|
|
148
|
+
if (part.index !== toolIndex)
|
|
149
|
+
return undefined;
|
|
150
|
+
const tool = tools[toolIndex++];
|
|
151
|
+
if (!tool ||
|
|
152
|
+
typeof tool.id !== 'string' ||
|
|
153
|
+
typeof tool.name !== 'string' ||
|
|
154
|
+
tool.args === null ||
|
|
155
|
+
typeof tool.args !== 'object' ||
|
|
156
|
+
Array.isArray(tool.args))
|
|
157
|
+
return undefined;
|
|
158
|
+
blocks.push({ type: 'tool_use', id: tool.id, name: tool.name, input: { ...tool.args } });
|
|
159
|
+
}
|
|
160
|
+
else
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
if (textOffset !== message.content.length ||
|
|
164
|
+
thinkingIndex !== thinking.length ||
|
|
165
|
+
toolIndex !== tools.length)
|
|
166
|
+
return undefined;
|
|
167
|
+
return blocks;
|
|
168
|
+
}
|
|
169
|
+
/** Exact replay additionally requires the original full-content digest. */
|
|
170
|
+
function restoreAnthropicReplay(message) {
|
|
171
|
+
const blocks = reconstructCurrentLayout(message);
|
|
172
|
+
const replay = message.replay;
|
|
173
|
+
if (blocks === undefined || replay === undefined)
|
|
174
|
+
return undefined;
|
|
175
|
+
try {
|
|
176
|
+
return replayDigest(blocks, replay.binding?.salt ?? replay.id) === replay.contentDigest
|
|
177
|
+
? blocks
|
|
178
|
+
: undefined;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.restoreAnthropicReplay = restoreAnthropicReplay;
|
|
185
|
+
/**
|
|
186
|
+
* Retire thinking without changing the remaining text/tool order. Invalid or
|
|
187
|
+
* edited history is projected as it is now; there is no stored text to revive.
|
|
188
|
+
*/
|
|
189
|
+
function omitAnthropicThinking(message) {
|
|
190
|
+
// Current signatures/text may have changed, which is WHY omission is needed.
|
|
191
|
+
// A valid layout still describes their order without resurrecting originals.
|
|
192
|
+
// Known loss or incompatible counts never gains a replacement fidelity proof.
|
|
193
|
+
const content = reconstructCurrentLayout(message);
|
|
194
|
+
const { thinkingBlocks: _thinking, replay, ...rest } = message;
|
|
195
|
+
void _thinking;
|
|
196
|
+
if (replay === undefined)
|
|
197
|
+
return rest;
|
|
198
|
+
const retained = content?.filter((block) => block.type !== 'thinking' && block.type !== 'redacted_thinking');
|
|
199
|
+
const replacement = retained === undefined
|
|
200
|
+
? undefined
|
|
201
|
+
: captureAnthropicReplay(retained, replay.id, replay.stopReason, replay.binding);
|
|
202
|
+
return { ...rest, replay: { ...(replacement ?? replay), thinkingRetired: true } };
|
|
203
|
+
}
|
|
204
|
+
exports.omitAnthropicThinking = omitAnthropicThinking;
|
|
205
|
+
/** Guard the exact represented fields; citations/server-tool blocks need another carrier. */
|
|
206
|
+
function isSupportedBlock(block) {
|
|
207
|
+
if (block === null || typeof block !== 'object')
|
|
208
|
+
return false;
|
|
209
|
+
let fields;
|
|
210
|
+
switch (block.type) {
|
|
211
|
+
case 'text':
|
|
212
|
+
if (typeof block.text !== 'string')
|
|
213
|
+
return false;
|
|
214
|
+
fields = ['type', 'text'];
|
|
215
|
+
break;
|
|
216
|
+
case 'thinking':
|
|
217
|
+
if (typeof block.thinking !== 'string' ||
|
|
218
|
+
(block.signature !== undefined && typeof block.signature !== 'string'))
|
|
219
|
+
return false;
|
|
220
|
+
fields = ['type', 'thinking', 'signature'];
|
|
221
|
+
break;
|
|
222
|
+
case 'redacted_thinking':
|
|
223
|
+
if (typeof block.data !== 'string')
|
|
224
|
+
return false;
|
|
225
|
+
fields = ['type', 'data'];
|
|
226
|
+
break;
|
|
227
|
+
case 'tool_use':
|
|
228
|
+
if (typeof block.id !== 'string' ||
|
|
229
|
+
typeof block.name !== 'string' ||
|
|
230
|
+
block.input === null ||
|
|
231
|
+
typeof block.input !== 'object' ||
|
|
232
|
+
Array.isArray(block.input))
|
|
233
|
+
return false;
|
|
234
|
+
fields = ['type', 'id', 'name', 'input'];
|
|
235
|
+
break;
|
|
236
|
+
default:
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
return Object.keys(block).every((key) => fields.includes(key));
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=anthropicReplayLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropicReplayLayout.js","sourceRoot":"","sources":["../../../src/adapters/llm/anthropicReplayLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareAnthropicReplay = exports.thinkingReplayBinding = void 0;
|
|
4
|
+
const replay_js_1 = require("../../thinking/replay.js");
|
|
5
|
+
const replayHistory_js_1 = require("../../thinking/replayHistory.js");
|
|
6
|
+
const canonicalJson_js_1 = require("../../lib/canonicalJson.js");
|
|
7
|
+
const anthropicMessageProjection_js_1 = require("./anthropicMessageProjection.js");
|
|
8
|
+
const anthropicReplayLayout_js_1 = require("./anthropicReplayLayout.js");
|
|
9
|
+
const anthropicModels_js_1 = require("./anthropicModels.js");
|
|
10
|
+
/** Cache annotations are ignored only at wire-owned positions, never in args. */
|
|
11
|
+
function withoutCache(value) {
|
|
12
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
13
|
+
return value;
|
|
14
|
+
const { cache_control: _cache, ...rest } = value;
|
|
15
|
+
return rest;
|
|
16
|
+
}
|
|
17
|
+
function systemOf(system) {
|
|
18
|
+
if (!Array.isArray(system))
|
|
19
|
+
return system ?? '';
|
|
20
|
+
const blocks = system.map(withoutCache);
|
|
21
|
+
if (blocks.every((b) => typeof b === 'object' && b !== null && 'type' in b && b.type === 'text' && 'text' in b)) {
|
|
22
|
+
return blocks.map((b) => b.text).join('');
|
|
23
|
+
}
|
|
24
|
+
return blocks;
|
|
25
|
+
}
|
|
26
|
+
function toolsOf(tools) {
|
|
27
|
+
return (tools ?? [])
|
|
28
|
+
.map(withoutCache)
|
|
29
|
+
.sort((a, b) => (0, canonicalJson_js_1.canonicalJson)(a).localeCompare((0, canonicalJson_js_1.canonicalJson)(b)));
|
|
30
|
+
}
|
|
31
|
+
function messagesWithoutThinking(messages) {
|
|
32
|
+
const kept = [];
|
|
33
|
+
for (const m of messages) {
|
|
34
|
+
if (typeof m.content === 'string') {
|
|
35
|
+
kept.push(m);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const content = m.content
|
|
39
|
+
.filter((b) => b.type !== 'thinking' && b.type !== 'redacted_thinking')
|
|
40
|
+
.map(withoutCache);
|
|
41
|
+
if (content.length > 0)
|
|
42
|
+
kept.push({ role: m.role, content });
|
|
43
|
+
}
|
|
44
|
+
return kept;
|
|
45
|
+
}
|
|
46
|
+
function thinkingSequence(messages) {
|
|
47
|
+
return messages.flatMap((m) => typeof m.content === 'string'
|
|
48
|
+
? []
|
|
49
|
+
: m.content.flatMap((b) => b.type === 'thinking' || b.type === 'redacted_thinking'
|
|
50
|
+
? [
|
|
51
|
+
(0, anthropicReplayLayout_js_1.replayDigest)(b.type === 'thinking' ? [b.type, b.signature] : [b.type, b.data], 'thinking-sequence-v1'),
|
|
52
|
+
]
|
|
53
|
+
: []));
|
|
54
|
+
}
|
|
55
|
+
/** Capture actual serialized request values BEFORE awaiting transport. */
|
|
56
|
+
function thinkingReplayBinding(body, model) {
|
|
57
|
+
const system = (0, canonicalJson_js_1.canonicalJson)(systemOf(body.system));
|
|
58
|
+
const tools = (0, canonicalJson_js_1.canonicalJson)(toolsOf(body.tools));
|
|
59
|
+
const messages = (0, canonicalJson_js_1.canonicalJson)(messagesWithoutThinking(body.messages));
|
|
60
|
+
const priorThinking = thinkingSequence(body.messages);
|
|
61
|
+
return (id) => ({
|
|
62
|
+
model,
|
|
63
|
+
salt: id,
|
|
64
|
+
system: (0, anthropicReplayLayout_js_1.replayDigest)(system, id),
|
|
65
|
+
tools: (0, anthropicReplayLayout_js_1.replayDigest)(tools, id),
|
|
66
|
+
messages: (0, anthropicReplayLayout_js_1.replayDigest)(messages, id),
|
|
67
|
+
priorThinking: [...priorThinking],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
exports.thinkingReplayBinding = thinkingReplayBinding;
|
|
71
|
+
/** A supplied tool result is not completion. Only a witnessed end_turn is. */
|
|
72
|
+
function completedThrough(messages) {
|
|
73
|
+
const pending = new Set();
|
|
74
|
+
let completed = -1;
|
|
75
|
+
for (let i = 0; i < messages.length; i++) {
|
|
76
|
+
const m = messages[i];
|
|
77
|
+
if (m.role === 'assistant') {
|
|
78
|
+
for (const tool of m.toolCalls ?? [])
|
|
79
|
+
pending.add(tool.id);
|
|
80
|
+
if (m.replay?.version === 1 &&
|
|
81
|
+
m.replay.protocol === 'anthropic-messages' &&
|
|
82
|
+
typeof m.replay.id === 'string' &&
|
|
83
|
+
m.replay.id.length > 0 &&
|
|
84
|
+
m.replay.stopReason === 'end_turn' &&
|
|
85
|
+
pending.size === 0 &&
|
|
86
|
+
!m.toolCalls?.length)
|
|
87
|
+
completed = i;
|
|
88
|
+
}
|
|
89
|
+
else if (m.role === 'tool' && m.toolCallId !== undefined)
|
|
90
|
+
pending.delete(m.toolCallId);
|
|
91
|
+
}
|
|
92
|
+
return completed;
|
|
93
|
+
}
|
|
94
|
+
function suffixOf(current, original) {
|
|
95
|
+
return (current.length <= original.length &&
|
|
96
|
+
current.every((value, i) => value === original[original.length - current.length + i]));
|
|
97
|
+
}
|
|
98
|
+
function inconsistency(request, index, model) {
|
|
99
|
+
const message = request.messages[index];
|
|
100
|
+
const blocks = message.thinkingBlocks ?? [];
|
|
101
|
+
if (blocks.some((b) => typeof b.signature !== 'string' || b.signature.length === 0))
|
|
102
|
+
return 'missing-signature';
|
|
103
|
+
const replay = message.replay;
|
|
104
|
+
if (replay?.version !== 1 || replay.protocol !== 'anthropic-messages')
|
|
105
|
+
return undefined;
|
|
106
|
+
if (replay.thinkingRetired)
|
|
107
|
+
return blocks.length > 0 ? 'thinking-retired' : undefined;
|
|
108
|
+
if (replay.lossy)
|
|
109
|
+
return 'content-changed';
|
|
110
|
+
if ((0, anthropicReplayLayout_js_1.restoreAnthropicReplay)(message) === undefined)
|
|
111
|
+
return 'content-changed';
|
|
112
|
+
const binding = replay.binding;
|
|
113
|
+
// Cross-model signatures are server-owned. Locally assert the prefix rule
|
|
114
|
+
// only for a documented bound family replaying its own blocks; unknown
|
|
115
|
+
// aliases, legacy models and cross-family/account compatibility stay unknown.
|
|
116
|
+
if (binding === undefined ||
|
|
117
|
+
(0, anthropicModels_js_1.anthropicModelFacts)(model)?.thinkingPrefixBinding !== true ||
|
|
118
|
+
(0, anthropicModels_js_1.anthropicModelFamily)(model) !== (0, anthropicModels_js_1.anthropicModelFamily)(binding.model))
|
|
119
|
+
return undefined;
|
|
120
|
+
const before = (0, anthropicMessageProjection_js_1.toAnthropicMessages)(request.messages.slice(0, index));
|
|
121
|
+
if ((0, anthropicReplayLayout_js_1.replayDigest)((0, canonicalJson_js_1.canonicalJson)(systemOf(request.systemPrompt)), binding.salt) !== binding.system ||
|
|
122
|
+
(0, anthropicReplayLayout_js_1.replayDigest)((0, canonicalJson_js_1.canonicalJson)(toolsOf(request.tools?.map(anthropicMessageProjection_js_1.toAnthropicTool))), binding.salt) !==
|
|
123
|
+
binding.tools ||
|
|
124
|
+
(0, anthropicReplayLayout_js_1.replayDigest)((0, canonicalJson_js_1.canonicalJson)(messagesWithoutThinking(before)), binding.salt) !== binding.messages)
|
|
125
|
+
return 'prefix-changed';
|
|
126
|
+
if (!suffixOf(thinkingSequence(before), binding.priorThinking))
|
|
127
|
+
return 'sequence-changed';
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
/** Pure and idempotent. No caller mutation; all refusals precede any report. */
|
|
131
|
+
function prepareAnthropicReplay(request, model, provider) {
|
|
132
|
+
const completed = completedThrough(request.messages);
|
|
133
|
+
let prepared = request;
|
|
134
|
+
const omissions = [];
|
|
135
|
+
let retiredThrough = -1;
|
|
136
|
+
const retire = (index, reason) => {
|
|
137
|
+
const message = prepared.messages[index];
|
|
138
|
+
if (message.role !== 'assistant' || !message.thinkingBlocks?.length)
|
|
139
|
+
return;
|
|
140
|
+
const fingerprint = (0, replayHistory_js_1.replayMessageFingerprint)(message);
|
|
141
|
+
for (let b = 0; b < message.thinkingBlocks.length; b++)
|
|
142
|
+
omissions.push({
|
|
143
|
+
messageIndex: index,
|
|
144
|
+
blockIndex: b,
|
|
145
|
+
reason,
|
|
146
|
+
...(message.replay?.id && { replayId: message.replay.id }),
|
|
147
|
+
messageFingerprint: fingerprint,
|
|
148
|
+
});
|
|
149
|
+
const messages = [...prepared.messages];
|
|
150
|
+
messages[index] = (0, anthropicReplayLayout_js_1.omitAnthropicThinking)(message);
|
|
151
|
+
prepared = { ...prepared, messages };
|
|
152
|
+
};
|
|
153
|
+
for (let i = 0; i < request.messages.length; i++) {
|
|
154
|
+
const message = prepared.messages[i];
|
|
155
|
+
if (message.role !== 'assistant')
|
|
156
|
+
continue;
|
|
157
|
+
const hadThinking = message.replay?.version === 1 &&
|
|
158
|
+
message.replay.protocol === 'anthropic-messages' &&
|
|
159
|
+
message.replay.thinkingRetired !== true &&
|
|
160
|
+
Array.isArray(message.replay.layout) &&
|
|
161
|
+
message.replay.layout.some((part) => part.type === 'thinking');
|
|
162
|
+
if (!message.thinkingBlocks?.length && !hadThinking)
|
|
163
|
+
continue;
|
|
164
|
+
const reason = inconsistency(prepared, i, model);
|
|
165
|
+
if (reason === undefined)
|
|
166
|
+
continue;
|
|
167
|
+
// Unknown terminal status is not invented from a user nudge or tool result.
|
|
168
|
+
if (i > completed)
|
|
169
|
+
throw new replay_js_1.UnsafeThinkingReplayError(provider, model, i, reason);
|
|
170
|
+
// The caller already removed everything from this completed turn. We
|
|
171
|
+
// remove nothing and must not claim an omission or rewrite its evidence.
|
|
172
|
+
if (!message.thinkingBlocks?.length)
|
|
173
|
+
continue;
|
|
174
|
+
// Never create a middle gap, even if later blocks predate local evidence.
|
|
175
|
+
// For bound models, extend a permitted removal BACK to the oldest prefix,
|
|
176
|
+
// not forward into an active turn. Every extra removal is reported. All
|
|
177
|
+
// these earlier indices are <= completed; later exact content is retained.
|
|
178
|
+
if ((0, anthropicModels_js_1.anthropicModelFacts)(model)?.thinkingPrefixBinding === true) {
|
|
179
|
+
for (let earlier = retiredThrough + 1; earlier < i; earlier++)
|
|
180
|
+
retire(earlier, 'sequence-changed');
|
|
181
|
+
retiredThrough = i;
|
|
182
|
+
}
|
|
183
|
+
retire(i, reason);
|
|
184
|
+
}
|
|
185
|
+
return { provider, model, request: prepared, omissions };
|
|
186
|
+
}
|
|
187
|
+
exports.prepareAnthropicReplay = prepareAnthropicReplay;
|
|
188
|
+
//# sourceMappingURL=anthropicThinkingReplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropicThinkingReplay.js","sourceRoot":"","sources":["../../../src/adapters/llm/anthropicThinkingReplay.ts"],"names":[],"mappings":"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"}
|