@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
package/utils/user.ts
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { execa } from 'execa'
|
|
2
|
+
import memoize from 'lodash-es/memoize.js'
|
|
3
|
+
import { getSessionId } from '../bootstrap/state.js'
|
|
4
|
+
import {
|
|
5
|
+
getOauthAccountInfo,
|
|
6
|
+
getRateLimitTier,
|
|
7
|
+
getSubscriptionType,
|
|
8
|
+
} from './auth.js'
|
|
9
|
+
import { getGlobalConfig, getOrCreateUserID } from './config.js'
|
|
10
|
+
import { getCwd } from './cwd.js'
|
|
11
|
+
import { type env, getHostPlatformForAnalytics } from './env.js'
|
|
12
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
13
|
+
|
|
14
|
+
// Cache for email fetched asynchronously at startup
|
|
15
|
+
let cachedEmail: string | undefined | null = null // null means not fetched yet
|
|
16
|
+
let emailFetchPromise: Promise<string | undefined> | null = null
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* GitHub Actions metadata when running in CI
|
|
20
|
+
*/
|
|
21
|
+
export type GitHubActionsMetadata = {
|
|
22
|
+
actor?: string
|
|
23
|
+
actorId?: string
|
|
24
|
+
repository?: string
|
|
25
|
+
repositoryId?: string
|
|
26
|
+
repositoryOwner?: string
|
|
27
|
+
repositoryOwnerId?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Core user data used as base for all analytics providers.
|
|
32
|
+
* This is also the format used by GrowthBook.
|
|
33
|
+
*/
|
|
34
|
+
export type CoreUserData = {
|
|
35
|
+
deviceId: string
|
|
36
|
+
sessionId: string
|
|
37
|
+
email?: string
|
|
38
|
+
appVersion: string
|
|
39
|
+
platform: typeof env.platform
|
|
40
|
+
organizationUuid?: string
|
|
41
|
+
accountUuid?: string
|
|
42
|
+
userType?: string
|
|
43
|
+
subscriptionType?: string
|
|
44
|
+
rateLimitTier?: string
|
|
45
|
+
firstTokenTime?: number
|
|
46
|
+
githubActionsMetadata?: GitHubActionsMetadata
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Initialize user data asynchronously. Should be called early in startup.
|
|
51
|
+
* This pre-fetches the email so getUser() can remain synchronous.
|
|
52
|
+
*/
|
|
53
|
+
export async function initUser(): Promise<void> {
|
|
54
|
+
if (cachedEmail === null && !emailFetchPromise) {
|
|
55
|
+
emailFetchPromise = getEmailAsync()
|
|
56
|
+
cachedEmail = await emailFetchPromise
|
|
57
|
+
emailFetchPromise = null
|
|
58
|
+
// Clear memoization cache so next call picks up the email
|
|
59
|
+
getCoreUserData.cache.clear?.()
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Reset all user data caches. Call on auth changes (login/logout/account switch)
|
|
65
|
+
* so the next getCoreUserData() call picks up fresh credentials and email.
|
|
66
|
+
*/
|
|
67
|
+
export function resetUserCache(): void {
|
|
68
|
+
cachedEmail = null
|
|
69
|
+
emailFetchPromise = null
|
|
70
|
+
getCoreUserData.cache.clear?.()
|
|
71
|
+
getGitEmail.cache.clear?.()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get core user data.
|
|
76
|
+
* This is the base representation that gets transformed for different analytics providers.
|
|
77
|
+
*/
|
|
78
|
+
export const getCoreUserData = memoize(
|
|
79
|
+
(includeAnalyticsMetadata?: boolean): CoreUserData => {
|
|
80
|
+
const deviceId = getOrCreateUserID()
|
|
81
|
+
const config = getGlobalConfig()
|
|
82
|
+
|
|
83
|
+
let subscriptionType: string | undefined
|
|
84
|
+
let rateLimitTier: string | undefined
|
|
85
|
+
let firstTokenTime: number | undefined
|
|
86
|
+
if (includeAnalyticsMetadata) {
|
|
87
|
+
subscriptionType = getSubscriptionType() ?? undefined
|
|
88
|
+
rateLimitTier = getRateLimitTier() ?? undefined
|
|
89
|
+
if (subscriptionType && config.claudeCodeFirstTokenDate) {
|
|
90
|
+
const configFirstTokenTime = new Date(
|
|
91
|
+
config.claudeCodeFirstTokenDate,
|
|
92
|
+
).getTime()
|
|
93
|
+
if (!isNaN(configFirstTokenTime)) {
|
|
94
|
+
firstTokenTime = configFirstTokenTime
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Only include OAuth account data when actively using OAuth authentication
|
|
100
|
+
const oauthAccount = getOauthAccountInfo()
|
|
101
|
+
const organizationUuid = oauthAccount?.organizationUuid
|
|
102
|
+
const accountUuid = oauthAccount?.accountUuid
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
deviceId,
|
|
106
|
+
sessionId: getSessionId(),
|
|
107
|
+
email: getEmail(),
|
|
108
|
+
appVersion: MACRO.VERSION,
|
|
109
|
+
platform: getHostPlatformForAnalytics(),
|
|
110
|
+
organizationUuid,
|
|
111
|
+
accountUuid,
|
|
112
|
+
userType: process.env.USER_TYPE,
|
|
113
|
+
subscriptionType,
|
|
114
|
+
rateLimitTier,
|
|
115
|
+
firstTokenTime,
|
|
116
|
+
...(isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
117
|
+
githubActionsMetadata: {
|
|
118
|
+
actor: process.env.GITHUB_ACTOR,
|
|
119
|
+
actorId: process.env.GITHUB_ACTOR_ID,
|
|
120
|
+
repository: process.env.GITHUB_REPOSITORY,
|
|
121
|
+
repositoryId: process.env.GITHUB_REPOSITORY_ID,
|
|
122
|
+
repositoryOwner: process.env.GITHUB_REPOSITORY_OWNER,
|
|
123
|
+
repositoryOwnerId: process.env.GITHUB_REPOSITORY_OWNER_ID,
|
|
124
|
+
},
|
|
125
|
+
}),
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Get user data for GrowthBook (same as core data with analytics metadata).
|
|
132
|
+
*/
|
|
133
|
+
export function getUserForGrowthBook(): CoreUserData {
|
|
134
|
+
return getCoreUserData(true)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function getEmail(): string | undefined {
|
|
138
|
+
// Return cached email if available (from async initialization)
|
|
139
|
+
if (cachedEmail !== null) {
|
|
140
|
+
return cachedEmail
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Only include OAuth email when actively using OAuth authentication
|
|
144
|
+
const oauthAccount = getOauthAccountInfo()
|
|
145
|
+
if (oauthAccount?.emailAddress) {
|
|
146
|
+
return oauthAccount.emailAddress
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Ant-only fallbacks below (no execSync)
|
|
150
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
151
|
+
return undefined
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (process.env.COO_CREATOR) {
|
|
155
|
+
return `${process.env.COO_CREATOR}@anthropic.com`
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// If initUser() wasn't called, we return undefined instead of blocking
|
|
159
|
+
return undefined
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
async function getEmailAsync(): Promise<string | undefined> {
|
|
163
|
+
// Only include OAuth email when actively using OAuth authentication
|
|
164
|
+
const oauthAccount = getOauthAccountInfo()
|
|
165
|
+
if (oauthAccount?.emailAddress) {
|
|
166
|
+
return oauthAccount.emailAddress
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Ant-only fallbacks below
|
|
170
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
171
|
+
return undefined
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (process.env.COO_CREATOR) {
|
|
175
|
+
return `${process.env.COO_CREATOR}@anthropic.com`
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return getGitEmail()
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Get the user's git email from `git config user.email`.
|
|
183
|
+
* Memoized so the subprocess only spawns once per process.
|
|
184
|
+
*/
|
|
185
|
+
export const getGitEmail = memoize(async (): Promise<string | undefined> => {
|
|
186
|
+
const result = await execa('git config --get user.email', {
|
|
187
|
+
shell: true,
|
|
188
|
+
reject: false,
|
|
189
|
+
cwd: getCwd(),
|
|
190
|
+
})
|
|
191
|
+
return result.exitCode === 0 && result.stdout
|
|
192
|
+
? result.stdout.trim()
|
|
193
|
+
: undefined
|
|
194
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-Agent string helpers.
|
|
3
|
+
*
|
|
4
|
+
* Kept dependency-free so SDK-bundled code (bridge, cli/transports) can
|
|
5
|
+
* import without pulling in auth.ts and its transitive dependency tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export function getClaudeCodeUserAgent(): string {
|
|
9
|
+
return `claude-code/${MACRO.VERSION}`
|
|
10
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if input matches negative keyword patterns
|
|
3
|
+
*/
|
|
4
|
+
export function matchesNegativeKeyword(input: string): boolean {
|
|
5
|
+
const lowerInput = input.toLowerCase()
|
|
6
|
+
|
|
7
|
+
const negativePattern =
|
|
8
|
+
/\b(wtf|wth|ffs|omfg|shit(ty|tiest)?|dumbass|horrible|awful|piss(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|fucking? (broken|useless|terrible|awful|horrible)|fuck you|screw (this|you)|so frustrating|this sucks|damn it)\b/
|
|
9
|
+
|
|
10
|
+
return negativePattern.test(lowerInput)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Checks if input matches keep going/continuation patterns
|
|
15
|
+
*/
|
|
16
|
+
export function matchesKeepGoingKeyword(input: string): boolean {
|
|
17
|
+
const lowerInput = input.toLowerCase().trim()
|
|
18
|
+
|
|
19
|
+
// Match "continue" only if it's the entire prompt
|
|
20
|
+
if (lowerInput === 'continue') {
|
|
21
|
+
return true
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Match "keep going" or "go on" anywhere in the input
|
|
25
|
+
const keepGoingPattern = /\b(keep going|go on)\b/
|
|
26
|
+
return keepGoingPattern.test(lowerInput)
|
|
27
|
+
}
|
package/utils/uuid.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { randomBytes, type UUID } from 'crypto'
|
|
2
|
+
import type { AgentId } from 'src/types/ids.js'
|
|
3
|
+
|
|
4
|
+
const uuidRegex =
|
|
5
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Validate uuid
|
|
9
|
+
* @param maybeUUID The value to be checked if it is a uuid
|
|
10
|
+
* @returns string as UUID or null if it is not valid
|
|
11
|
+
*/
|
|
12
|
+
export function validateUuid(maybeUuid: unknown): UUID | null {
|
|
13
|
+
// UUID format: 8-4-4-4-12 hex digits
|
|
14
|
+
if (typeof maybeUuid !== 'string') return null
|
|
15
|
+
|
|
16
|
+
return uuidRegex.test(maybeUuid) ? (maybeUuid as UUID) : null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Generate a new agent ID with prefix for consistency with task IDs.
|
|
21
|
+
* Format: a{label-}{16 hex chars}
|
|
22
|
+
* Example: aa3f2c1b4d5e6f7a8, acompact-a3f2c1b4d5e6f7a8
|
|
23
|
+
*/
|
|
24
|
+
export function createAgentId(label?: string): AgentId {
|
|
25
|
+
const suffix = randomBytes(8).toString('hex')
|
|
26
|
+
return (label ? `a${label}-${suffix}` : `a${suffix}`) as AgentId
|
|
27
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { posix, win32 } from 'path'
|
|
2
|
+
import {
|
|
3
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
4
|
+
logEvent,
|
|
5
|
+
} from 'src/services/analytics/index.js'
|
|
6
|
+
import { logForDebugging } from './debug.js'
|
|
7
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
8
|
+
import { getPlatform } from './platform.js'
|
|
9
|
+
|
|
10
|
+
// Track warnings to avoid spam — bounded to prevent unbounded memory growth
|
|
11
|
+
export const MAX_WARNING_KEYS = 1000
|
|
12
|
+
const warningCounts = new Map<string, number>()
|
|
13
|
+
|
|
14
|
+
// Check if running from a build directory (development mode)
|
|
15
|
+
// This is a sync version of the logic in getCurrentInstallationType()
|
|
16
|
+
function isRunningFromBuildDirectory(): boolean {
|
|
17
|
+
let invokedPath = process.argv[1] || ''
|
|
18
|
+
let execPath = process.execPath || process.argv[0] || ''
|
|
19
|
+
|
|
20
|
+
// On Windows, convert backslashes to forward slashes for consistent path matching
|
|
21
|
+
if (getPlatform() === 'windows') {
|
|
22
|
+
invokedPath = invokedPath.split(win32.sep).join(posix.sep)
|
|
23
|
+
execPath = execPath.split(win32.sep).join(posix.sep)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const pathsToCheck = [invokedPath, execPath]
|
|
27
|
+
const buildDirs = [
|
|
28
|
+
'/build-ant/',
|
|
29
|
+
'/build-external/',
|
|
30
|
+
'/build-external-native/',
|
|
31
|
+
'/build-ant-native/',
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
return pathsToCheck.some(path => buildDirs.some(dir => path.includes(dir)))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Warnings we know about and want to suppress from users
|
|
38
|
+
const INTERNAL_WARNINGS = [
|
|
39
|
+
/MaxListenersExceededWarning.*AbortSignal/,
|
|
40
|
+
/MaxListenersExceededWarning.*EventTarget/,
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
function isInternalWarning(warning: Error): boolean {
|
|
44
|
+
const warningStr = `${warning.name}: ${warning.message}`
|
|
45
|
+
return INTERNAL_WARNINGS.some(pattern => pattern.test(warningStr))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Store reference to our warning handler so we can detect if it's already installed
|
|
49
|
+
let warningHandler: ((warning: Error) => void) | null = null
|
|
50
|
+
|
|
51
|
+
// For testing only - allows resetting the warning handler state
|
|
52
|
+
export function resetWarningHandler(): void {
|
|
53
|
+
if (warningHandler) {
|
|
54
|
+
process.removeListener('warning', warningHandler)
|
|
55
|
+
}
|
|
56
|
+
warningHandler = null
|
|
57
|
+
warningCounts.clear()
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function initializeWarningHandler(): void {
|
|
61
|
+
// Only set up handler once - check if our handler is already installed
|
|
62
|
+
const currentListeners = process.listeners('warning')
|
|
63
|
+
if (warningHandler && currentListeners.includes(warningHandler)) {
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// For external users, remove default Node.js handler to suppress stderr output
|
|
68
|
+
// For internal users, only keep default warnings for development builds
|
|
69
|
+
// Check development mode directly to avoid async call in init
|
|
70
|
+
// This preserves the same logic as getCurrentInstallationType() without async
|
|
71
|
+
const isDevelopment =
|
|
72
|
+
process.env.NODE_ENV === 'development' || isRunningFromBuildDirectory()
|
|
73
|
+
if (!isDevelopment) {
|
|
74
|
+
process.removeAllListeners('warning')
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Create and store our warning handler
|
|
78
|
+
warningHandler = (warning: Error) => {
|
|
79
|
+
try {
|
|
80
|
+
const warningKey = `${warning.name}: ${warning.message.slice(0, 50)}`
|
|
81
|
+
const count = warningCounts.get(warningKey) || 0
|
|
82
|
+
|
|
83
|
+
// Bound the map to prevent unbounded memory growth from unique warning keys.
|
|
84
|
+
// Once the cap is reached, new unique keys are not tracked — their
|
|
85
|
+
// occurrence_count will always be reported as 1 in analytics.
|
|
86
|
+
if (
|
|
87
|
+
warningCounts.has(warningKey) ||
|
|
88
|
+
warningCounts.size < MAX_WARNING_KEYS
|
|
89
|
+
) {
|
|
90
|
+
warningCounts.set(warningKey, count + 1)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const isInternal = isInternalWarning(warning)
|
|
94
|
+
|
|
95
|
+
// Always log to Statsig for monitoring
|
|
96
|
+
// Include full details for ant users only, since they may contain code or filepaths
|
|
97
|
+
logEvent('tengu_node_warning', {
|
|
98
|
+
is_internal: isInternal ? 1 : 0,
|
|
99
|
+
occurrence_count: count + 1,
|
|
100
|
+
classname:
|
|
101
|
+
warning.name as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
102
|
+
...(process.env.USER_TYPE === 'ant' && {
|
|
103
|
+
message:
|
|
104
|
+
warning.message as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
105
|
+
}),
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
// In debug mode, show all warnings with context
|
|
109
|
+
if (isEnvTruthy(process.env.CLAUDE_DEBUG)) {
|
|
110
|
+
const prefix = isInternal ? '[Internal Warning]' : '[Warning]'
|
|
111
|
+
logForDebugging(`${prefix} ${warning.toString()}`, { level: 'warn' })
|
|
112
|
+
}
|
|
113
|
+
// Hide all warnings from users - they are only logged to Statsig for monitoring
|
|
114
|
+
} catch {
|
|
115
|
+
// Fail silently - we don't want the warning handler to cause issues
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Install the warning handler
|
|
120
|
+
process.on('warning', warningHandler)
|
|
121
|
+
}
|
package/utils/which.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { execa } from 'execa'
|
|
2
|
+
import { execSync_DEPRECATED } from './execSyncWrapper.js'
|
|
3
|
+
|
|
4
|
+
async function whichNodeAsync(command: string): Promise<string | null> {
|
|
5
|
+
if (process.platform === 'win32') {
|
|
6
|
+
// On Windows, use where.exe and return the first result
|
|
7
|
+
const result = await execa(`where.exe ${command}`, {
|
|
8
|
+
shell: true,
|
|
9
|
+
stderr: 'ignore',
|
|
10
|
+
reject: false,
|
|
11
|
+
})
|
|
12
|
+
if (result.exitCode !== 0 || !result.stdout) {
|
|
13
|
+
return null
|
|
14
|
+
}
|
|
15
|
+
// where.exe returns multiple paths separated by newlines, return the first
|
|
16
|
+
return result.stdout.trim().split(/\r?\n/)[0] || null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// On POSIX systems (macOS, Linux, WSL), use which
|
|
20
|
+
// Cross-platform safe: Windows is handled above
|
|
21
|
+
// eslint-disable-next-line custom-rules/no-cross-platform-process-issues
|
|
22
|
+
const result = await execa(`which ${command}`, {
|
|
23
|
+
shell: true,
|
|
24
|
+
stderr: 'ignore',
|
|
25
|
+
reject: false,
|
|
26
|
+
})
|
|
27
|
+
if (result.exitCode !== 0 || !result.stdout) {
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
return result.stdout.trim()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function whichNodeSync(command: string): string | null {
|
|
34
|
+
if (process.platform === 'win32') {
|
|
35
|
+
try {
|
|
36
|
+
const result = execSync_DEPRECATED(`where.exe ${command}`, {
|
|
37
|
+
encoding: 'utf-8',
|
|
38
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
39
|
+
})
|
|
40
|
+
const output = result.toString().trim()
|
|
41
|
+
return output.split(/\r?\n/)[0] || null
|
|
42
|
+
} catch {
|
|
43
|
+
return null
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
const result = execSync_DEPRECATED(`which ${command}`, {
|
|
49
|
+
encoding: 'utf-8',
|
|
50
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
51
|
+
})
|
|
52
|
+
return result.toString().trim() || null
|
|
53
|
+
} catch {
|
|
54
|
+
return null
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const bunWhich =
|
|
59
|
+
typeof Bun !== 'undefined' && typeof Bun.which === 'function'
|
|
60
|
+
? Bun.which
|
|
61
|
+
: null
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Finds the full path to a command executable.
|
|
65
|
+
* Uses Bun.which when running in Bun (fast, no process spawn),
|
|
66
|
+
* otherwise spawns the platform-appropriate command.
|
|
67
|
+
*
|
|
68
|
+
* @param command - The command name to look up
|
|
69
|
+
* @returns The full path to the command, or null if not found
|
|
70
|
+
*/
|
|
71
|
+
export const which: (command: string) => Promise<string | null> = bunWhich
|
|
72
|
+
? async command => bunWhich(command)
|
|
73
|
+
: whichNodeAsync
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Synchronous version of `which`.
|
|
77
|
+
*
|
|
78
|
+
* @param command - The command name to look up
|
|
79
|
+
* @returns The full path to the command, or null if not found
|
|
80
|
+
*/
|
|
81
|
+
export const whichSync: (command: string) => string | null =
|
|
82
|
+
bunWhich ?? whichNodeSync
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import memoize from 'lodash-es/memoize.js'
|
|
2
|
+
import * as path from 'path'
|
|
3
|
+
import * as pathWin32 from 'path/win32'
|
|
4
|
+
import { getCwd } from './cwd.js'
|
|
5
|
+
import { logForDebugging } from './debug.js'
|
|
6
|
+
import { execSync_DEPRECATED } from './execSyncWrapper.js'
|
|
7
|
+
import { memoizeWithLRU } from './memoize.js'
|
|
8
|
+
import { getPlatform } from './platform.js'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Check if a file or directory exists on Windows using the dir command
|
|
12
|
+
* @param path - The path to check
|
|
13
|
+
* @returns true if the path exists, false otherwise
|
|
14
|
+
*/
|
|
15
|
+
function checkPathExists(path: string): boolean {
|
|
16
|
+
try {
|
|
17
|
+
execSync_DEPRECATED(`dir "${path}"`, { stdio: 'pipe' })
|
|
18
|
+
return true
|
|
19
|
+
} catch {
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Find an executable using where.exe on Windows
|
|
26
|
+
* @param executable - The name of the executable to find
|
|
27
|
+
* @returns The path to the executable or null if not found
|
|
28
|
+
*/
|
|
29
|
+
function findExecutable(executable: string): string | null {
|
|
30
|
+
// For git, check common installation locations first
|
|
31
|
+
if (executable === 'git') {
|
|
32
|
+
const defaultLocations = [
|
|
33
|
+
// check 64 bit before 32 bit
|
|
34
|
+
'C:\\Program Files\\Git\\cmd\\git.exe',
|
|
35
|
+
'C:\\Program Files (x86)\\Git\\cmd\\git.exe',
|
|
36
|
+
// intentionally don't look for C:\Program Files\Git\mingw64\bin\git.exe
|
|
37
|
+
// because that directory is the "raw" tools with no environment setup
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
for (const location of defaultLocations) {
|
|
41
|
+
if (checkPathExists(location)) {
|
|
42
|
+
return location
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Fall back to where.exe
|
|
48
|
+
try {
|
|
49
|
+
const result = execSync_DEPRECATED(`where.exe ${executable}`, {
|
|
50
|
+
stdio: 'pipe',
|
|
51
|
+
encoding: 'utf8',
|
|
52
|
+
}).trim()
|
|
53
|
+
|
|
54
|
+
// SECURITY: Filter out any results from the current directory
|
|
55
|
+
// to prevent executing malicious git.bat/cmd/exe files
|
|
56
|
+
const paths = result.split('\r\n').filter(Boolean)
|
|
57
|
+
const cwd = getCwd().toLowerCase()
|
|
58
|
+
|
|
59
|
+
for (const candidatePath of paths) {
|
|
60
|
+
// Normalize and compare paths to ensure we're not in current directory
|
|
61
|
+
const normalizedPath = path.resolve(candidatePath).toLowerCase()
|
|
62
|
+
const pathDir = path.dirname(normalizedPath).toLowerCase()
|
|
63
|
+
|
|
64
|
+
// Skip if the executable is in the current working directory
|
|
65
|
+
if (pathDir === cwd || normalizedPath.startsWith(cwd + path.sep)) {
|
|
66
|
+
logForDebugging(
|
|
67
|
+
`Skipping potentially malicious executable in current directory: ${candidatePath}`,
|
|
68
|
+
)
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Return the first valid path that's not in the current directory
|
|
73
|
+
return candidatePath
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return null
|
|
77
|
+
} catch {
|
|
78
|
+
return null
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* If Windows, set the SHELL environment variable to git-bash path.
|
|
84
|
+
* This is used by BashTool and Shell.ts for user shell commands.
|
|
85
|
+
* COMSPEC is left unchanged for system process execution.
|
|
86
|
+
*/
|
|
87
|
+
export function setShellIfWindows(): void {
|
|
88
|
+
if (getPlatform() === 'windows') {
|
|
89
|
+
const gitBashPath = findGitBashPath()
|
|
90
|
+
process.env.SHELL = gitBashPath
|
|
91
|
+
logForDebugging(`Using bash path: "${gitBashPath}"`)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Find the path where `bash.exe` included with git-bash exists, exiting the process if not found.
|
|
97
|
+
*/
|
|
98
|
+
export const findGitBashPath = memoize((): string => {
|
|
99
|
+
if (process.env.CLAUDE_CODE_GIT_BASH_PATH) {
|
|
100
|
+
if (checkPathExists(process.env.CLAUDE_CODE_GIT_BASH_PATH)) {
|
|
101
|
+
return process.env.CLAUDE_CODE_GIT_BASH_PATH
|
|
102
|
+
}
|
|
103
|
+
// biome-ignore lint/suspicious/noConsole:: intentional console output
|
|
104
|
+
console.error(
|
|
105
|
+
`Claude Code was unable to find CLAUDE_CODE_GIT_BASH_PATH path "${process.env.CLAUDE_CODE_GIT_BASH_PATH}"`,
|
|
106
|
+
)
|
|
107
|
+
// eslint-disable-next-line custom-rules/no-process-exit
|
|
108
|
+
process.exit(1)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const gitPath = findExecutable('git')
|
|
112
|
+
if (gitPath) {
|
|
113
|
+
const bashPath = pathWin32.join(gitPath, '..', '..', 'bin', 'bash.exe')
|
|
114
|
+
if (checkPathExists(bashPath)) {
|
|
115
|
+
return bashPath
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// biome-ignore lint/suspicious/noConsole:: intentional console output
|
|
120
|
+
console.error(
|
|
121
|
+
'Claude Code on Windows requires git-bash (https://git-scm.com/downloads/win). If installed but not in PATH, set environment variable pointing to your bash.exe, similar to: CLAUDE_CODE_GIT_BASH_PATH=C:\\Program Files\\Git\\bin\\bash.exe',
|
|
122
|
+
)
|
|
123
|
+
// eslint-disable-next-line custom-rules/no-process-exit
|
|
124
|
+
process.exit(1)
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
/** Convert a Windows path to a POSIX path using pure JS. */
|
|
128
|
+
export const windowsPathToPosixPath = memoizeWithLRU(
|
|
129
|
+
(windowsPath: string): string => {
|
|
130
|
+
// Handle UNC paths: \\server\share -> //server/share
|
|
131
|
+
if (windowsPath.startsWith('\\\\')) {
|
|
132
|
+
return windowsPath.replace(/\\/g, '/')
|
|
133
|
+
}
|
|
134
|
+
// Handle drive letter paths: C:\Users\foo -> /c/Users/foo
|
|
135
|
+
const match = windowsPath.match(/^([A-Za-z]):[/\\]/)
|
|
136
|
+
if (match) {
|
|
137
|
+
const driveLetter = match[1]!.toLowerCase()
|
|
138
|
+
return '/' + driveLetter + windowsPath.slice(2).replace(/\\/g, '/')
|
|
139
|
+
}
|
|
140
|
+
// Already POSIX or relative — just flip slashes
|
|
141
|
+
return windowsPath.replace(/\\/g, '/')
|
|
142
|
+
},
|
|
143
|
+
(p: string) => p,
|
|
144
|
+
500,
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
/** Convert a POSIX path to a Windows path using pure JS. */
|
|
148
|
+
export const posixPathToWindowsPath = memoizeWithLRU(
|
|
149
|
+
(posixPath: string): string => {
|
|
150
|
+
// Handle UNC paths: //server/share -> \\server\share
|
|
151
|
+
if (posixPath.startsWith('//')) {
|
|
152
|
+
return posixPath.replace(/\//g, '\\')
|
|
153
|
+
}
|
|
154
|
+
// Handle /cygdrive/c/... format
|
|
155
|
+
const cygdriveMatch = posixPath.match(/^\/cygdrive\/([A-Za-z])(\/|$)/)
|
|
156
|
+
if (cygdriveMatch) {
|
|
157
|
+
const driveLetter = cygdriveMatch[1]!.toUpperCase()
|
|
158
|
+
const rest = posixPath.slice(('/cygdrive/' + cygdriveMatch[1]).length)
|
|
159
|
+
return driveLetter + ':' + (rest || '\\').replace(/\//g, '\\')
|
|
160
|
+
}
|
|
161
|
+
// Handle /c/... format (MSYS2/Git Bash)
|
|
162
|
+
const driveMatch = posixPath.match(/^\/([A-Za-z])(\/|$)/)
|
|
163
|
+
if (driveMatch) {
|
|
164
|
+
const driveLetter = driveMatch[1]!.toUpperCase()
|
|
165
|
+
const rest = posixPath.slice(2)
|
|
166
|
+
return driveLetter + ':' + (rest || '\\').replace(/\//g, '\\')
|
|
167
|
+
}
|
|
168
|
+
// Already Windows or relative — just flip slashes
|
|
169
|
+
return posixPath.replace(/\//g, '\\')
|
|
170
|
+
},
|
|
171
|
+
(p: string) => p,
|
|
172
|
+
500,
|
|
173
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polyfill for Promise.withResolvers() (ES2024, Node 22+).
|
|
3
|
+
* package.json declares "engines": { "node": ">=18.0.0" } so we can't use the native one.
|
|
4
|
+
*/
|
|
5
|
+
export function withResolvers<T>(): PromiseWithResolvers<T> {
|
|
6
|
+
let resolve!: (value: T | PromiseLike<T>) => void
|
|
7
|
+
let reject!: (reason?: unknown) => void
|
|
8
|
+
const promise = new Promise<T>((res, rej) => {
|
|
9
|
+
resolve = res
|
|
10
|
+
reject = rej
|
|
11
|
+
})
|
|
12
|
+
return { promise, resolve, reject }
|
|
13
|
+
}
|