@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,313 @@
|
|
|
1
|
+
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
2
|
+
import {
|
|
3
|
+
ElicitationCompleteNotificationSchema,
|
|
4
|
+
type ElicitRequestParams,
|
|
5
|
+
ElicitRequestSchema,
|
|
6
|
+
type ElicitResult,
|
|
7
|
+
} from '@modelcontextprotocol/sdk/types.js'
|
|
8
|
+
import type { AppState } from '../../state/AppState.js'
|
|
9
|
+
import {
|
|
10
|
+
executeElicitationHooks,
|
|
11
|
+
executeElicitationResultHooks,
|
|
12
|
+
executeNotificationHooks,
|
|
13
|
+
} from '../../utils/hooks.js'
|
|
14
|
+
import { logMCPDebug, logMCPError } from '../../utils/log.js'
|
|
15
|
+
import { jsonStringify } from '../../utils/slowOperations.js'
|
|
16
|
+
import {
|
|
17
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
18
|
+
logEvent,
|
|
19
|
+
} from '../analytics/index.js'
|
|
20
|
+
|
|
21
|
+
/** Configuration for the waiting state shown after the user opens a URL. */
|
|
22
|
+
export type ElicitationWaitingState = {
|
|
23
|
+
/** Button label, e.g. "Retry now" or "Skip confirmation" */
|
|
24
|
+
actionLabel: string
|
|
25
|
+
/** Whether to show a visible Cancel button (e.g. for error-based retry flow) */
|
|
26
|
+
showCancel?: boolean
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type ElicitationRequestEvent = {
|
|
30
|
+
serverName: string
|
|
31
|
+
/** The JSON-RPC request ID, unique per server connection. */
|
|
32
|
+
requestId: string | number
|
|
33
|
+
params: ElicitRequestParams
|
|
34
|
+
signal: AbortSignal
|
|
35
|
+
/**
|
|
36
|
+
* Resolves the elicitation. For explicit elicitations, all actions are
|
|
37
|
+
* meaningful. For error-based retry (-32042), 'accept' is a no-op —
|
|
38
|
+
* the retry is driven by onWaitingDismiss instead.
|
|
39
|
+
*/
|
|
40
|
+
respond: (response: ElicitResult) => void
|
|
41
|
+
/** For URL elicitations: shown after user opens the browser. */
|
|
42
|
+
waitingState?: ElicitationWaitingState
|
|
43
|
+
/** Called when phase 2 (waiting) is dismissed by user action or completion. */
|
|
44
|
+
onWaitingDismiss?: (action: 'dismiss' | 'retry' | 'cancel') => void
|
|
45
|
+
/** Set to true by the completion notification handler when the server confirms completion. */
|
|
46
|
+
completed?: boolean
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function getElicitationMode(params: ElicitRequestParams): 'form' | 'url' {
|
|
50
|
+
return params.mode === 'url' ? 'url' : 'form'
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Find a queued elicitation event by server name and elicitationId. */
|
|
54
|
+
function findElicitationInQueue(
|
|
55
|
+
queue: ElicitationRequestEvent[],
|
|
56
|
+
serverName: string,
|
|
57
|
+
elicitationId: string,
|
|
58
|
+
): number {
|
|
59
|
+
return queue.findIndex(
|
|
60
|
+
e =>
|
|
61
|
+
e.serverName === serverName &&
|
|
62
|
+
e.params.mode === 'url' &&
|
|
63
|
+
'elicitationId' in e.params &&
|
|
64
|
+
e.params.elicitationId === elicitationId,
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function registerElicitationHandler(
|
|
69
|
+
client: Client,
|
|
70
|
+
serverName: string,
|
|
71
|
+
setAppState: (f: (prevState: AppState) => AppState) => void,
|
|
72
|
+
): void {
|
|
73
|
+
// Register the elicitation request handler.
|
|
74
|
+
// Wrapped in try/catch because setRequestHandler throws if the client wasn't
|
|
75
|
+
// created with elicitation capability declared.
|
|
76
|
+
try {
|
|
77
|
+
client.setRequestHandler(ElicitRequestSchema, async (request, extra) => {
|
|
78
|
+
logMCPDebug(
|
|
79
|
+
serverName,
|
|
80
|
+
`Received elicitation request: ${jsonStringify(request)}`,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
const mode = getElicitationMode(request.params)
|
|
84
|
+
|
|
85
|
+
logEvent('tengu_mcp_elicitation_shown', {
|
|
86
|
+
mode: mode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
// Run elicitation hooks first - they can provide a response programmatically
|
|
91
|
+
const hookResponse = await runElicitationHooks(
|
|
92
|
+
serverName,
|
|
93
|
+
request.params,
|
|
94
|
+
extra.signal,
|
|
95
|
+
)
|
|
96
|
+
if (hookResponse) {
|
|
97
|
+
logMCPDebug(
|
|
98
|
+
serverName,
|
|
99
|
+
`Elicitation resolved by hook: ${jsonStringify(hookResponse)}`,
|
|
100
|
+
)
|
|
101
|
+
logEvent('tengu_mcp_elicitation_response', {
|
|
102
|
+
mode: mode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
103
|
+
action:
|
|
104
|
+
hookResponse.action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
105
|
+
})
|
|
106
|
+
return hookResponse
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const elicitationId =
|
|
110
|
+
mode === 'url' && 'elicitationId' in request.params
|
|
111
|
+
? (request.params.elicitationId as string | undefined)
|
|
112
|
+
: undefined
|
|
113
|
+
|
|
114
|
+
const response = new Promise<ElicitResult>(resolve => {
|
|
115
|
+
const onAbort = () => {
|
|
116
|
+
resolve({ action: 'cancel' })
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (extra.signal.aborted) {
|
|
120
|
+
onAbort()
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const waitingState: ElicitationWaitingState | undefined =
|
|
125
|
+
elicitationId ? { actionLabel: 'Skip confirmation' } : undefined
|
|
126
|
+
|
|
127
|
+
setAppState(prev => ({
|
|
128
|
+
...prev,
|
|
129
|
+
elicitation: {
|
|
130
|
+
queue: [
|
|
131
|
+
...prev.elicitation.queue,
|
|
132
|
+
{
|
|
133
|
+
serverName,
|
|
134
|
+
requestId: extra.requestId,
|
|
135
|
+
params: request.params,
|
|
136
|
+
signal: extra.signal,
|
|
137
|
+
waitingState,
|
|
138
|
+
respond: (result: ElicitResult) => {
|
|
139
|
+
extra.signal.removeEventListener('abort', onAbort)
|
|
140
|
+
logEvent('tengu_mcp_elicitation_response', {
|
|
141
|
+
mode: mode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
142
|
+
action:
|
|
143
|
+
result.action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
144
|
+
})
|
|
145
|
+
resolve(result)
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
}))
|
|
151
|
+
|
|
152
|
+
extra.signal.addEventListener('abort', onAbort, { once: true })
|
|
153
|
+
})
|
|
154
|
+
const rawResult = await response
|
|
155
|
+
logMCPDebug(
|
|
156
|
+
serverName,
|
|
157
|
+
`Elicitation response: ${jsonStringify(rawResult)}`,
|
|
158
|
+
)
|
|
159
|
+
const result = await runElicitationResultHooks(
|
|
160
|
+
serverName,
|
|
161
|
+
rawResult,
|
|
162
|
+
extra.signal,
|
|
163
|
+
mode,
|
|
164
|
+
elicitationId,
|
|
165
|
+
)
|
|
166
|
+
return result
|
|
167
|
+
} catch (error) {
|
|
168
|
+
logMCPError(serverName, `Elicitation error: ${error}`)
|
|
169
|
+
return { action: 'cancel' as const }
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
// Register handler for elicitation completion notifications (URL mode).
|
|
174
|
+
// Sets `completed: true` on the matching queue event; the dialog reacts to this flag.
|
|
175
|
+
client.setNotificationHandler(
|
|
176
|
+
ElicitationCompleteNotificationSchema,
|
|
177
|
+
notification => {
|
|
178
|
+
const { elicitationId } = notification.params
|
|
179
|
+
logMCPDebug(
|
|
180
|
+
serverName,
|
|
181
|
+
`Received elicitation completion notification: ${elicitationId}`,
|
|
182
|
+
)
|
|
183
|
+
void executeNotificationHooks({
|
|
184
|
+
message: `MCP server "${serverName}" confirmed elicitation ${elicitationId} complete`,
|
|
185
|
+
notificationType: 'elicitation_complete',
|
|
186
|
+
})
|
|
187
|
+
let found = false
|
|
188
|
+
setAppState(prev => {
|
|
189
|
+
const idx = findElicitationInQueue(
|
|
190
|
+
prev.elicitation.queue,
|
|
191
|
+
serverName,
|
|
192
|
+
elicitationId,
|
|
193
|
+
)
|
|
194
|
+
if (idx === -1) return prev
|
|
195
|
+
found = true
|
|
196
|
+
const queue = [...prev.elicitation.queue]
|
|
197
|
+
queue[idx] = { ...queue[idx]!, completed: true }
|
|
198
|
+
return { ...prev, elicitation: { queue } }
|
|
199
|
+
})
|
|
200
|
+
if (!found) {
|
|
201
|
+
logMCPDebug(
|
|
202
|
+
serverName,
|
|
203
|
+
`Ignoring completion notification for unknown elicitation: ${elicitationId}`,
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
)
|
|
208
|
+
} catch {
|
|
209
|
+
// Client wasn't created with elicitation capability - nothing to register
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export async function runElicitationHooks(
|
|
215
|
+
serverName: string,
|
|
216
|
+
params: ElicitRequestParams,
|
|
217
|
+
signal: AbortSignal,
|
|
218
|
+
): Promise<ElicitResult | undefined> {
|
|
219
|
+
try {
|
|
220
|
+
const mode = params.mode === 'url' ? 'url' : 'form'
|
|
221
|
+
const url = 'url' in params ? (params.url as string) : undefined
|
|
222
|
+
const elicitationId =
|
|
223
|
+
'elicitationId' in params
|
|
224
|
+
? (params.elicitationId as string | undefined)
|
|
225
|
+
: undefined
|
|
226
|
+
|
|
227
|
+
const { elicitationResponse, blockingError } =
|
|
228
|
+
await executeElicitationHooks({
|
|
229
|
+
serverName,
|
|
230
|
+
message: params.message,
|
|
231
|
+
requestedSchema:
|
|
232
|
+
'requestedSchema' in params
|
|
233
|
+
? (params.requestedSchema as Record<string, unknown>)
|
|
234
|
+
: undefined,
|
|
235
|
+
signal,
|
|
236
|
+
mode,
|
|
237
|
+
url,
|
|
238
|
+
elicitationId,
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
if (blockingError) {
|
|
242
|
+
return { action: 'decline' }
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (elicitationResponse) {
|
|
246
|
+
return {
|
|
247
|
+
action: elicitationResponse.action,
|
|
248
|
+
content: elicitationResponse.content,
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return undefined
|
|
253
|
+
} catch (error) {
|
|
254
|
+
logMCPError(serverName, `Elicitation hook error: ${error}`)
|
|
255
|
+
return undefined
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Run ElicitationResult hooks after the user has responded, then fire a
|
|
261
|
+
* `elicitation_response` notification. Returns a (potentially modified)
|
|
262
|
+
* ElicitResult — hooks may override the action/content or block the response.
|
|
263
|
+
*/
|
|
264
|
+
export async function runElicitationResultHooks(
|
|
265
|
+
serverName: string,
|
|
266
|
+
result: ElicitResult,
|
|
267
|
+
signal: AbortSignal,
|
|
268
|
+
mode?: 'form' | 'url',
|
|
269
|
+
elicitationId?: string,
|
|
270
|
+
): Promise<ElicitResult> {
|
|
271
|
+
try {
|
|
272
|
+
const { elicitationResultResponse, blockingError } =
|
|
273
|
+
await executeElicitationResultHooks({
|
|
274
|
+
serverName,
|
|
275
|
+
action: result.action,
|
|
276
|
+
content: result.content as Record<string, unknown> | undefined,
|
|
277
|
+
signal,
|
|
278
|
+
mode,
|
|
279
|
+
elicitationId,
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
if (blockingError) {
|
|
283
|
+
void executeNotificationHooks({
|
|
284
|
+
message: `Elicitation response for server "${serverName}": decline`,
|
|
285
|
+
notificationType: 'elicitation_response',
|
|
286
|
+
})
|
|
287
|
+
return { action: 'decline' }
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const finalResult = elicitationResultResponse
|
|
291
|
+
? {
|
|
292
|
+
action: elicitationResultResponse.action,
|
|
293
|
+
content: elicitationResultResponse.content ?? result.content,
|
|
294
|
+
}
|
|
295
|
+
: result
|
|
296
|
+
|
|
297
|
+
// Fire a notification for observability
|
|
298
|
+
void executeNotificationHooks({
|
|
299
|
+
message: `Elicitation response for server "${serverName}": ${finalResult.action}`,
|
|
300
|
+
notificationType: 'elicitation_response',
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
return finalResult
|
|
304
|
+
} catch (error) {
|
|
305
|
+
logMCPError(serverName, `ElicitationResult hook error: ${error}`)
|
|
306
|
+
// Fire notification even on error
|
|
307
|
+
void executeNotificationHooks({
|
|
308
|
+
message: `Elicitation response for server "${serverName}": ${result.action}`,
|
|
309
|
+
notificationType: 'elicitation_response',
|
|
310
|
+
})
|
|
311
|
+
return result
|
|
312
|
+
}
|
|
313
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for expanding environment variables in MCP server configurations
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Expand environment variables in a string value
|
|
7
|
+
* Handles ${VAR} and ${VAR:-default} syntax
|
|
8
|
+
* @returns Object with expanded string and list of missing variables
|
|
9
|
+
*/
|
|
10
|
+
export function expandEnvVarsInString(value: string): {
|
|
11
|
+
expanded: string
|
|
12
|
+
missingVars: string[]
|
|
13
|
+
} {
|
|
14
|
+
const missingVars: string[] = []
|
|
15
|
+
|
|
16
|
+
const expanded = value.replace(/\$\{([^}]+)\}/g, (match, varContent) => {
|
|
17
|
+
// Split on :- to support default values (limit to 2 parts to preserve :- in defaults)
|
|
18
|
+
const [varName, defaultValue] = varContent.split(':-', 2)
|
|
19
|
+
const envValue = process.env[varName]
|
|
20
|
+
|
|
21
|
+
if (envValue !== undefined) {
|
|
22
|
+
return envValue
|
|
23
|
+
}
|
|
24
|
+
if (defaultValue !== undefined) {
|
|
25
|
+
return defaultValue
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Track missing variable for error reporting
|
|
29
|
+
missingVars.push(varName)
|
|
30
|
+
// Return original if not found (allows debugging but will be reported as error)
|
|
31
|
+
return match
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
expanded,
|
|
36
|
+
missingVars,
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { getIsNonInteractiveSession } from '../../bootstrap/state.js'
|
|
2
|
+
import { checkHasTrustDialogAccepted } from '../../utils/config.js'
|
|
3
|
+
import { logAntError } from '../../utils/debug.js'
|
|
4
|
+
import { errorMessage } from '../../utils/errors.js'
|
|
5
|
+
import { execFileNoThrowWithCwd } from '../../utils/execFileNoThrow.js'
|
|
6
|
+
import { logError, logMCPDebug, logMCPError } from '../../utils/log.js'
|
|
7
|
+
import { jsonParse } from '../../utils/slowOperations.js'
|
|
8
|
+
import { logEvent } from '../analytics/index.js'
|
|
9
|
+
import type {
|
|
10
|
+
McpHTTPServerConfig,
|
|
11
|
+
McpSSEServerConfig,
|
|
12
|
+
McpWebSocketServerConfig,
|
|
13
|
+
ScopedMcpServerConfig,
|
|
14
|
+
} from './types.js'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Check if the MCP server config comes from project settings (projectSettings or localSettings)
|
|
18
|
+
* This is important for security checks
|
|
19
|
+
*/
|
|
20
|
+
function isMcpServerFromProjectOrLocalSettings(
|
|
21
|
+
config: ScopedMcpServerConfig,
|
|
22
|
+
): boolean {
|
|
23
|
+
return config.scope === 'project' || config.scope === 'local'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Get dynamic headers for an MCP server using the headersHelper script
|
|
28
|
+
* @param serverName The name of the MCP server
|
|
29
|
+
* @param config The MCP server configuration
|
|
30
|
+
* @returns Headers object or null if not configured or failed
|
|
31
|
+
*/
|
|
32
|
+
export async function getMcpHeadersFromHelper(
|
|
33
|
+
serverName: string,
|
|
34
|
+
config: McpSSEServerConfig | McpHTTPServerConfig | McpWebSocketServerConfig,
|
|
35
|
+
): Promise<Record<string, string> | null> {
|
|
36
|
+
if (!config.headersHelper) {
|
|
37
|
+
return null
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Security check for project/local settings
|
|
41
|
+
// Skip trust check in non-interactive mode (e.g., CI/CD, automation)
|
|
42
|
+
if (
|
|
43
|
+
'scope' in config &&
|
|
44
|
+
isMcpServerFromProjectOrLocalSettings(config as ScopedMcpServerConfig) &&
|
|
45
|
+
!getIsNonInteractiveSession()
|
|
46
|
+
) {
|
|
47
|
+
// Check if trust has been established for this project
|
|
48
|
+
const hasTrust = checkHasTrustDialogAccepted()
|
|
49
|
+
if (!hasTrust) {
|
|
50
|
+
const error = new Error(
|
|
51
|
+
`Security: headersHelper for MCP server '${serverName}' executed before workspace trust is confirmed. If you see this message, post in ${MACRO.FEEDBACK_CHANNEL}.`,
|
|
52
|
+
)
|
|
53
|
+
logAntError('MCP headersHelper invoked before trust check', error)
|
|
54
|
+
logEvent('tengu_mcp_headersHelper_missing_trust', {})
|
|
55
|
+
return null
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
logMCPDebug(serverName, 'Executing headersHelper to get dynamic headers')
|
|
61
|
+
const execResult = await execFileNoThrowWithCwd(config.headersHelper, [], {
|
|
62
|
+
shell: true,
|
|
63
|
+
timeout: 10000,
|
|
64
|
+
// Pass server context so one helper script can serve multiple MCP servers
|
|
65
|
+
// (git credential-helper style). See deshaw/anthropic-issues#28.
|
|
66
|
+
env: {
|
|
67
|
+
...process.env,
|
|
68
|
+
CLAUDE_CODE_MCP_SERVER_NAME: serverName,
|
|
69
|
+
CLAUDE_CODE_MCP_SERVER_URL: config.url,
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
if (execResult.code !== 0 || !execResult.stdout) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
`headersHelper for MCP server '${serverName}' did not return a valid value`,
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
const result = execResult.stdout.trim()
|
|
78
|
+
|
|
79
|
+
const headers = jsonParse(result)
|
|
80
|
+
if (
|
|
81
|
+
typeof headers !== 'object' ||
|
|
82
|
+
headers === null ||
|
|
83
|
+
Array.isArray(headers)
|
|
84
|
+
) {
|
|
85
|
+
throw new Error(
|
|
86
|
+
`headersHelper for MCP server '${serverName}' must return a JSON object with string key-value pairs`,
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Validate all values are strings
|
|
91
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
92
|
+
if (typeof value !== 'string') {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`headersHelper for MCP server '${serverName}' returned non-string value for key "${key}": ${typeof value}`,
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
logMCPDebug(
|
|
100
|
+
serverName,
|
|
101
|
+
`Successfully retrieved ${Object.keys(headers).length} headers from headersHelper`,
|
|
102
|
+
)
|
|
103
|
+
return headers as Record<string, string>
|
|
104
|
+
} catch (error) {
|
|
105
|
+
logMCPError(
|
|
106
|
+
serverName,
|
|
107
|
+
`Error getting headers from headersHelper: ${errorMessage(error)}`,
|
|
108
|
+
)
|
|
109
|
+
logError(
|
|
110
|
+
new Error(
|
|
111
|
+
`Error getting MCP headers from headersHelper for server '${serverName}': ${errorMessage(error)}`,
|
|
112
|
+
),
|
|
113
|
+
)
|
|
114
|
+
// Return null instead of throwing to avoid blocking the connection
|
|
115
|
+
return null
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Get combined headers for an MCP server (static + dynamic)
|
|
121
|
+
* @param serverName The name of the MCP server
|
|
122
|
+
* @param config The MCP server configuration
|
|
123
|
+
* @returns Combined headers object
|
|
124
|
+
*/
|
|
125
|
+
export async function getMcpServerHeaders(
|
|
126
|
+
serverName: string,
|
|
127
|
+
config: McpSSEServerConfig | McpHTTPServerConfig | McpWebSocketServerConfig,
|
|
128
|
+
): Promise<Record<string, string>> {
|
|
129
|
+
const staticHeaders = config.headers || {}
|
|
130
|
+
const dynamicHeaders =
|
|
131
|
+
(await getMcpHeadersFromHelper(serverName, config)) || {}
|
|
132
|
+
|
|
133
|
+
// Dynamic headers override static headers if both are present
|
|
134
|
+
return {
|
|
135
|
+
...staticHeaders,
|
|
136
|
+
...dynamicHeaders,
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure string utility functions for MCP tool/server name parsing.
|
|
3
|
+
* This file has no heavy dependencies to keep it lightweight for
|
|
4
|
+
* consumers that only need string parsing (e.g., permissionValidation).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { normalizeNameForMCP } from './normalization.js'
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Extracts MCP server information from a tool name string
|
|
11
|
+
* @param toolString The string to parse. Expected format: "mcp__serverName__toolName"
|
|
12
|
+
* @returns An object containing server name and optional tool name, or null if not a valid MCP rule
|
|
13
|
+
*
|
|
14
|
+
* Known limitation: If a server name contains "__", parsing will be incorrect.
|
|
15
|
+
* For example, "mcp__my__server__tool" would parse as server="my" and tool="server__tool"
|
|
16
|
+
* instead of server="my__server" and tool="tool". This is rare in practice since server
|
|
17
|
+
* names typically don't contain double underscores.
|
|
18
|
+
*/
|
|
19
|
+
export function mcpInfoFromString(toolString: string): {
|
|
20
|
+
serverName: string
|
|
21
|
+
toolName: string | undefined
|
|
22
|
+
} | null {
|
|
23
|
+
const parts = toolString.split('__')
|
|
24
|
+
const [mcpPart, serverName, ...toolNameParts] = parts
|
|
25
|
+
if (mcpPart !== 'mcp' || !serverName) {
|
|
26
|
+
return null
|
|
27
|
+
}
|
|
28
|
+
// Join all parts after server name to preserve double underscores in tool names
|
|
29
|
+
const toolName =
|
|
30
|
+
toolNameParts.length > 0 ? toolNameParts.join('__') : undefined
|
|
31
|
+
return { serverName, toolName }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Generates the MCP tool/command name prefix for a given server
|
|
36
|
+
* @param serverName Name of the MCP server
|
|
37
|
+
* @returns The prefix string
|
|
38
|
+
*/
|
|
39
|
+
export function getMcpPrefix(serverName: string): string {
|
|
40
|
+
return `mcp__${normalizeNameForMCP(serverName)}__`
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Builds a fully qualified MCP tool name from server and tool names.
|
|
45
|
+
* Inverse of mcpInfoFromString().
|
|
46
|
+
* @param serverName Name of the MCP server (unnormalized)
|
|
47
|
+
* @param toolName Name of the tool (unnormalized)
|
|
48
|
+
* @returns The fully qualified name, e.g., "mcp__server__tool"
|
|
49
|
+
*/
|
|
50
|
+
export function buildMcpToolName(serverName: string, toolName: string): string {
|
|
51
|
+
return `${getMcpPrefix(serverName)}${normalizeNameForMCP(toolName)}`
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Returns the name to use for permission rule matching.
|
|
56
|
+
* For MCP tools, uses the fully qualified mcp__server__tool name so that
|
|
57
|
+
* deny rules targeting builtins (e.g., "Write") don't match unprefixed MCP
|
|
58
|
+
* replacements that share the same display name. Falls back to `tool.name`.
|
|
59
|
+
*/
|
|
60
|
+
export function getToolNameForPermissionCheck(tool: {
|
|
61
|
+
name: string
|
|
62
|
+
mcpInfo?: { serverName: string; toolName: string }
|
|
63
|
+
}): string {
|
|
64
|
+
return tool.mcpInfo
|
|
65
|
+
? buildMcpToolName(tool.mcpInfo.serverName, tool.mcpInfo.toolName)
|
|
66
|
+
: tool.name
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* Extracts the display name from an MCP tool/command name
|
|
71
|
+
* @param fullName The full MCP tool/command name (e.g., "mcp__server_name__tool_name")
|
|
72
|
+
* @param serverName The server name to remove from the prefix
|
|
73
|
+
* @returns The display name without the MCP prefix
|
|
74
|
+
*/
|
|
75
|
+
export function getMcpDisplayName(
|
|
76
|
+
fullName: string,
|
|
77
|
+
serverName: string,
|
|
78
|
+
): string {
|
|
79
|
+
const prefix = `mcp__${normalizeNameForMCP(serverName)}__`
|
|
80
|
+
return fullName.replace(prefix, '')
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Extracts just the tool/command display name from a userFacingName
|
|
85
|
+
* @param userFacingName The full user-facing name (e.g., "github - Add comment to issue (MCP)")
|
|
86
|
+
* @returns The display name without server prefix and (MCP) suffix
|
|
87
|
+
*/
|
|
88
|
+
export function extractMcpToolDisplayName(userFacingName: string): string {
|
|
89
|
+
// This is really ugly but our current Tool type doesn't make it easy to have different display names for different purposes.
|
|
90
|
+
|
|
91
|
+
// First, remove the (MCP) suffix if present
|
|
92
|
+
let withoutSuffix = userFacingName.replace(/\s*\(MCP\)\s*$/, '')
|
|
93
|
+
|
|
94
|
+
// Trim the result
|
|
95
|
+
withoutSuffix = withoutSuffix.trim()
|
|
96
|
+
|
|
97
|
+
// Then, remove the server prefix (everything before " - ")
|
|
98
|
+
const dashIndex = withoutSuffix.indexOf(' - ')
|
|
99
|
+
if (dashIndex !== -1) {
|
|
100
|
+
const displayName = withoutSuffix.substring(dashIndex + 3).trim()
|
|
101
|
+
return displayName
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// If no dash found, return the string without (MCP)
|
|
105
|
+
return withoutSuffix
|
|
106
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for MCP name normalization.
|
|
3
|
+
* This file has no dependencies to avoid circular imports.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Claude.ai server names are prefixed with this string
|
|
7
|
+
const CLAUDEAI_SERVER_PREFIX = 'claude.ai '
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Normalize server names to be compatible with the API pattern ^[a-zA-Z0-9_-]{1,64}$
|
|
11
|
+
* Replaces any invalid characters (including dots and spaces) with underscores.
|
|
12
|
+
*
|
|
13
|
+
* For claude.ai servers (names starting with "claude.ai "), also collapses
|
|
14
|
+
* consecutive underscores and strips leading/trailing underscores to prevent
|
|
15
|
+
* interference with the __ delimiter used in MCP tool names.
|
|
16
|
+
*/
|
|
17
|
+
export function normalizeNameForMCP(name: string): string {
|
|
18
|
+
let normalized = name.replace(/[^a-zA-Z0-9_-]/g, '_')
|
|
19
|
+
if (name.startsWith(CLAUDEAI_SERVER_PREFIX)) {
|
|
20
|
+
normalized = normalized.replace(/_+/g, '_').replace(/^_|_$/g, '')
|
|
21
|
+
}
|
|
22
|
+
return normalized
|
|
23
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth redirect port helpers — extracted from auth.ts to break the
|
|
3
|
+
* auth.ts ↔ xaaIdpLogin.ts circular dependency.
|
|
4
|
+
*/
|
|
5
|
+
import { createServer } from 'http'
|
|
6
|
+
import { getPlatform } from '../../utils/platform.js'
|
|
7
|
+
|
|
8
|
+
// Windows dynamic port range 49152-65535 is reserved
|
|
9
|
+
const REDIRECT_PORT_RANGE =
|
|
10
|
+
getPlatform() === 'windows'
|
|
11
|
+
? { min: 39152, max: 49151 }
|
|
12
|
+
: { min: 49152, max: 65535 }
|
|
13
|
+
const REDIRECT_PORT_FALLBACK = 3118
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Builds a redirect URI on localhost with the given port and a fixed `/callback` path.
|
|
17
|
+
*
|
|
18
|
+
* RFC 8252 Section 7.3 (OAuth for Native Apps): loopback redirect URIs match any
|
|
19
|
+
* port as long as the path matches.
|
|
20
|
+
*/
|
|
21
|
+
export function buildRedirectUri(
|
|
22
|
+
port: number = REDIRECT_PORT_FALLBACK,
|
|
23
|
+
): string {
|
|
24
|
+
return `http://localhost:${port}/callback`
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function getMcpOAuthCallbackPort(): number | undefined {
|
|
28
|
+
const port = parseInt(process.env.MCP_OAUTH_CALLBACK_PORT || '', 10)
|
|
29
|
+
return port > 0 ? port : undefined
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Finds an available port in the specified range for OAuth redirect
|
|
34
|
+
* Uses random selection for better security
|
|
35
|
+
*/
|
|
36
|
+
export async function findAvailablePort(): Promise<number> {
|
|
37
|
+
// First, try the configured port if specified
|
|
38
|
+
const configuredPort = getMcpOAuthCallbackPort()
|
|
39
|
+
if (configuredPort) {
|
|
40
|
+
return configuredPort
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const { min, max } = REDIRECT_PORT_RANGE
|
|
44
|
+
const range = max - min + 1
|
|
45
|
+
const maxAttempts = Math.min(range, 100) // Don't try forever
|
|
46
|
+
|
|
47
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
48
|
+
const port = min + Math.floor(Math.random() * range)
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
await new Promise<void>((resolve, reject) => {
|
|
52
|
+
const testServer = createServer()
|
|
53
|
+
testServer.once('error', reject)
|
|
54
|
+
testServer.listen(port, () => {
|
|
55
|
+
testServer.close(() => resolve())
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
return port
|
|
59
|
+
} catch {
|
|
60
|
+
// Port in use, try another random port
|
|
61
|
+
continue
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// If random selection failed, try the fallback port
|
|
66
|
+
try {
|
|
67
|
+
await new Promise<void>((resolve, reject) => {
|
|
68
|
+
const testServer = createServer()
|
|
69
|
+
testServer.once('error', reject)
|
|
70
|
+
testServer.listen(REDIRECT_PORT_FALLBACK, () => {
|
|
71
|
+
testServer.close(() => resolve())
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
return REDIRECT_PORT_FALLBACK
|
|
75
|
+
} catch {
|
|
76
|
+
throw new Error(`No available ports for OAuth redirect`)
|
|
77
|
+
}
|
|
78
|
+
}
|