@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,625 @@
|
|
|
1
|
+
import { execa } from 'execa'
|
|
2
|
+
import { readFile, realpath } from 'fs/promises'
|
|
3
|
+
import { homedir } from 'os'
|
|
4
|
+
import { delimiter, join, posix, win32 } from 'path'
|
|
5
|
+
import { checkGlobalInstallPermissions } from './autoUpdater.js'
|
|
6
|
+
import { isInBundledMode } from './bundledMode.js'
|
|
7
|
+
import {
|
|
8
|
+
formatAutoUpdaterDisabledReason,
|
|
9
|
+
getAutoUpdaterDisabledReason,
|
|
10
|
+
getGlobalConfig,
|
|
11
|
+
type InstallMethod,
|
|
12
|
+
} from './config.js'
|
|
13
|
+
import { getCwd } from './cwd.js'
|
|
14
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
15
|
+
import { execFileNoThrow } from './execFileNoThrow.js'
|
|
16
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
17
|
+
import {
|
|
18
|
+
getShellType,
|
|
19
|
+
isRunningFromLocalInstallation,
|
|
20
|
+
localInstallationExists,
|
|
21
|
+
} from './localInstaller.js'
|
|
22
|
+
import {
|
|
23
|
+
detectApk,
|
|
24
|
+
detectAsdf,
|
|
25
|
+
detectDeb,
|
|
26
|
+
detectHomebrew,
|
|
27
|
+
detectMise,
|
|
28
|
+
detectPacman,
|
|
29
|
+
detectRpm,
|
|
30
|
+
detectWinget,
|
|
31
|
+
getPackageManager,
|
|
32
|
+
} from './nativeInstaller/packageManagers.js'
|
|
33
|
+
import { getPlatform } from './platform.js'
|
|
34
|
+
import { getRipgrepStatus } from './ripgrep.js'
|
|
35
|
+
import { SandboxManager } from './sandbox/sandbox-adapter.js'
|
|
36
|
+
import { getManagedFilePath } from './settings/managedPath.js'
|
|
37
|
+
import { CUSTOMIZATION_SURFACES } from './settings/types.js'
|
|
38
|
+
import {
|
|
39
|
+
findClaudeAlias,
|
|
40
|
+
findValidClaudeAlias,
|
|
41
|
+
getShellConfigPaths,
|
|
42
|
+
} from './shellConfig.js'
|
|
43
|
+
import { jsonParse } from './slowOperations.js'
|
|
44
|
+
import { which } from './which.js'
|
|
45
|
+
|
|
46
|
+
export type InstallationType =
|
|
47
|
+
| 'npm-global'
|
|
48
|
+
| 'npm-local'
|
|
49
|
+
| 'native'
|
|
50
|
+
| 'package-manager'
|
|
51
|
+
| 'development'
|
|
52
|
+
| 'unknown'
|
|
53
|
+
|
|
54
|
+
export type DiagnosticInfo = {
|
|
55
|
+
installationType: InstallationType
|
|
56
|
+
version: string
|
|
57
|
+
installationPath: string
|
|
58
|
+
invokedBinary: string
|
|
59
|
+
configInstallMethod: InstallMethod | 'not set'
|
|
60
|
+
autoUpdates: string
|
|
61
|
+
hasUpdatePermissions: boolean | null
|
|
62
|
+
multipleInstallations: Array<{ type: string; path: string }>
|
|
63
|
+
warnings: Array<{ issue: string; fix: string }>
|
|
64
|
+
recommendation?: string
|
|
65
|
+
packageManager?: string
|
|
66
|
+
ripgrepStatus: {
|
|
67
|
+
working: boolean
|
|
68
|
+
mode: 'system' | 'builtin' | 'embedded'
|
|
69
|
+
systemPath: string | null
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function getNormalizedPaths(): [invokedPath: string, execPath: string] {
|
|
74
|
+
let invokedPath = process.argv[1] || ''
|
|
75
|
+
let execPath = process.execPath || process.argv[0] || ''
|
|
76
|
+
|
|
77
|
+
// On Windows, convert backslashes to forward slashes for consistent path matching
|
|
78
|
+
if (getPlatform() === 'windows') {
|
|
79
|
+
invokedPath = invokedPath.split(win32.sep).join(posix.sep)
|
|
80
|
+
execPath = execPath.split(win32.sep).join(posix.sep)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return [invokedPath, execPath]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export async function getCurrentInstallationType(): Promise<InstallationType> {
|
|
87
|
+
if (process.env.NODE_ENV === 'development') {
|
|
88
|
+
return 'development'
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const [invokedPath] = getNormalizedPaths()
|
|
92
|
+
|
|
93
|
+
// Check if running in bundled mode first
|
|
94
|
+
if (isInBundledMode()) {
|
|
95
|
+
// Check if this bundled instance was installed by a package manager
|
|
96
|
+
if (
|
|
97
|
+
detectHomebrew() ||
|
|
98
|
+
detectWinget() ||
|
|
99
|
+
detectMise() ||
|
|
100
|
+
detectAsdf() ||
|
|
101
|
+
(await detectPacman()) ||
|
|
102
|
+
(await detectDeb()) ||
|
|
103
|
+
(await detectRpm()) ||
|
|
104
|
+
(await detectApk())
|
|
105
|
+
) {
|
|
106
|
+
return 'package-manager'
|
|
107
|
+
}
|
|
108
|
+
return 'native'
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Check if running from local npm installation
|
|
112
|
+
if (isRunningFromLocalInstallation()) {
|
|
113
|
+
return 'npm-local'
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Check if we're in a typical npm global location
|
|
117
|
+
const npmGlobalPaths = [
|
|
118
|
+
'/usr/local/lib/node_modules',
|
|
119
|
+
'/usr/lib/node_modules',
|
|
120
|
+
'/opt/homebrew/lib/node_modules',
|
|
121
|
+
'/opt/homebrew/bin',
|
|
122
|
+
'/usr/local/bin',
|
|
123
|
+
'/.nvm/versions/node/', // nvm installations
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
if (npmGlobalPaths.some(path => invokedPath.includes(path))) {
|
|
127
|
+
return 'npm-global'
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Also check for npm/nvm in the path even if not in standard locations
|
|
131
|
+
if (invokedPath.includes('/npm/') || invokedPath.includes('/nvm/')) {
|
|
132
|
+
return 'npm-global'
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const npmConfigResult = await execa('npm config get prefix', {
|
|
136
|
+
shell: true,
|
|
137
|
+
reject: false,
|
|
138
|
+
})
|
|
139
|
+
const globalPrefix =
|
|
140
|
+
npmConfigResult.exitCode === 0 ? npmConfigResult.stdout.trim() : null
|
|
141
|
+
|
|
142
|
+
if (globalPrefix && invokedPath.startsWith(globalPrefix)) {
|
|
143
|
+
return 'npm-global'
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// If we can't determine, return unknown
|
|
147
|
+
return 'unknown'
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async function getInstallationPath(): Promise<string> {
|
|
151
|
+
if (process.env.NODE_ENV === 'development') {
|
|
152
|
+
return getCwd()
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// For bundled/native builds, show the binary location
|
|
156
|
+
if (isInBundledMode()) {
|
|
157
|
+
// Try to find the actual binary that was invoked
|
|
158
|
+
try {
|
|
159
|
+
return await realpath(process.execPath)
|
|
160
|
+
} catch {
|
|
161
|
+
// This function doesn't expect errors
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
try {
|
|
165
|
+
const path = await which('claude')
|
|
166
|
+
if (path) {
|
|
167
|
+
return path
|
|
168
|
+
}
|
|
169
|
+
} catch {
|
|
170
|
+
// This function doesn't expect errors
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// If we can't find it, check common locations
|
|
174
|
+
try {
|
|
175
|
+
await getFsImplementation().stat(join(homedir(), '.local/bin/claude'))
|
|
176
|
+
return join(homedir(), '.local/bin/claude')
|
|
177
|
+
} catch {
|
|
178
|
+
// Not found
|
|
179
|
+
}
|
|
180
|
+
return 'native'
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// For npm installations, use the path of the executable
|
|
184
|
+
try {
|
|
185
|
+
return process.argv[0] || 'unknown'
|
|
186
|
+
} catch {
|
|
187
|
+
return 'unknown'
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export function getInvokedBinary(): string {
|
|
192
|
+
try {
|
|
193
|
+
// For bundled/compiled executables, show the actual binary path
|
|
194
|
+
if (isInBundledMode()) {
|
|
195
|
+
return process.execPath || 'unknown'
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// For npm/development, show the script path
|
|
199
|
+
return process.argv[1] || 'unknown'
|
|
200
|
+
} catch {
|
|
201
|
+
return 'unknown'
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async function detectMultipleInstallations(): Promise<
|
|
206
|
+
Array<{ type: string; path: string }>
|
|
207
|
+
> {
|
|
208
|
+
const fs = getFsImplementation()
|
|
209
|
+
const installations: Array<{ type: string; path: string }> = []
|
|
210
|
+
|
|
211
|
+
// Check for local installation
|
|
212
|
+
const localPath = join(homedir(), '.claude', 'local')
|
|
213
|
+
if (await localInstallationExists()) {
|
|
214
|
+
installations.push({ type: 'npm-local', path: localPath })
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Check for global npm installation
|
|
218
|
+
const packagesToCheck = ['@anthropic-ai/claude-code']
|
|
219
|
+
if (MACRO.PACKAGE_URL && MACRO.PACKAGE_URL !== '@anthropic-ai/claude-code') {
|
|
220
|
+
packagesToCheck.push(MACRO.PACKAGE_URL)
|
|
221
|
+
}
|
|
222
|
+
const npmResult = await execFileNoThrow('npm', [
|
|
223
|
+
'-g',
|
|
224
|
+
'config',
|
|
225
|
+
'get',
|
|
226
|
+
'prefix',
|
|
227
|
+
])
|
|
228
|
+
if (npmResult.code === 0 && npmResult.stdout) {
|
|
229
|
+
const npmPrefix = npmResult.stdout.trim()
|
|
230
|
+
const isWindows = getPlatform() === 'windows'
|
|
231
|
+
|
|
232
|
+
// First check for active installations via bin/claude
|
|
233
|
+
// Linux / macOS have prefix/bin/claude and prefix/lib/node_modules
|
|
234
|
+
// Windows has prefix/claude and prefix/node_modules
|
|
235
|
+
const globalBinPath = isWindows
|
|
236
|
+
? join(npmPrefix, 'claude')
|
|
237
|
+
: join(npmPrefix, 'bin', 'claude')
|
|
238
|
+
|
|
239
|
+
let globalBinExists = false
|
|
240
|
+
try {
|
|
241
|
+
await fs.stat(globalBinPath)
|
|
242
|
+
globalBinExists = true
|
|
243
|
+
} catch {
|
|
244
|
+
// Not found
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (globalBinExists) {
|
|
248
|
+
// Check if this is actually a Homebrew cask installation, not npm-global
|
|
249
|
+
// When npm is installed via Homebrew, both can exist at /opt/homebrew/bin/claude
|
|
250
|
+
// We need to resolve the symlink to see where it actually points
|
|
251
|
+
let isCurrentHomebrewInstallation = false
|
|
252
|
+
|
|
253
|
+
try {
|
|
254
|
+
// Resolve the symlink to get the actual target
|
|
255
|
+
const realPath = await realpath(globalBinPath)
|
|
256
|
+
|
|
257
|
+
// If the symlink points to a Caskroom directory, it's a Homebrew cask
|
|
258
|
+
// Only skip it if it's the same Homebrew installation we're currently running from
|
|
259
|
+
if (realPath.includes('/Caskroom/')) {
|
|
260
|
+
isCurrentHomebrewInstallation = detectHomebrew()
|
|
261
|
+
}
|
|
262
|
+
} catch {
|
|
263
|
+
// If we can't resolve the symlink, include it anyway
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (!isCurrentHomebrewInstallation) {
|
|
267
|
+
installations.push({ type: 'npm-global', path: globalBinPath })
|
|
268
|
+
}
|
|
269
|
+
} else {
|
|
270
|
+
// If no bin/claude exists, check for orphaned packages (no bin/claude symlink)
|
|
271
|
+
for (const packageName of packagesToCheck) {
|
|
272
|
+
const globalPackagePath = isWindows
|
|
273
|
+
? join(npmPrefix, 'node_modules', packageName)
|
|
274
|
+
: join(npmPrefix, 'lib', 'node_modules', packageName)
|
|
275
|
+
|
|
276
|
+
try {
|
|
277
|
+
await fs.stat(globalPackagePath)
|
|
278
|
+
installations.push({
|
|
279
|
+
type: 'npm-global-orphan',
|
|
280
|
+
path: globalPackagePath,
|
|
281
|
+
})
|
|
282
|
+
} catch {
|
|
283
|
+
// Package not found
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Check for native installation
|
|
290
|
+
|
|
291
|
+
// Check common native installation paths
|
|
292
|
+
const nativeBinPath = join(homedir(), '.local', 'bin', 'claude')
|
|
293
|
+
try {
|
|
294
|
+
await fs.stat(nativeBinPath)
|
|
295
|
+
installations.push({ type: 'native', path: nativeBinPath })
|
|
296
|
+
} catch {
|
|
297
|
+
// Not found
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Also check if config indicates native installation
|
|
301
|
+
const config = getGlobalConfig()
|
|
302
|
+
if (config.installMethod === 'native') {
|
|
303
|
+
const nativeDataPath = join(homedir(), '.local', 'share', 'claude')
|
|
304
|
+
try {
|
|
305
|
+
await fs.stat(nativeDataPath)
|
|
306
|
+
if (!installations.some(i => i.type === 'native')) {
|
|
307
|
+
installations.push({ type: 'native', path: nativeDataPath })
|
|
308
|
+
}
|
|
309
|
+
} catch {
|
|
310
|
+
// Not found
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return installations
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
async function detectConfigurationIssues(
|
|
318
|
+
type: InstallationType,
|
|
319
|
+
): Promise<Array<{ issue: string; fix: string }>> {
|
|
320
|
+
const warnings: Array<{ issue: string; fix: string }> = []
|
|
321
|
+
|
|
322
|
+
// Managed-settings forwards-compat: the schema preprocess silently drops
|
|
323
|
+
// unknown strictPluginOnlyCustomization surface names so one future enum
|
|
324
|
+
// value doesn't null out the entire policy file (settings.ts:101). But
|
|
325
|
+
// admins should KNOW — read the raw file and diff. Runs before the
|
|
326
|
+
// development-mode early return: this is config correctness, not an
|
|
327
|
+
// install-path check, and it's useful to see during dev testing.
|
|
328
|
+
try {
|
|
329
|
+
const raw = await readFile(
|
|
330
|
+
join(getManagedFilePath(), 'managed-settings.json'),
|
|
331
|
+
'utf-8',
|
|
332
|
+
)
|
|
333
|
+
const parsed: unknown = jsonParse(raw)
|
|
334
|
+
const field =
|
|
335
|
+
parsed && typeof parsed === 'object'
|
|
336
|
+
? (parsed as Record<string, unknown>).strictPluginOnlyCustomization
|
|
337
|
+
: undefined
|
|
338
|
+
if (field !== undefined && typeof field !== 'boolean') {
|
|
339
|
+
if (!Array.isArray(field)) {
|
|
340
|
+
// .catch(undefined) in the schema silently drops this, so the rest
|
|
341
|
+
// of managed settings survive — but the admin typed something
|
|
342
|
+
// wrong (an object, a string, etc.).
|
|
343
|
+
warnings.push({
|
|
344
|
+
issue: `managed-settings.json: strictPluginOnlyCustomization has an invalid value (expected true or an array, got ${typeof field})`,
|
|
345
|
+
fix: `The field is silently ignored (schema .catch rescues it). Set it to true, or an array of: ${CUSTOMIZATION_SURFACES.join(', ')}.`,
|
|
346
|
+
})
|
|
347
|
+
} else {
|
|
348
|
+
const unknown = field.filter(
|
|
349
|
+
x =>
|
|
350
|
+
typeof x === 'string' &&
|
|
351
|
+
!(CUSTOMIZATION_SURFACES as readonly string[]).includes(x),
|
|
352
|
+
)
|
|
353
|
+
if (unknown.length > 0) {
|
|
354
|
+
warnings.push({
|
|
355
|
+
issue: `managed-settings.json: strictPluginOnlyCustomization has ${unknown.length} value(s) this client doesn't recognize: ${unknown.map(String).join(', ')}`,
|
|
356
|
+
fix: `These are silently ignored (forwards-compat). Known surfaces for this version: ${CUSTOMIZATION_SURFACES.join(', ')}. Either remove them, or this client is older than the managed-settings intended.`,
|
|
357
|
+
})
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
} catch {
|
|
362
|
+
// ENOENT (no managed settings) / parse error — not this check's concern.
|
|
363
|
+
// Parse errors are surfaced by the settings loader itself.
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const config = getGlobalConfig()
|
|
367
|
+
|
|
368
|
+
// Skip most warnings for development mode
|
|
369
|
+
if (type === 'development') {
|
|
370
|
+
return warnings
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Check if ~/.local/bin is in PATH for native installations
|
|
374
|
+
if (type === 'native') {
|
|
375
|
+
const path = process.env.PATH || ''
|
|
376
|
+
const pathDirectories = path.split(delimiter)
|
|
377
|
+
const homeDir = homedir()
|
|
378
|
+
const localBinPath = join(homeDir, '.local', 'bin')
|
|
379
|
+
|
|
380
|
+
// On Windows, convert backslashes to forward slashes for consistent path matching
|
|
381
|
+
let normalizedLocalBinPath = localBinPath
|
|
382
|
+
if (getPlatform() === 'windows') {
|
|
383
|
+
normalizedLocalBinPath = localBinPath.split(win32.sep).join(posix.sep)
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Check if ~/.local/bin is in PATH (handle both expanded and unexpanded forms)
|
|
387
|
+
// Also handle trailing slashes that users may have in their PATH
|
|
388
|
+
const localBinInPath = pathDirectories.some(dir => {
|
|
389
|
+
let normalizedDir = dir
|
|
390
|
+
if (getPlatform() === 'windows') {
|
|
391
|
+
normalizedDir = dir.split(win32.sep).join(posix.sep)
|
|
392
|
+
}
|
|
393
|
+
// Remove trailing slashes for comparison (handles paths like /home/user/.local/bin/)
|
|
394
|
+
const trimmedDir = normalizedDir.replace(/\/+$/, '')
|
|
395
|
+
const trimmedRawDir = dir.replace(/[/\\]+$/, '')
|
|
396
|
+
return (
|
|
397
|
+
trimmedDir === normalizedLocalBinPath ||
|
|
398
|
+
trimmedRawDir === '~/.local/bin' ||
|
|
399
|
+
trimmedRawDir === '$HOME/.local/bin'
|
|
400
|
+
)
|
|
401
|
+
})
|
|
402
|
+
|
|
403
|
+
if (!localBinInPath) {
|
|
404
|
+
const isWindows = getPlatform() === 'windows'
|
|
405
|
+
if (isWindows) {
|
|
406
|
+
// Windows-specific PATH instructions
|
|
407
|
+
const windowsLocalBinPath = localBinPath
|
|
408
|
+
.split(posix.sep)
|
|
409
|
+
.join(win32.sep)
|
|
410
|
+
warnings.push({
|
|
411
|
+
issue: `Native installation exists but ${windowsLocalBinPath} is not in your PATH`,
|
|
412
|
+
fix: `Add it by opening: System Properties → Environment Variables → Edit User PATH → New → Add the path above. Then restart your terminal.`,
|
|
413
|
+
})
|
|
414
|
+
} else {
|
|
415
|
+
// Unix-style PATH instructions
|
|
416
|
+
const shellType = getShellType()
|
|
417
|
+
const configPaths = getShellConfigPaths()
|
|
418
|
+
const configFile = configPaths[shellType as keyof typeof configPaths]
|
|
419
|
+
const displayPath = configFile
|
|
420
|
+
? configFile.replace(homedir(), '~')
|
|
421
|
+
: 'your shell config file'
|
|
422
|
+
|
|
423
|
+
warnings.push({
|
|
424
|
+
issue:
|
|
425
|
+
'Native installation exists but ~/.local/bin is not in your PATH',
|
|
426
|
+
fix: `Run: echo 'export PATH="$HOME/.local/bin:$PATH"' >> ${displayPath} then open a new terminal or run: source ${displayPath}`,
|
|
427
|
+
})
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Check for configuration mismatches
|
|
433
|
+
// Skip these checks if DISABLE_INSTALLATION_CHECKS is set (e.g., in HFI)
|
|
434
|
+
if (!isEnvTruthy(process.env.DISABLE_INSTALLATION_CHECKS)) {
|
|
435
|
+
if (type === 'npm-local' && config.installMethod !== 'local') {
|
|
436
|
+
warnings.push({
|
|
437
|
+
issue: `Running from local installation but config install method is '${config.installMethod}'`,
|
|
438
|
+
fix: 'Consider using native installation: claude install',
|
|
439
|
+
})
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (type === 'native' && config.installMethod !== 'native') {
|
|
443
|
+
warnings.push({
|
|
444
|
+
issue: `Running native installation but config install method is '${config.installMethod}'`,
|
|
445
|
+
fix: 'Run claude install to update configuration',
|
|
446
|
+
})
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
if (type === 'npm-global' && (await localInstallationExists())) {
|
|
451
|
+
warnings.push({
|
|
452
|
+
issue: 'Local installation exists but not being used',
|
|
453
|
+
fix: 'Consider using native installation: claude install',
|
|
454
|
+
})
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
const existingAlias = await findClaudeAlias()
|
|
458
|
+
const validAlias = await findValidClaudeAlias()
|
|
459
|
+
|
|
460
|
+
// Check if running local installation but it's not in PATH
|
|
461
|
+
if (type === 'npm-local') {
|
|
462
|
+
// Check if claude is already accessible via PATH
|
|
463
|
+
const whichResult = await which('claude')
|
|
464
|
+
const claudeInPath = !!whichResult
|
|
465
|
+
|
|
466
|
+
// Only show warning if claude is NOT in PATH AND no valid alias exists
|
|
467
|
+
if (!claudeInPath && !validAlias) {
|
|
468
|
+
if (existingAlias) {
|
|
469
|
+
// Alias exists but points to invalid target
|
|
470
|
+
warnings.push({
|
|
471
|
+
issue: 'Local installation not accessible',
|
|
472
|
+
fix: `Alias exists but points to invalid target: ${existingAlias}. Update alias: alias claude="~/.claude/local/claude"`,
|
|
473
|
+
})
|
|
474
|
+
} else {
|
|
475
|
+
// No alias exists and not in PATH
|
|
476
|
+
warnings.push({
|
|
477
|
+
issue: 'Local installation not accessible',
|
|
478
|
+
fix: 'Create alias: alias claude="~/.claude/local/claude"',
|
|
479
|
+
})
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return warnings
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
export function detectLinuxGlobPatternWarnings(): Array<{
|
|
488
|
+
issue: string
|
|
489
|
+
fix: string
|
|
490
|
+
}> {
|
|
491
|
+
if (getPlatform() !== 'linux') {
|
|
492
|
+
return []
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
const warnings: Array<{ issue: string; fix: string }> = []
|
|
496
|
+
const globPatterns = SandboxManager.getLinuxGlobPatternWarnings()
|
|
497
|
+
|
|
498
|
+
if (globPatterns.length > 0) {
|
|
499
|
+
// Show first 3 patterns, then indicate if there are more
|
|
500
|
+
const displayPatterns = globPatterns.slice(0, 3).join(', ')
|
|
501
|
+
const remaining = globPatterns.length - 3
|
|
502
|
+
const patternList =
|
|
503
|
+
remaining > 0 ? `${displayPatterns} (${remaining} more)` : displayPatterns
|
|
504
|
+
|
|
505
|
+
warnings.push({
|
|
506
|
+
issue: `Glob patterns in sandbox permission rules are not fully supported on Linux`,
|
|
507
|
+
fix: `Found ${globPatterns.length} pattern(s): ${patternList}. On Linux, glob patterns in Edit/Read rules will be ignored.`,
|
|
508
|
+
})
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
return warnings
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
export async function getDoctorDiagnostic(): Promise<DiagnosticInfo> {
|
|
515
|
+
const installationType = await getCurrentInstallationType()
|
|
516
|
+
const version =
|
|
517
|
+
typeof MACRO !== 'undefined' && MACRO.VERSION ? MACRO.VERSION : 'unknown'
|
|
518
|
+
const installationPath = await getInstallationPath()
|
|
519
|
+
const invokedBinary = getInvokedBinary()
|
|
520
|
+
const multipleInstallations = await detectMultipleInstallations()
|
|
521
|
+
const warnings = await detectConfigurationIssues(installationType)
|
|
522
|
+
|
|
523
|
+
// Add glob pattern warnings for Linux sandboxing
|
|
524
|
+
warnings.push(...detectLinuxGlobPatternWarnings())
|
|
525
|
+
|
|
526
|
+
// Add warnings for leftover npm installations when running native
|
|
527
|
+
if (installationType === 'native') {
|
|
528
|
+
const npmInstalls = multipleInstallations.filter(
|
|
529
|
+
i =>
|
|
530
|
+
i.type === 'npm-global' ||
|
|
531
|
+
i.type === 'npm-global-orphan' ||
|
|
532
|
+
i.type === 'npm-local',
|
|
533
|
+
)
|
|
534
|
+
|
|
535
|
+
const isWindows = getPlatform() === 'windows'
|
|
536
|
+
|
|
537
|
+
for (const install of npmInstalls) {
|
|
538
|
+
if (install.type === 'npm-global') {
|
|
539
|
+
let uninstallCmd = 'npm -g uninstall @anthropic-ai/claude-code'
|
|
540
|
+
if (
|
|
541
|
+
MACRO.PACKAGE_URL &&
|
|
542
|
+
MACRO.PACKAGE_URL !== '@anthropic-ai/claude-code'
|
|
543
|
+
) {
|
|
544
|
+
uninstallCmd += ` && npm -g uninstall ${MACRO.PACKAGE_URL}`
|
|
545
|
+
}
|
|
546
|
+
warnings.push({
|
|
547
|
+
issue: `Leftover npm global installation at ${install.path}`,
|
|
548
|
+
fix: `Run: ${uninstallCmd}`,
|
|
549
|
+
})
|
|
550
|
+
} else if (install.type === 'npm-global-orphan') {
|
|
551
|
+
warnings.push({
|
|
552
|
+
issue: `Orphaned npm global package at ${install.path}`,
|
|
553
|
+
fix: isWindows
|
|
554
|
+
? `Run: rmdir /s /q "${install.path}"`
|
|
555
|
+
: `Run: rm -rf ${install.path}`,
|
|
556
|
+
})
|
|
557
|
+
} else if (install.type === 'npm-local') {
|
|
558
|
+
warnings.push({
|
|
559
|
+
issue: `Leftover npm local installation at ${install.path}`,
|
|
560
|
+
fix: isWindows
|
|
561
|
+
? `Run: rmdir /s /q "${install.path}"`
|
|
562
|
+
: `Run: rm -rf ${install.path}`,
|
|
563
|
+
})
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
const config = getGlobalConfig()
|
|
569
|
+
|
|
570
|
+
// Get config values for display
|
|
571
|
+
const configInstallMethod = config.installMethod || 'not set'
|
|
572
|
+
|
|
573
|
+
// Check permissions for global installations
|
|
574
|
+
let hasUpdatePermissions: boolean | null = null
|
|
575
|
+
if (installationType === 'npm-global') {
|
|
576
|
+
const permCheck = await checkGlobalInstallPermissions()
|
|
577
|
+
hasUpdatePermissions = permCheck.hasPermissions
|
|
578
|
+
|
|
579
|
+
// Add warning if no permissions
|
|
580
|
+
if (!hasUpdatePermissions && !getAutoUpdaterDisabledReason()) {
|
|
581
|
+
warnings.push({
|
|
582
|
+
issue: 'Insufficient permissions for auto-updates',
|
|
583
|
+
fix: 'Do one of: (1) Re-install node without sudo, or (2) Use `claude install` for native installation',
|
|
584
|
+
})
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Get ripgrep status and configuration
|
|
589
|
+
const ripgrepStatusRaw = getRipgrepStatus()
|
|
590
|
+
|
|
591
|
+
// Provide simple ripgrep status info
|
|
592
|
+
const ripgrepStatus = {
|
|
593
|
+
working: ripgrepStatusRaw.working ?? true, // Assume working if not yet tested
|
|
594
|
+
mode: ripgrepStatusRaw.mode,
|
|
595
|
+
systemPath:
|
|
596
|
+
ripgrepStatusRaw.mode === 'system' ? ripgrepStatusRaw.path : null,
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// Get package manager info if running from package manager
|
|
600
|
+
const packageManager =
|
|
601
|
+
installationType === 'package-manager'
|
|
602
|
+
? await getPackageManager()
|
|
603
|
+
: undefined
|
|
604
|
+
|
|
605
|
+
const diagnostic: DiagnosticInfo = {
|
|
606
|
+
installationType,
|
|
607
|
+
version,
|
|
608
|
+
installationPath,
|
|
609
|
+
invokedBinary,
|
|
610
|
+
configInstallMethod,
|
|
611
|
+
autoUpdates: (() => {
|
|
612
|
+
const reason = getAutoUpdaterDisabledReason()
|
|
613
|
+
return reason
|
|
614
|
+
? `disabled (${formatAutoUpdaterDisabledReason(reason)})`
|
|
615
|
+
: 'enabled'
|
|
616
|
+
})(),
|
|
617
|
+
hasUpdatePermissions,
|
|
618
|
+
multipleInstallations,
|
|
619
|
+
warnings,
|
|
620
|
+
packageManager,
|
|
621
|
+
ripgrepStatus,
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
return diagnostic
|
|
625
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { McpbManifest } from '@anthropic-ai/mcpb'
|
|
2
|
+
import { errorMessage } from '../errors.js'
|
|
3
|
+
import { jsonParse } from '../slowOperations.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parses and validates a DXT manifest from a JSON object.
|
|
7
|
+
*
|
|
8
|
+
* Lazy-imports @anthropic-ai/mcpb: that package uses zod v3 which eagerly
|
|
9
|
+
* creates 24 .bind(this) closures per schema instance (~300 instances between
|
|
10
|
+
* schemas.js and schemas-loose.js). Deferring the import keeps ~700KB of bound
|
|
11
|
+
* closures out of the startup heap for sessions that never touch .dxt/.mcpb.
|
|
12
|
+
*/
|
|
13
|
+
export async function validateManifest(
|
|
14
|
+
manifestJson: unknown,
|
|
15
|
+
): Promise<McpbManifest> {
|
|
16
|
+
const { McpbManifestSchema } = await import('@anthropic-ai/mcpb')
|
|
17
|
+
const parseResult = McpbManifestSchema.safeParse(manifestJson)
|
|
18
|
+
|
|
19
|
+
if (!parseResult.success) {
|
|
20
|
+
const errors = parseResult.error.flatten()
|
|
21
|
+
const errorMessages = [
|
|
22
|
+
...Object.entries(errors.fieldErrors).map(
|
|
23
|
+
([field, errs]) => `${field}: ${errs?.join(', ')}`,
|
|
24
|
+
),
|
|
25
|
+
...(errors.formErrors || []),
|
|
26
|
+
]
|
|
27
|
+
.filter(Boolean)
|
|
28
|
+
.join('; ')
|
|
29
|
+
|
|
30
|
+
throw new Error(`Invalid manifest: ${errorMessages}`)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return parseResult.data
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Parses and validates a DXT manifest from raw text data.
|
|
38
|
+
*/
|
|
39
|
+
export async function parseAndValidateManifestFromText(
|
|
40
|
+
manifestText: string,
|
|
41
|
+
): Promise<McpbManifest> {
|
|
42
|
+
let manifestJson: unknown
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
manifestJson = jsonParse(manifestText)
|
|
46
|
+
} catch (error) {
|
|
47
|
+
throw new Error(`Invalid JSON in manifest.json: ${errorMessage(error)}`)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return validateManifest(manifestJson)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Parses and validates a DXT manifest from raw binary data.
|
|
55
|
+
*/
|
|
56
|
+
export async function parseAndValidateManifestFromBytes(
|
|
57
|
+
manifestData: Uint8Array,
|
|
58
|
+
): Promise<McpbManifest> {
|
|
59
|
+
const manifestText = new TextDecoder().decode(manifestData)
|
|
60
|
+
return parseAndValidateManifestFromText(manifestText)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Generates an extension ID from author name and extension name.
|
|
65
|
+
* Uses the same algorithm as the directory backend for consistency.
|
|
66
|
+
*/
|
|
67
|
+
export function generateExtensionId(
|
|
68
|
+
manifest: McpbManifest,
|
|
69
|
+
prefix?: 'local.unpacked' | 'local.dxt',
|
|
70
|
+
): string {
|
|
71
|
+
const sanitize = (str: string) =>
|
|
72
|
+
str
|
|
73
|
+
.toLowerCase()
|
|
74
|
+
.replace(/\s+/g, '-')
|
|
75
|
+
.replace(/[^a-z0-9-_.]/g, '')
|
|
76
|
+
.replace(/-+/g, '-')
|
|
77
|
+
.replace(/^-+|-+$/g, '')
|
|
78
|
+
|
|
79
|
+
const authorName = manifest.author.name
|
|
80
|
+
const extensionName = manifest.name
|
|
81
|
+
|
|
82
|
+
const sanitizedAuthor = sanitize(authorName)
|
|
83
|
+
const sanitizedName = sanitize(extensionName)
|
|
84
|
+
|
|
85
|
+
return prefix
|
|
86
|
+
? `${prefix}.${sanitizedAuthor}.${sanitizedName}`
|
|
87
|
+
: `${sanitizedAuthor}.${sanitizedName}`
|
|
88
|
+
}
|