@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,202 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process'
|
|
2
|
+
import { getIsInteractive } from '../bootstrap/state.js'
|
|
3
|
+
import { logForDebugging } from './debug.js'
|
|
4
|
+
import { isEnvDefinedFalsy, isEnvTruthy } from './envUtils.js'
|
|
5
|
+
import { execFileNoThrow } from './execFileNoThrow.js'
|
|
6
|
+
|
|
7
|
+
let loggedTmuxCcDisable = false
|
|
8
|
+
let checkedTmuxMouseHint = false
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Cached result from `tmux display-message -p '#{client_control_mode}'`.
|
|
12
|
+
* undefined = not yet queried (or probe failed) — env heuristic stays authoritative.
|
|
13
|
+
*/
|
|
14
|
+
let tmuxControlModeProbed: boolean | undefined
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Env-var heuristic for iTerm2's tmux integration mode (`tmux -CC` / `tmux -2CC`).
|
|
18
|
+
*
|
|
19
|
+
* In `-CC` mode, iTerm2 renders tmux panes as native splits — tmux runs
|
|
20
|
+
* as a server (TMUX is set) but iTerm2 is the actual terminal emulator
|
|
21
|
+
* for each pane, so TERM_PROGRAM stays `iTerm.app` and TERM is iTerm2's
|
|
22
|
+
* default (xterm-*). Contrast with regular tmux-inside-iTerm2, where tmux
|
|
23
|
+
* overwrites TERM_PROGRAM to `tmux` and sets TERM to screen-* or tmux-*.
|
|
24
|
+
*
|
|
25
|
+
* This heuristic has known holes (SSH often doesn't propagate TERM_PROGRAM;
|
|
26
|
+
* .tmux.conf can override TERM) — probeTmuxControlModeSync() is the
|
|
27
|
+
* authoritative backstop. Kept as a zero-subprocess fast path.
|
|
28
|
+
*/
|
|
29
|
+
function isTmuxControlModeEnvHeuristic(): boolean {
|
|
30
|
+
if (!process.env.TMUX) return false
|
|
31
|
+
if (process.env.TERM_PROGRAM !== 'iTerm.app') return false
|
|
32
|
+
// Belt-and-suspenders: in regular tmux TERM is screen-* or tmux-*;
|
|
33
|
+
// in -CC mode iTerm2 sets its own TERM (xterm-*).
|
|
34
|
+
const term = process.env.TERM ?? ''
|
|
35
|
+
return !term.startsWith('screen') && !term.startsWith('tmux')
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Sync one-shot probe: asks tmux directly whether this client is in control
|
|
40
|
+
* mode via `#{client_control_mode}`. Runs on first isTmuxControlMode() call
|
|
41
|
+
* when the env heuristic can't decide; result is cached.
|
|
42
|
+
*
|
|
43
|
+
* Sync (spawnSync) because the answer gates whether we enter fullscreen — an
|
|
44
|
+
* async probe raced against React render and lost: coder-tmux (ssh → tmux -CC
|
|
45
|
+
* on a remote box) doesn't propagate TERM_PROGRAM, so the env heuristic missed,
|
|
46
|
+
* and by the time the async probe resolved we'd already entered alt-screen with
|
|
47
|
+
* mouse tracking enabled. Mouse wheel is dead in iTerm2's -CC integration, so
|
|
48
|
+
* users couldn't scroll at all.
|
|
49
|
+
*
|
|
50
|
+
* Cost: one ~5ms subprocess, only when $TMUX is set AND $TERM_PROGRAM is unset
|
|
51
|
+
* (the SSH-into-tmux case). Local iTerm2 -CC and non-tmux paths skip the spawn.
|
|
52
|
+
*
|
|
53
|
+
* The TMUX env check MUST come first — without it, display-message would
|
|
54
|
+
* query whatever tmux server happens to be running rather than our client.
|
|
55
|
+
*/
|
|
56
|
+
function probeTmuxControlModeSync(): void {
|
|
57
|
+
// Seed cache with heuristic result so early returns below don't leave it
|
|
58
|
+
// undefined — isTmuxControlMode() is called 15+ times per render, and an
|
|
59
|
+
// undefined cache would re-enter this function (re-spawning tmux in the
|
|
60
|
+
// failure case) on every call.
|
|
61
|
+
tmuxControlModeProbed = isTmuxControlModeEnvHeuristic()
|
|
62
|
+
if (tmuxControlModeProbed) return
|
|
63
|
+
if (!process.env.TMUX) return
|
|
64
|
+
// Only probe when iTerm might be involved: TERM_PROGRAM is iTerm.app
|
|
65
|
+
// (covered above) or not set (SSH often doesn't propagate it). When
|
|
66
|
+
// TERM_PROGRAM is explicitly a non-iTerm terminal, skip — tmux -CC is
|
|
67
|
+
// an iTerm-only feature, so the subprocess would be wasted.
|
|
68
|
+
if (process.env.TERM_PROGRAM) return
|
|
69
|
+
let result
|
|
70
|
+
try {
|
|
71
|
+
result = spawnSync(
|
|
72
|
+
'tmux',
|
|
73
|
+
['display-message', '-p', '#{client_control_mode}'],
|
|
74
|
+
{ encoding: 'utf8', timeout: 2000 },
|
|
75
|
+
)
|
|
76
|
+
} catch {
|
|
77
|
+
// spawnSync can throw on some platforms (e.g. ENOENT on Windows if tmux
|
|
78
|
+
// is absent and the runtime surfaces it as an exception rather than in
|
|
79
|
+
// result.error). Treat the same as a non-zero exit.
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
// Non-zero exit / spawn error: tmux too old (format var added in 2.4) or
|
|
83
|
+
// unavailable. Keep the heuristic result cached.
|
|
84
|
+
if (result.status !== 0) return
|
|
85
|
+
tmuxControlModeProbed = result.stdout.trim() === '1'
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* True when running under `tmux -CC` (iTerm2 integration mode).
|
|
90
|
+
*
|
|
91
|
+
* The alt-screen / mouse-tracking path in fullscreen mode is unrecoverable
|
|
92
|
+
* in -CC mode (double-click corrupts terminal state; mouse wheel is dead),
|
|
93
|
+
* so callers auto-disable fullscreen.
|
|
94
|
+
*
|
|
95
|
+
* Lazily probes tmux on first call when the env heuristic can't decide.
|
|
96
|
+
*/
|
|
97
|
+
export function isTmuxControlMode(): boolean {
|
|
98
|
+
if (tmuxControlModeProbed === undefined) probeTmuxControlModeSync()
|
|
99
|
+
return tmuxControlModeProbed ?? false
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function _resetTmuxControlModeProbeForTesting(): void {
|
|
103
|
+
tmuxControlModeProbed = undefined
|
|
104
|
+
loggedTmuxCcDisable = false
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Runtime env-var check only. Ants default to on (CLAUDE_CODE_NO_FLICKER=0
|
|
109
|
+
* to opt out); external users default to off (CLAUDE_CODE_NO_FLICKER=1 to
|
|
110
|
+
* opt in).
|
|
111
|
+
*/
|
|
112
|
+
export function isFullscreenEnvEnabled(): boolean {
|
|
113
|
+
// Explicit user opt-out always wins.
|
|
114
|
+
if (isEnvDefinedFalsy(process.env.CLAUDE_CODE_NO_FLICKER)) return false
|
|
115
|
+
// Explicit opt-in overrides auto-detection (escape hatch).
|
|
116
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_NO_FLICKER)) return true
|
|
117
|
+
// Auto-disable under tmux -CC: alt-screen + mouse tracking corrupts
|
|
118
|
+
// terminal state on double-click and mouse wheel is dead.
|
|
119
|
+
if (isTmuxControlMode()) {
|
|
120
|
+
if (!loggedTmuxCcDisable) {
|
|
121
|
+
loggedTmuxCcDisable = true
|
|
122
|
+
logForDebugging(
|
|
123
|
+
'fullscreen disabled: tmux -CC (iTerm2 integration mode) detected · set CLAUDE_CODE_NO_FLICKER=1 to override',
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
return false
|
|
127
|
+
}
|
|
128
|
+
return true
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Whether fullscreen mode should enable SGR mouse tracking (DEC 1000/1002/1006).
|
|
133
|
+
* Set CLAUDE_CODE_DISABLE_MOUSE=1 to keep alt-screen + virtualized scroll
|
|
134
|
+
* (keyboard PgUp/PgDn/Ctrl+Home/End still work) but skip mouse capture,
|
|
135
|
+
* so tmux/kitty/terminal-native copy-on-select keeps working.
|
|
136
|
+
*
|
|
137
|
+
* Compare with CLAUDE_CODE_NO_FLICKER=0 which is all-or-nothing — it also
|
|
138
|
+
* disables alt-screen and virtualized scrollback.
|
|
139
|
+
*/
|
|
140
|
+
export function isMouseTrackingEnabled(): boolean {
|
|
141
|
+
return !isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_MOUSE)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Whether mouse click handling is disabled (clicks/drags ignored, wheel still
|
|
146
|
+
* works). Set CLAUDE_CODE_DISABLE_MOUSE_CLICKS=1 to prevent accidental clicks
|
|
147
|
+
* from triggering cursor positioning, text selection, or message expansion.
|
|
148
|
+
*
|
|
149
|
+
* Fullscreen-specific — only reachable when CLAUDE_CODE_NO_FLICKER is active.
|
|
150
|
+
*/
|
|
151
|
+
export function isMouseClicksDisabled(): boolean {
|
|
152
|
+
return isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_MOUSE_CLICKS)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* True when the fullscreen alt-screen layout is actually rendering —
|
|
157
|
+
* requires an interactive REPL session AND the env var not explicitly
|
|
158
|
+
* set falsy. Headless paths (--print, SDK, in-process teammates) never
|
|
159
|
+
* enter fullscreen, so features that depend on alt-screen re-rendering
|
|
160
|
+
* should gate on this.
|
|
161
|
+
*/
|
|
162
|
+
export function isFullscreenActive(): boolean {
|
|
163
|
+
return getIsInteractive() && isFullscreenEnvEnabled()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* One-time hint for tmux users in fullscreen with `mouse off`.
|
|
168
|
+
*
|
|
169
|
+
* tmux's `mouse` option is session-scoped by design — there is no
|
|
170
|
+
* pane-level equivalent. We used to `tmux set mouse on` when entering
|
|
171
|
+
* alt-screen so wheel scrolling worked, but that changed mouse behavior
|
|
172
|
+
* for every sibling pane (vim, less, shell) and leaked on kill-pane or
|
|
173
|
+
* when multiple CC instances raced on restore. Now we leave tmux state
|
|
174
|
+
* alone — same as vim/less/htop — and just tell the user their options.
|
|
175
|
+
*
|
|
176
|
+
* Fire-and-forget from REPL startup. Returns the hint text once per
|
|
177
|
+
* session if TMUX is set, fullscreen is active, and tmux's current
|
|
178
|
+
* `mouse` option is off; null otherwise.
|
|
179
|
+
*/
|
|
180
|
+
export async function maybeGetTmuxMouseHint(): Promise<string | null> {
|
|
181
|
+
if (!process.env.TMUX) return null
|
|
182
|
+
// tmux -CC auto-disables fullscreen above, but belt-and-suspenders.
|
|
183
|
+
if (!isFullscreenActive() || isTmuxControlMode()) return null
|
|
184
|
+
if (checkedTmuxMouseHint) return null
|
|
185
|
+
checkedTmuxMouseHint = true
|
|
186
|
+
// -A includes inherited values: `show -v mouse` returns empty when the
|
|
187
|
+
// option is set globally (`set -g mouse on` in .tmux.conf) but not at
|
|
188
|
+
// session level — which is the common case. -A gives the effective value.
|
|
189
|
+
const { stdout, code } = await execFileNoThrow(
|
|
190
|
+
'tmux',
|
|
191
|
+
['show', '-Av', 'mouse'],
|
|
192
|
+
{ useCwd: false, timeout: 2000 },
|
|
193
|
+
)
|
|
194
|
+
if (code !== 0 || stdout.trim() === 'on') return null
|
|
195
|
+
return "tmux detected · scroll with PgUp/PgDn · or add 'set -g mouse on' to ~/.tmux.conf for wheel scroll"
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Test-only: reset module-level once-per-session flags. */
|
|
199
|
+
export function _resetForTesting(): void {
|
|
200
|
+
loggedTmuxCcDisable = false
|
|
201
|
+
checkedTmuxMouseHint = false
|
|
202
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { basename, extname, posix, sep } from 'path'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* File patterns that should be excluded from attribution.
|
|
5
|
+
* Based on GitHub Linguist vendored patterns and common generated file patterns.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Exact file name matches (case-insensitive)
|
|
9
|
+
const EXCLUDED_FILENAMES = new Set([
|
|
10
|
+
'package-lock.json',
|
|
11
|
+
'yarn.lock',
|
|
12
|
+
'pnpm-lock.yaml',
|
|
13
|
+
'bun.lockb',
|
|
14
|
+
'bun.lock',
|
|
15
|
+
'composer.lock',
|
|
16
|
+
'gemfile.lock',
|
|
17
|
+
'cargo.lock',
|
|
18
|
+
'poetry.lock',
|
|
19
|
+
'pipfile.lock',
|
|
20
|
+
'shrinkwrap.json',
|
|
21
|
+
'npm-shrinkwrap.json',
|
|
22
|
+
])
|
|
23
|
+
|
|
24
|
+
// File extension patterns (case-insensitive)
|
|
25
|
+
const EXCLUDED_EXTENSIONS = new Set([
|
|
26
|
+
'.lock',
|
|
27
|
+
'.min.js',
|
|
28
|
+
'.min.css',
|
|
29
|
+
'.min.html',
|
|
30
|
+
'.bundle.js',
|
|
31
|
+
'.bundle.css',
|
|
32
|
+
'.generated.ts',
|
|
33
|
+
'.generated.js',
|
|
34
|
+
'.d.ts', // TypeScript declaration files
|
|
35
|
+
])
|
|
36
|
+
|
|
37
|
+
// Directory patterns that indicate generated/vendored content
|
|
38
|
+
const EXCLUDED_DIRECTORIES = [
|
|
39
|
+
'/dist/',
|
|
40
|
+
'/build/',
|
|
41
|
+
'/out/',
|
|
42
|
+
'/output/',
|
|
43
|
+
'/node_modules/',
|
|
44
|
+
'/vendor/',
|
|
45
|
+
'/vendored/',
|
|
46
|
+
'/third_party/',
|
|
47
|
+
'/third-party/',
|
|
48
|
+
'/external/',
|
|
49
|
+
'/.next/',
|
|
50
|
+
'/.nuxt/',
|
|
51
|
+
'/.svelte-kit/',
|
|
52
|
+
'/coverage/',
|
|
53
|
+
'/__pycache__/',
|
|
54
|
+
'/.tox/',
|
|
55
|
+
'/venv/',
|
|
56
|
+
'/.venv/',
|
|
57
|
+
'/target/release/',
|
|
58
|
+
'/target/debug/',
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
// Filename patterns using regex for more complex matching
|
|
62
|
+
const EXCLUDED_FILENAME_PATTERNS = [
|
|
63
|
+
/^.*\.min\.[a-z]+$/i, // *.min.*
|
|
64
|
+
/^.*-min\.[a-z]+$/i, // *-min.*
|
|
65
|
+
/^.*\.bundle\.[a-z]+$/i, // *.bundle.*
|
|
66
|
+
/^.*\.generated\.[a-z]+$/i, // *.generated.*
|
|
67
|
+
/^.*\.gen\.[a-z]+$/i, // *.gen.*
|
|
68
|
+
/^.*\.auto\.[a-z]+$/i, // *.auto.*
|
|
69
|
+
/^.*_generated\.[a-z]+$/i, // *_generated.*
|
|
70
|
+
/^.*_gen\.[a-z]+$/i, // *_gen.*
|
|
71
|
+
/^.*\.pb\.(go|js|ts|py|rb)$/i, // Protocol buffer generated files
|
|
72
|
+
/^.*_pb2?\.py$/i, // Python protobuf files
|
|
73
|
+
/^.*\.pb\.h$/i, // C++ protobuf headers
|
|
74
|
+
/^.*\.grpc\.[a-z]+$/i, // gRPC generated files
|
|
75
|
+
/^.*\.swagger\.[a-z]+$/i, // Swagger generated files
|
|
76
|
+
/^.*\.openapi\.[a-z]+$/i, // OpenAPI generated files
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Check if a file should be excluded from attribution based on Linguist-style rules.
|
|
81
|
+
*
|
|
82
|
+
* @param filePath - Relative file path from repository root
|
|
83
|
+
* @returns true if the file should be excluded from attribution
|
|
84
|
+
*/
|
|
85
|
+
export function isGeneratedFile(filePath: string): boolean {
|
|
86
|
+
// Normalize path separators for consistent pattern matching (patterns use posix-style /)
|
|
87
|
+
const normalizedPath =
|
|
88
|
+
posix.sep + filePath.split(sep).join(posix.sep).replace(/^\/+/, '')
|
|
89
|
+
const fileName = basename(filePath).toLowerCase()
|
|
90
|
+
const ext = extname(filePath).toLowerCase()
|
|
91
|
+
|
|
92
|
+
// Check exact filename matches
|
|
93
|
+
if (EXCLUDED_FILENAMES.has(fileName)) {
|
|
94
|
+
return true
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Check extension matches
|
|
98
|
+
if (EXCLUDED_EXTENSIONS.has(ext)) {
|
|
99
|
+
return true
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Check for compound extensions like .min.js
|
|
103
|
+
const parts = fileName.split('.')
|
|
104
|
+
if (parts.length > 2) {
|
|
105
|
+
const compoundExt = '.' + parts.slice(-2).join('.')
|
|
106
|
+
if (EXCLUDED_EXTENSIONS.has(compoundExt)) {
|
|
107
|
+
return true
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Check directory patterns
|
|
112
|
+
for (const dir of EXCLUDED_DIRECTORIES) {
|
|
113
|
+
if (normalizedPath.includes(dir)) {
|
|
114
|
+
return true
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Check filename patterns
|
|
119
|
+
for (const pattern of EXCLUDED_FILENAME_PATTERNS) {
|
|
120
|
+
if (pattern.test(fileName)) {
|
|
121
|
+
return true
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return false
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Filter a list of files to exclude generated files.
|
|
130
|
+
*
|
|
131
|
+
* @param files - Array of file paths
|
|
132
|
+
* @returns Array of files that are not generated
|
|
133
|
+
*/
|
|
134
|
+
export function filterGeneratedFiles(files: string[]): string[] {
|
|
135
|
+
return files.filter(file => !isGeneratedFile(file))
|
|
136
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const NO_VALUE = Symbol('NO_VALUE')
|
|
2
|
+
|
|
3
|
+
export async function lastX<A>(as: AsyncGenerator<A>): Promise<A> {
|
|
4
|
+
let lastValue: A | typeof NO_VALUE = NO_VALUE
|
|
5
|
+
for await (const a of as) {
|
|
6
|
+
lastValue = a
|
|
7
|
+
}
|
|
8
|
+
if (lastValue === NO_VALUE) {
|
|
9
|
+
throw new Error('No items in generator')
|
|
10
|
+
}
|
|
11
|
+
return lastValue
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function returnValue<A>(
|
|
15
|
+
as: AsyncGenerator<unknown, A>,
|
|
16
|
+
): Promise<A> {
|
|
17
|
+
let e
|
|
18
|
+
do {
|
|
19
|
+
e = await as.next()
|
|
20
|
+
} while (!e.done)
|
|
21
|
+
return e.value
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type QueuedGenerator<A> = {
|
|
25
|
+
done: boolean | void
|
|
26
|
+
value: A | void
|
|
27
|
+
generator: AsyncGenerator<A, void>
|
|
28
|
+
promise: Promise<QueuedGenerator<A>>
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Run all generators concurrently up to a concurrency cap, yielding values as they come in
|
|
32
|
+
export async function* all<A>(
|
|
33
|
+
generators: AsyncGenerator<A, void>[],
|
|
34
|
+
concurrencyCap = Infinity,
|
|
35
|
+
): AsyncGenerator<A, void> {
|
|
36
|
+
const next = (generator: AsyncGenerator<A, void>) => {
|
|
37
|
+
const promise: Promise<QueuedGenerator<A>> = generator
|
|
38
|
+
.next()
|
|
39
|
+
.then(({ done, value }) => ({
|
|
40
|
+
done,
|
|
41
|
+
value,
|
|
42
|
+
generator,
|
|
43
|
+
promise,
|
|
44
|
+
}))
|
|
45
|
+
return promise
|
|
46
|
+
}
|
|
47
|
+
const waiting = [...generators]
|
|
48
|
+
const promises = new Set<Promise<QueuedGenerator<A>>>()
|
|
49
|
+
|
|
50
|
+
// Start initial batch up to concurrency cap
|
|
51
|
+
while (promises.size < concurrencyCap && waiting.length > 0) {
|
|
52
|
+
const gen = waiting.shift()!
|
|
53
|
+
promises.add(next(gen))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
while (promises.size > 0) {
|
|
57
|
+
const { done, value, generator, promise } = await Promise.race(promises)
|
|
58
|
+
promises.delete(promise)
|
|
59
|
+
|
|
60
|
+
if (!done) {
|
|
61
|
+
promises.add(next(generator))
|
|
62
|
+
// TODO: Clean this up
|
|
63
|
+
if (value !== undefined) {
|
|
64
|
+
yield value
|
|
65
|
+
}
|
|
66
|
+
} else if (waiting.length > 0) {
|
|
67
|
+
// Start a new generator when one finishes
|
|
68
|
+
const nextGen = waiting.shift()!
|
|
69
|
+
promises.add(next(nextGen))
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export async function toArray<A>(
|
|
75
|
+
generator: AsyncGenerator<A, void>,
|
|
76
|
+
): Promise<A[]> {
|
|
77
|
+
const result: A[] = []
|
|
78
|
+
for await (const a of generator) {
|
|
79
|
+
result.push(a)
|
|
80
|
+
}
|
|
81
|
+
return result
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export async function* fromArray<T>(values: T[]): AsyncGenerator<T, void> {
|
|
85
|
+
for (const value of values) {
|
|
86
|
+
yield value
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import {
|
|
2
|
+
execFileNoThrowWithCwd,
|
|
3
|
+
execSyncWithDefaults_DEPRECATED,
|
|
4
|
+
} from './execFileNoThrow.js'
|
|
5
|
+
|
|
6
|
+
// This file contains platform-agnostic implementations of common `ps` type commands.
|
|
7
|
+
// When adding new code to this file, make sure to handle:
|
|
8
|
+
// - Win32, as `ps` within cygwin and WSL may not behave as expected, particularly when attempting to access processes on the host.
|
|
9
|
+
// - Unix vs BSD-style `ps` have different options.
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if a process with the given PID is running (signal 0 probe).
|
|
13
|
+
*
|
|
14
|
+
* PID ≤ 1 returns false (0 is current process group, 1 is init).
|
|
15
|
+
*
|
|
16
|
+
* Note: `process.kill(pid, 0)` throws EPERM when the process exists but is
|
|
17
|
+
* owned by another user. This reports such processes as NOT running, which
|
|
18
|
+
* is conservative for lock recovery (we won't steal a live lock).
|
|
19
|
+
*/
|
|
20
|
+
export function isProcessRunning(pid: number): boolean {
|
|
21
|
+
if (pid <= 1) return false
|
|
22
|
+
try {
|
|
23
|
+
process.kill(pid, 0)
|
|
24
|
+
return true
|
|
25
|
+
} catch {
|
|
26
|
+
return false
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Gets the ancestor process chain for a given process (up to maxDepth levels)
|
|
32
|
+
* @param pid - The starting process ID
|
|
33
|
+
* @param maxDepth - Maximum number of ancestors to fetch (default: 10)
|
|
34
|
+
* @returns Array of ancestor PIDs from immediate parent to furthest ancestor
|
|
35
|
+
*/
|
|
36
|
+
export async function getAncestorPidsAsync(
|
|
37
|
+
pid: string | number,
|
|
38
|
+
maxDepth = 10,
|
|
39
|
+
): Promise<number[]> {
|
|
40
|
+
if (process.platform === 'win32') {
|
|
41
|
+
// For Windows, use a PowerShell script that walks the process tree
|
|
42
|
+
const script = `
|
|
43
|
+
$pid = ${String(pid)}
|
|
44
|
+
$ancestors = @()
|
|
45
|
+
for ($i = 0; $i -lt ${maxDepth}; $i++) {
|
|
46
|
+
$proc = Get-CimInstance Win32_Process -Filter "ProcessId=$pid" -ErrorAction SilentlyContinue
|
|
47
|
+
if (-not $proc -or -not $proc.ParentProcessId -or $proc.ParentProcessId -eq 0) { break }
|
|
48
|
+
$pid = $proc.ParentProcessId
|
|
49
|
+
$ancestors += $pid
|
|
50
|
+
}
|
|
51
|
+
$ancestors -join ','
|
|
52
|
+
`.trim()
|
|
53
|
+
|
|
54
|
+
const result = await execFileNoThrowWithCwd(
|
|
55
|
+
'powershell.exe',
|
|
56
|
+
['-NoProfile', '-Command', script],
|
|
57
|
+
{ timeout: 3000 },
|
|
58
|
+
)
|
|
59
|
+
if (result.code !== 0 || !result.stdout?.trim()) {
|
|
60
|
+
return []
|
|
61
|
+
}
|
|
62
|
+
return result.stdout
|
|
63
|
+
.trim()
|
|
64
|
+
.split(',')
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
.map(p => parseInt(p, 10))
|
|
67
|
+
.filter(p => !isNaN(p))
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// For Unix, use a shell command that walks up the process tree
|
|
71
|
+
// This uses a single process invocation instead of multiple sequential calls
|
|
72
|
+
const script = `pid=${String(pid)}; for i in $(seq 1 ${maxDepth}); do ppid=$(ps -o ppid= -p $pid 2>/dev/null | tr -d ' '); if [ -z "$ppid" ] || [ "$ppid" = "0" ] || [ "$ppid" = "1" ]; then break; fi; echo $ppid; pid=$ppid; done`
|
|
73
|
+
|
|
74
|
+
const result = await execFileNoThrowWithCwd('sh', ['-c', script], {
|
|
75
|
+
timeout: 3000,
|
|
76
|
+
})
|
|
77
|
+
if (result.code !== 0 || !result.stdout?.trim()) {
|
|
78
|
+
return []
|
|
79
|
+
}
|
|
80
|
+
return result.stdout
|
|
81
|
+
.trim()
|
|
82
|
+
.split('\n')
|
|
83
|
+
.filter(Boolean)
|
|
84
|
+
.map(p => parseInt(p, 10))
|
|
85
|
+
.filter(p => !isNaN(p))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Gets the command line for a given process
|
|
90
|
+
* @param pid - The process ID to get the command for
|
|
91
|
+
* @returns The command line string, or null if not found
|
|
92
|
+
* @deprecated Use getAncestorCommandsAsync instead
|
|
93
|
+
*/
|
|
94
|
+
export function getProcessCommand(pid: string | number): string | null {
|
|
95
|
+
try {
|
|
96
|
+
const pidStr = String(pid)
|
|
97
|
+
const command =
|
|
98
|
+
process.platform === 'win32'
|
|
99
|
+
? `powershell.exe -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ProcessId=${pidStr}\\").CommandLine"`
|
|
100
|
+
: `ps -o command= -p ${pidStr}`
|
|
101
|
+
|
|
102
|
+
const result = execSyncWithDefaults_DEPRECATED(command, { timeout: 1000 })
|
|
103
|
+
return result ? result.trim() : null
|
|
104
|
+
} catch {
|
|
105
|
+
return null
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Gets the command lines for a process and its ancestors in a single call
|
|
111
|
+
* @param pid - The starting process ID
|
|
112
|
+
* @param maxDepth - Maximum depth to traverse (default: 10)
|
|
113
|
+
* @returns Array of command strings for the process chain
|
|
114
|
+
*/
|
|
115
|
+
export async function getAncestorCommandsAsync(
|
|
116
|
+
pid: string | number,
|
|
117
|
+
maxDepth = 10,
|
|
118
|
+
): Promise<string[]> {
|
|
119
|
+
if (process.platform === 'win32') {
|
|
120
|
+
// For Windows, use a PowerShell script that walks the process tree and collects commands
|
|
121
|
+
const script = `
|
|
122
|
+
$currentPid = ${String(pid)}
|
|
123
|
+
$commands = @()
|
|
124
|
+
for ($i = 0; $i -lt ${maxDepth}; $i++) {
|
|
125
|
+
$proc = Get-CimInstance Win32_Process -Filter "ProcessId=$currentPid" -ErrorAction SilentlyContinue
|
|
126
|
+
if (-not $proc) { break }
|
|
127
|
+
if ($proc.CommandLine) { $commands += $proc.CommandLine }
|
|
128
|
+
if (-not $proc.ParentProcessId -or $proc.ParentProcessId -eq 0) { break }
|
|
129
|
+
$currentPid = $proc.ParentProcessId
|
|
130
|
+
}
|
|
131
|
+
$commands -join [char]0
|
|
132
|
+
`.trim()
|
|
133
|
+
|
|
134
|
+
const result = await execFileNoThrowWithCwd(
|
|
135
|
+
'powershell.exe',
|
|
136
|
+
['-NoProfile', '-Command', script],
|
|
137
|
+
{ timeout: 3000 },
|
|
138
|
+
)
|
|
139
|
+
if (result.code !== 0 || !result.stdout?.trim()) {
|
|
140
|
+
return []
|
|
141
|
+
}
|
|
142
|
+
return result.stdout.split('\0').filter(Boolean)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// For Unix, use a shell command that walks up the process tree and collects commands
|
|
146
|
+
// Using null byte as separator to handle commands with newlines
|
|
147
|
+
const script = `currentpid=${String(pid)}; for i in $(seq 1 ${maxDepth}); do cmd=$(ps -o command= -p $currentpid 2>/dev/null); if [ -n "$cmd" ]; then printf '%s\\0' "$cmd"; fi; ppid=$(ps -o ppid= -p $currentpid 2>/dev/null | tr -d ' '); if [ -z "$ppid" ] || [ "$ppid" = "0" ] || [ "$ppid" = "1" ]; then break; fi; currentpid=$ppid; done`
|
|
148
|
+
|
|
149
|
+
const result = await execFileNoThrowWithCwd('sh', ['-c', script], {
|
|
150
|
+
timeout: 3000,
|
|
151
|
+
})
|
|
152
|
+
if (result.code !== 0 || !result.stdout?.trim()) {
|
|
153
|
+
return []
|
|
154
|
+
}
|
|
155
|
+
return result.stdout.split('\0').filter(Boolean)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Gets the child process IDs for a given process
|
|
160
|
+
* @param pid - The parent process ID
|
|
161
|
+
* @returns Array of child process IDs as numbers
|
|
162
|
+
*/
|
|
163
|
+
export function getChildPids(pid: string | number): number[] {
|
|
164
|
+
try {
|
|
165
|
+
const pidStr = String(pid)
|
|
166
|
+
const command =
|
|
167
|
+
process.platform === 'win32'
|
|
168
|
+
? `powershell.exe -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ParentProcessId=${pidStr}\\").ProcessId"`
|
|
169
|
+
: `pgrep -P ${pidStr}`
|
|
170
|
+
|
|
171
|
+
const result = execSyncWithDefaults_DEPRECATED(command, { timeout: 1000 })
|
|
172
|
+
if (!result) {
|
|
173
|
+
return []
|
|
174
|
+
}
|
|
175
|
+
return result
|
|
176
|
+
.trim()
|
|
177
|
+
.split('\n')
|
|
178
|
+
.filter(Boolean)
|
|
179
|
+
.map(p => parseInt(p, 10))
|
|
180
|
+
.filter(p => !isNaN(p))
|
|
181
|
+
} catch {
|
|
182
|
+
return []
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { sep } from 'path'
|
|
2
|
+
import { logEvent } from '../services/analytics/index.js'
|
|
3
|
+
import { execFileNoThrowWithCwd } from './execFileNoThrow.js'
|
|
4
|
+
import { gitExe } from './git.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns the paths of all worktrees for the current git repository.
|
|
8
|
+
* If git is not available, not in a git repo, or only has one worktree,
|
|
9
|
+
* returns an empty array.
|
|
10
|
+
*
|
|
11
|
+
* This version includes analytics tracking and uses the CLI's gitExe()
|
|
12
|
+
* resolver. For a portable version without CLI deps, use
|
|
13
|
+
* getWorktreePathsPortable().
|
|
14
|
+
*
|
|
15
|
+
* @param cwd Directory to run the command from
|
|
16
|
+
* @returns Array of absolute worktree paths
|
|
17
|
+
*/
|
|
18
|
+
export async function getWorktreePaths(cwd: string): Promise<string[]> {
|
|
19
|
+
const startTime = Date.now()
|
|
20
|
+
|
|
21
|
+
const { stdout, code } = await execFileNoThrowWithCwd(
|
|
22
|
+
gitExe(),
|
|
23
|
+
['worktree', 'list', '--porcelain'],
|
|
24
|
+
{
|
|
25
|
+
cwd,
|
|
26
|
+
preserveOutputOnError: false,
|
|
27
|
+
},
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
const durationMs = Date.now() - startTime
|
|
31
|
+
|
|
32
|
+
if (code !== 0) {
|
|
33
|
+
logEvent('tengu_worktree_detection', {
|
|
34
|
+
duration_ms: durationMs,
|
|
35
|
+
worktree_count: 0,
|
|
36
|
+
success: false,
|
|
37
|
+
})
|
|
38
|
+
return []
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Parse porcelain output - lines starting with "worktree " contain paths
|
|
42
|
+
// Example:
|
|
43
|
+
// worktree /Users/foo/repo
|
|
44
|
+
// HEAD abc123
|
|
45
|
+
// branch refs/heads/main
|
|
46
|
+
//
|
|
47
|
+
// worktree /Users/foo/repo-wt1
|
|
48
|
+
// HEAD def456
|
|
49
|
+
// branch refs/heads/feature
|
|
50
|
+
const worktreePaths = stdout
|
|
51
|
+
.split('\n')
|
|
52
|
+
.filter(line => line.startsWith('worktree '))
|
|
53
|
+
.map(line => line.slice('worktree '.length).normalize('NFC'))
|
|
54
|
+
|
|
55
|
+
logEvent('tengu_worktree_detection', {
|
|
56
|
+
duration_ms: durationMs,
|
|
57
|
+
worktree_count: worktreePaths.length,
|
|
58
|
+
success: true,
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
// Sort worktrees: current worktree first, then alphabetically
|
|
62
|
+
const currentWorktree = worktreePaths.find(
|
|
63
|
+
path => cwd === path || cwd.startsWith(path + sep),
|
|
64
|
+
)
|
|
65
|
+
const otherWorktrees = worktreePaths
|
|
66
|
+
.filter(path => path !== currentWorktree)
|
|
67
|
+
.sort((a, b) => a.localeCompare(b))
|
|
68
|
+
|
|
69
|
+
return currentWorktree ? [currentWorktree, ...otherWorktrees] : otherWorktrees
|
|
70
|
+
}
|