@xortex/xcode 3.0.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/LICENSE +21 -0
- package/README.md +171 -0
- package/bin/xcode +127 -0
- package/bin/xcode-test +84 -0
- package/bin/xcode.cmd +31 -0
- package/constants/apiLimits.ts +94 -0
- package/constants/betas.ts +52 -0
- package/constants/common.ts +33 -0
- package/constants/cyberRiskInstruction.ts +24 -0
- package/constants/errorIds.ts +15 -0
- package/constants/figures.ts +45 -0
- package/constants/files.ts +156 -0
- package/constants/github-app.ts +144 -0
- package/constants/keys.ts +11 -0
- package/constants/messages.ts +1 -0
- package/constants/oauth.ts +234 -0
- package/constants/outputStyles.ts +216 -0
- package/constants/product.ts +76 -0
- package/constants/prompts.ts +939 -0
- package/constants/spinnerVerbs.ts +204 -0
- package/constants/system.ts +95 -0
- package/constants/systemPromptSections.ts +68 -0
- package/constants/toolLimits.ts +56 -0
- package/constants/tools.ts +112 -0
- package/constants/turnCompletionVerbs.ts +12 -0
- package/constants/xml.ts +86 -0
- package/entrypoints/agentSdkTypes.ts +443 -0
- package/entrypoints/cli.tsx +307 -0
- package/entrypoints/init.ts +340 -0
- package/entrypoints/mcp.ts +196 -0
- package/entrypoints/sandboxTypes.ts +156 -0
- package/entrypoints/sdk/controlSchemas.ts +663 -0
- package/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/entrypoints/sdk/coreTypes.generated.ts +2 -0
- package/entrypoints/sdk/coreTypes.ts +62 -0
- package/entrypoints/sdk/runtimeTypes.ts +140 -0
- package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
- package/entrypoints/sdk/toolTypes.ts +90 -0
- package/main.tsx +4686 -0
- package/package.json +120 -0
- package/services/AgentSummary/agentSummary.ts +179 -0
- package/services/MagicDocs/magicDocs.ts +254 -0
- package/services/MagicDocs/prompts.ts +127 -0
- package/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/services/PromptSuggestion/speculation.ts +991 -0
- package/services/SessionMemory/prompts.ts +324 -0
- package/services/SessionMemory/sessionMemory.ts +495 -0
- package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/services/analytics/config.ts +38 -0
- package/services/analytics/datadog.ts +307 -0
- package/services/analytics/firstPartyEventLogger.ts +449 -0
- package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/services/analytics/growthbook.ts +1155 -0
- package/services/analytics/index.ts +173 -0
- package/services/analytics/metadata.ts +973 -0
- package/services/analytics/sink.ts +114 -0
- package/services/analytics/sinkKillswitch.ts +25 -0
- package/services/api/adminRequests.ts +119 -0
- package/services/api/bootstrap.ts +141 -0
- package/services/api/claude.ts +3422 -0
- package/services/api/client.ts +406 -0
- package/services/api/dumpPrompts.ts +226 -0
- package/services/api/emptyUsage.ts +22 -0
- package/services/api/errorUtils.ts +260 -0
- package/services/api/errors.ts +1207 -0
- package/services/api/filesApi.ts +748 -0
- package/services/api/firstTokenDate.ts +60 -0
- package/services/api/gemini.ts +359 -0
- package/services/api/geminiAdapter.ts +123 -0
- package/services/api/geminiClient.ts +291 -0
- package/services/api/grove.ts +357 -0
- package/services/api/logging.ts +788 -0
- package/services/api/metricsOptOut.ts +159 -0
- package/services/api/openRouterClient.ts +453 -0
- package/services/api/overageCreditGrant.ts +137 -0
- package/services/api/promptCacheBreakDetection.ts +727 -0
- package/services/api/referral.ts +281 -0
- package/services/api/sessionIngress.ts +514 -0
- package/services/api/ultrareviewQuota.ts +38 -0
- package/services/api/usage.ts +63 -0
- package/services/api/withRetry.ts +822 -0
- package/services/autoDream/autoDream.ts +324 -0
- package/services/autoDream/config.ts +21 -0
- package/services/autoDream/consolidationLock.ts +140 -0
- package/services/autoDream/consolidationPrompt.ts +65 -0
- package/services/awaySummary.ts +74 -0
- package/services/claudeAiLimits.ts +515 -0
- package/services/claudeAiLimitsHook.ts +23 -0
- package/services/compact/apiMicrocompact.ts +153 -0
- package/services/compact/autoCompact.ts +351 -0
- package/services/compact/compact.ts +1705 -0
- package/services/compact/compactWarningHook.ts +16 -0
- package/services/compact/compactWarningState.ts +18 -0
- package/services/compact/grouping.ts +63 -0
- package/services/compact/microCompact.ts +530 -0
- package/services/compact/postCompactCleanup.ts +77 -0
- package/services/compact/prompt.ts +374 -0
- package/services/compact/sessionMemoryCompact.ts +630 -0
- package/services/compact/timeBasedMCConfig.ts +43 -0
- package/services/diagnosticTracking.ts +397 -0
- package/services/extractMemories/extractMemories.ts +517 -0
- package/services/extractMemories/prompts.ts +154 -0
- package/services/internalLogging.ts +90 -0
- package/services/lsp/LSPClient.ts +447 -0
- package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/services/lsp/LSPServerInstance.ts +511 -0
- package/services/lsp/LSPServerManager.ts +420 -0
- package/services/lsp/config.ts +79 -0
- package/services/lsp/manager.ts +289 -0
- package/services/lsp/passiveFeedback.ts +328 -0
- package/services/mcp/InProcessTransport.ts +63 -0
- package/services/mcp/MCPConnectionManager.tsx +73 -0
- package/services/mcp/SdkControlTransport.ts +136 -0
- package/services/mcp/auth.ts +2465 -0
- package/services/mcp/channelAllowlist.ts +76 -0
- package/services/mcp/channelNotification.ts +316 -0
- package/services/mcp/channelPermissions.ts +240 -0
- package/services/mcp/claudeai.ts +164 -0
- package/services/mcp/client.ts +3348 -0
- package/services/mcp/config.ts +1578 -0
- package/services/mcp/elicitationHandler.ts +313 -0
- package/services/mcp/envExpansion.ts +38 -0
- package/services/mcp/headersHelper.ts +138 -0
- package/services/mcp/mcpStringUtils.ts +106 -0
- package/services/mcp/normalization.ts +23 -0
- package/services/mcp/oauthPort.ts +78 -0
- package/services/mcp/officialRegistry.ts +72 -0
- package/services/mcp/types.ts +258 -0
- package/services/mcp/useManageMCPConnections.ts +1141 -0
- package/services/mcp/utils.ts +575 -0
- package/services/mcp/vscodeSdkMcp.ts +112 -0
- package/services/mcp/xaa.ts +511 -0
- package/services/mcp/xaaIdpLogin.ts +487 -0
- package/services/mcpServerApproval.tsx +41 -0
- package/services/mockRateLimits.ts +882 -0
- package/services/notifier.ts +156 -0
- package/services/oauth/auth-code-listener.ts +211 -0
- package/services/oauth/client.ts +566 -0
- package/services/oauth/crypto.ts +23 -0
- package/services/oauth/getOauthProfile.ts +53 -0
- package/services/oauth/index.ts +198 -0
- package/services/plugins/PluginInstallationManager.ts +184 -0
- package/services/plugins/pluginCliCommands.ts +344 -0
- package/services/plugins/pluginOperations.ts +1088 -0
- package/services/policyLimits/index.ts +663 -0
- package/services/policyLimits/types.ts +27 -0
- package/services/preventSleep.ts +165 -0
- package/services/rateLimitMessages.ts +344 -0
- package/services/rateLimitMocking.ts +144 -0
- package/services/remoteManagedSettings/index.ts +638 -0
- package/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/services/remoteManagedSettings/syncCache.ts +112 -0
- package/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/services/remoteManagedSettings/types.ts +31 -0
- package/services/settingsSync/index.ts +581 -0
- package/services/settingsSync/types.ts +67 -0
- package/services/teamMemorySync/index.ts +1256 -0
- package/services/teamMemorySync/secretScanner.ts +324 -0
- package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/services/teamMemorySync/types.ts +156 -0
- package/services/teamMemorySync/watcher.ts +387 -0
- package/services/tips/tipHistory.ts +17 -0
- package/services/tips/tipRegistry.ts +686 -0
- package/services/tips/tipScheduler.ts +58 -0
- package/services/tokenEstimation.ts +495 -0
- package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/services/tools/StreamingToolExecutor.ts +530 -0
- package/services/tools/toolExecution.ts +1745 -0
- package/services/tools/toolHooks.ts +650 -0
- package/services/tools/toolOrchestration.ts +188 -0
- package/services/vcr.ts +406 -0
- package/services/voice.ts +525 -0
- package/services/voiceKeyterms.ts +106 -0
- package/services/voiceStreamSTT.ts +544 -0
- package/tools/AgentTool/AgentTool.tsx +1398 -0
- package/tools/AgentTool/UI.tsx +872 -0
- package/tools/AgentTool/agentColorManager.ts +66 -0
- package/tools/AgentTool/agentDisplay.ts +104 -0
- package/tools/AgentTool/agentMemory.ts +177 -0
- package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/tools/AgentTool/agentToolUtils.ts +686 -0
- package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/tools/AgentTool/builtInAgents.ts +72 -0
- package/tools/AgentTool/constants.ts +12 -0
- package/tools/AgentTool/forkSubagent.ts +210 -0
- package/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/tools/AgentTool/prompt.ts +287 -0
- package/tools/AgentTool/resumeAgent.ts +265 -0
- package/tools/AgentTool/runAgent.ts +973 -0
- package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/tools/BashTool/BashTool.tsx +1144 -0
- package/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/tools/BashTool/UI.tsx +185 -0
- package/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/tools/BashTool/bashPermissions.ts +2621 -0
- package/tools/BashTool/bashSecurity.ts +2592 -0
- package/tools/BashTool/commandSemantics.ts +140 -0
- package/tools/BashTool/commentLabel.ts +13 -0
- package/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/tools/BashTool/modeValidation.ts +115 -0
- package/tools/BashTool/pathValidation.ts +1303 -0
- package/tools/BashTool/prompt.ts +369 -0
- package/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/tools/BashTool/sedEditParser.ts +322 -0
- package/tools/BashTool/sedValidation.ts +684 -0
- package/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/tools/BashTool/toolName.ts +2 -0
- package/tools/BashTool/utils.ts +223 -0
- package/tools/BriefTool/BriefTool.ts +204 -0
- package/tools/BriefTool/UI.tsx +101 -0
- package/tools/BriefTool/attachments.ts +110 -0
- package/tools/BriefTool/prompt.ts +22 -0
- package/tools/BriefTool/upload.ts +174 -0
- package/tools/ConfigTool/ConfigTool.ts +467 -0
- package/tools/ConfigTool/UI.tsx +38 -0
- package/tools/ConfigTool/constants.ts +1 -0
- package/tools/ConfigTool/prompt.ts +93 -0
- package/tools/ConfigTool/supportedSettings.ts +211 -0
- package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/tools/EnterPlanModeTool/constants.ts +1 -0
- package/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/tools/EnterWorktreeTool/constants.ts +1 -0
- package/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/tools/ExitPlanModeTool/constants.ts +2 -0
- package/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/tools/ExitWorktreeTool/constants.ts +1 -0
- package/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/tools/FileEditTool/FileEditTool.ts +625 -0
- package/tools/FileEditTool/UI.tsx +289 -0
- package/tools/FileEditTool/constants.ts +11 -0
- package/tools/FileEditTool/prompt.ts +28 -0
- package/tools/FileEditTool/types.ts +85 -0
- package/tools/FileEditTool/utils.ts +775 -0
- package/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/tools/FileReadTool/UI.tsx +185 -0
- package/tools/FileReadTool/imageProcessor.ts +94 -0
- package/tools/FileReadTool/limits.ts +92 -0
- package/tools/FileReadTool/prompt.ts +49 -0
- package/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/tools/FileWriteTool/UI.tsx +405 -0
- package/tools/FileWriteTool/prompt.ts +18 -0
- package/tools/GlobTool/GlobTool.ts +198 -0
- package/tools/GlobTool/UI.tsx +63 -0
- package/tools/GlobTool/prompt.ts +7 -0
- package/tools/GrepTool/GrepTool.ts +577 -0
- package/tools/GrepTool/UI.tsx +201 -0
- package/tools/GrepTool/prompt.ts +18 -0
- package/tools/LSPTool/LSPTool.ts +860 -0
- package/tools/LSPTool/UI.tsx +228 -0
- package/tools/LSPTool/formatters.ts +592 -0
- package/tools/LSPTool/prompt.ts +21 -0
- package/tools/LSPTool/schemas.ts +215 -0
- package/tools/LSPTool/symbolContext.ts +90 -0
- package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/tools/MCPTool/MCPTool.ts +77 -0
- package/tools/MCPTool/UI.tsx +403 -0
- package/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/tools/MCPTool/prompt.ts +3 -0
- package/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/tools/NotebookEditTool/UI.tsx +93 -0
- package/tools/NotebookEditTool/constants.ts +2 -0
- package/tools/NotebookEditTool/prompt.ts +3 -0
- package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/tools/PowerShellTool/UI.tsx +131 -0
- package/tools/PowerShellTool/clmTypes.ts +211 -0
- package/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/tools/PowerShellTool/commonParameters.ts +30 -0
- package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/tools/PowerShellTool/gitSafety.ts +176 -0
- package/tools/PowerShellTool/modeValidation.ts +404 -0
- package/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/tools/PowerShellTool/prompt.ts +145 -0
- package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/tools/PowerShellTool/toolName.ts +2 -0
- package/tools/REPLTool/constants.ts +46 -0
- package/tools/REPLTool/primitiveTools.ts +39 -0
- package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/tools/ScheduleCronTool/UI.tsx +60 -0
- package/tools/ScheduleCronTool/prompt.ts +135 -0
- package/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/tools/SendMessageTool/UI.tsx +31 -0
- package/tools/SendMessageTool/constants.ts +1 -0
- package/tools/SendMessageTool/prompt.ts +49 -0
- package/tools/SkillTool/SkillTool.ts +1108 -0
- package/tools/SkillTool/UI.tsx +128 -0
- package/tools/SkillTool/constants.ts +1 -0
- package/tools/SkillTool/prompt.ts +241 -0
- package/tools/SleepTool/prompt.ts +17 -0
- package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/tools/TaskCreateTool/constants.ts +1 -0
- package/tools/TaskCreateTool/prompt.ts +56 -0
- package/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/tools/TaskGetTool/constants.ts +1 -0
- package/tools/TaskGetTool/prompt.ts +24 -0
- package/tools/TaskListTool/TaskListTool.ts +116 -0
- package/tools/TaskListTool/constants.ts +1 -0
- package/tools/TaskListTool/prompt.ts +49 -0
- package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/tools/TaskOutputTool/constants.ts +1 -0
- package/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/tools/TaskStopTool/UI.tsx +41 -0
- package/tools/TaskStopTool/prompt.ts +8 -0
- package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/tools/TaskUpdateTool/constants.ts +1 -0
- package/tools/TaskUpdateTool/prompt.ts +77 -0
- package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/tools/TeamCreateTool/UI.tsx +6 -0
- package/tools/TeamCreateTool/constants.ts +1 -0
- package/tools/TeamCreateTool/prompt.ts +113 -0
- package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/tools/TeamDeleteTool/UI.tsx +20 -0
- package/tools/TeamDeleteTool/constants.ts +1 -0
- package/tools/TeamDeleteTool/prompt.ts +16 -0
- package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/tools/TodoWriteTool/constants.ts +1 -0
- package/tools/TodoWriteTool/prompt.ts +184 -0
- package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/tools/ToolSearchTool/constants.ts +1 -0
- package/tools/ToolSearchTool/prompt.ts +121 -0
- package/tools/TungstenTool/TungstenTool.ts +4 -0
- package/tools/WebFetchTool/UI.tsx +72 -0
- package/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/tools/WebFetchTool/preapproved.ts +166 -0
- package/tools/WebFetchTool/prompt.ts +46 -0
- package/tools/WebFetchTool/utils.ts +530 -0
- package/tools/WebSearchTool/UI.tsx +101 -0
- package/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/tools/WebSearchTool/prompt.ts +34 -0
- package/tools/WorkflowTool/constants.ts +2 -0
- package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
- package/tools/XMemIngestTool/prompt.ts +13 -0
- package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
- package/tools/XMemRetrieveTool/prompt.ts +16 -0
- package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
- package/tools/XMemSearchTool/prompt.ts +11 -0
- package/tools/shared/gitOperationTracking.ts +277 -0
- package/tools/shared/spawnMultiAgent.ts +1093 -0
- package/tools/testing/TestingPermissionTool.tsx +74 -0
- package/tools/utils.ts +40 -0
- package/utils/CircularBuffer.ts +84 -0
- package/utils/Cursor.ts +1530 -0
- package/utils/QueryGuard.ts +121 -0
- package/utils/Shell.ts +474 -0
- package/utils/ShellCommand.ts +465 -0
- package/utils/abortController.ts +99 -0
- package/utils/activityManager.ts +164 -0
- package/utils/advisor.ts +145 -0
- package/utils/agentContext.ts +178 -0
- package/utils/agentId.ts +99 -0
- package/utils/agentSwarmsEnabled.ts +44 -0
- package/utils/agenticSessionSearch.ts +307 -0
- package/utils/analyzeContext.ts +1382 -0
- package/utils/ansiToPng.ts +334 -0
- package/utils/ansiToSvg.ts +272 -0
- package/utils/api.ts +718 -0
- package/utils/apiPreconnect.ts +71 -0
- package/utils/appleTerminalBackup.ts +124 -0
- package/utils/argumentSubstitution.ts +145 -0
- package/utils/array.ts +13 -0
- package/utils/asciicast.ts +239 -0
- package/utils/attachments.ts +4091 -0
- package/utils/attribution.ts +393 -0
- package/utils/auth.ts +2002 -0
- package/utils/authFileDescriptor.ts +196 -0
- package/utils/authPortable.ts +19 -0
- package/utils/autoModeDenials.ts +26 -0
- package/utils/autoRunIssue.tsx +122 -0
- package/utils/autoUpdater.ts +561 -0
- package/utils/aws.ts +74 -0
- package/utils/awsAuthStatusManager.ts +81 -0
- package/utils/axios.ts +8 -0
- package/utils/background/remote/preconditions.ts +235 -0
- package/utils/background/remote/remoteSession.ts +98 -0
- package/utils/backgroundHousekeeping.ts +94 -0
- package/utils/bash/ParsedCommand.ts +318 -0
- package/utils/bash/ShellSnapshot.ts +582 -0
- package/utils/bash/ast.ts +2679 -0
- package/utils/bash/bashParser.ts +4436 -0
- package/utils/bash/bashPipeCommand.ts +294 -0
- package/utils/bash/commands.ts +1339 -0
- package/utils/bash/heredoc.ts +733 -0
- package/utils/bash/parser.ts +230 -0
- package/utils/bash/prefix.ts +204 -0
- package/utils/bash/registry.ts +53 -0
- package/utils/bash/shellCompletion.ts +259 -0
- package/utils/bash/shellPrefix.ts +28 -0
- package/utils/bash/shellQuote.ts +304 -0
- package/utils/bash/shellQuoting.ts +128 -0
- package/utils/bash/specs/alias.ts +14 -0
- package/utils/bash/specs/index.ts +18 -0
- package/utils/bash/specs/nohup.ts +13 -0
- package/utils/bash/specs/pyright.ts +91 -0
- package/utils/bash/specs/sleep.ts +13 -0
- package/utils/bash/specs/srun.ts +31 -0
- package/utils/bash/specs/time.ts +13 -0
- package/utils/bash/specs/timeout.ts +20 -0
- package/utils/bash/treeSitterAnalysis.ts +506 -0
- package/utils/betas.ts +434 -0
- package/utils/billing.ts +78 -0
- package/utils/binaryCheck.ts +53 -0
- package/utils/browser.ts +68 -0
- package/utils/bufferedWriter.ts +100 -0
- package/utils/bundledMode.ts +22 -0
- package/utils/caCerts.ts +115 -0
- package/utils/caCertsConfig.ts +88 -0
- package/utils/cachePaths.ts +38 -0
- package/utils/classifierApprovals.ts +88 -0
- package/utils/classifierApprovalsHook.ts +17 -0
- package/utils/claudeCodeHints.ts +193 -0
- package/utils/claudeDesktop.ts +152 -0
- package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/utils/claudeInChrome/common.ts +540 -0
- package/utils/claudeInChrome/mcpServer.ts +292 -0
- package/utils/claudeInChrome/prompt.ts +83 -0
- package/utils/claudeInChrome/setup.ts +400 -0
- package/utils/claudeInChrome/setupPortable.ts +233 -0
- package/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/utils/claudemd.ts +1479 -0
- package/utils/cleanup.ts +602 -0
- package/utils/cleanupRegistry.ts +25 -0
- package/utils/cliArgs.ts +60 -0
- package/utils/cliHighlight.ts +54 -0
- package/utils/codeIndexing.ts +206 -0
- package/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/utils/collapseHookSummaries.ts +59 -0
- package/utils/collapseReadSearch.ts +1109 -0
- package/utils/collapseTeammateShutdowns.ts +55 -0
- package/utils/color-diff-mock.ts +27 -0
- package/utils/combinedAbortSignal.ts +47 -0
- package/utils/commandLifecycle.ts +21 -0
- package/utils/commitAttribution.ts +961 -0
- package/utils/completionCache.ts +166 -0
- package/utils/computerUse/appNames.ts +196 -0
- package/utils/computerUse/cleanup.ts +86 -0
- package/utils/computerUse/common.ts +61 -0
- package/utils/computerUse/computerUseLock.ts +215 -0
- package/utils/computerUse/drainRunLoop.ts +79 -0
- package/utils/computerUse/escHotkey.ts +54 -0
- package/utils/computerUse/executor.ts +658 -0
- package/utils/computerUse/gates.ts +72 -0
- package/utils/computerUse/hostAdapter.ts +69 -0
- package/utils/computerUse/inputLoader.ts +30 -0
- package/utils/computerUse/mcpServer.ts +106 -0
- package/utils/computerUse/setup.ts +53 -0
- package/utils/computerUse/swiftLoader.ts +23 -0
- package/utils/computerUse/toolRendering.tsx +125 -0
- package/utils/computerUse/wrapper.tsx +336 -0
- package/utils/concurrentSessions.ts +204 -0
- package/utils/config.ts +1817 -0
- package/utils/configConstants.ts +21 -0
- package/utils/contentArray.ts +51 -0
- package/utils/context.ts +221 -0
- package/utils/contextAnalysis.ts +272 -0
- package/utils/contextSuggestions.ts +235 -0
- package/utils/controlMessageCompat.ts +32 -0
- package/utils/conversationRecovery.ts +597 -0
- package/utils/cron.ts +308 -0
- package/utils/cronJitterConfig.ts +75 -0
- package/utils/cronScheduler.ts +565 -0
- package/utils/cronTasks.ts +458 -0
- package/utils/cronTasksLock.ts +195 -0
- package/utils/crossProjectResume.ts +75 -0
- package/utils/crypto.ts +13 -0
- package/utils/cwd.ts +32 -0
- package/utils/debug.ts +268 -0
- package/utils/debugFilter.ts +157 -0
- package/utils/deepLink/banner.ts +123 -0
- package/utils/deepLink/parseDeepLink.ts +170 -0
- package/utils/deepLink/protocolHandler.ts +136 -0
- package/utils/deepLink/registerProtocol.ts +348 -0
- package/utils/deepLink/terminalLauncher.ts +557 -0
- package/utils/deepLink/terminalPreference.ts +54 -0
- package/utils/desktopDeepLink.ts +236 -0
- package/utils/detectRepository.ts +178 -0
- package/utils/diagLogs.ts +94 -0
- package/utils/diff.ts +177 -0
- package/utils/directMemberMessage.ts +69 -0
- package/utils/displayTags.ts +51 -0
- package/utils/doctorContextWarnings.ts +265 -0
- package/utils/doctorDiagnostic.ts +625 -0
- package/utils/dxt/helpers.ts +88 -0
- package/utils/dxt/zip.ts +226 -0
- package/utils/earlyInput.ts +191 -0
- package/utils/editor.ts +183 -0
- package/utils/effort.ts +329 -0
- package/utils/embeddedTools.ts +29 -0
- package/utils/env.ts +347 -0
- package/utils/envDynamic.ts +151 -0
- package/utils/envUtils.ts +183 -0
- package/utils/envValidation.ts +38 -0
- package/utils/errorLogSink.ts +235 -0
- package/utils/errors.ts +238 -0
- package/utils/exampleCommands.ts +184 -0
- package/utils/execFileNoThrow.ts +150 -0
- package/utils/execFileNoThrowPortable.ts +89 -0
- package/utils/execSyncWrapper.ts +38 -0
- package/utils/exportRenderer.tsx +98 -0
- package/utils/extraUsage.ts +23 -0
- package/utils/fastMode.ts +532 -0
- package/utils/file.ts +584 -0
- package/utils/fileHistory.ts +1115 -0
- package/utils/fileOperationAnalytics.ts +71 -0
- package/utils/filePersistence/filePersistence.ts +287 -0
- package/utils/filePersistence/outputsScanner.ts +126 -0
- package/utils/fileRead.ts +102 -0
- package/utils/fileReadCache.ts +96 -0
- package/utils/fileStateCache.ts +142 -0
- package/utils/findExecutable.ts +17 -0
- package/utils/fingerprint.ts +76 -0
- package/utils/forkedAgent.ts +689 -0
- package/utils/format.ts +308 -0
- package/utils/formatBriefTimestamp.ts +81 -0
- package/utils/fpsTracker.ts +47 -0
- package/utils/frontmatterParser.ts +370 -0
- package/utils/fsOperations.ts +770 -0
- package/utils/fullscreen.ts +202 -0
- package/utils/generatedFiles.ts +136 -0
- package/utils/generators.ts +88 -0
- package/utils/genericProcessUtils.ts +184 -0
- package/utils/getWorktreePaths.ts +70 -0
- package/utils/getWorktreePathsPortable.ts +27 -0
- package/utils/ghPrStatus.ts +106 -0
- package/utils/git/gitConfigParser.ts +277 -0
- package/utils/git/gitFilesystem.ts +699 -0
- package/utils/git/gitignore.ts +99 -0
- package/utils/git.ts +926 -0
- package/utils/gitDiff.ts +532 -0
- package/utils/gitSettings.ts +18 -0
- package/utils/github/ghAuthStatus.ts +29 -0
- package/utils/githubRepoPathMapping.ts +162 -0
- package/utils/glob.ts +130 -0
- package/utils/gracefulShutdown.ts +529 -0
- package/utils/groupToolUses.ts +182 -0
- package/utils/handlePromptSubmit.ts +610 -0
- package/utils/hash.ts +46 -0
- package/utils/headlessProfiler.ts +178 -0
- package/utils/heapDumpService.ts +303 -0
- package/utils/heatmap.ts +198 -0
- package/utils/highlightMatch.tsx +28 -0
- package/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/utils/hooks/execAgentHook.ts +339 -0
- package/utils/hooks/execHttpHook.ts +242 -0
- package/utils/hooks/execPromptHook.ts +211 -0
- package/utils/hooks/fileChangedWatcher.ts +191 -0
- package/utils/hooks/hookEvents.ts +192 -0
- package/utils/hooks/hookHelpers.ts +83 -0
- package/utils/hooks/hooksConfigManager.ts +400 -0
- package/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/utils/hooks/hooksSettings.ts +271 -0
- package/utils/hooks/postSamplingHooks.ts +70 -0
- package/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/utils/hooks/registerSkillHooks.ts +64 -0
- package/utils/hooks/sessionHooks.ts +447 -0
- package/utils/hooks/skillImprovement.ts +267 -0
- package/utils/hooks/ssrfGuard.ts +294 -0
- package/utils/hooks.ts +5022 -0
- package/utils/horizontalScroll.ts +137 -0
- package/utils/http.ts +136 -0
- package/utils/hyperlink.ts +39 -0
- package/utils/iTermBackup.ts +73 -0
- package/utils/ide.ts +1494 -0
- package/utils/idePathConversion.ts +90 -0
- package/utils/idleTimeout.ts +53 -0
- package/utils/imagePaste.ts +416 -0
- package/utils/imageResizer.ts +880 -0
- package/utils/imageStore.ts +167 -0
- package/utils/imageValidation.ts +104 -0
- package/utils/immediateCommand.ts +15 -0
- package/utils/inProcessTeammateHelpers.ts +102 -0
- package/utils/ink.ts +26 -0
- package/utils/intl.ts +94 -0
- package/utils/jetbrains.ts +191 -0
- package/utils/json.ts +277 -0
- package/utils/jsonRead.ts +16 -0
- package/utils/keyboardShortcuts.ts +14 -0
- package/utils/lazySchema.ts +8 -0
- package/utils/listSessionsImpl.ts +454 -0
- package/utils/localInstaller.ts +162 -0
- package/utils/lockfile.ts +43 -0
- package/utils/log.ts +362 -0
- package/utils/logoV2Utils.ts +347 -0
- package/utils/mailbox.ts +73 -0
- package/utils/managedEnv.ts +199 -0
- package/utils/managedEnvConstants.ts +191 -0
- package/utils/markdown.ts +381 -0
- package/utils/markdownConfigLoader.ts +600 -0
- package/utils/mcp/dateTimeParser.ts +121 -0
- package/utils/mcp/elicitationValidation.ts +336 -0
- package/utils/mcpInstructionsDelta.ts +130 -0
- package/utils/mcpOutputStorage.ts +189 -0
- package/utils/mcpValidation.ts +208 -0
- package/utils/mcpWebSocketTransport.ts +200 -0
- package/utils/memoize.ts +269 -0
- package/utils/memory/types.ts +12 -0
- package/utils/memory/versions.ts +8 -0
- package/utils/memoryFileDetection.ts +289 -0
- package/utils/messagePredicates.ts +8 -0
- package/utils/messageQueueManager.ts +547 -0
- package/utils/messages/mappers.ts +290 -0
- package/utils/messages/systemInit.ts +96 -0
- package/utils/messages.ts +5520 -0
- package/utils/model/agent.ts +157 -0
- package/utils/model/aliases.ts +35 -0
- package/utils/model/antModels.ts +64 -0
- package/utils/model/bedrock.ts +265 -0
- package/utils/model/check1mAccess.ts +72 -0
- package/utils/model/configs.ts +158 -0
- package/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/utils/model/deprecation.ts +101 -0
- package/utils/model/model.ts +654 -0
- package/utils/model/modelAllowlist.ts +170 -0
- package/utils/model/modelCapabilities.ts +118 -0
- package/utils/model/modelOptions.ts +589 -0
- package/utils/model/modelStrings.ts +170 -0
- package/utils/model/modelSupportOverrides.ts +50 -0
- package/utils/model/providers.ts +42 -0
- package/utils/model/validateModel.ts +159 -0
- package/utils/modelCost.ts +231 -0
- package/utils/modifiers.ts +36 -0
- package/utils/mtls.ts +179 -0
- package/utils/nativeInstaller/download.ts +523 -0
- package/utils/nativeInstaller/index.ts +18 -0
- package/utils/nativeInstaller/installer.ts +1708 -0
- package/utils/nativeInstaller/packageManagers.ts +336 -0
- package/utils/nativeInstaller/pidLock.ts +433 -0
- package/utils/notebook.ts +224 -0
- package/utils/objectGroupBy.ts +18 -0
- package/utils/pasteStore.ts +104 -0
- package/utils/path.ts +155 -0
- package/utils/pdf.ts +300 -0
- package/utils/pdfUtils.ts +70 -0
- package/utils/peerAddress.ts +21 -0
- package/utils/permissions/PermissionMode.ts +141 -0
- package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/utils/permissions/PermissionResult.ts +35 -0
- package/utils/permissions/PermissionRule.ts +40 -0
- package/utils/permissions/PermissionUpdate.ts +389 -0
- package/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/utils/permissions/autoModeState.ts +39 -0
- package/utils/permissions/bashClassifier.ts +61 -0
- package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/utils/permissions/classifierDecision.ts +98 -0
- package/utils/permissions/classifierShared.ts +39 -0
- package/utils/permissions/dangerousPatterns.ts +80 -0
- package/utils/permissions/denialTracking.ts +45 -0
- package/utils/permissions/filesystem.ts +1777 -0
- package/utils/permissions/getNextPermissionMode.ts +101 -0
- package/utils/permissions/pathValidation.ts +485 -0
- package/utils/permissions/permissionExplainer.ts +250 -0
- package/utils/permissions/permissionRuleParser.ts +198 -0
- package/utils/permissions/permissionSetup.ts +1532 -0
- package/utils/permissions/permissions.ts +1486 -0
- package/utils/permissions/permissionsLoader.ts +296 -0
- package/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/utils/permissions/shellRuleMatching.ts +228 -0
- package/utils/permissions/yoloClassifier.ts +1495 -0
- package/utils/planModeV2.ts +95 -0
- package/utils/plans.ts +397 -0
- package/utils/platform.ts +150 -0
- package/utils/plugins/addDirPluginSettings.ts +71 -0
- package/utils/plugins/cacheUtils.ts +196 -0
- package/utils/plugins/dependencyResolver.ts +305 -0
- package/utils/plugins/fetchTelemetry.ts +135 -0
- package/utils/plugins/gitAvailability.ts +69 -0
- package/utils/plugins/headlessPluginInstall.ts +174 -0
- package/utils/plugins/hintRecommendation.ts +164 -0
- package/utils/plugins/installCounts.ts +292 -0
- package/utils/plugins/installedPluginsManager.ts +1268 -0
- package/utils/plugins/loadPluginAgents.ts +348 -0
- package/utils/plugins/loadPluginCommands.ts +946 -0
- package/utils/plugins/loadPluginHooks.ts +287 -0
- package/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/utils/plugins/lspPluginIntegration.ts +387 -0
- package/utils/plugins/lspRecommendation.ts +374 -0
- package/utils/plugins/managedPlugins.ts +27 -0
- package/utils/plugins/marketplaceHelpers.ts +592 -0
- package/utils/plugins/marketplaceManager.ts +2643 -0
- package/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/utils/plugins/mcpbHandler.ts +968 -0
- package/utils/plugins/officialMarketplace.ts +25 -0
- package/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/utils/plugins/performStartupChecks.tsx +70 -0
- package/utils/plugins/pluginAutoupdate.ts +284 -0
- package/utils/plugins/pluginBlocklist.ts +127 -0
- package/utils/plugins/pluginDirectories.ts +178 -0
- package/utils/plugins/pluginFlagging.ts +208 -0
- package/utils/plugins/pluginIdentifier.ts +123 -0
- package/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/utils/plugins/pluginLoader.ts +3302 -0
- package/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/utils/plugins/pluginPolicy.ts +20 -0
- package/utils/plugins/pluginStartupCheck.ts +341 -0
- package/utils/plugins/pluginVersioning.ts +157 -0
- package/utils/plugins/reconciler.ts +265 -0
- package/utils/plugins/refresh.ts +215 -0
- package/utils/plugins/schemas.ts +1681 -0
- package/utils/plugins/validatePlugin.ts +903 -0
- package/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/utils/plugins/zipCache.ts +406 -0
- package/utils/plugins/zipCacheAdapters.ts +164 -0
- package/utils/powershell/dangerousCmdlets.ts +185 -0
- package/utils/powershell/parser.ts +1804 -0
- package/utils/powershell/staticPrefix.ts +316 -0
- package/utils/preflightChecks.tsx +151 -0
- package/utils/privacyLevel.ts +55 -0
- package/utils/process.ts +68 -0
- package/utils/processUserInput/processBashCommand.tsx +140 -0
- package/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/utils/processUserInput/processTextPrompt.ts +100 -0
- package/utils/processUserInput/processUserInput.ts +605 -0
- package/utils/profilerBase.ts +46 -0
- package/utils/promptCategory.ts +49 -0
- package/utils/promptEditor.ts +188 -0
- package/utils/promptShellExecution.ts +183 -0
- package/utils/proxy.ts +426 -0
- package/utils/queryContext.ts +179 -0
- package/utils/queryHelpers.ts +552 -0
- package/utils/queryProfiler.ts +301 -0
- package/utils/queueProcessor.ts +95 -0
- package/utils/readEditContext.ts +227 -0
- package/utils/readFileInRange.ts +383 -0
- package/utils/releaseNotes.ts +360 -0
- package/utils/renderOptions.ts +113 -0
- package/utils/ripgrep.ts +679 -0
- package/utils/sandbox/sandbox-adapter.ts +985 -0
- package/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/utils/sanitization.ts +91 -0
- package/utils/screenshotClipboard.ts +121 -0
- package/utils/sdkEventQueue.ts +134 -0
- package/utils/secureStorage/fallbackStorage.ts +70 -0
- package/utils/secureStorage/index.ts +17 -0
- package/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/utils/secureStorage/plainTextStorage.ts +84 -0
- package/utils/semanticBoolean.ts +29 -0
- package/utils/semanticNumber.ts +36 -0
- package/utils/semver.ts +59 -0
- package/utils/sequential.ts +56 -0
- package/utils/sessionActivity.ts +133 -0
- package/utils/sessionEnvVars.ts +22 -0
- package/utils/sessionEnvironment.ts +166 -0
- package/utils/sessionFileAccessHooks.ts +250 -0
- package/utils/sessionIngressAuth.ts +140 -0
- package/utils/sessionRestore.ts +551 -0
- package/utils/sessionStart.ts +232 -0
- package/utils/sessionState.ts +150 -0
- package/utils/sessionStorage.ts +5105 -0
- package/utils/sessionStoragePortable.ts +793 -0
- package/utils/sessionTitle.ts +129 -0
- package/utils/sessionUrl.ts +64 -0
- package/utils/set.ts +53 -0
- package/utils/settings/allErrors.ts +32 -0
- package/utils/settings/applySettingsChange.ts +92 -0
- package/utils/settings/changeDetector.ts +488 -0
- package/utils/settings/constants.ts +202 -0
- package/utils/settings/internalWrites.ts +37 -0
- package/utils/settings/managedPath.ts +34 -0
- package/utils/settings/mdm/constants.ts +81 -0
- package/utils/settings/mdm/rawRead.ts +130 -0
- package/utils/settings/mdm/settings.ts +316 -0
- package/utils/settings/permissionValidation.ts +262 -0
- package/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/utils/settings/schemaOutput.ts +8 -0
- package/utils/settings/settings.ts +1015 -0
- package/utils/settings/settingsCache.ts +80 -0
- package/utils/settings/toolValidationConfig.ts +103 -0
- package/utils/settings/types.ts +1149 -0
- package/utils/settings/validateEditTool.ts +45 -0
- package/utils/settings/validation.ts +265 -0
- package/utils/settings/validationTips.ts +164 -0
- package/utils/shell/bashProvider.ts +255 -0
- package/utils/shell/outputLimits.ts +14 -0
- package/utils/shell/powershellDetection.ts +107 -0
- package/utils/shell/powershellProvider.ts +123 -0
- package/utils/shell/prefix.ts +367 -0
- package/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/utils/shell/resolveDefaultShell.ts +14 -0
- package/utils/shell/shellProvider.ts +33 -0
- package/utils/shell/shellToolUtils.ts +22 -0
- package/utils/shell/specPrefix.ts +241 -0
- package/utils/shellConfig.ts +167 -0
- package/utils/sideQuery.ts +222 -0
- package/utils/sideQuestion.ts +155 -0
- package/utils/signal.ts +43 -0
- package/utils/sinks.ts +16 -0
- package/utils/skills/skillChangeDetector.ts +311 -0
- package/utils/slashCommandParsing.ts +60 -0
- package/utils/sleep.ts +84 -0
- package/utils/sliceAnsi.ts +91 -0
- package/utils/slowOperations.ts +286 -0
- package/utils/standaloneAgent.ts +23 -0
- package/utils/startupProfiler.ts +194 -0
- package/utils/staticRender.tsx +116 -0
- package/utils/stats.ts +1061 -0
- package/utils/statsCache.ts +434 -0
- package/utils/status.tsx +362 -0
- package/utils/statusNoticeDefinitions.tsx +198 -0
- package/utils/statusNoticeHelpers.ts +20 -0
- package/utils/stream.ts +76 -0
- package/utils/streamJsonStdoutGuard.ts +123 -0
- package/utils/streamlinedTransform.ts +201 -0
- package/utils/stringUtils.ts +235 -0
- package/utils/subprocessEnv.ts +99 -0
- package/utils/suggestions/commandSuggestions.ts +567 -0
- package/utils/suggestions/directoryCompletion.ts +263 -0
- package/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/utils/suggestions/skillUsageTracking.ts +55 -0
- package/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/utils/swarm/backends/ITermBackend.ts +370 -0
- package/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/utils/swarm/backends/detection.ts +128 -0
- package/utils/swarm/backends/it2Setup.ts +245 -0
- package/utils/swarm/backends/registry.ts +464 -0
- package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/utils/swarm/backends/types.ts +311 -0
- package/utils/swarm/constants.ts +33 -0
- package/utils/swarm/inProcessRunner.ts +1552 -0
- package/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/utils/swarm/permissionSync.ts +928 -0
- package/utils/swarm/reconnection.ts +119 -0
- package/utils/swarm/spawnInProcess.ts +328 -0
- package/utils/swarm/spawnUtils.ts +146 -0
- package/utils/swarm/teamHelpers.ts +683 -0
- package/utils/swarm/teammateInit.ts +129 -0
- package/utils/swarm/teammateLayoutManager.ts +107 -0
- package/utils/swarm/teammateModel.ts +10 -0
- package/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/utils/systemDirectories.ts +74 -0
- package/utils/systemPrompt.ts +123 -0
- package/utils/systemPromptType.ts +14 -0
- package/utils/systemTheme.ts +119 -0
- package/utils/taggedId.ts +54 -0
- package/utils/task/TaskOutput.ts +390 -0
- package/utils/task/diskOutput.ts +451 -0
- package/utils/task/framework.ts +308 -0
- package/utils/task/outputFormatting.ts +38 -0
- package/utils/task/sdkProgress.ts +36 -0
- package/utils/tasks.ts +862 -0
- package/utils/teamDiscovery.ts +81 -0
- package/utils/teamMemoryOps.ts +88 -0
- package/utils/teammate.ts +292 -0
- package/utils/teammateContext.ts +96 -0
- package/utils/teammateMailbox.ts +1183 -0
- package/utils/telemetry/betaSessionTracing.ts +491 -0
- package/utils/telemetry/bigqueryExporter.ts +252 -0
- package/utils/telemetry/events.ts +75 -0
- package/utils/telemetry/instrumentation.ts +825 -0
- package/utils/telemetry/logger.ts +26 -0
- package/utils/telemetry/perfettoTracing.ts +1120 -0
- package/utils/telemetry/pluginTelemetry.ts +289 -0
- package/utils/telemetry/sessionTracing.ts +927 -0
- package/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/utils/telemetryAttributes.ts +71 -0
- package/utils/teleport/api.ts +466 -0
- package/utils/teleport/environmentSelection.ts +77 -0
- package/utils/teleport/environments.ts +120 -0
- package/utils/teleport/gitBundle.ts +292 -0
- package/utils/teleport.tsx +1226 -0
- package/utils/tempfile.ts +31 -0
- package/utils/terminal.ts +131 -0
- package/utils/terminalPanel.ts +191 -0
- package/utils/textHighlighting.ts +166 -0
- package/utils/theme.ts +639 -0
- package/utils/thinking.ts +162 -0
- package/utils/timeouts.ts +39 -0
- package/utils/tmuxSocket.ts +427 -0
- package/utils/todo/types.ts +18 -0
- package/utils/tokenBudget.ts +73 -0
- package/utils/tokens.ts +261 -0
- package/utils/toolErrors.ts +132 -0
- package/utils/toolPool.ts +79 -0
- package/utils/toolResultStorage.ts +1040 -0
- package/utils/toolSchemaCache.ts +26 -0
- package/utils/toolSearch.ts +756 -0
- package/utils/transcriptSearch.ts +202 -0
- package/utils/treeify.ts +170 -0
- package/utils/truncate.ts +179 -0
- package/utils/ultraplan/ccrSession.ts +349 -0
- package/utils/ultraplan/keyword.ts +127 -0
- package/utils/ultraplan/prompt.txt +1 -0
- package/utils/unaryLogging.ts +39 -0
- package/utils/undercover.ts +89 -0
- package/utils/user.ts +194 -0
- package/utils/userAgent.ts +10 -0
- package/utils/userPromptKeywords.ts +27 -0
- package/utils/uuid.ts +27 -0
- package/utils/warningHandler.ts +121 -0
- package/utils/which.ts +82 -0
- package/utils/windowsPaths.ts +173 -0
- package/utils/withResolvers.ts +13 -0
- package/utils/words.ts +800 -0
- package/utils/workloadContext.ts +57 -0
- package/utils/worktree.ts +1519 -0
- package/utils/worktreeModeEnabled.ts +11 -0
- package/utils/xdg.ts +65 -0
- package/utils/xmem.ts +6 -0
- package/utils/xml.ts +16 -0
- package/utils/yaml.ts +15 -0
- package/utils/zodToJsonSchema.ts +23 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import Anthropic, { type ClientOptions } from '@anthropic-ai/sdk'
|
|
2
|
+
import { GeminiAnthropicClient } from './geminiClient.js'
|
|
3
|
+
import { OpenRouterAnthropicClient } from './openRouterClient.js'
|
|
4
|
+
import { randomUUID } from 'crypto'
|
|
5
|
+
import type { GoogleAuth } from 'google-auth-library'
|
|
6
|
+
import {
|
|
7
|
+
checkAndRefreshOAuthTokenIfNeeded,
|
|
8
|
+
getAnthropicApiKey,
|
|
9
|
+
getApiKeyFromApiKeyHelper,
|
|
10
|
+
getClaudeAIOAuthTokens,
|
|
11
|
+
isClaudeAISubscriber,
|
|
12
|
+
refreshAndGetAwsCredentials,
|
|
13
|
+
refreshGcpCredentialsIfNeeded,
|
|
14
|
+
} from 'src/utils/auth.js'
|
|
15
|
+
import { getUserAgent } from 'src/utils/http.js'
|
|
16
|
+
import { getSmallFastModel } from 'src/utils/model/model.js'
|
|
17
|
+
import {
|
|
18
|
+
getAPIProvider,
|
|
19
|
+
isFirstPartyAnthropicBaseUrl,
|
|
20
|
+
} from 'src/utils/model/providers.js'
|
|
21
|
+
import { getProxyFetchOptions } from 'src/utils/proxy.js'
|
|
22
|
+
import {
|
|
23
|
+
getIsNonInteractiveSession,
|
|
24
|
+
getSessionId,
|
|
25
|
+
} from '../../bootstrap/state.js'
|
|
26
|
+
import { getOauthConfig } from '../../constants/oauth.js'
|
|
27
|
+
import { isDebugToStdErr, logForDebugging } from '../../utils/debug.js'
|
|
28
|
+
import {
|
|
29
|
+
getAWSRegion,
|
|
30
|
+
getVertexRegionForModel,
|
|
31
|
+
isEnvTruthy,
|
|
32
|
+
} from '../../utils/envUtils.js'
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Environment variables for different client types:
|
|
36
|
+
*
|
|
37
|
+
* Direct API:
|
|
38
|
+
* - ANTHROPIC_API_KEY: Required for direct API access
|
|
39
|
+
*
|
|
40
|
+
* AWS Bedrock:
|
|
41
|
+
* - AWS credentials configured via aws-sdk defaults
|
|
42
|
+
* - AWS_REGION or AWS_DEFAULT_REGION: Sets the AWS region for all models (default: us-east-1)
|
|
43
|
+
* - ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION: Optional. Override AWS region specifically for the small fast model (Haiku)
|
|
44
|
+
*
|
|
45
|
+
* Foundry (Azure):
|
|
46
|
+
* - ANTHROPIC_FOUNDRY_RESOURCE: Your Azure resource name (e.g., 'my-resource')
|
|
47
|
+
* For the full endpoint: https://{resource}.services.ai.azure.com/anthropic/v1/messages
|
|
48
|
+
* - ANTHROPIC_FOUNDRY_BASE_URL: Optional. Alternative to resource - provide full base URL directly
|
|
49
|
+
* (e.g., 'https://my-resource.services.ai.azure.com')
|
|
50
|
+
*
|
|
51
|
+
* Authentication (one of the following):
|
|
52
|
+
* - ANTHROPIC_FOUNDRY_API_KEY: Your Microsoft Foundry API key (if using API key auth)
|
|
53
|
+
* - Azure AD authentication: If no API key is provided, uses DefaultAzureCredential
|
|
54
|
+
* which supports multiple auth methods (environment variables, managed identity,
|
|
55
|
+
* Azure CLI, etc.). See: https://docs.microsoft.com/en-us/javascript/api/@azure/identity
|
|
56
|
+
*
|
|
57
|
+
* Vertex AI:
|
|
58
|
+
* - Model-specific region variables (highest priority):
|
|
59
|
+
* - VERTEX_REGION_CLAUDE_3_5_HAIKU: Region for Claude 3.5 Haiku model
|
|
60
|
+
* - VERTEX_REGION_CLAUDE_HAIKU_4_5: Region for Claude Haiku 4.5 model
|
|
61
|
+
* - VERTEX_REGION_CLAUDE_3_5_SONNET: Region for Claude 3.5 Sonnet model
|
|
62
|
+
* - VERTEX_REGION_CLAUDE_3_7_SONNET: Region for Claude 3.7 Sonnet model
|
|
63
|
+
* - CLOUD_ML_REGION: Optional. The default GCP region to use for all models
|
|
64
|
+
* If specific model region not specified above
|
|
65
|
+
* - ANTHROPIC_VERTEX_PROJECT_ID: Required. Your GCP project ID
|
|
66
|
+
* - Standard GCP credentials configured via google-auth-library
|
|
67
|
+
*
|
|
68
|
+
* Priority for determining region:
|
|
69
|
+
* 1. Hardcoded model-specific environment variables
|
|
70
|
+
* 2. Global CLOUD_ML_REGION variable
|
|
71
|
+
* 3. Default region from config
|
|
72
|
+
* 4. Fallback region (us-east5)
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
function createStderrLogger(): ClientOptions['logger'] {
|
|
76
|
+
return {
|
|
77
|
+
error: (msg, ...args) =>
|
|
78
|
+
// biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
|
|
79
|
+
console.error('[Anthropic SDK ERROR]', msg, ...args),
|
|
80
|
+
// biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
|
|
81
|
+
warn: (msg, ...args) => console.error('[Anthropic SDK WARN]', msg, ...args),
|
|
82
|
+
// biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
|
|
83
|
+
info: (msg, ...args) => console.error('[Anthropic SDK INFO]', msg, ...args),
|
|
84
|
+
debug: (msg, ...args) =>
|
|
85
|
+
// biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
|
|
86
|
+
console.error('[Anthropic SDK DEBUG]', msg, ...args),
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export async function getAnthropicClient({
|
|
91
|
+
apiKey,
|
|
92
|
+
maxRetries,
|
|
93
|
+
model,
|
|
94
|
+
fetchOverride,
|
|
95
|
+
source,
|
|
96
|
+
}: {
|
|
97
|
+
apiKey?: string
|
|
98
|
+
maxRetries: number
|
|
99
|
+
model?: string
|
|
100
|
+
fetchOverride?: ClientOptions['fetch']
|
|
101
|
+
source?: string
|
|
102
|
+
}): Promise<Anthropic> {
|
|
103
|
+
const containerId = process.env.CLAUDE_CODE_CONTAINER_ID
|
|
104
|
+
const remoteSessionId = process.env.CLAUDE_CODE_REMOTE_SESSION_ID
|
|
105
|
+
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP
|
|
106
|
+
const customHeaders = getCustomHeaders()
|
|
107
|
+
const defaultHeaders: { [key: string]: string } = {
|
|
108
|
+
'x-app': 'cli',
|
|
109
|
+
'User-Agent': getUserAgent(),
|
|
110
|
+
'X-Claude-Code-Session-Id': getSessionId(),
|
|
111
|
+
...customHeaders,
|
|
112
|
+
...(containerId ? { 'x-claude-remote-container-id': containerId } : {}),
|
|
113
|
+
...(remoteSessionId
|
|
114
|
+
? { 'x-claude-remote-session-id': remoteSessionId }
|
|
115
|
+
: {}),
|
|
116
|
+
// SDK consumers can identify their app/library for backend analytics
|
|
117
|
+
...(clientApp ? { 'x-client-app': clientApp } : {}),
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Log API client configuration for HFI debugging
|
|
121
|
+
logForDebugging(
|
|
122
|
+
`[API:request] Creating client, ANTHROPIC_CUSTOM_HEADERS present: ${!!process.env.ANTHROPIC_CUSTOM_HEADERS}, has Authorization header: ${!!customHeaders['Authorization']}`,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
// Add additional protection header if enabled via env var
|
|
126
|
+
const additionalProtectionEnabled = isEnvTruthy(
|
|
127
|
+
process.env.CLAUDE_CODE_ADDITIONAL_PROTECTION,
|
|
128
|
+
)
|
|
129
|
+
if (additionalProtectionEnabled) {
|
|
130
|
+
defaultHeaders['x-anthropic-additional-protection'] = 'true'
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
logForDebugging('[API:auth] OAuth token check starting')
|
|
134
|
+
await checkAndRefreshOAuthTokenIfNeeded()
|
|
135
|
+
logForDebugging('[API:auth] OAuth token check complete')
|
|
136
|
+
|
|
137
|
+
if (!isClaudeAISubscriber()) {
|
|
138
|
+
await configureApiKeyHeaders(defaultHeaders, getIsNonInteractiveSession())
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const resolvedFetch = buildFetch(fetchOverride, source)
|
|
142
|
+
|
|
143
|
+
const ARGS = {
|
|
144
|
+
defaultHeaders,
|
|
145
|
+
maxRetries,
|
|
146
|
+
timeout: parseInt(process.env.API_TIMEOUT_MS || String(600 * 1000), 10),
|
|
147
|
+
dangerouslyAllowBrowser: true,
|
|
148
|
+
fetchOptions: getProxyFetchOptions({
|
|
149
|
+
forAnthropicAPI: true,
|
|
150
|
+
}) as ClientOptions['fetchOptions'],
|
|
151
|
+
...(resolvedFetch && {
|
|
152
|
+
fetch: resolvedFetch,
|
|
153
|
+
}),
|
|
154
|
+
}
|
|
155
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_USE_BEDROCK)) {
|
|
156
|
+
const { AnthropicBedrock } = await import('@anthropic-ai/bedrock-sdk')
|
|
157
|
+
// Use region override for small fast model if specified
|
|
158
|
+
const awsRegion =
|
|
159
|
+
model === getSmallFastModel() &&
|
|
160
|
+
process.env.ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION
|
|
161
|
+
? process.env.ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION
|
|
162
|
+
: getAWSRegion()
|
|
163
|
+
|
|
164
|
+
const bedrockArgs: ConstructorParameters<typeof AnthropicBedrock>[0] = {
|
|
165
|
+
...ARGS,
|
|
166
|
+
awsRegion,
|
|
167
|
+
...(isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH) && {
|
|
168
|
+
skipAuth: true,
|
|
169
|
+
}),
|
|
170
|
+
...(isDebugToStdErr() && { logger: createStderrLogger() }),
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Add API key authentication if available
|
|
174
|
+
if (process.env.AWS_BEARER_TOKEN_BEDROCK) {
|
|
175
|
+
bedrockArgs.skipAuth = true
|
|
176
|
+
// Add the Bearer token for Bedrock API key authentication
|
|
177
|
+
bedrockArgs.defaultHeaders = {
|
|
178
|
+
...bedrockArgs.defaultHeaders,
|
|
179
|
+
Authorization: `Bearer ${process.env.AWS_BEARER_TOKEN_BEDROCK}`,
|
|
180
|
+
}
|
|
181
|
+
} else if (!isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH)) {
|
|
182
|
+
// Refresh auth and get credentials with cache clearing
|
|
183
|
+
const cachedCredentials = await refreshAndGetAwsCredentials()
|
|
184
|
+
if (cachedCredentials) {
|
|
185
|
+
bedrockArgs.awsAccessKey = cachedCredentials.accessKeyId
|
|
186
|
+
bedrockArgs.awsSecretKey = cachedCredentials.secretAccessKey
|
|
187
|
+
bedrockArgs.awsSessionToken = cachedCredentials.sessionToken
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// we have always been lying about the return type - this doesn't support batching or models
|
|
191
|
+
return new AnthropicBedrock(bedrockArgs) as unknown as Anthropic
|
|
192
|
+
}
|
|
193
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_USE_FOUNDRY)) {
|
|
194
|
+
const { AnthropicFoundry } = await import('@anthropic-ai/foundry-sdk')
|
|
195
|
+
// Determine Azure AD token provider based on configuration
|
|
196
|
+
// SDK reads ANTHROPIC_FOUNDRY_API_KEY by default
|
|
197
|
+
let azureADTokenProvider: (() => Promise<string>) | undefined
|
|
198
|
+
if (!process.env.ANTHROPIC_FOUNDRY_API_KEY) {
|
|
199
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_SKIP_FOUNDRY_AUTH)) {
|
|
200
|
+
// Mock token provider for testing/proxy scenarios (similar to Vertex mock GoogleAuth)
|
|
201
|
+
azureADTokenProvider = () => Promise.resolve('')
|
|
202
|
+
} else {
|
|
203
|
+
// Use real Azure AD authentication with DefaultAzureCredential
|
|
204
|
+
const {
|
|
205
|
+
DefaultAzureCredential: AzureCredential,
|
|
206
|
+
getBearerTokenProvider,
|
|
207
|
+
} = await import('@azure/identity')
|
|
208
|
+
azureADTokenProvider = getBearerTokenProvider(
|
|
209
|
+
new AzureCredential(),
|
|
210
|
+
'https://cognitiveservices.azure.com/.default',
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const foundryArgs: ConstructorParameters<typeof AnthropicFoundry>[0] = {
|
|
216
|
+
...ARGS,
|
|
217
|
+
...(azureADTokenProvider && { azureADTokenProvider }),
|
|
218
|
+
...(isDebugToStdErr() && { logger: createStderrLogger() }),
|
|
219
|
+
}
|
|
220
|
+
// we have always been lying about the return type - this doesn't support batching or models
|
|
221
|
+
return new AnthropicFoundry(foundryArgs) as unknown as Anthropic
|
|
222
|
+
}
|
|
223
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_USE_VERTEX)) {
|
|
224
|
+
// Refresh GCP credentials if gcpAuthRefresh is configured and credentials are expired
|
|
225
|
+
// This is similar to how we handle AWS credential refresh for Bedrock
|
|
226
|
+
if (!isEnvTruthy(process.env.CLAUDE_CODE_SKIP_VERTEX_AUTH)) {
|
|
227
|
+
await refreshGcpCredentialsIfNeeded()
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const [{ AnthropicVertex }, { GoogleAuth }] = await Promise.all([
|
|
231
|
+
import('@anthropic-ai/vertex-sdk'),
|
|
232
|
+
import('google-auth-library'),
|
|
233
|
+
])
|
|
234
|
+
// TODO: Cache either GoogleAuth instance or AuthClient to improve performance
|
|
235
|
+
// Currently we create a new GoogleAuth instance for every getAnthropicClient() call
|
|
236
|
+
// This could cause repeated authentication flows and metadata server checks
|
|
237
|
+
// However, caching needs careful handling of:
|
|
238
|
+
// - Credential refresh/expiration
|
|
239
|
+
// - Environment variable changes (GOOGLE_APPLICATION_CREDENTIALS, project vars)
|
|
240
|
+
// - Cross-request auth state management
|
|
241
|
+
// See: https://github.com/googleapis/google-auth-library-nodejs/issues/390 for caching challenges
|
|
242
|
+
|
|
243
|
+
// Prevent metadata server timeout by providing projectId as fallback
|
|
244
|
+
// google-auth-library checks project ID in this order:
|
|
245
|
+
// 1. Environment variables (GCLOUD_PROJECT, GOOGLE_CLOUD_PROJECT, etc.)
|
|
246
|
+
// 2. Credential files (service account JSON, ADC file)
|
|
247
|
+
// 3. gcloud config
|
|
248
|
+
// 4. GCE metadata server (causes 12s timeout outside GCP)
|
|
249
|
+
//
|
|
250
|
+
// We only set projectId if user hasn't configured other discovery methods
|
|
251
|
+
// to avoid interfering with their existing auth setup
|
|
252
|
+
|
|
253
|
+
// Check project environment variables in same order as google-auth-library
|
|
254
|
+
// See: https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts
|
|
255
|
+
const hasProjectEnvVar =
|
|
256
|
+
process.env['GCLOUD_PROJECT'] ||
|
|
257
|
+
process.env['GOOGLE_CLOUD_PROJECT'] ||
|
|
258
|
+
process.env['gcloud_project'] ||
|
|
259
|
+
process.env['google_cloud_project']
|
|
260
|
+
|
|
261
|
+
// Check for credential file paths (service account or ADC)
|
|
262
|
+
// Note: We're checking both standard and lowercase variants to be safe,
|
|
263
|
+
// though we should verify what google-auth-library actually checks
|
|
264
|
+
const hasKeyFile =
|
|
265
|
+
process.env['GOOGLE_APPLICATION_CREDENTIALS'] ||
|
|
266
|
+
process.env['google_application_credentials']
|
|
267
|
+
|
|
268
|
+
const googleAuth = isEnvTruthy(process.env.CLAUDE_CODE_SKIP_VERTEX_AUTH)
|
|
269
|
+
? ({
|
|
270
|
+
// Mock GoogleAuth for testing/proxy scenarios
|
|
271
|
+
getClient: () => ({
|
|
272
|
+
getRequestHeaders: () => ({}),
|
|
273
|
+
}),
|
|
274
|
+
} as unknown as GoogleAuth)
|
|
275
|
+
: new GoogleAuth({
|
|
276
|
+
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
|
|
277
|
+
// Only use ANTHROPIC_VERTEX_PROJECT_ID as last resort fallback
|
|
278
|
+
// This prevents the 12-second metadata server timeout when:
|
|
279
|
+
// - No project env vars are set AND
|
|
280
|
+
// - No credential keyfile is specified AND
|
|
281
|
+
// - ADC file exists but lacks project_id field
|
|
282
|
+
//
|
|
283
|
+
// Risk: If auth project != API target project, this could cause billing/audit issues
|
|
284
|
+
// Mitigation: Users can set GOOGLE_CLOUD_PROJECT to override
|
|
285
|
+
...(hasProjectEnvVar || hasKeyFile
|
|
286
|
+
? {}
|
|
287
|
+
: {
|
|
288
|
+
projectId: process.env.ANTHROPIC_VERTEX_PROJECT_ID,
|
|
289
|
+
}),
|
|
290
|
+
})
|
|
291
|
+
|
|
292
|
+
const vertexArgs: ConstructorParameters<typeof AnthropicVertex>[0] = {
|
|
293
|
+
...ARGS,
|
|
294
|
+
region: getVertexRegionForModel(model),
|
|
295
|
+
googleAuth,
|
|
296
|
+
...(isDebugToStdErr() && { logger: createStderrLogger() }),
|
|
297
|
+
}
|
|
298
|
+
// we have always been lying about the return type - this doesn't support batching or models
|
|
299
|
+
return new AnthropicVertex(vertexArgs) as unknown as Anthropic
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Check if we should use OpenRouter
|
|
303
|
+
const openRouterApiKey = process.env.OPENROUTER_API_KEY
|
|
304
|
+
if (openRouterApiKey || isEnvTruthy(process.env.CLAUDE_CODE_USE_OPENROUTER)) {
|
|
305
|
+
const apiKey = openRouterApiKey || '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'
|
|
306
|
+
logForDebugging('[API:auth] Using OpenRouter API')
|
|
307
|
+
return new OpenRouterAnthropicClient(apiKey) as unknown as Anthropic
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Check if we should use Gemini instead of Anthropic
|
|
311
|
+
const geminiApiKey = process.env.GEMINI_API_KEY
|
|
312
|
+
if (geminiApiKey) {
|
|
313
|
+
logForDebugging('[API:auth] Using Gemini API instead of Anthropic')
|
|
314
|
+
return new GeminiAnthropicClient({ apiKey: geminiApiKey }) as unknown as Anthropic
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Determine authentication method based on available tokens
|
|
318
|
+
const clientConfig: ConstructorParameters<typeof Anthropic>[0] = {
|
|
319
|
+
apiKey: isClaudeAISubscriber() ? null : apiKey || getAnthropicApiKey(),
|
|
320
|
+
authToken: isClaudeAISubscriber()
|
|
321
|
+
? getClaudeAIOAuthTokens()?.accessToken
|
|
322
|
+
: undefined,
|
|
323
|
+
// Set baseURL from OAuth config when using staging OAuth
|
|
324
|
+
...(process.env.USER_TYPE === 'ant' &&
|
|
325
|
+
isEnvTruthy(process.env.USE_STAGING_OAUTH)
|
|
326
|
+
? { baseURL: getOauthConfig().BASE_API_URL }
|
|
327
|
+
: {}),
|
|
328
|
+
...ARGS,
|
|
329
|
+
...(isDebugToStdErr() && { logger: createStderrLogger() }),
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return new Anthropic(clientConfig)
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
async function configureApiKeyHeaders(
|
|
336
|
+
headers: Record<string, string>,
|
|
337
|
+
isNonInteractiveSession: boolean,
|
|
338
|
+
): Promise<void> {
|
|
339
|
+
const token =
|
|
340
|
+
process.env.ANTHROPIC_AUTH_TOKEN ||
|
|
341
|
+
(await getApiKeyFromApiKeyHelper(isNonInteractiveSession))
|
|
342
|
+
if (token) {
|
|
343
|
+
headers['Authorization'] = `Bearer ${token}`
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function getCustomHeaders(): Record<string, string> {
|
|
348
|
+
const customHeaders: Record<string, string> = {}
|
|
349
|
+
const customHeadersEnv = process.env.ANTHROPIC_CUSTOM_HEADERS
|
|
350
|
+
|
|
351
|
+
if (!customHeadersEnv) return customHeaders
|
|
352
|
+
|
|
353
|
+
// Split by newlines to support multiple headers
|
|
354
|
+
const headerStrings = customHeadersEnv.split(/\n|\r\n/)
|
|
355
|
+
|
|
356
|
+
for (const headerString of headerStrings) {
|
|
357
|
+
if (!headerString.trim()) continue
|
|
358
|
+
|
|
359
|
+
// Parse header in format "Name: Value" (curl style). Split on first `:`
|
|
360
|
+
// then trim — avoids regex backtracking on malformed long header lines.
|
|
361
|
+
const colonIdx = headerString.indexOf(':')
|
|
362
|
+
if (colonIdx === -1) continue
|
|
363
|
+
const name = headerString.slice(0, colonIdx).trim()
|
|
364
|
+
const value = headerString.slice(colonIdx + 1).trim()
|
|
365
|
+
if (name) {
|
|
366
|
+
customHeaders[name] = value
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return customHeaders
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export const CLIENT_REQUEST_ID_HEADER = 'x-client-request-id'
|
|
374
|
+
|
|
375
|
+
function buildFetch(
|
|
376
|
+
fetchOverride: ClientOptions['fetch'],
|
|
377
|
+
source: string | undefined,
|
|
378
|
+
): ClientOptions['fetch'] {
|
|
379
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
380
|
+
const inner = fetchOverride ?? globalThis.fetch
|
|
381
|
+
// Only send to the first-party API — Bedrock/Vertex/Foundry don't log it
|
|
382
|
+
// and unknown headers risk rejection by strict proxies (inc-4029 class).
|
|
383
|
+
const injectClientRequestId =
|
|
384
|
+
getAPIProvider() === 'firstParty' && isFirstPartyAnthropicBaseUrl()
|
|
385
|
+
return (input, init) => {
|
|
386
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
387
|
+
const headers = new Headers(init?.headers)
|
|
388
|
+
// Generate a client-side request ID so timeouts (which return no server
|
|
389
|
+
// request ID) can still be correlated with server logs by the API team.
|
|
390
|
+
// Callers that want to track the ID themselves can pre-set the header.
|
|
391
|
+
if (injectClientRequestId && !headers.has(CLIENT_REQUEST_ID_HEADER)) {
|
|
392
|
+
headers.set(CLIENT_REQUEST_ID_HEADER, randomUUID())
|
|
393
|
+
}
|
|
394
|
+
try {
|
|
395
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
396
|
+
const url = input instanceof Request ? input.url : String(input)
|
|
397
|
+
const id = headers.get(CLIENT_REQUEST_ID_HEADER)
|
|
398
|
+
logForDebugging(
|
|
399
|
+
`[API REQUEST] ${new URL(url).pathname}${id ? ` ${CLIENT_REQUEST_ID_HEADER}=${id}` : ''} source=${source ?? 'unknown'}`,
|
|
400
|
+
)
|
|
401
|
+
} catch {
|
|
402
|
+
// never let logging crash the fetch
|
|
403
|
+
}
|
|
404
|
+
return inner(input, { ...init, headers })
|
|
405
|
+
}
|
|
406
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import type { ClientOptions } from '@anthropic-ai/sdk'
|
|
2
|
+
import { createHash } from 'crypto'
|
|
3
|
+
import { promises as fs } from 'fs'
|
|
4
|
+
import { dirname, join } from 'path'
|
|
5
|
+
import { getSessionId } from 'src/bootstrap/state.js'
|
|
6
|
+
import { getClaudeConfigHomeDir } from '../../utils/envUtils.js'
|
|
7
|
+
import { jsonParse, jsonStringify } from '../../utils/slowOperations.js'
|
|
8
|
+
|
|
9
|
+
function hashString(str: string): string {
|
|
10
|
+
return createHash('sha256').update(str).digest('hex')
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Cache last few API requests for ant users (e.g., for /issue command)
|
|
14
|
+
const MAX_CACHED_REQUESTS = 5
|
|
15
|
+
const cachedApiRequests: Array<{ timestamp: string; request: unknown }> = []
|
|
16
|
+
|
|
17
|
+
type DumpState = {
|
|
18
|
+
initialized: boolean
|
|
19
|
+
messageCountSeen: number
|
|
20
|
+
lastInitDataHash: string
|
|
21
|
+
// Cheap proxy for change detection — skips the expensive stringify+hash
|
|
22
|
+
// when model/tools/system are structurally identical to the last call.
|
|
23
|
+
lastInitFingerprint: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Track state per session to avoid duplicating data
|
|
27
|
+
const dumpState = new Map<string, DumpState>()
|
|
28
|
+
|
|
29
|
+
export function getLastApiRequests(): Array<{
|
|
30
|
+
timestamp: string
|
|
31
|
+
request: unknown
|
|
32
|
+
}> {
|
|
33
|
+
return [...cachedApiRequests]
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function clearApiRequestCache(): void {
|
|
37
|
+
cachedApiRequests.length = 0
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function clearDumpState(agentIdOrSessionId: string): void {
|
|
41
|
+
dumpState.delete(agentIdOrSessionId)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function clearAllDumpState(): void {
|
|
45
|
+
dumpState.clear()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function addApiRequestToCache(requestData: unknown): void {
|
|
49
|
+
if (process.env.USER_TYPE !== 'ant') return
|
|
50
|
+
cachedApiRequests.push({
|
|
51
|
+
timestamp: new Date().toISOString(),
|
|
52
|
+
request: requestData,
|
|
53
|
+
})
|
|
54
|
+
if (cachedApiRequests.length > MAX_CACHED_REQUESTS) {
|
|
55
|
+
cachedApiRequests.shift()
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function getDumpPromptsPath(agentIdOrSessionId?: string): string {
|
|
60
|
+
return join(
|
|
61
|
+
getClaudeConfigHomeDir(),
|
|
62
|
+
'dump-prompts',
|
|
63
|
+
`${agentIdOrSessionId ?? getSessionId()}.jsonl`,
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function appendToFile(filePath: string, entries: string[]): void {
|
|
68
|
+
if (entries.length === 0) return
|
|
69
|
+
fs.mkdir(dirname(filePath), { recursive: true })
|
|
70
|
+
.then(() => fs.appendFile(filePath, entries.join('\n') + '\n'))
|
|
71
|
+
.catch(() => {})
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function initFingerprint(req: Record<string, unknown>): string {
|
|
75
|
+
const tools = req.tools as Array<{ name?: string }> | undefined
|
|
76
|
+
const system = req.system as unknown[] | string | undefined
|
|
77
|
+
const sysLen =
|
|
78
|
+
typeof system === 'string'
|
|
79
|
+
? system.length
|
|
80
|
+
: Array.isArray(system)
|
|
81
|
+
? system.reduce(
|
|
82
|
+
(n: number, b) => n + ((b as { text?: string }).text?.length ?? 0),
|
|
83
|
+
0,
|
|
84
|
+
)
|
|
85
|
+
: 0
|
|
86
|
+
const toolNames = tools?.map(t => t.name ?? '').join(',') ?? ''
|
|
87
|
+
return `${req.model}|${toolNames}|${sysLen}`
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function dumpRequest(
|
|
91
|
+
body: string,
|
|
92
|
+
ts: string,
|
|
93
|
+
state: DumpState,
|
|
94
|
+
filePath: string,
|
|
95
|
+
): void {
|
|
96
|
+
try {
|
|
97
|
+
const req = jsonParse(body) as Record<string, unknown>
|
|
98
|
+
addApiRequestToCache(req)
|
|
99
|
+
|
|
100
|
+
if (process.env.USER_TYPE !== 'ant') return
|
|
101
|
+
const entries: string[] = []
|
|
102
|
+
const messages = (req.messages ?? []) as Array<{ role?: string }>
|
|
103
|
+
|
|
104
|
+
// Write init data (system, tools, metadata) on first request,
|
|
105
|
+
// and a system_update entry whenever it changes.
|
|
106
|
+
// Cheap fingerprint first: system+tools don't change between turns,
|
|
107
|
+
// so skip the 300ms stringify when the shape is unchanged.
|
|
108
|
+
const fingerprint = initFingerprint(req)
|
|
109
|
+
if (!state.initialized || fingerprint !== state.lastInitFingerprint) {
|
|
110
|
+
const { messages: _, ...initData } = req
|
|
111
|
+
const initDataStr = jsonStringify(initData)
|
|
112
|
+
const initDataHash = hashString(initDataStr)
|
|
113
|
+
state.lastInitFingerprint = fingerprint
|
|
114
|
+
if (!state.initialized) {
|
|
115
|
+
state.initialized = true
|
|
116
|
+
state.lastInitDataHash = initDataHash
|
|
117
|
+
// Reuse initDataStr rather than re-serializing initData inside a wrapper.
|
|
118
|
+
// timestamp from toISOString() contains no chars needing JSON escaping.
|
|
119
|
+
entries.push(
|
|
120
|
+
`{"type":"init","timestamp":"${ts}","data":${initDataStr}}`,
|
|
121
|
+
)
|
|
122
|
+
} else if (initDataHash !== state.lastInitDataHash) {
|
|
123
|
+
state.lastInitDataHash = initDataHash
|
|
124
|
+
entries.push(
|
|
125
|
+
`{"type":"system_update","timestamp":"${ts}","data":${initDataStr}}`,
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Write only new user messages (assistant messages captured in response)
|
|
131
|
+
for (const msg of messages.slice(state.messageCountSeen)) {
|
|
132
|
+
if (msg.role === 'user') {
|
|
133
|
+
entries.push(
|
|
134
|
+
jsonStringify({ type: 'message', timestamp: ts, data: msg }),
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
state.messageCountSeen = messages.length
|
|
139
|
+
|
|
140
|
+
appendToFile(filePath, entries)
|
|
141
|
+
} catch {
|
|
142
|
+
// Ignore parsing errors
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function createDumpPromptsFetch(
|
|
147
|
+
agentIdOrSessionId: string,
|
|
148
|
+
): ClientOptions['fetch'] {
|
|
149
|
+
const filePath = getDumpPromptsPath(agentIdOrSessionId)
|
|
150
|
+
|
|
151
|
+
return async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
152
|
+
const state = dumpState.get(agentIdOrSessionId) ?? {
|
|
153
|
+
initialized: false,
|
|
154
|
+
messageCountSeen: 0,
|
|
155
|
+
lastInitDataHash: '',
|
|
156
|
+
lastInitFingerprint: '',
|
|
157
|
+
}
|
|
158
|
+
dumpState.set(agentIdOrSessionId, state)
|
|
159
|
+
|
|
160
|
+
let timestamp: string | undefined
|
|
161
|
+
|
|
162
|
+
if (init?.method === 'POST' && init.body) {
|
|
163
|
+
timestamp = new Date().toISOString()
|
|
164
|
+
// Parsing + stringifying the request (system prompt + tool schemas = MBs)
|
|
165
|
+
// takes hundreds of ms. Defer so it doesn't block the actual API call —
|
|
166
|
+
// this is debug tooling for /issue, not on the critical path.
|
|
167
|
+
setImmediate(dumpRequest, init.body as string, timestamp, state, filePath)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
171
|
+
const response = await globalThis.fetch(input, init)
|
|
172
|
+
|
|
173
|
+
// Save response async
|
|
174
|
+
if (timestamp && response.ok && process.env.USER_TYPE === 'ant') {
|
|
175
|
+
const cloned = response.clone()
|
|
176
|
+
void (async () => {
|
|
177
|
+
try {
|
|
178
|
+
const isStreaming = cloned.headers
|
|
179
|
+
.get('content-type')
|
|
180
|
+
?.includes('text/event-stream')
|
|
181
|
+
|
|
182
|
+
let data: unknown
|
|
183
|
+
if (isStreaming && cloned.body) {
|
|
184
|
+
// Parse SSE stream into chunks
|
|
185
|
+
const reader = cloned.body.getReader()
|
|
186
|
+
const decoder = new TextDecoder()
|
|
187
|
+
let buffer = ''
|
|
188
|
+
try {
|
|
189
|
+
while (true) {
|
|
190
|
+
const { done, value } = await reader.read()
|
|
191
|
+
if (done) break
|
|
192
|
+
buffer += decoder.decode(value, { stream: true })
|
|
193
|
+
}
|
|
194
|
+
} finally {
|
|
195
|
+
reader.releaseLock()
|
|
196
|
+
}
|
|
197
|
+
const chunks: unknown[] = []
|
|
198
|
+
for (const event of buffer.split('\n\n')) {
|
|
199
|
+
for (const line of event.split('\n')) {
|
|
200
|
+
if (line.startsWith('data: ') && line !== 'data: [DONE]') {
|
|
201
|
+
try {
|
|
202
|
+
chunks.push(jsonParse(line.slice(6)))
|
|
203
|
+
} catch {
|
|
204
|
+
// Ignore parse errors
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
data = { stream: true, chunks }
|
|
210
|
+
} else {
|
|
211
|
+
data = await cloned.json()
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
await fs.appendFile(
|
|
215
|
+
filePath,
|
|
216
|
+
jsonStringify({ type: 'response', timestamp, data }) + '\n',
|
|
217
|
+
)
|
|
218
|
+
} catch {
|
|
219
|
+
// Best effort
|
|
220
|
+
}
|
|
221
|
+
})()
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return response
|
|
225
|
+
}
|
|
226
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { NonNullableUsage } from '../../entrypoints/sdk/sdkUtilityTypes.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zero-initialized usage object. Extracted from logging.ts so that
|
|
5
|
+
* bridge/replBridge.ts can import it without transitively pulling in
|
|
6
|
+
* api/errors.ts → utils/messages.ts → BashTool.tsx → the world.
|
|
7
|
+
*/
|
|
8
|
+
export const EMPTY_USAGE: Readonly<NonNullableUsage> = {
|
|
9
|
+
input_tokens: 0,
|
|
10
|
+
cache_creation_input_tokens: 0,
|
|
11
|
+
cache_read_input_tokens: 0,
|
|
12
|
+
output_tokens: 0,
|
|
13
|
+
server_tool_use: { web_search_requests: 0, web_fetch_requests: 0 },
|
|
14
|
+
service_tier: 'standard',
|
|
15
|
+
cache_creation: {
|
|
16
|
+
ephemeral_1h_input_tokens: 0,
|
|
17
|
+
ephemeral_5m_input_tokens: 0,
|
|
18
|
+
},
|
|
19
|
+
inference_geo: '',
|
|
20
|
+
iterations: [],
|
|
21
|
+
speed: 'standard',
|
|
22
|
+
}
|