@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,255 @@
|
|
|
1
|
+
import { feature } from 'bun:bundle'
|
|
2
|
+
import { access } from 'fs/promises'
|
|
3
|
+
import { tmpdir as osTmpdir } from 'os'
|
|
4
|
+
import { join as nativeJoin } from 'path'
|
|
5
|
+
import { join as posixJoin } from 'path/posix'
|
|
6
|
+
import { rearrangePipeCommand } from '../bash/bashPipeCommand.js'
|
|
7
|
+
import { createAndSaveSnapshot } from '../bash/ShellSnapshot.js'
|
|
8
|
+
import { formatShellPrefixCommand } from '../bash/shellPrefix.js'
|
|
9
|
+
import { quote } from '../bash/shellQuote.js'
|
|
10
|
+
import {
|
|
11
|
+
quoteShellCommand,
|
|
12
|
+
rewriteWindowsNullRedirect,
|
|
13
|
+
shouldAddStdinRedirect,
|
|
14
|
+
} from '../bash/shellQuoting.js'
|
|
15
|
+
import { logForDebugging } from '../debug.js'
|
|
16
|
+
import { getPlatform } from '../platform.js'
|
|
17
|
+
import { getSessionEnvironmentScript } from '../sessionEnvironment.js'
|
|
18
|
+
import { getSessionEnvVars } from '../sessionEnvVars.js'
|
|
19
|
+
import {
|
|
20
|
+
ensureSocketInitialized,
|
|
21
|
+
getClaudeTmuxEnv,
|
|
22
|
+
hasTmuxToolBeenUsed,
|
|
23
|
+
} from '../tmuxSocket.js'
|
|
24
|
+
import { windowsPathToPosixPath } from '../windowsPaths.js'
|
|
25
|
+
import type { ShellProvider } from './shellProvider.js'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns a shell command to disable extended glob patterns for security.
|
|
29
|
+
* Extended globs (bash extglob, zsh EXTENDED_GLOB) can be exploited via
|
|
30
|
+
* malicious filenames that expand after our security validation.
|
|
31
|
+
*
|
|
32
|
+
* When CLAUDE_CODE_SHELL_PREFIX is set, the actual executing shell may differ
|
|
33
|
+
* from shellPath (e.g., shellPath is zsh but the wrapper runs bash). In this
|
|
34
|
+
* case, we include commands for BOTH shells. We redirect both stdout and stderr
|
|
35
|
+
* to /dev/null because zsh's command_not_found_handler writes to STDOUT.
|
|
36
|
+
*
|
|
37
|
+
* When no shell prefix is set, we use the appropriate command for the detected shell.
|
|
38
|
+
*/
|
|
39
|
+
function getDisableExtglobCommand(shellPath: string): string | null {
|
|
40
|
+
// When CLAUDE_CODE_SHELL_PREFIX is set, the wrapper may use a different shell
|
|
41
|
+
// than shellPath, so we include both bash and zsh commands
|
|
42
|
+
if (process.env.CLAUDE_CODE_SHELL_PREFIX) {
|
|
43
|
+
// Redirect both stdout and stderr because zsh's command_not_found_handler
|
|
44
|
+
// writes to stdout instead of stderr
|
|
45
|
+
return '{ shopt -u extglob || setopt NO_EXTENDED_GLOB; } >/dev/null 2>&1 || true'
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// No shell prefix - use shell-specific command
|
|
49
|
+
if (shellPath.includes('bash')) {
|
|
50
|
+
return 'shopt -u extglob 2>/dev/null || true'
|
|
51
|
+
} else if (shellPath.includes('zsh')) {
|
|
52
|
+
return 'setopt NO_EXTENDED_GLOB 2>/dev/null || true'
|
|
53
|
+
}
|
|
54
|
+
// Unknown shell - do nothing, we don't know the right command
|
|
55
|
+
return null
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export async function createBashShellProvider(
|
|
59
|
+
shellPath: string,
|
|
60
|
+
options?: { skipSnapshot?: boolean },
|
|
61
|
+
): Promise<ShellProvider> {
|
|
62
|
+
let currentSandboxTmpDir: string | undefined
|
|
63
|
+
const snapshotPromise: Promise<string | undefined> = options?.skipSnapshot
|
|
64
|
+
? Promise.resolve(undefined)
|
|
65
|
+
: createAndSaveSnapshot(shellPath).catch(error => {
|
|
66
|
+
logForDebugging(`Failed to create shell snapshot: ${error}`)
|
|
67
|
+
return undefined
|
|
68
|
+
})
|
|
69
|
+
// Track the last resolved snapshot path for use in getSpawnArgs
|
|
70
|
+
let lastSnapshotFilePath: string | undefined
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
type: 'bash',
|
|
74
|
+
shellPath,
|
|
75
|
+
detached: true,
|
|
76
|
+
|
|
77
|
+
async buildExecCommand(
|
|
78
|
+
command: string,
|
|
79
|
+
opts: {
|
|
80
|
+
id: number | string
|
|
81
|
+
sandboxTmpDir?: string
|
|
82
|
+
useSandbox: boolean
|
|
83
|
+
},
|
|
84
|
+
): Promise<{ commandString: string; cwdFilePath: string }> {
|
|
85
|
+
let snapshotFilePath = await snapshotPromise
|
|
86
|
+
// This access() check is NOT pure TOCTOU — it's the fallback decision
|
|
87
|
+
// point for getSpawnArgs. When the snapshot disappears mid-session
|
|
88
|
+
// (tmpdir cleanup), we must clear lastSnapshotFilePath so getSpawnArgs
|
|
89
|
+
// adds -l and the command gets login-shell init. Without this check,
|
|
90
|
+
// `source ... || true` silently fails and commands run with NO shell
|
|
91
|
+
// init (neither snapshot env nor login profile). The `|| true` on source
|
|
92
|
+
// still guards the race between this check and the spawned shell.
|
|
93
|
+
if (snapshotFilePath) {
|
|
94
|
+
try {
|
|
95
|
+
await access(snapshotFilePath)
|
|
96
|
+
} catch {
|
|
97
|
+
logForDebugging(
|
|
98
|
+
`Snapshot file missing, falling back to login shell: ${snapshotFilePath}`,
|
|
99
|
+
)
|
|
100
|
+
snapshotFilePath = undefined
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
lastSnapshotFilePath = snapshotFilePath
|
|
104
|
+
|
|
105
|
+
// Stash sandboxTmpDir for use in getEnvironmentOverrides
|
|
106
|
+
currentSandboxTmpDir = opts.sandboxTmpDir
|
|
107
|
+
|
|
108
|
+
const tmpdir = osTmpdir()
|
|
109
|
+
const isWindows = getPlatform() === 'windows'
|
|
110
|
+
const shellTmpdir = isWindows ? windowsPathToPosixPath(tmpdir) : tmpdir
|
|
111
|
+
|
|
112
|
+
// shellCwdFilePath: POSIX path used inside the bash command (pwd -P >| ...)
|
|
113
|
+
// cwdFilePath: native OS path used by Node.js for readFileSync/unlinkSync
|
|
114
|
+
// On non-Windows these are identical; on Windows, Git Bash needs POSIX paths
|
|
115
|
+
// but Node.js needs native Windows paths for file operations.
|
|
116
|
+
const shellCwdFilePath = opts.useSandbox
|
|
117
|
+
? posixJoin(opts.sandboxTmpDir!, `cwd-${opts.id}`)
|
|
118
|
+
: posixJoin(shellTmpdir, `claude-${opts.id}-cwd`)
|
|
119
|
+
const cwdFilePath = opts.useSandbox
|
|
120
|
+
? posixJoin(opts.sandboxTmpDir!, `cwd-${opts.id}`)
|
|
121
|
+
: nativeJoin(tmpdir, `claude-${opts.id}-cwd`)
|
|
122
|
+
|
|
123
|
+
// Defensive rewrite: the model sometimes emits Windows CMD-style `2>nul`
|
|
124
|
+
// redirects. In POSIX bash (including Git Bash on Windows), this creates a
|
|
125
|
+
// literal file named `nul` — a reserved device name that breaks git.
|
|
126
|
+
// See anthropics/claude-code#4928.
|
|
127
|
+
const normalizedCommand = rewriteWindowsNullRedirect(command)
|
|
128
|
+
const addStdinRedirect = shouldAddStdinRedirect(normalizedCommand)
|
|
129
|
+
let quotedCommand = quoteShellCommand(normalizedCommand, addStdinRedirect)
|
|
130
|
+
|
|
131
|
+
// Debug logging for heredoc/multiline commands to trace trailer handling
|
|
132
|
+
// Only log when commit attribution is enabled to avoid noise
|
|
133
|
+
if (
|
|
134
|
+
feature('COMMIT_ATTRIBUTION') &&
|
|
135
|
+
(command.includes('<<') || command.includes('\n'))
|
|
136
|
+
) {
|
|
137
|
+
logForDebugging(
|
|
138
|
+
`Shell: Command before quoting (first 500 chars):\n${command.slice(0, 500)}`,
|
|
139
|
+
)
|
|
140
|
+
logForDebugging(
|
|
141
|
+
`Shell: Quoted command (first 500 chars):\n${quotedCommand.slice(0, 500)}`,
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Special handling for pipes: move stdin redirect after first command
|
|
146
|
+
// This ensures the redirect applies to the first command, not to eval itself.
|
|
147
|
+
// Without this, `eval 'rg foo | wc -l' \< /dev/null` becomes
|
|
148
|
+
// `rg foo | wc -l < /dev/null` — wc reads /dev/null and outputs 0, and
|
|
149
|
+
// rg (with no path arg) waits on the open spawn stdin pipe forever.
|
|
150
|
+
// Applies to sandbox mode too: sandbox wraps the assembled commandString,
|
|
151
|
+
// not the raw command (since PR #9189).
|
|
152
|
+
if (normalizedCommand.includes('|') && addStdinRedirect) {
|
|
153
|
+
quotedCommand = rearrangePipeCommand(normalizedCommand)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const commandParts: string[] = []
|
|
157
|
+
|
|
158
|
+
// Source the snapshot file. The `|| true` guards the race between the
|
|
159
|
+
// access() check above and the spawned shell's `source` — if the file
|
|
160
|
+
// vanishes in that window, the `&&` chain still continues.
|
|
161
|
+
if (snapshotFilePath) {
|
|
162
|
+
const finalPath =
|
|
163
|
+
getPlatform() === 'windows'
|
|
164
|
+
? windowsPathToPosixPath(snapshotFilePath)
|
|
165
|
+
: snapshotFilePath
|
|
166
|
+
commandParts.push(`source ${quote([finalPath])} 2>/dev/null || true`)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Source session environment variables captured from session start hooks
|
|
170
|
+
const sessionEnvScript = await getSessionEnvironmentScript()
|
|
171
|
+
if (sessionEnvScript) {
|
|
172
|
+
commandParts.push(sessionEnvScript)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Disable extended glob patterns for security (after sourcing user config to override)
|
|
176
|
+
const disableExtglobCmd = getDisableExtglobCommand(shellPath)
|
|
177
|
+
if (disableExtglobCmd) {
|
|
178
|
+
commandParts.push(disableExtglobCmd)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// When sourcing a file with aliases, they won't be expanded in the same command line
|
|
182
|
+
// because the shell parses the entire line before execution. Using eval after
|
|
183
|
+
// sourcing causes a second parsing pass where aliases are now available for expansion.
|
|
184
|
+
commandParts.push(`eval ${quotedCommand}`)
|
|
185
|
+
// Use `pwd -P` to get the physical path of the current working directory for consistency with `process.cwd()`
|
|
186
|
+
commandParts.push(`pwd -P >| ${quote([shellCwdFilePath])}`)
|
|
187
|
+
let commandString = commandParts.join(' && ')
|
|
188
|
+
|
|
189
|
+
// Apply CLAUDE_CODE_SHELL_PREFIX if set
|
|
190
|
+
if (process.env.CLAUDE_CODE_SHELL_PREFIX) {
|
|
191
|
+
commandString = formatShellPrefixCommand(
|
|
192
|
+
process.env.CLAUDE_CODE_SHELL_PREFIX,
|
|
193
|
+
commandString,
|
|
194
|
+
)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return { commandString, cwdFilePath }
|
|
198
|
+
},
|
|
199
|
+
|
|
200
|
+
getSpawnArgs(commandString: string): string[] {
|
|
201
|
+
const skipLoginShell = lastSnapshotFilePath !== undefined
|
|
202
|
+
if (skipLoginShell) {
|
|
203
|
+
logForDebugging('Spawning shell without login (-l flag skipped)')
|
|
204
|
+
}
|
|
205
|
+
return ['-c', ...(skipLoginShell ? [] : ['-l']), commandString]
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
async getEnvironmentOverrides(
|
|
209
|
+
command: string,
|
|
210
|
+
): Promise<Record<string, string>> {
|
|
211
|
+
// TMUX SOCKET ISOLATION (DEFERRED):
|
|
212
|
+
// We initialize Claude's tmux socket ONLY AFTER the Tmux tool has been used
|
|
213
|
+
// at least once, OR if the current command appears to use tmux.
|
|
214
|
+
// This defers the startup cost until tmux is actually needed.
|
|
215
|
+
//
|
|
216
|
+
// Once the Tmux tool is used (or a tmux command runs), all subsequent Bash
|
|
217
|
+
// commands will use Claude's isolated socket via the TMUX env var override.
|
|
218
|
+
//
|
|
219
|
+
// See tmuxSocket.ts for the full isolation architecture documentation.
|
|
220
|
+
const commandUsesTmux = command.includes('tmux')
|
|
221
|
+
if (
|
|
222
|
+
process.env.USER_TYPE === 'ant' &&
|
|
223
|
+
(hasTmuxToolBeenUsed() || commandUsesTmux)
|
|
224
|
+
) {
|
|
225
|
+
await ensureSocketInitialized()
|
|
226
|
+
}
|
|
227
|
+
const claudeTmuxEnv = getClaudeTmuxEnv()
|
|
228
|
+
const env: Record<string, string> = {}
|
|
229
|
+
// CRITICAL: Override TMUX to isolate ALL tmux commands to Claude's socket.
|
|
230
|
+
// This is NOT the user's TMUX value - it points to Claude's isolated socket.
|
|
231
|
+
// When null (before socket initializes), user's TMUX is preserved.
|
|
232
|
+
if (claudeTmuxEnv) {
|
|
233
|
+
env.TMUX = claudeTmuxEnv
|
|
234
|
+
}
|
|
235
|
+
if (currentSandboxTmpDir) {
|
|
236
|
+
let posixTmpDir = currentSandboxTmpDir
|
|
237
|
+
if (getPlatform() === 'windows') {
|
|
238
|
+
posixTmpDir = windowsPathToPosixPath(posixTmpDir)
|
|
239
|
+
}
|
|
240
|
+
env.TMPDIR = posixTmpDir
|
|
241
|
+
env.CLAUDE_CODE_TMPDIR = posixTmpDir
|
|
242
|
+
// Zsh uses TMPPREFIX (default /tmp/zsh) for heredoc temp files,
|
|
243
|
+
// not TMPDIR. Set it to a path inside the sandbox tmp dir so
|
|
244
|
+
// heredocs work in sandboxed zsh commands.
|
|
245
|
+
// Safe to set unconditionally — non-zsh shells ignore TMPPREFIX.
|
|
246
|
+
env.TMPPREFIX = posixJoin(posixTmpDir, 'zsh')
|
|
247
|
+
}
|
|
248
|
+
// Apply session env vars set via /env (child processes only, not the REPL)
|
|
249
|
+
for (const [key, value] of getSessionEnvVars()) {
|
|
250
|
+
env[key] = value
|
|
251
|
+
}
|
|
252
|
+
return env
|
|
253
|
+
},
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { validateBoundedIntEnvVar } from '../envValidation.js'
|
|
2
|
+
|
|
3
|
+
export const BASH_MAX_OUTPUT_UPPER_LIMIT = 150_000
|
|
4
|
+
export const BASH_MAX_OUTPUT_DEFAULT = 30_000
|
|
5
|
+
|
|
6
|
+
export function getMaxOutputLength(): number {
|
|
7
|
+
const result = validateBoundedIntEnvVar(
|
|
8
|
+
'BASH_MAX_OUTPUT_LENGTH',
|
|
9
|
+
process.env.BASH_MAX_OUTPUT_LENGTH,
|
|
10
|
+
BASH_MAX_OUTPUT_DEFAULT,
|
|
11
|
+
BASH_MAX_OUTPUT_UPPER_LIMIT,
|
|
12
|
+
)
|
|
13
|
+
return result.effective
|
|
14
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { realpath, stat } from 'fs/promises'
|
|
2
|
+
import { getPlatform } from '../platform.js'
|
|
3
|
+
import { which } from '../which.js'
|
|
4
|
+
|
|
5
|
+
async function probePath(p: string): Promise<string | null> {
|
|
6
|
+
try {
|
|
7
|
+
return (await stat(p)).isFile() ? p : null
|
|
8
|
+
} catch {
|
|
9
|
+
return null
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Attempts to find PowerShell on the system via PATH.
|
|
15
|
+
* Prefers pwsh (PowerShell Core 7+), falls back to powershell (5.1).
|
|
16
|
+
*
|
|
17
|
+
* On Linux, if PATH resolves to a snap launcher (/snap/…) — directly or
|
|
18
|
+
* via a symlink chain like /usr/bin/pwsh → /snap/bin/pwsh — probe known
|
|
19
|
+
* apt/rpm install locations instead: the snap launcher can hang in
|
|
20
|
+
* subprocesses while snapd initializes confinement, but the underlying
|
|
21
|
+
* binary at /opt/microsoft/powershell/7/pwsh is reliable. On
|
|
22
|
+
* Windows/macOS, PATH is sufficient.
|
|
23
|
+
*/
|
|
24
|
+
export async function findPowerShell(): Promise<string | null> {
|
|
25
|
+
const pwshPath = await which('pwsh')
|
|
26
|
+
if (pwshPath) {
|
|
27
|
+
// Snap launcher hangs in subprocesses. Prefer the direct binary.
|
|
28
|
+
// Check both the resolved PATH entry and its symlink target: on
|
|
29
|
+
// some distros /usr/bin/pwsh is a symlink to /snap/bin/pwsh, which
|
|
30
|
+
// would bypass a naive startsWith('/snap/') on the which() result.
|
|
31
|
+
if (getPlatform() === 'linux') {
|
|
32
|
+
const resolved = await realpath(pwshPath).catch(() => pwshPath)
|
|
33
|
+
if (pwshPath.startsWith('/snap/') || resolved.startsWith('/snap/')) {
|
|
34
|
+
const direct =
|
|
35
|
+
(await probePath('/opt/microsoft/powershell/7/pwsh')) ??
|
|
36
|
+
(await probePath('/usr/bin/pwsh'))
|
|
37
|
+
if (direct) {
|
|
38
|
+
const directResolved = await realpath(direct).catch(() => direct)
|
|
39
|
+
if (
|
|
40
|
+
!direct.startsWith('/snap/') &&
|
|
41
|
+
!directResolved.startsWith('/snap/')
|
|
42
|
+
) {
|
|
43
|
+
return direct
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return pwshPath
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const powershellPath = await which('powershell')
|
|
52
|
+
if (powershellPath) {
|
|
53
|
+
return powershellPath
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return null
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let cachedPowerShellPath: Promise<string | null> | null = null
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Gets the cached PowerShell path. Returns a memoized promise that
|
|
63
|
+
* resolves to the PowerShell executable path or null.
|
|
64
|
+
*/
|
|
65
|
+
export function getCachedPowerShellPath(): Promise<string | null> {
|
|
66
|
+
if (!cachedPowerShellPath) {
|
|
67
|
+
cachedPowerShellPath = findPowerShell()
|
|
68
|
+
}
|
|
69
|
+
return cachedPowerShellPath
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type PowerShellEdition = 'core' | 'desktop'
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Infers the PowerShell edition from the binary name without spawning.
|
|
76
|
+
* - `pwsh` / `pwsh.exe` → 'core' (PowerShell 7+: supports `&&`, `||`, `?:`, `??`)
|
|
77
|
+
* - `powershell` / `powershell.exe` → 'desktop' (Windows PowerShell 5.1:
|
|
78
|
+
* no pipeline chain operators, stderr-sets-$? bug, UTF-16 default encoding)
|
|
79
|
+
*
|
|
80
|
+
* PowerShell 6 (also `pwsh`, no `&&`) has been EOL since 2020 and is not
|
|
81
|
+
* a realistic install target, so 'core' safely implies 7+ semantics.
|
|
82
|
+
*
|
|
83
|
+
* Used by the tool prompt to give version-appropriate syntax guidance so
|
|
84
|
+
* the model doesn't emit `cmd1 && cmd2` on 5.1 (parser error) or avoid
|
|
85
|
+
* `&&` on 7+ where it's the correct short-circuiting operator.
|
|
86
|
+
*/
|
|
87
|
+
export async function getPowerShellEdition(): Promise<PowerShellEdition | null> {
|
|
88
|
+
const p = await getCachedPowerShellPath()
|
|
89
|
+
if (!p) return null
|
|
90
|
+
// basename without extension, case-insensitive. Covers:
|
|
91
|
+
// C:\Program Files\PowerShell\7\pwsh.exe
|
|
92
|
+
// /opt/microsoft/powershell/7/pwsh
|
|
93
|
+
// C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
|
|
94
|
+
const base = p
|
|
95
|
+
.split(/[/\\]/)
|
|
96
|
+
.pop()!
|
|
97
|
+
.toLowerCase()
|
|
98
|
+
.replace(/\.exe$/, '')
|
|
99
|
+
return base === 'pwsh' ? 'core' : 'desktop'
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Resets the cached PowerShell path. Only for testing.
|
|
104
|
+
*/
|
|
105
|
+
export function resetPowerShellCache(): void {
|
|
106
|
+
cachedPowerShellPath = null
|
|
107
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { tmpdir } from 'os'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { join as posixJoin } from 'path/posix'
|
|
4
|
+
import { getSessionEnvVars } from '../sessionEnvVars.js'
|
|
5
|
+
import type { ShellProvider } from './shellProvider.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* PowerShell invocation flags + command. Shared by the provider's getSpawnArgs
|
|
9
|
+
* and the hook spawn path in hooks.ts so the flag set stays in one place.
|
|
10
|
+
*/
|
|
11
|
+
export function buildPowerShellArgs(cmd: string): string[] {
|
|
12
|
+
return ['-NoProfile', '-NonInteractive', '-Command', cmd]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Base64-encode a string as UTF-16LE for PowerShell's -EncodedCommand.
|
|
17
|
+
* Same encoding the parser uses (parser.ts toUtf16LeBase64). The output
|
|
18
|
+
* is [A-Za-z0-9+/=] only — survives ANY shell-quoting layer, including
|
|
19
|
+
* @anthropic-ai/sandbox-runtime's shellquote.quote() which would otherwise
|
|
20
|
+
* corrupt !$? to \!$? when re-wrapping a single-quoted string in double
|
|
21
|
+
* quotes. Review 2964609818.
|
|
22
|
+
*/
|
|
23
|
+
function encodePowerShellCommand(psCommand: string): string {
|
|
24
|
+
return Buffer.from(psCommand, 'utf16le').toString('base64')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function createPowerShellProvider(shellPath: string): ShellProvider {
|
|
28
|
+
let currentSandboxTmpDir: string | undefined
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
type: 'powershell' as ShellProvider['type'],
|
|
32
|
+
shellPath,
|
|
33
|
+
detached: false,
|
|
34
|
+
|
|
35
|
+
async buildExecCommand(
|
|
36
|
+
command: string,
|
|
37
|
+
opts: {
|
|
38
|
+
id: number | string
|
|
39
|
+
sandboxTmpDir?: string
|
|
40
|
+
useSandbox: boolean
|
|
41
|
+
},
|
|
42
|
+
): Promise<{ commandString: string; cwdFilePath: string }> {
|
|
43
|
+
// Stash sandboxTmpDir for getEnvironmentOverrides (mirrors bashProvider)
|
|
44
|
+
currentSandboxTmpDir = opts.useSandbox ? opts.sandboxTmpDir : undefined
|
|
45
|
+
|
|
46
|
+
// When sandboxed, tmpdir() is not writable — the sandbox only allows
|
|
47
|
+
// writes to sandboxTmpDir. Put the cwd tracking file there so the
|
|
48
|
+
// inner pwsh can actually write it. Only applies on Linux/macOS/WSL2;
|
|
49
|
+
// on Windows native, sandbox is never enabled so this branch is dead.
|
|
50
|
+
const cwdFilePath =
|
|
51
|
+
opts.useSandbox && opts.sandboxTmpDir
|
|
52
|
+
? posixJoin(opts.sandboxTmpDir, `claude-pwd-ps-${opts.id}`)
|
|
53
|
+
: join(tmpdir(), `claude-pwd-ps-${opts.id}`)
|
|
54
|
+
const escapedCwdFilePath = cwdFilePath.replace(/'/g, "''")
|
|
55
|
+
// Exit-code capture: prefer $LASTEXITCODE when a native exe ran.
|
|
56
|
+
// On PS 5.1, a native command that writes to stderr while the stream
|
|
57
|
+
// is PS-redirected (e.g. `git push 2>&1`) sets $? = $false even when
|
|
58
|
+
// the exe returned exit 0 — so `if (!$?)` reports a false positive.
|
|
59
|
+
// $LASTEXITCODE is $null only when no native exe has run in the
|
|
60
|
+
// session; in that case fall back to $? for cmdlet-only pipelines.
|
|
61
|
+
// Tradeoff: `native-ok; cmdlet-fail` now returns 0 (was 1). Reverse
|
|
62
|
+
// is also true: `native-fail; cmdlet-ok` now returns the native
|
|
63
|
+
// exit code (was 0 — old logic only looked at $? which the trailing
|
|
64
|
+
// cmdlet set true). Both rarer than the git/npm/curl stderr case.
|
|
65
|
+
const cwdTracking = `\n; $_ec = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } elseif ($?) { 0 } else { 1 }\n; (Get-Location).Path | Out-File -FilePath '${escapedCwdFilePath}' -Encoding utf8 -NoNewline\n; exit $_ec`
|
|
66
|
+
const psCommand = command + cwdTracking
|
|
67
|
+
|
|
68
|
+
// Sandbox wraps the returned commandString as `<binShell> -c '<cmd>'` —
|
|
69
|
+
// hardcoded `-c`, no way to inject -NoProfile -NonInteractive. So for
|
|
70
|
+
// the sandbox path, build a command that itself invokes pwsh with the
|
|
71
|
+
// full flag set. Shell.ts passes /bin/sh as the sandbox binShell,
|
|
72
|
+
// producing: bwrap ... sh -c 'pwsh -NoProfile ... -EncodedCommand ...'.
|
|
73
|
+
// The non-sandbox path returns the bare PS command; getSpawnArgs() adds
|
|
74
|
+
// the flags via buildPowerShellArgs().
|
|
75
|
+
//
|
|
76
|
+
// -EncodedCommand (base64 UTF-16LE), not -Command: the sandbox runtime
|
|
77
|
+
// applies its OWN shellquote.quote() on top of whatever we build. Any
|
|
78
|
+
// string containing ' triggers double-quote mode which escapes ! as \! —
|
|
79
|
+
// POSIX sh preserves that literally, pwsh parse error. Base64 is
|
|
80
|
+
// [A-Za-z0-9+/=] — no chars that any quoting layer can corrupt.
|
|
81
|
+
// Review 2964609818.
|
|
82
|
+
//
|
|
83
|
+
// shellPath is POSIX-single-quoted so a space-containing install path
|
|
84
|
+
// (e.g. /opt/my tools/pwsh) survives the inner `/bin/sh -c` word-split.
|
|
85
|
+
// Flags and base64 are [A-Za-z0-9+/=-] only — no quoting needed.
|
|
86
|
+
const commandString = opts.useSandbox
|
|
87
|
+
? [
|
|
88
|
+
`'${shellPath.replace(/'/g, `'\\''`)}'`,
|
|
89
|
+
'-NoProfile',
|
|
90
|
+
'-NonInteractive',
|
|
91
|
+
'-EncodedCommand',
|
|
92
|
+
encodePowerShellCommand(psCommand),
|
|
93
|
+
].join(' ')
|
|
94
|
+
: psCommand
|
|
95
|
+
|
|
96
|
+
return { commandString, cwdFilePath }
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
getSpawnArgs(commandString: string): string[] {
|
|
100
|
+
return buildPowerShellArgs(commandString)
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
async getEnvironmentOverrides(): Promise<Record<string, string>> {
|
|
104
|
+
const env: Record<string, string> = {}
|
|
105
|
+
// Apply session env vars set via /env (child processes only, not
|
|
106
|
+
// the REPL). Without this, `/env PATH=...` affects Bash tool
|
|
107
|
+
// commands but not PowerShell — so PyCharm users with a stripped
|
|
108
|
+
// PATH can't self-rescue.
|
|
109
|
+
// Ordering: session vars FIRST so the sandbox TMPDIR below can't be
|
|
110
|
+
// overridden by `/env TMPDIR=...`. bashProvider.ts has these in the
|
|
111
|
+
// opposite order (pre-existing), but sandbox isolation should win.
|
|
112
|
+
for (const [key, value] of getSessionEnvVars()) {
|
|
113
|
+
env[key] = value
|
|
114
|
+
}
|
|
115
|
+
if (currentSandboxTmpDir) {
|
|
116
|
+
// PowerShell on Linux/macOS honors TMPDIR for [System.IO.Path]::GetTempPath()
|
|
117
|
+
env.TMPDIR = currentSandboxTmpDir
|
|
118
|
+
env.CLAUDE_CODE_TMPDIR = currentSandboxTmpDir
|
|
119
|
+
}
|
|
120
|
+
return env
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
}
|