@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,162 @@
|
|
|
1
|
+
// biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
|
|
2
|
+
import type { Theme } from './theme.js'
|
|
3
|
+
import { feature } from 'bun:bundle'
|
|
4
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
5
|
+
import { getCanonicalName } from './model/model.js'
|
|
6
|
+
import { get3PModelCapabilityOverride } from './model/modelSupportOverrides.js'
|
|
7
|
+
import { getAPIProvider } from './model/providers.js'
|
|
8
|
+
import { getSettingsWithErrors } from './settings/settings.js'
|
|
9
|
+
|
|
10
|
+
export type ThinkingConfig =
|
|
11
|
+
| { type: 'adaptive' }
|
|
12
|
+
| { type: 'enabled'; budgetTokens: number }
|
|
13
|
+
| { type: 'disabled' }
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Build-time gate (feature) + runtime gate (GrowthBook). The build flag
|
|
17
|
+
* controls code inclusion in external builds; the GB flag controls rollout.
|
|
18
|
+
*/
|
|
19
|
+
export function isUltrathinkEnabled(): boolean {
|
|
20
|
+
if (!feature('ULTRATHINK')) {
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
return getFeatureValue_CACHED_MAY_BE_STALE('tengu_turtle_carbon', true)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check if text contains the "ultrathink" keyword.
|
|
28
|
+
*/
|
|
29
|
+
export function hasUltrathinkKeyword(text: string): boolean {
|
|
30
|
+
return /\bultrathink\b/i.test(text)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Find positions of "ultrathink" keyword in text (for UI highlighting/notification)
|
|
35
|
+
*/
|
|
36
|
+
export function findThinkingTriggerPositions(text: string): Array<{
|
|
37
|
+
word: string
|
|
38
|
+
start: number
|
|
39
|
+
end: number
|
|
40
|
+
}> {
|
|
41
|
+
const positions: Array<{ word: string; start: number; end: number }> = []
|
|
42
|
+
// Fresh /g literal each call — String.prototype.matchAll copies lastIndex
|
|
43
|
+
// from the source regex, so a shared instance would leak state from
|
|
44
|
+
// hasUltrathinkKeyword's .test() into this call on the next render.
|
|
45
|
+
const matches = text.matchAll(/\bultrathink\b/gi)
|
|
46
|
+
|
|
47
|
+
for (const match of matches) {
|
|
48
|
+
if (match.index !== undefined) {
|
|
49
|
+
positions.push({
|
|
50
|
+
word: match[0],
|
|
51
|
+
start: match.index,
|
|
52
|
+
end: match.index + match[0].length,
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return positions
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const RAINBOW_COLORS: Array<keyof Theme> = [
|
|
61
|
+
'rainbow_red',
|
|
62
|
+
'rainbow_orange',
|
|
63
|
+
'rainbow_yellow',
|
|
64
|
+
'rainbow_green',
|
|
65
|
+
'rainbow_blue',
|
|
66
|
+
'rainbow_indigo',
|
|
67
|
+
'rainbow_violet',
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
const RAINBOW_SHIMMER_COLORS: Array<keyof Theme> = [
|
|
71
|
+
'rainbow_red_shimmer',
|
|
72
|
+
'rainbow_orange_shimmer',
|
|
73
|
+
'rainbow_yellow_shimmer',
|
|
74
|
+
'rainbow_green_shimmer',
|
|
75
|
+
'rainbow_blue_shimmer',
|
|
76
|
+
'rainbow_indigo_shimmer',
|
|
77
|
+
'rainbow_violet_shimmer',
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
export function getRainbowColor(
|
|
81
|
+
charIndex: number,
|
|
82
|
+
shimmer: boolean = false,
|
|
83
|
+
): keyof Theme {
|
|
84
|
+
const colors = shimmer ? RAINBOW_SHIMMER_COLORS : RAINBOW_COLORS
|
|
85
|
+
return colors[charIndex % colors.length]!
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// TODO(inigo): add support for probing unknown models via API error detection
|
|
89
|
+
// Provider-aware thinking support detection (aligns with modelSupportsISP in betas.ts)
|
|
90
|
+
export function modelSupportsThinking(model: string): boolean {
|
|
91
|
+
const supported3P = get3PModelCapabilityOverride(model, 'thinking')
|
|
92
|
+
if (supported3P !== undefined) {
|
|
93
|
+
return supported3P
|
|
94
|
+
}
|
|
95
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
96
|
+
if (resolveAntModel(model.toLowerCase())) {
|
|
97
|
+
return true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// IMPORTANT: Do not change thinking support without notifying the model
|
|
101
|
+
// launch DRI and research. This can greatly affect model quality and bashing.
|
|
102
|
+
const canonical = getCanonicalName(model)
|
|
103
|
+
const provider = getAPIProvider()
|
|
104
|
+
// 1P and Foundry: all Claude 4+ models (including Haiku 4.5)
|
|
105
|
+
if (provider === 'foundry' || provider === 'firstParty') {
|
|
106
|
+
return !canonical.includes('claude-3-')
|
|
107
|
+
}
|
|
108
|
+
// 3P (Bedrock/Vertex): only Opus 4+ and Sonnet 4+
|
|
109
|
+
return canonical.includes('sonnet-4') || canonical.includes('opus-4')
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// @[MODEL LAUNCH]: Add the new model to the allowlist if it supports adaptive thinking.
|
|
113
|
+
export function modelSupportsAdaptiveThinking(model: string): boolean {
|
|
114
|
+
const supported3P = get3PModelCapabilityOverride(model, 'adaptive_thinking')
|
|
115
|
+
if (supported3P !== undefined) {
|
|
116
|
+
return supported3P
|
|
117
|
+
}
|
|
118
|
+
const canonical = getCanonicalName(model)
|
|
119
|
+
// Supported by a subset of Claude 4 models
|
|
120
|
+
if (canonical.includes('opus-4-6') || canonical.includes('sonnet-4-6')) {
|
|
121
|
+
return true
|
|
122
|
+
}
|
|
123
|
+
// Exclude any other known legacy models (allowlist above catches 4-6 variants first)
|
|
124
|
+
if (
|
|
125
|
+
canonical.includes('opus') ||
|
|
126
|
+
canonical.includes('sonnet') ||
|
|
127
|
+
canonical.includes('haiku')
|
|
128
|
+
) {
|
|
129
|
+
return false
|
|
130
|
+
}
|
|
131
|
+
// IMPORTANT: Do not change adaptive thinking support without notifying the
|
|
132
|
+
// model launch DRI and research. This can greatly affect model quality and
|
|
133
|
+
// bashing.
|
|
134
|
+
|
|
135
|
+
// Newer models (4.6+) are all trained on adaptive thinking and MUST have it
|
|
136
|
+
// enabled for model testing. DO NOT default to false for first party, otherwise
|
|
137
|
+
// we may silently degrade model quality.
|
|
138
|
+
|
|
139
|
+
// Default to true for unknown model strings on 1P and Foundry (because Foundry
|
|
140
|
+
// is a proxy). Do not default to true for other 3P as they have different formats
|
|
141
|
+
// for their model strings.
|
|
142
|
+
const provider = getAPIProvider()
|
|
143
|
+
return provider === 'firstParty' || provider === 'foundry'
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function shouldEnableThinkingByDefault(): boolean {
|
|
147
|
+
if (process.env.MAX_THINKING_TOKENS) {
|
|
148
|
+
return parseInt(process.env.MAX_THINKING_TOKENS, 10) > 0
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const { settings } = getSettingsWithErrors()
|
|
152
|
+
if (settings.alwaysThinkingEnabled === false) {
|
|
153
|
+
return false
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// IMPORTANT: Do not change default thinking enabled value without notifying
|
|
157
|
+
// the model launch DRI and research. This can greatly affect model quality and
|
|
158
|
+
// bashing.
|
|
159
|
+
|
|
160
|
+
// Enable thinking by default unless explicitly disabled.
|
|
161
|
+
return true
|
|
162
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Constants for timeout values
|
|
2
|
+
const DEFAULT_TIMEOUT_MS = 120_000 // 2 minutes
|
|
3
|
+
const MAX_TIMEOUT_MS = 600_000 // 10 minutes
|
|
4
|
+
|
|
5
|
+
type EnvLike = Record<string, string | undefined>
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get the default timeout for bash operations in milliseconds
|
|
9
|
+
* Checks BASH_DEFAULT_TIMEOUT_MS environment variable or returns 2 minutes default
|
|
10
|
+
* @param env Environment variables to check (defaults to process.env for production use)
|
|
11
|
+
*/
|
|
12
|
+
export function getDefaultBashTimeoutMs(env: EnvLike = process.env): number {
|
|
13
|
+
const envValue = env.BASH_DEFAULT_TIMEOUT_MS
|
|
14
|
+
if (envValue) {
|
|
15
|
+
const parsed = parseInt(envValue, 10)
|
|
16
|
+
if (!isNaN(parsed) && parsed > 0) {
|
|
17
|
+
return parsed
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return DEFAULT_TIMEOUT_MS
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get the maximum timeout for bash operations in milliseconds
|
|
25
|
+
* Checks BASH_MAX_TIMEOUT_MS environment variable or returns 10 minutes default
|
|
26
|
+
* @param env Environment variables to check (defaults to process.env for production use)
|
|
27
|
+
*/
|
|
28
|
+
export function getMaxBashTimeoutMs(env: EnvLike = process.env): number {
|
|
29
|
+
const envValue = env.BASH_MAX_TIMEOUT_MS
|
|
30
|
+
if (envValue) {
|
|
31
|
+
const parsed = parseInt(envValue, 10)
|
|
32
|
+
if (!isNaN(parsed) && parsed > 0) {
|
|
33
|
+
// Ensure max is at least as large as default
|
|
34
|
+
return Math.max(parsed, getDefaultBashTimeoutMs(env))
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Always ensure max is at least as large as default
|
|
38
|
+
return Math.max(MAX_TIMEOUT_MS, getDefaultBashTimeoutMs(env))
|
|
39
|
+
}
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TMUX SOCKET ISOLATION
|
|
3
|
+
* =====================
|
|
4
|
+
* This module manages an isolated tmux socket for Claude's operations.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS:
|
|
7
|
+
* Without isolation, Claude could accidentally affect the user's tmux sessions.
|
|
8
|
+
* For example, running `tmux kill-session` via the Bash tool would kill the
|
|
9
|
+
* user's current session if they started Claude from within tmux.
|
|
10
|
+
*
|
|
11
|
+
* HOW IT WORKS:
|
|
12
|
+
* 1. Claude creates its own tmux socket: `claude-<PID>` (e.g., `claude-12345`)
|
|
13
|
+
* 2. ALL Tmux tool commands use this socket via the `-L` flag
|
|
14
|
+
* 3. ALL Bash tool commands inherit TMUX env var pointing to this socket
|
|
15
|
+
* (set in Shell.ts via getClaudeTmuxEnv())
|
|
16
|
+
*
|
|
17
|
+
* This means ANY tmux command run through Claude - whether via the Tmux tool
|
|
18
|
+
* directly or via Bash - will operate on Claude's isolated socket, NOT the
|
|
19
|
+
* user's tmux session.
|
|
20
|
+
*
|
|
21
|
+
* IMPORTANT: The user's original TMUX env var is NOT used. After socket
|
|
22
|
+
* initialization, getClaudeTmuxEnv() returns a value that overrides the
|
|
23
|
+
* user's TMUX in all child processes spawned by Shell.ts.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { posix } from 'path'
|
|
27
|
+
import { registerCleanup } from './cleanupRegistry.js'
|
|
28
|
+
import { logForDebugging } from './debug.js'
|
|
29
|
+
import { toError } from './errors.js'
|
|
30
|
+
import { execFileNoThrow } from './execFileNoThrow.js'
|
|
31
|
+
import { logError } from './log.js'
|
|
32
|
+
import { getPlatform } from './platform.js'
|
|
33
|
+
|
|
34
|
+
// Constants for tmux socket management
|
|
35
|
+
const TMUX_COMMAND = 'tmux'
|
|
36
|
+
const CLAUDE_SOCKET_PREFIX = 'claude'
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Executes a tmux command, routing through WSL on Windows.
|
|
40
|
+
* On Windows, tmux only exists inside WSL — WSL interop lets the tmux session
|
|
41
|
+
* launch .exe files as native Win32 processes while stdin/stdout flow through
|
|
42
|
+
* the WSL pty.
|
|
43
|
+
*/
|
|
44
|
+
async function execTmux(
|
|
45
|
+
args: string[],
|
|
46
|
+
opts?: { useCwd?: boolean },
|
|
47
|
+
): Promise<{ stdout: string; stderr: string; code: number }> {
|
|
48
|
+
if (getPlatform() === 'windows') {
|
|
49
|
+
// -e execs tmux directly without the login shell. Without it, wsl hands the
|
|
50
|
+
// command line to bash which eats `#` as a comment: `display-message -p
|
|
51
|
+
// #{socket_path},#{pid}` below becomes `display-message -p ` → exit 1 →
|
|
52
|
+
// we silently fall back to the guessed path and never learn the real
|
|
53
|
+
// server PID. Same root cause as TungstenTool/utils.ts:execTmuxCommand.
|
|
54
|
+
const result = await execFileNoThrow('wsl', ['-e', TMUX_COMMAND, ...args], {
|
|
55
|
+
env: { ...process.env, WSL_UTF8: '1' },
|
|
56
|
+
...opts,
|
|
57
|
+
})
|
|
58
|
+
return {
|
|
59
|
+
stdout: result.stdout || '',
|
|
60
|
+
stderr: result.stderr || '',
|
|
61
|
+
code: result.code || 0,
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const result = await execFileNoThrow(TMUX_COMMAND, args, opts)
|
|
65
|
+
return {
|
|
66
|
+
stdout: result.stdout || '',
|
|
67
|
+
stderr: result.stderr || '',
|
|
68
|
+
code: result.code || 0,
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Socket state - initialized lazily when Tmux tool is first used or a tmux command is run
|
|
73
|
+
let socketName: string | null = null
|
|
74
|
+
let socketPath: string | null = null
|
|
75
|
+
let serverPid: number | null = null
|
|
76
|
+
let isInitializing = false
|
|
77
|
+
let initPromise: Promise<void> | null = null
|
|
78
|
+
|
|
79
|
+
// tmux availability - checked once upfront
|
|
80
|
+
let tmuxAvailabilityChecked = false
|
|
81
|
+
let tmuxAvailable = false
|
|
82
|
+
|
|
83
|
+
// Track whether the Tmux tool has been used at least once
|
|
84
|
+
// Used to defer socket initialization until actually needed
|
|
85
|
+
let tmuxToolUsed = false
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Gets the socket name for Claude's isolated tmux session.
|
|
89
|
+
* Format: claude-<PID>
|
|
90
|
+
*/
|
|
91
|
+
export function getClaudeSocketName(): string {
|
|
92
|
+
if (!socketName) {
|
|
93
|
+
socketName = `${CLAUDE_SOCKET_PREFIX}-${process.pid}`
|
|
94
|
+
}
|
|
95
|
+
return socketName
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Gets the socket path if the socket has been initialized.
|
|
100
|
+
* Returns null if not yet initialized.
|
|
101
|
+
*/
|
|
102
|
+
export function getClaudeSocketPath(): string | null {
|
|
103
|
+
return socketPath
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Sets socket info after initialization.
|
|
108
|
+
* Called after the tmux session is created.
|
|
109
|
+
*/
|
|
110
|
+
export function setClaudeSocketInfo(path: string, pid: number): void {
|
|
111
|
+
socketPath = path
|
|
112
|
+
serverPid = pid
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Returns whether the socket has been initialized.
|
|
117
|
+
*/
|
|
118
|
+
export function isSocketInitialized(): boolean {
|
|
119
|
+
return socketPath !== null && serverPid !== null
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Gets the TMUX environment variable value for Claude's isolated socket.
|
|
124
|
+
*
|
|
125
|
+
* CRITICAL: This value is used by Shell.ts to override the TMUX env var
|
|
126
|
+
* in ALL child processes. This ensures that any `tmux` command run via
|
|
127
|
+
* the Bash tool will operate on Claude's socket, NOT the user's session.
|
|
128
|
+
*
|
|
129
|
+
* Format: "socket_path,server_pid,pane_index" (matches tmux's TMUX env var)
|
|
130
|
+
* Example: "/tmp/tmux-501/claude-12345,54321,0"
|
|
131
|
+
*
|
|
132
|
+
* Returns null if socket is not yet initialized.
|
|
133
|
+
* When null, Shell.ts does not override TMUX, preserving user's environment.
|
|
134
|
+
*/
|
|
135
|
+
export function getClaudeTmuxEnv(): string | null {
|
|
136
|
+
if (!socketPath || serverPid === null) {
|
|
137
|
+
return null
|
|
138
|
+
}
|
|
139
|
+
return `${socketPath},${serverPid},0`
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Checks if tmux is available on this system.
|
|
144
|
+
* This is checked once and cached for the lifetime of the process.
|
|
145
|
+
*
|
|
146
|
+
* When tmux is not available:
|
|
147
|
+
* - TungstenTool (Tmux) will not work
|
|
148
|
+
* - TeammateTool will not work (it uses tmux for pane management)
|
|
149
|
+
* - Bash commands will run without tmux isolation
|
|
150
|
+
*/
|
|
151
|
+
export async function checkTmuxAvailable(): Promise<boolean> {
|
|
152
|
+
if (!tmuxAvailabilityChecked) {
|
|
153
|
+
const result =
|
|
154
|
+
getPlatform() === 'windows'
|
|
155
|
+
? await execFileNoThrow('wsl', ['-e', TMUX_COMMAND, '-V'], {
|
|
156
|
+
env: { ...process.env, WSL_UTF8: '1' },
|
|
157
|
+
useCwd: false,
|
|
158
|
+
})
|
|
159
|
+
: await execFileNoThrow('which', [TMUX_COMMAND], {
|
|
160
|
+
useCwd: false,
|
|
161
|
+
})
|
|
162
|
+
tmuxAvailable = result.code === 0
|
|
163
|
+
if (!tmuxAvailable) {
|
|
164
|
+
logForDebugging(
|
|
165
|
+
`[Socket] tmux is not installed. The Tmux tool and Teammate tool will not be available.`,
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
tmuxAvailabilityChecked = true
|
|
169
|
+
}
|
|
170
|
+
return tmuxAvailable
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Returns the cached tmux availability status.
|
|
175
|
+
* Returns false if availability hasn't been checked yet.
|
|
176
|
+
* Use checkTmuxAvailable() to perform the check.
|
|
177
|
+
*/
|
|
178
|
+
export function isTmuxAvailable(): boolean {
|
|
179
|
+
return tmuxAvailabilityChecked && tmuxAvailable
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Marks that the Tmux tool has been used at least once.
|
|
184
|
+
* Called by TungstenTool before initialization.
|
|
185
|
+
* After this is called, Shell.ts will initialize the socket for subsequent Bash commands.
|
|
186
|
+
*/
|
|
187
|
+
export function markTmuxToolUsed(): void {
|
|
188
|
+
tmuxToolUsed = true
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Returns whether the Tmux tool has been used at least once.
|
|
193
|
+
* Used by Shell.ts to decide whether to initialize the socket.
|
|
194
|
+
*/
|
|
195
|
+
export function hasTmuxToolBeenUsed(): boolean {
|
|
196
|
+
return tmuxToolUsed
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Ensures the socket is initialized with a tmux session.
|
|
201
|
+
* Called by Shell.ts when the Tmux tool has been used or the command includes "tmux".
|
|
202
|
+
* Safe to call multiple times; will only initialize once.
|
|
203
|
+
*
|
|
204
|
+
* If tmux is not installed, this function returns gracefully without
|
|
205
|
+
* initializing the socket. getClaudeTmuxEnv() will return null, and
|
|
206
|
+
* Bash commands will run without tmux isolation.
|
|
207
|
+
*/
|
|
208
|
+
export async function ensureSocketInitialized(): Promise<void> {
|
|
209
|
+
// Already initialized
|
|
210
|
+
if (isSocketInitialized()) {
|
|
211
|
+
return
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Check if tmux is available before trying to use it
|
|
215
|
+
const available = await checkTmuxAvailable()
|
|
216
|
+
if (!available) {
|
|
217
|
+
return
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Another call is already initializing - wait for it but don't propagate errors
|
|
221
|
+
// The original caller handles the error and sets up graceful degradation
|
|
222
|
+
if (isInitializing && initPromise) {
|
|
223
|
+
try {
|
|
224
|
+
await initPromise
|
|
225
|
+
} catch {
|
|
226
|
+
// Ignore - the original caller logs the error
|
|
227
|
+
}
|
|
228
|
+
return
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
isInitializing = true
|
|
232
|
+
initPromise = doInitialize()
|
|
233
|
+
|
|
234
|
+
try {
|
|
235
|
+
await initPromise
|
|
236
|
+
} catch (error) {
|
|
237
|
+
// Log error but don't throw - graceful degradation
|
|
238
|
+
const err = toError(error)
|
|
239
|
+
logError(err)
|
|
240
|
+
logForDebugging(
|
|
241
|
+
`[Socket] Failed to initialize tmux socket: ${err.message}. Tmux isolation will be disabled.`,
|
|
242
|
+
)
|
|
243
|
+
} finally {
|
|
244
|
+
isInitializing = false
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Kills the tmux server for Claude's isolated socket.
|
|
250
|
+
* Called during graceful shutdown to clean up resources.
|
|
251
|
+
*/
|
|
252
|
+
async function killTmuxServer(): Promise<void> {
|
|
253
|
+
const socket = getClaudeSocketName()
|
|
254
|
+
logForDebugging(`[Socket] Killing tmux server for socket: ${socket}`)
|
|
255
|
+
|
|
256
|
+
const result = await execTmux(['-L', socket, 'kill-server'])
|
|
257
|
+
|
|
258
|
+
if (result.code === 0) {
|
|
259
|
+
logForDebugging(`[Socket] Successfully killed tmux server`)
|
|
260
|
+
} else {
|
|
261
|
+
// Server may already be dead, which is fine
|
|
262
|
+
logForDebugging(
|
|
263
|
+
`[Socket] Failed to kill tmux server (exit ${result.code}): ${result.stderr}`,
|
|
264
|
+
)
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
async function doInitialize(): Promise<void> {
|
|
269
|
+
const socket = getClaudeSocketName()
|
|
270
|
+
|
|
271
|
+
// Create a new session with our custom socket
|
|
272
|
+
// Pass CLAUDE_CODE_SKIP_PROMPT_HISTORY via -e so it's set in the initial shell environment
|
|
273
|
+
//
|
|
274
|
+
// On Windows, the tmux server inherits WSL_INTEROP from the short-lived
|
|
275
|
+
// wsl.exe that spawns it; once `new-session -d` detaches and wsl.exe exits,
|
|
276
|
+
// that socket stops servicing requests. Any cli.exe launched inside the pane
|
|
277
|
+
// then hits `UtilAcceptVsock: accept4 failed 110` (ETIMEDOUT). Observed on
|
|
278
|
+
// 2026-03-25: server PID 386 (started alongside /init at WSL boot) inherited
|
|
279
|
+
// /run/WSL/383_interop — init's own socket, which listens but doesn't handle
|
|
280
|
+
// interop. /run/WSL/1_interop is a stable symlink WSL maintains to the real
|
|
281
|
+
// handler; pin the server to it so interop survives the spawning wsl.exe.
|
|
282
|
+
const result = await execTmux([
|
|
283
|
+
'-L',
|
|
284
|
+
socket,
|
|
285
|
+
'new-session',
|
|
286
|
+
'-d',
|
|
287
|
+
'-s',
|
|
288
|
+
'base',
|
|
289
|
+
'-e',
|
|
290
|
+
'CLAUDE_CODE_SKIP_PROMPT_HISTORY=true',
|
|
291
|
+
...(getPlatform() === 'windows'
|
|
292
|
+
? ['-e', 'WSL_INTEROP=/run/WSL/1_interop']
|
|
293
|
+
: []),
|
|
294
|
+
])
|
|
295
|
+
|
|
296
|
+
if (result.code !== 0) {
|
|
297
|
+
// Session might already exist from a previous run with same PID (unlikely but possible)
|
|
298
|
+
// Check if the session exists
|
|
299
|
+
const checkResult = await execTmux([
|
|
300
|
+
'-L',
|
|
301
|
+
socket,
|
|
302
|
+
'has-session',
|
|
303
|
+
'-t',
|
|
304
|
+
'base',
|
|
305
|
+
])
|
|
306
|
+
if (checkResult.code !== 0) {
|
|
307
|
+
throw new Error(
|
|
308
|
+
`Failed to create tmux session on socket ${socket}: ${result.stderr}`,
|
|
309
|
+
)
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Register cleanup to kill the tmux server on exit
|
|
314
|
+
registerCleanup(killTmuxServer)
|
|
315
|
+
|
|
316
|
+
// Set CLAUDE_CODE_SKIP_PROMPT_HISTORY in the tmux GLOBAL environment (-g).
|
|
317
|
+
// Without -g this would only apply to the 'base' session, and new sessions
|
|
318
|
+
// created by TungstenTool (e.g. 'test', 'verify') would not inherit it.
|
|
319
|
+
// Any Claude Code instance spawned on this socket will inherit this env var,
|
|
320
|
+
// preventing test/verification sessions from polluting the user's real
|
|
321
|
+
// command history and --resume session list.
|
|
322
|
+
await execTmux([
|
|
323
|
+
'-L',
|
|
324
|
+
socket,
|
|
325
|
+
'set-environment',
|
|
326
|
+
'-g',
|
|
327
|
+
'CLAUDE_CODE_SKIP_PROMPT_HISTORY',
|
|
328
|
+
'true',
|
|
329
|
+
])
|
|
330
|
+
|
|
331
|
+
// Same WSL_INTEROP pin as the new-session -e above, but in the GLOBAL env
|
|
332
|
+
// so sessions created by TungstenTool inherit it too. The -e on new-session
|
|
333
|
+
// only covers the base session's initial shell; a later `new-session -s cc`
|
|
334
|
+
// inherits the SERVER's env, which still holds the stale socket from the
|
|
335
|
+
// wsl.exe that spawned it.
|
|
336
|
+
if (getPlatform() === 'windows') {
|
|
337
|
+
await execTmux([
|
|
338
|
+
'-L',
|
|
339
|
+
socket,
|
|
340
|
+
'set-environment',
|
|
341
|
+
'-g',
|
|
342
|
+
'WSL_INTEROP',
|
|
343
|
+
'/run/WSL/1_interop',
|
|
344
|
+
])
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Get the socket path and server PID
|
|
348
|
+
const infoResult = await execTmux([
|
|
349
|
+
'-L',
|
|
350
|
+
socket,
|
|
351
|
+
'display-message',
|
|
352
|
+
'-p',
|
|
353
|
+
'#{socket_path},#{pid}',
|
|
354
|
+
])
|
|
355
|
+
|
|
356
|
+
if (infoResult.code === 0) {
|
|
357
|
+
const [path, pidStr] = infoResult.stdout.trim().split(',')
|
|
358
|
+
if (path && pidStr) {
|
|
359
|
+
const pid = parseInt(pidStr, 10)
|
|
360
|
+
if (!isNaN(pid)) {
|
|
361
|
+
setClaudeSocketInfo(path, pid)
|
|
362
|
+
return
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
// Parsing failed - log and fall through to fallback
|
|
366
|
+
logForDebugging(
|
|
367
|
+
`[Socket] Failed to parse socket info from tmux output: "${infoResult.stdout.trim()}". Using fallback path.`,
|
|
368
|
+
)
|
|
369
|
+
} else {
|
|
370
|
+
// Command failed - log and fall through to fallback
|
|
371
|
+
logForDebugging(
|
|
372
|
+
`[Socket] Failed to get socket info via display-message (exit ${infoResult.code}): ${infoResult.stderr}. Using fallback path.`,
|
|
373
|
+
)
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// Fallback: construct the socket path from standard tmux location
|
|
377
|
+
// tmux sockets are typically at $TMPDIR/tmux-<UID>/<socket_name> (or /tmp/tmux-<UID>/ if TMPDIR is not set)
|
|
378
|
+
// On Windows this path is inside WSL, so always use POSIX separators.
|
|
379
|
+
// process.getuid() is undefined on Windows; WSL default user is root (uid 0) in CI.
|
|
380
|
+
const uid = process.getuid?.() ?? 0
|
|
381
|
+
const baseTmpDir = process.env.TMPDIR || '/tmp'
|
|
382
|
+
const fallbackPath = posix.join(baseTmpDir, `tmux-${uid}`, socket)
|
|
383
|
+
|
|
384
|
+
// Get server PID separately
|
|
385
|
+
const pidResult = await execTmux([
|
|
386
|
+
'-L',
|
|
387
|
+
socket,
|
|
388
|
+
'display-message',
|
|
389
|
+
'-p',
|
|
390
|
+
'#{pid}',
|
|
391
|
+
])
|
|
392
|
+
|
|
393
|
+
if (pidResult.code === 0) {
|
|
394
|
+
const pid = parseInt(pidResult.stdout.trim(), 10)
|
|
395
|
+
if (!isNaN(pid)) {
|
|
396
|
+
logForDebugging(
|
|
397
|
+
`[Socket] Using fallback socket path: ${fallbackPath} (server PID: ${pid})`,
|
|
398
|
+
)
|
|
399
|
+
setClaudeSocketInfo(fallbackPath, pid)
|
|
400
|
+
return
|
|
401
|
+
}
|
|
402
|
+
// PID parsing failed
|
|
403
|
+
logForDebugging(
|
|
404
|
+
`[Socket] Failed to parse server PID from tmux output: "${pidResult.stdout.trim()}"`,
|
|
405
|
+
)
|
|
406
|
+
} else {
|
|
407
|
+
logForDebugging(
|
|
408
|
+
`[Socket] Failed to get server PID (exit ${pidResult.code}): ${pidResult.stderr}`,
|
|
409
|
+
)
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
throw new Error(
|
|
413
|
+
`Failed to get socket info for ${socket}: primary="${infoResult.stderr}", fallback="${pidResult.stderr}"`,
|
|
414
|
+
)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// For testing purposes
|
|
418
|
+
export function resetSocketState(): void {
|
|
419
|
+
socketName = null
|
|
420
|
+
socketPath = null
|
|
421
|
+
serverPid = null
|
|
422
|
+
isInitializing = false
|
|
423
|
+
initPromise = null
|
|
424
|
+
tmuxAvailabilityChecked = false
|
|
425
|
+
tmuxAvailable = false
|
|
426
|
+
tmuxToolUsed = false
|
|
427
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod/v4'
|
|
2
|
+
import { lazySchema } from '../lazySchema.js'
|
|
3
|
+
|
|
4
|
+
const TodoStatusSchema = lazySchema(() =>
|
|
5
|
+
z.enum(['pending', 'in_progress', 'completed']),
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
export const TodoItemSchema = lazySchema(() =>
|
|
9
|
+
z.object({
|
|
10
|
+
content: z.string().min(1, 'Content cannot be empty'),
|
|
11
|
+
status: TodoStatusSchema(),
|
|
12
|
+
activeForm: z.string().min(1, 'Active form cannot be empty'),
|
|
13
|
+
}),
|
|
14
|
+
)
|
|
15
|
+
export type TodoItem = z.infer<ReturnType<typeof TodoItemSchema>>
|
|
16
|
+
|
|
17
|
+
export const TodoListSchema = lazySchema(() => z.array(TodoItemSchema()))
|
|
18
|
+
export type TodoList = z.infer<ReturnType<typeof TodoListSchema>>
|