@xortex/xcode 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +171 -0
- package/bin/xcode +127 -0
- package/bin/xcode-test +84 -0
- package/bin/xcode.cmd +31 -0
- package/constants/apiLimits.ts +94 -0
- package/constants/betas.ts +52 -0
- package/constants/common.ts +33 -0
- package/constants/cyberRiskInstruction.ts +24 -0
- package/constants/errorIds.ts +15 -0
- package/constants/figures.ts +45 -0
- package/constants/files.ts +156 -0
- package/constants/github-app.ts +144 -0
- package/constants/keys.ts +11 -0
- package/constants/messages.ts +1 -0
- package/constants/oauth.ts +234 -0
- package/constants/outputStyles.ts +216 -0
- package/constants/product.ts +76 -0
- package/constants/prompts.ts +939 -0
- package/constants/spinnerVerbs.ts +204 -0
- package/constants/system.ts +95 -0
- package/constants/systemPromptSections.ts +68 -0
- package/constants/toolLimits.ts +56 -0
- package/constants/tools.ts +112 -0
- package/constants/turnCompletionVerbs.ts +12 -0
- package/constants/xml.ts +86 -0
- package/entrypoints/agentSdkTypes.ts +443 -0
- package/entrypoints/cli.tsx +307 -0
- package/entrypoints/init.ts +340 -0
- package/entrypoints/mcp.ts +196 -0
- package/entrypoints/sandboxTypes.ts +156 -0
- package/entrypoints/sdk/controlSchemas.ts +663 -0
- package/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/entrypoints/sdk/coreTypes.generated.ts +2 -0
- package/entrypoints/sdk/coreTypes.ts +62 -0
- package/entrypoints/sdk/runtimeTypes.ts +140 -0
- package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
- package/entrypoints/sdk/toolTypes.ts +90 -0
- package/main.tsx +4686 -0
- package/package.json +120 -0
- package/services/AgentSummary/agentSummary.ts +179 -0
- package/services/MagicDocs/magicDocs.ts +254 -0
- package/services/MagicDocs/prompts.ts +127 -0
- package/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/services/PromptSuggestion/speculation.ts +991 -0
- package/services/SessionMemory/prompts.ts +324 -0
- package/services/SessionMemory/sessionMemory.ts +495 -0
- package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/services/analytics/config.ts +38 -0
- package/services/analytics/datadog.ts +307 -0
- package/services/analytics/firstPartyEventLogger.ts +449 -0
- package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/services/analytics/growthbook.ts +1155 -0
- package/services/analytics/index.ts +173 -0
- package/services/analytics/metadata.ts +973 -0
- package/services/analytics/sink.ts +114 -0
- package/services/analytics/sinkKillswitch.ts +25 -0
- package/services/api/adminRequests.ts +119 -0
- package/services/api/bootstrap.ts +141 -0
- package/services/api/claude.ts +3422 -0
- package/services/api/client.ts +406 -0
- package/services/api/dumpPrompts.ts +226 -0
- package/services/api/emptyUsage.ts +22 -0
- package/services/api/errorUtils.ts +260 -0
- package/services/api/errors.ts +1207 -0
- package/services/api/filesApi.ts +748 -0
- package/services/api/firstTokenDate.ts +60 -0
- package/services/api/gemini.ts +359 -0
- package/services/api/geminiAdapter.ts +123 -0
- package/services/api/geminiClient.ts +291 -0
- package/services/api/grove.ts +357 -0
- package/services/api/logging.ts +788 -0
- package/services/api/metricsOptOut.ts +159 -0
- package/services/api/openRouterClient.ts +453 -0
- package/services/api/overageCreditGrant.ts +137 -0
- package/services/api/promptCacheBreakDetection.ts +727 -0
- package/services/api/referral.ts +281 -0
- package/services/api/sessionIngress.ts +514 -0
- package/services/api/ultrareviewQuota.ts +38 -0
- package/services/api/usage.ts +63 -0
- package/services/api/withRetry.ts +822 -0
- package/services/autoDream/autoDream.ts +324 -0
- package/services/autoDream/config.ts +21 -0
- package/services/autoDream/consolidationLock.ts +140 -0
- package/services/autoDream/consolidationPrompt.ts +65 -0
- package/services/awaySummary.ts +74 -0
- package/services/claudeAiLimits.ts +515 -0
- package/services/claudeAiLimitsHook.ts +23 -0
- package/services/compact/apiMicrocompact.ts +153 -0
- package/services/compact/autoCompact.ts +351 -0
- package/services/compact/compact.ts +1705 -0
- package/services/compact/compactWarningHook.ts +16 -0
- package/services/compact/compactWarningState.ts +18 -0
- package/services/compact/grouping.ts +63 -0
- package/services/compact/microCompact.ts +530 -0
- package/services/compact/postCompactCleanup.ts +77 -0
- package/services/compact/prompt.ts +374 -0
- package/services/compact/sessionMemoryCompact.ts +630 -0
- package/services/compact/timeBasedMCConfig.ts +43 -0
- package/services/diagnosticTracking.ts +397 -0
- package/services/extractMemories/extractMemories.ts +517 -0
- package/services/extractMemories/prompts.ts +154 -0
- package/services/internalLogging.ts +90 -0
- package/services/lsp/LSPClient.ts +447 -0
- package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/services/lsp/LSPServerInstance.ts +511 -0
- package/services/lsp/LSPServerManager.ts +420 -0
- package/services/lsp/config.ts +79 -0
- package/services/lsp/manager.ts +289 -0
- package/services/lsp/passiveFeedback.ts +328 -0
- package/services/mcp/InProcessTransport.ts +63 -0
- package/services/mcp/MCPConnectionManager.tsx +73 -0
- package/services/mcp/SdkControlTransport.ts +136 -0
- package/services/mcp/auth.ts +2465 -0
- package/services/mcp/channelAllowlist.ts +76 -0
- package/services/mcp/channelNotification.ts +316 -0
- package/services/mcp/channelPermissions.ts +240 -0
- package/services/mcp/claudeai.ts +164 -0
- package/services/mcp/client.ts +3348 -0
- package/services/mcp/config.ts +1578 -0
- package/services/mcp/elicitationHandler.ts +313 -0
- package/services/mcp/envExpansion.ts +38 -0
- package/services/mcp/headersHelper.ts +138 -0
- package/services/mcp/mcpStringUtils.ts +106 -0
- package/services/mcp/normalization.ts +23 -0
- package/services/mcp/oauthPort.ts +78 -0
- package/services/mcp/officialRegistry.ts +72 -0
- package/services/mcp/types.ts +258 -0
- package/services/mcp/useManageMCPConnections.ts +1141 -0
- package/services/mcp/utils.ts +575 -0
- package/services/mcp/vscodeSdkMcp.ts +112 -0
- package/services/mcp/xaa.ts +511 -0
- package/services/mcp/xaaIdpLogin.ts +487 -0
- package/services/mcpServerApproval.tsx +41 -0
- package/services/mockRateLimits.ts +882 -0
- package/services/notifier.ts +156 -0
- package/services/oauth/auth-code-listener.ts +211 -0
- package/services/oauth/client.ts +566 -0
- package/services/oauth/crypto.ts +23 -0
- package/services/oauth/getOauthProfile.ts +53 -0
- package/services/oauth/index.ts +198 -0
- package/services/plugins/PluginInstallationManager.ts +184 -0
- package/services/plugins/pluginCliCommands.ts +344 -0
- package/services/plugins/pluginOperations.ts +1088 -0
- package/services/policyLimits/index.ts +663 -0
- package/services/policyLimits/types.ts +27 -0
- package/services/preventSleep.ts +165 -0
- package/services/rateLimitMessages.ts +344 -0
- package/services/rateLimitMocking.ts +144 -0
- package/services/remoteManagedSettings/index.ts +638 -0
- package/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/services/remoteManagedSettings/syncCache.ts +112 -0
- package/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/services/remoteManagedSettings/types.ts +31 -0
- package/services/settingsSync/index.ts +581 -0
- package/services/settingsSync/types.ts +67 -0
- package/services/teamMemorySync/index.ts +1256 -0
- package/services/teamMemorySync/secretScanner.ts +324 -0
- package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/services/teamMemorySync/types.ts +156 -0
- package/services/teamMemorySync/watcher.ts +387 -0
- package/services/tips/tipHistory.ts +17 -0
- package/services/tips/tipRegistry.ts +686 -0
- package/services/tips/tipScheduler.ts +58 -0
- package/services/tokenEstimation.ts +495 -0
- package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/services/tools/StreamingToolExecutor.ts +530 -0
- package/services/tools/toolExecution.ts +1745 -0
- package/services/tools/toolHooks.ts +650 -0
- package/services/tools/toolOrchestration.ts +188 -0
- package/services/vcr.ts +406 -0
- package/services/voice.ts +525 -0
- package/services/voiceKeyterms.ts +106 -0
- package/services/voiceStreamSTT.ts +544 -0
- package/tools/AgentTool/AgentTool.tsx +1398 -0
- package/tools/AgentTool/UI.tsx +872 -0
- package/tools/AgentTool/agentColorManager.ts +66 -0
- package/tools/AgentTool/agentDisplay.ts +104 -0
- package/tools/AgentTool/agentMemory.ts +177 -0
- package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/tools/AgentTool/agentToolUtils.ts +686 -0
- package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/tools/AgentTool/builtInAgents.ts +72 -0
- package/tools/AgentTool/constants.ts +12 -0
- package/tools/AgentTool/forkSubagent.ts +210 -0
- package/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/tools/AgentTool/prompt.ts +287 -0
- package/tools/AgentTool/resumeAgent.ts +265 -0
- package/tools/AgentTool/runAgent.ts +973 -0
- package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/tools/BashTool/BashTool.tsx +1144 -0
- package/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/tools/BashTool/UI.tsx +185 -0
- package/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/tools/BashTool/bashPermissions.ts +2621 -0
- package/tools/BashTool/bashSecurity.ts +2592 -0
- package/tools/BashTool/commandSemantics.ts +140 -0
- package/tools/BashTool/commentLabel.ts +13 -0
- package/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/tools/BashTool/modeValidation.ts +115 -0
- package/tools/BashTool/pathValidation.ts +1303 -0
- package/tools/BashTool/prompt.ts +369 -0
- package/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/tools/BashTool/sedEditParser.ts +322 -0
- package/tools/BashTool/sedValidation.ts +684 -0
- package/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/tools/BashTool/toolName.ts +2 -0
- package/tools/BashTool/utils.ts +223 -0
- package/tools/BriefTool/BriefTool.ts +204 -0
- package/tools/BriefTool/UI.tsx +101 -0
- package/tools/BriefTool/attachments.ts +110 -0
- package/tools/BriefTool/prompt.ts +22 -0
- package/tools/BriefTool/upload.ts +174 -0
- package/tools/ConfigTool/ConfigTool.ts +467 -0
- package/tools/ConfigTool/UI.tsx +38 -0
- package/tools/ConfigTool/constants.ts +1 -0
- package/tools/ConfigTool/prompt.ts +93 -0
- package/tools/ConfigTool/supportedSettings.ts +211 -0
- package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/tools/EnterPlanModeTool/constants.ts +1 -0
- package/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/tools/EnterWorktreeTool/constants.ts +1 -0
- package/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/tools/ExitPlanModeTool/constants.ts +2 -0
- package/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/tools/ExitWorktreeTool/constants.ts +1 -0
- package/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/tools/FileEditTool/FileEditTool.ts +625 -0
- package/tools/FileEditTool/UI.tsx +289 -0
- package/tools/FileEditTool/constants.ts +11 -0
- package/tools/FileEditTool/prompt.ts +28 -0
- package/tools/FileEditTool/types.ts +85 -0
- package/tools/FileEditTool/utils.ts +775 -0
- package/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/tools/FileReadTool/UI.tsx +185 -0
- package/tools/FileReadTool/imageProcessor.ts +94 -0
- package/tools/FileReadTool/limits.ts +92 -0
- package/tools/FileReadTool/prompt.ts +49 -0
- package/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/tools/FileWriteTool/UI.tsx +405 -0
- package/tools/FileWriteTool/prompt.ts +18 -0
- package/tools/GlobTool/GlobTool.ts +198 -0
- package/tools/GlobTool/UI.tsx +63 -0
- package/tools/GlobTool/prompt.ts +7 -0
- package/tools/GrepTool/GrepTool.ts +577 -0
- package/tools/GrepTool/UI.tsx +201 -0
- package/tools/GrepTool/prompt.ts +18 -0
- package/tools/LSPTool/LSPTool.ts +860 -0
- package/tools/LSPTool/UI.tsx +228 -0
- package/tools/LSPTool/formatters.ts +592 -0
- package/tools/LSPTool/prompt.ts +21 -0
- package/tools/LSPTool/schemas.ts +215 -0
- package/tools/LSPTool/symbolContext.ts +90 -0
- package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/tools/MCPTool/MCPTool.ts +77 -0
- package/tools/MCPTool/UI.tsx +403 -0
- package/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/tools/MCPTool/prompt.ts +3 -0
- package/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/tools/NotebookEditTool/UI.tsx +93 -0
- package/tools/NotebookEditTool/constants.ts +2 -0
- package/tools/NotebookEditTool/prompt.ts +3 -0
- package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/tools/PowerShellTool/UI.tsx +131 -0
- package/tools/PowerShellTool/clmTypes.ts +211 -0
- package/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/tools/PowerShellTool/commonParameters.ts +30 -0
- package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/tools/PowerShellTool/gitSafety.ts +176 -0
- package/tools/PowerShellTool/modeValidation.ts +404 -0
- package/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/tools/PowerShellTool/prompt.ts +145 -0
- package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/tools/PowerShellTool/toolName.ts +2 -0
- package/tools/REPLTool/constants.ts +46 -0
- package/tools/REPLTool/primitiveTools.ts +39 -0
- package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/tools/ScheduleCronTool/UI.tsx +60 -0
- package/tools/ScheduleCronTool/prompt.ts +135 -0
- package/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/tools/SendMessageTool/UI.tsx +31 -0
- package/tools/SendMessageTool/constants.ts +1 -0
- package/tools/SendMessageTool/prompt.ts +49 -0
- package/tools/SkillTool/SkillTool.ts +1108 -0
- package/tools/SkillTool/UI.tsx +128 -0
- package/tools/SkillTool/constants.ts +1 -0
- package/tools/SkillTool/prompt.ts +241 -0
- package/tools/SleepTool/prompt.ts +17 -0
- package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/tools/TaskCreateTool/constants.ts +1 -0
- package/tools/TaskCreateTool/prompt.ts +56 -0
- package/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/tools/TaskGetTool/constants.ts +1 -0
- package/tools/TaskGetTool/prompt.ts +24 -0
- package/tools/TaskListTool/TaskListTool.ts +116 -0
- package/tools/TaskListTool/constants.ts +1 -0
- package/tools/TaskListTool/prompt.ts +49 -0
- package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/tools/TaskOutputTool/constants.ts +1 -0
- package/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/tools/TaskStopTool/UI.tsx +41 -0
- package/tools/TaskStopTool/prompt.ts +8 -0
- package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/tools/TaskUpdateTool/constants.ts +1 -0
- package/tools/TaskUpdateTool/prompt.ts +77 -0
- package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/tools/TeamCreateTool/UI.tsx +6 -0
- package/tools/TeamCreateTool/constants.ts +1 -0
- package/tools/TeamCreateTool/prompt.ts +113 -0
- package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/tools/TeamDeleteTool/UI.tsx +20 -0
- package/tools/TeamDeleteTool/constants.ts +1 -0
- package/tools/TeamDeleteTool/prompt.ts +16 -0
- package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/tools/TodoWriteTool/constants.ts +1 -0
- package/tools/TodoWriteTool/prompt.ts +184 -0
- package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/tools/ToolSearchTool/constants.ts +1 -0
- package/tools/ToolSearchTool/prompt.ts +121 -0
- package/tools/TungstenTool/TungstenTool.ts +4 -0
- package/tools/WebFetchTool/UI.tsx +72 -0
- package/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/tools/WebFetchTool/preapproved.ts +166 -0
- package/tools/WebFetchTool/prompt.ts +46 -0
- package/tools/WebFetchTool/utils.ts +530 -0
- package/tools/WebSearchTool/UI.tsx +101 -0
- package/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/tools/WebSearchTool/prompt.ts +34 -0
- package/tools/WorkflowTool/constants.ts +2 -0
- package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
- package/tools/XMemIngestTool/prompt.ts +13 -0
- package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
- package/tools/XMemRetrieveTool/prompt.ts +16 -0
- package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
- package/tools/XMemSearchTool/prompt.ts +11 -0
- package/tools/shared/gitOperationTracking.ts +277 -0
- package/tools/shared/spawnMultiAgent.ts +1093 -0
- package/tools/testing/TestingPermissionTool.tsx +74 -0
- package/tools/utils.ts +40 -0
- package/utils/CircularBuffer.ts +84 -0
- package/utils/Cursor.ts +1530 -0
- package/utils/QueryGuard.ts +121 -0
- package/utils/Shell.ts +474 -0
- package/utils/ShellCommand.ts +465 -0
- package/utils/abortController.ts +99 -0
- package/utils/activityManager.ts +164 -0
- package/utils/advisor.ts +145 -0
- package/utils/agentContext.ts +178 -0
- package/utils/agentId.ts +99 -0
- package/utils/agentSwarmsEnabled.ts +44 -0
- package/utils/agenticSessionSearch.ts +307 -0
- package/utils/analyzeContext.ts +1382 -0
- package/utils/ansiToPng.ts +334 -0
- package/utils/ansiToSvg.ts +272 -0
- package/utils/api.ts +718 -0
- package/utils/apiPreconnect.ts +71 -0
- package/utils/appleTerminalBackup.ts +124 -0
- package/utils/argumentSubstitution.ts +145 -0
- package/utils/array.ts +13 -0
- package/utils/asciicast.ts +239 -0
- package/utils/attachments.ts +4091 -0
- package/utils/attribution.ts +393 -0
- package/utils/auth.ts +2002 -0
- package/utils/authFileDescriptor.ts +196 -0
- package/utils/authPortable.ts +19 -0
- package/utils/autoModeDenials.ts +26 -0
- package/utils/autoRunIssue.tsx +122 -0
- package/utils/autoUpdater.ts +561 -0
- package/utils/aws.ts +74 -0
- package/utils/awsAuthStatusManager.ts +81 -0
- package/utils/axios.ts +8 -0
- package/utils/background/remote/preconditions.ts +235 -0
- package/utils/background/remote/remoteSession.ts +98 -0
- package/utils/backgroundHousekeeping.ts +94 -0
- package/utils/bash/ParsedCommand.ts +318 -0
- package/utils/bash/ShellSnapshot.ts +582 -0
- package/utils/bash/ast.ts +2679 -0
- package/utils/bash/bashParser.ts +4436 -0
- package/utils/bash/bashPipeCommand.ts +294 -0
- package/utils/bash/commands.ts +1339 -0
- package/utils/bash/heredoc.ts +733 -0
- package/utils/bash/parser.ts +230 -0
- package/utils/bash/prefix.ts +204 -0
- package/utils/bash/registry.ts +53 -0
- package/utils/bash/shellCompletion.ts +259 -0
- package/utils/bash/shellPrefix.ts +28 -0
- package/utils/bash/shellQuote.ts +304 -0
- package/utils/bash/shellQuoting.ts +128 -0
- package/utils/bash/specs/alias.ts +14 -0
- package/utils/bash/specs/index.ts +18 -0
- package/utils/bash/specs/nohup.ts +13 -0
- package/utils/bash/specs/pyright.ts +91 -0
- package/utils/bash/specs/sleep.ts +13 -0
- package/utils/bash/specs/srun.ts +31 -0
- package/utils/bash/specs/time.ts +13 -0
- package/utils/bash/specs/timeout.ts +20 -0
- package/utils/bash/treeSitterAnalysis.ts +506 -0
- package/utils/betas.ts +434 -0
- package/utils/billing.ts +78 -0
- package/utils/binaryCheck.ts +53 -0
- package/utils/browser.ts +68 -0
- package/utils/bufferedWriter.ts +100 -0
- package/utils/bundledMode.ts +22 -0
- package/utils/caCerts.ts +115 -0
- package/utils/caCertsConfig.ts +88 -0
- package/utils/cachePaths.ts +38 -0
- package/utils/classifierApprovals.ts +88 -0
- package/utils/classifierApprovalsHook.ts +17 -0
- package/utils/claudeCodeHints.ts +193 -0
- package/utils/claudeDesktop.ts +152 -0
- package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/utils/claudeInChrome/common.ts +540 -0
- package/utils/claudeInChrome/mcpServer.ts +292 -0
- package/utils/claudeInChrome/prompt.ts +83 -0
- package/utils/claudeInChrome/setup.ts +400 -0
- package/utils/claudeInChrome/setupPortable.ts +233 -0
- package/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/utils/claudemd.ts +1479 -0
- package/utils/cleanup.ts +602 -0
- package/utils/cleanupRegistry.ts +25 -0
- package/utils/cliArgs.ts +60 -0
- package/utils/cliHighlight.ts +54 -0
- package/utils/codeIndexing.ts +206 -0
- package/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/utils/collapseHookSummaries.ts +59 -0
- package/utils/collapseReadSearch.ts +1109 -0
- package/utils/collapseTeammateShutdowns.ts +55 -0
- package/utils/color-diff-mock.ts +27 -0
- package/utils/combinedAbortSignal.ts +47 -0
- package/utils/commandLifecycle.ts +21 -0
- package/utils/commitAttribution.ts +961 -0
- package/utils/completionCache.ts +166 -0
- package/utils/computerUse/appNames.ts +196 -0
- package/utils/computerUse/cleanup.ts +86 -0
- package/utils/computerUse/common.ts +61 -0
- package/utils/computerUse/computerUseLock.ts +215 -0
- package/utils/computerUse/drainRunLoop.ts +79 -0
- package/utils/computerUse/escHotkey.ts +54 -0
- package/utils/computerUse/executor.ts +658 -0
- package/utils/computerUse/gates.ts +72 -0
- package/utils/computerUse/hostAdapter.ts +69 -0
- package/utils/computerUse/inputLoader.ts +30 -0
- package/utils/computerUse/mcpServer.ts +106 -0
- package/utils/computerUse/setup.ts +53 -0
- package/utils/computerUse/swiftLoader.ts +23 -0
- package/utils/computerUse/toolRendering.tsx +125 -0
- package/utils/computerUse/wrapper.tsx +336 -0
- package/utils/concurrentSessions.ts +204 -0
- package/utils/config.ts +1817 -0
- package/utils/configConstants.ts +21 -0
- package/utils/contentArray.ts +51 -0
- package/utils/context.ts +221 -0
- package/utils/contextAnalysis.ts +272 -0
- package/utils/contextSuggestions.ts +235 -0
- package/utils/controlMessageCompat.ts +32 -0
- package/utils/conversationRecovery.ts +597 -0
- package/utils/cron.ts +308 -0
- package/utils/cronJitterConfig.ts +75 -0
- package/utils/cronScheduler.ts +565 -0
- package/utils/cronTasks.ts +458 -0
- package/utils/cronTasksLock.ts +195 -0
- package/utils/crossProjectResume.ts +75 -0
- package/utils/crypto.ts +13 -0
- package/utils/cwd.ts +32 -0
- package/utils/debug.ts +268 -0
- package/utils/debugFilter.ts +157 -0
- package/utils/deepLink/banner.ts +123 -0
- package/utils/deepLink/parseDeepLink.ts +170 -0
- package/utils/deepLink/protocolHandler.ts +136 -0
- package/utils/deepLink/registerProtocol.ts +348 -0
- package/utils/deepLink/terminalLauncher.ts +557 -0
- package/utils/deepLink/terminalPreference.ts +54 -0
- package/utils/desktopDeepLink.ts +236 -0
- package/utils/detectRepository.ts +178 -0
- package/utils/diagLogs.ts +94 -0
- package/utils/diff.ts +177 -0
- package/utils/directMemberMessage.ts +69 -0
- package/utils/displayTags.ts +51 -0
- package/utils/doctorContextWarnings.ts +265 -0
- package/utils/doctorDiagnostic.ts +625 -0
- package/utils/dxt/helpers.ts +88 -0
- package/utils/dxt/zip.ts +226 -0
- package/utils/earlyInput.ts +191 -0
- package/utils/editor.ts +183 -0
- package/utils/effort.ts +329 -0
- package/utils/embeddedTools.ts +29 -0
- package/utils/env.ts +347 -0
- package/utils/envDynamic.ts +151 -0
- package/utils/envUtils.ts +183 -0
- package/utils/envValidation.ts +38 -0
- package/utils/errorLogSink.ts +235 -0
- package/utils/errors.ts +238 -0
- package/utils/exampleCommands.ts +184 -0
- package/utils/execFileNoThrow.ts +150 -0
- package/utils/execFileNoThrowPortable.ts +89 -0
- package/utils/execSyncWrapper.ts +38 -0
- package/utils/exportRenderer.tsx +98 -0
- package/utils/extraUsage.ts +23 -0
- package/utils/fastMode.ts +532 -0
- package/utils/file.ts +584 -0
- package/utils/fileHistory.ts +1115 -0
- package/utils/fileOperationAnalytics.ts +71 -0
- package/utils/filePersistence/filePersistence.ts +287 -0
- package/utils/filePersistence/outputsScanner.ts +126 -0
- package/utils/fileRead.ts +102 -0
- package/utils/fileReadCache.ts +96 -0
- package/utils/fileStateCache.ts +142 -0
- package/utils/findExecutable.ts +17 -0
- package/utils/fingerprint.ts +76 -0
- package/utils/forkedAgent.ts +689 -0
- package/utils/format.ts +308 -0
- package/utils/formatBriefTimestamp.ts +81 -0
- package/utils/fpsTracker.ts +47 -0
- package/utils/frontmatterParser.ts +370 -0
- package/utils/fsOperations.ts +770 -0
- package/utils/fullscreen.ts +202 -0
- package/utils/generatedFiles.ts +136 -0
- package/utils/generators.ts +88 -0
- package/utils/genericProcessUtils.ts +184 -0
- package/utils/getWorktreePaths.ts +70 -0
- package/utils/getWorktreePathsPortable.ts +27 -0
- package/utils/ghPrStatus.ts +106 -0
- package/utils/git/gitConfigParser.ts +277 -0
- package/utils/git/gitFilesystem.ts +699 -0
- package/utils/git/gitignore.ts +99 -0
- package/utils/git.ts +926 -0
- package/utils/gitDiff.ts +532 -0
- package/utils/gitSettings.ts +18 -0
- package/utils/github/ghAuthStatus.ts +29 -0
- package/utils/githubRepoPathMapping.ts +162 -0
- package/utils/glob.ts +130 -0
- package/utils/gracefulShutdown.ts +529 -0
- package/utils/groupToolUses.ts +182 -0
- package/utils/handlePromptSubmit.ts +610 -0
- package/utils/hash.ts +46 -0
- package/utils/headlessProfiler.ts +178 -0
- package/utils/heapDumpService.ts +303 -0
- package/utils/heatmap.ts +198 -0
- package/utils/highlightMatch.tsx +28 -0
- package/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/utils/hooks/execAgentHook.ts +339 -0
- package/utils/hooks/execHttpHook.ts +242 -0
- package/utils/hooks/execPromptHook.ts +211 -0
- package/utils/hooks/fileChangedWatcher.ts +191 -0
- package/utils/hooks/hookEvents.ts +192 -0
- package/utils/hooks/hookHelpers.ts +83 -0
- package/utils/hooks/hooksConfigManager.ts +400 -0
- package/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/utils/hooks/hooksSettings.ts +271 -0
- package/utils/hooks/postSamplingHooks.ts +70 -0
- package/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/utils/hooks/registerSkillHooks.ts +64 -0
- package/utils/hooks/sessionHooks.ts +447 -0
- package/utils/hooks/skillImprovement.ts +267 -0
- package/utils/hooks/ssrfGuard.ts +294 -0
- package/utils/hooks.ts +5022 -0
- package/utils/horizontalScroll.ts +137 -0
- package/utils/http.ts +136 -0
- package/utils/hyperlink.ts +39 -0
- package/utils/iTermBackup.ts +73 -0
- package/utils/ide.ts +1494 -0
- package/utils/idePathConversion.ts +90 -0
- package/utils/idleTimeout.ts +53 -0
- package/utils/imagePaste.ts +416 -0
- package/utils/imageResizer.ts +880 -0
- package/utils/imageStore.ts +167 -0
- package/utils/imageValidation.ts +104 -0
- package/utils/immediateCommand.ts +15 -0
- package/utils/inProcessTeammateHelpers.ts +102 -0
- package/utils/ink.ts +26 -0
- package/utils/intl.ts +94 -0
- package/utils/jetbrains.ts +191 -0
- package/utils/json.ts +277 -0
- package/utils/jsonRead.ts +16 -0
- package/utils/keyboardShortcuts.ts +14 -0
- package/utils/lazySchema.ts +8 -0
- package/utils/listSessionsImpl.ts +454 -0
- package/utils/localInstaller.ts +162 -0
- package/utils/lockfile.ts +43 -0
- package/utils/log.ts +362 -0
- package/utils/logoV2Utils.ts +347 -0
- package/utils/mailbox.ts +73 -0
- package/utils/managedEnv.ts +199 -0
- package/utils/managedEnvConstants.ts +191 -0
- package/utils/markdown.ts +381 -0
- package/utils/markdownConfigLoader.ts +600 -0
- package/utils/mcp/dateTimeParser.ts +121 -0
- package/utils/mcp/elicitationValidation.ts +336 -0
- package/utils/mcpInstructionsDelta.ts +130 -0
- package/utils/mcpOutputStorage.ts +189 -0
- package/utils/mcpValidation.ts +208 -0
- package/utils/mcpWebSocketTransport.ts +200 -0
- package/utils/memoize.ts +269 -0
- package/utils/memory/types.ts +12 -0
- package/utils/memory/versions.ts +8 -0
- package/utils/memoryFileDetection.ts +289 -0
- package/utils/messagePredicates.ts +8 -0
- package/utils/messageQueueManager.ts +547 -0
- package/utils/messages/mappers.ts +290 -0
- package/utils/messages/systemInit.ts +96 -0
- package/utils/messages.ts +5520 -0
- package/utils/model/agent.ts +157 -0
- package/utils/model/aliases.ts +35 -0
- package/utils/model/antModels.ts +64 -0
- package/utils/model/bedrock.ts +265 -0
- package/utils/model/check1mAccess.ts +72 -0
- package/utils/model/configs.ts +158 -0
- package/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/utils/model/deprecation.ts +101 -0
- package/utils/model/model.ts +654 -0
- package/utils/model/modelAllowlist.ts +170 -0
- package/utils/model/modelCapabilities.ts +118 -0
- package/utils/model/modelOptions.ts +589 -0
- package/utils/model/modelStrings.ts +170 -0
- package/utils/model/modelSupportOverrides.ts +50 -0
- package/utils/model/providers.ts +42 -0
- package/utils/model/validateModel.ts +159 -0
- package/utils/modelCost.ts +231 -0
- package/utils/modifiers.ts +36 -0
- package/utils/mtls.ts +179 -0
- package/utils/nativeInstaller/download.ts +523 -0
- package/utils/nativeInstaller/index.ts +18 -0
- package/utils/nativeInstaller/installer.ts +1708 -0
- package/utils/nativeInstaller/packageManagers.ts +336 -0
- package/utils/nativeInstaller/pidLock.ts +433 -0
- package/utils/notebook.ts +224 -0
- package/utils/objectGroupBy.ts +18 -0
- package/utils/pasteStore.ts +104 -0
- package/utils/path.ts +155 -0
- package/utils/pdf.ts +300 -0
- package/utils/pdfUtils.ts +70 -0
- package/utils/peerAddress.ts +21 -0
- package/utils/permissions/PermissionMode.ts +141 -0
- package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/utils/permissions/PermissionResult.ts +35 -0
- package/utils/permissions/PermissionRule.ts +40 -0
- package/utils/permissions/PermissionUpdate.ts +389 -0
- package/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/utils/permissions/autoModeState.ts +39 -0
- package/utils/permissions/bashClassifier.ts +61 -0
- package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/utils/permissions/classifierDecision.ts +98 -0
- package/utils/permissions/classifierShared.ts +39 -0
- package/utils/permissions/dangerousPatterns.ts +80 -0
- package/utils/permissions/denialTracking.ts +45 -0
- package/utils/permissions/filesystem.ts +1777 -0
- package/utils/permissions/getNextPermissionMode.ts +101 -0
- package/utils/permissions/pathValidation.ts +485 -0
- package/utils/permissions/permissionExplainer.ts +250 -0
- package/utils/permissions/permissionRuleParser.ts +198 -0
- package/utils/permissions/permissionSetup.ts +1532 -0
- package/utils/permissions/permissions.ts +1486 -0
- package/utils/permissions/permissionsLoader.ts +296 -0
- package/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/utils/permissions/shellRuleMatching.ts +228 -0
- package/utils/permissions/yoloClassifier.ts +1495 -0
- package/utils/planModeV2.ts +95 -0
- package/utils/plans.ts +397 -0
- package/utils/platform.ts +150 -0
- package/utils/plugins/addDirPluginSettings.ts +71 -0
- package/utils/plugins/cacheUtils.ts +196 -0
- package/utils/plugins/dependencyResolver.ts +305 -0
- package/utils/plugins/fetchTelemetry.ts +135 -0
- package/utils/plugins/gitAvailability.ts +69 -0
- package/utils/plugins/headlessPluginInstall.ts +174 -0
- package/utils/plugins/hintRecommendation.ts +164 -0
- package/utils/plugins/installCounts.ts +292 -0
- package/utils/plugins/installedPluginsManager.ts +1268 -0
- package/utils/plugins/loadPluginAgents.ts +348 -0
- package/utils/plugins/loadPluginCommands.ts +946 -0
- package/utils/plugins/loadPluginHooks.ts +287 -0
- package/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/utils/plugins/lspPluginIntegration.ts +387 -0
- package/utils/plugins/lspRecommendation.ts +374 -0
- package/utils/plugins/managedPlugins.ts +27 -0
- package/utils/plugins/marketplaceHelpers.ts +592 -0
- package/utils/plugins/marketplaceManager.ts +2643 -0
- package/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/utils/plugins/mcpbHandler.ts +968 -0
- package/utils/plugins/officialMarketplace.ts +25 -0
- package/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/utils/plugins/performStartupChecks.tsx +70 -0
- package/utils/plugins/pluginAutoupdate.ts +284 -0
- package/utils/plugins/pluginBlocklist.ts +127 -0
- package/utils/plugins/pluginDirectories.ts +178 -0
- package/utils/plugins/pluginFlagging.ts +208 -0
- package/utils/plugins/pluginIdentifier.ts +123 -0
- package/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/utils/plugins/pluginLoader.ts +3302 -0
- package/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/utils/plugins/pluginPolicy.ts +20 -0
- package/utils/plugins/pluginStartupCheck.ts +341 -0
- package/utils/plugins/pluginVersioning.ts +157 -0
- package/utils/plugins/reconciler.ts +265 -0
- package/utils/plugins/refresh.ts +215 -0
- package/utils/plugins/schemas.ts +1681 -0
- package/utils/plugins/validatePlugin.ts +903 -0
- package/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/utils/plugins/zipCache.ts +406 -0
- package/utils/plugins/zipCacheAdapters.ts +164 -0
- package/utils/powershell/dangerousCmdlets.ts +185 -0
- package/utils/powershell/parser.ts +1804 -0
- package/utils/powershell/staticPrefix.ts +316 -0
- package/utils/preflightChecks.tsx +151 -0
- package/utils/privacyLevel.ts +55 -0
- package/utils/process.ts +68 -0
- package/utils/processUserInput/processBashCommand.tsx +140 -0
- package/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/utils/processUserInput/processTextPrompt.ts +100 -0
- package/utils/processUserInput/processUserInput.ts +605 -0
- package/utils/profilerBase.ts +46 -0
- package/utils/promptCategory.ts +49 -0
- package/utils/promptEditor.ts +188 -0
- package/utils/promptShellExecution.ts +183 -0
- package/utils/proxy.ts +426 -0
- package/utils/queryContext.ts +179 -0
- package/utils/queryHelpers.ts +552 -0
- package/utils/queryProfiler.ts +301 -0
- package/utils/queueProcessor.ts +95 -0
- package/utils/readEditContext.ts +227 -0
- package/utils/readFileInRange.ts +383 -0
- package/utils/releaseNotes.ts +360 -0
- package/utils/renderOptions.ts +113 -0
- package/utils/ripgrep.ts +679 -0
- package/utils/sandbox/sandbox-adapter.ts +985 -0
- package/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/utils/sanitization.ts +91 -0
- package/utils/screenshotClipboard.ts +121 -0
- package/utils/sdkEventQueue.ts +134 -0
- package/utils/secureStorage/fallbackStorage.ts +70 -0
- package/utils/secureStorage/index.ts +17 -0
- package/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/utils/secureStorage/plainTextStorage.ts +84 -0
- package/utils/semanticBoolean.ts +29 -0
- package/utils/semanticNumber.ts +36 -0
- package/utils/semver.ts +59 -0
- package/utils/sequential.ts +56 -0
- package/utils/sessionActivity.ts +133 -0
- package/utils/sessionEnvVars.ts +22 -0
- package/utils/sessionEnvironment.ts +166 -0
- package/utils/sessionFileAccessHooks.ts +250 -0
- package/utils/sessionIngressAuth.ts +140 -0
- package/utils/sessionRestore.ts +551 -0
- package/utils/sessionStart.ts +232 -0
- package/utils/sessionState.ts +150 -0
- package/utils/sessionStorage.ts +5105 -0
- package/utils/sessionStoragePortable.ts +793 -0
- package/utils/sessionTitle.ts +129 -0
- package/utils/sessionUrl.ts +64 -0
- package/utils/set.ts +53 -0
- package/utils/settings/allErrors.ts +32 -0
- package/utils/settings/applySettingsChange.ts +92 -0
- package/utils/settings/changeDetector.ts +488 -0
- package/utils/settings/constants.ts +202 -0
- package/utils/settings/internalWrites.ts +37 -0
- package/utils/settings/managedPath.ts +34 -0
- package/utils/settings/mdm/constants.ts +81 -0
- package/utils/settings/mdm/rawRead.ts +130 -0
- package/utils/settings/mdm/settings.ts +316 -0
- package/utils/settings/permissionValidation.ts +262 -0
- package/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/utils/settings/schemaOutput.ts +8 -0
- package/utils/settings/settings.ts +1015 -0
- package/utils/settings/settingsCache.ts +80 -0
- package/utils/settings/toolValidationConfig.ts +103 -0
- package/utils/settings/types.ts +1149 -0
- package/utils/settings/validateEditTool.ts +45 -0
- package/utils/settings/validation.ts +265 -0
- package/utils/settings/validationTips.ts +164 -0
- package/utils/shell/bashProvider.ts +255 -0
- package/utils/shell/outputLimits.ts +14 -0
- package/utils/shell/powershellDetection.ts +107 -0
- package/utils/shell/powershellProvider.ts +123 -0
- package/utils/shell/prefix.ts +367 -0
- package/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/utils/shell/resolveDefaultShell.ts +14 -0
- package/utils/shell/shellProvider.ts +33 -0
- package/utils/shell/shellToolUtils.ts +22 -0
- package/utils/shell/specPrefix.ts +241 -0
- package/utils/shellConfig.ts +167 -0
- package/utils/sideQuery.ts +222 -0
- package/utils/sideQuestion.ts +155 -0
- package/utils/signal.ts +43 -0
- package/utils/sinks.ts +16 -0
- package/utils/skills/skillChangeDetector.ts +311 -0
- package/utils/slashCommandParsing.ts +60 -0
- package/utils/sleep.ts +84 -0
- package/utils/sliceAnsi.ts +91 -0
- package/utils/slowOperations.ts +286 -0
- package/utils/standaloneAgent.ts +23 -0
- package/utils/startupProfiler.ts +194 -0
- package/utils/staticRender.tsx +116 -0
- package/utils/stats.ts +1061 -0
- package/utils/statsCache.ts +434 -0
- package/utils/status.tsx +362 -0
- package/utils/statusNoticeDefinitions.tsx +198 -0
- package/utils/statusNoticeHelpers.ts +20 -0
- package/utils/stream.ts +76 -0
- package/utils/streamJsonStdoutGuard.ts +123 -0
- package/utils/streamlinedTransform.ts +201 -0
- package/utils/stringUtils.ts +235 -0
- package/utils/subprocessEnv.ts +99 -0
- package/utils/suggestions/commandSuggestions.ts +567 -0
- package/utils/suggestions/directoryCompletion.ts +263 -0
- package/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/utils/suggestions/skillUsageTracking.ts +55 -0
- package/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/utils/swarm/backends/ITermBackend.ts +370 -0
- package/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/utils/swarm/backends/detection.ts +128 -0
- package/utils/swarm/backends/it2Setup.ts +245 -0
- package/utils/swarm/backends/registry.ts +464 -0
- package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/utils/swarm/backends/types.ts +311 -0
- package/utils/swarm/constants.ts +33 -0
- package/utils/swarm/inProcessRunner.ts +1552 -0
- package/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/utils/swarm/permissionSync.ts +928 -0
- package/utils/swarm/reconnection.ts +119 -0
- package/utils/swarm/spawnInProcess.ts +328 -0
- package/utils/swarm/spawnUtils.ts +146 -0
- package/utils/swarm/teamHelpers.ts +683 -0
- package/utils/swarm/teammateInit.ts +129 -0
- package/utils/swarm/teammateLayoutManager.ts +107 -0
- package/utils/swarm/teammateModel.ts +10 -0
- package/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/utils/systemDirectories.ts +74 -0
- package/utils/systemPrompt.ts +123 -0
- package/utils/systemPromptType.ts +14 -0
- package/utils/systemTheme.ts +119 -0
- package/utils/taggedId.ts +54 -0
- package/utils/task/TaskOutput.ts +390 -0
- package/utils/task/diskOutput.ts +451 -0
- package/utils/task/framework.ts +308 -0
- package/utils/task/outputFormatting.ts +38 -0
- package/utils/task/sdkProgress.ts +36 -0
- package/utils/tasks.ts +862 -0
- package/utils/teamDiscovery.ts +81 -0
- package/utils/teamMemoryOps.ts +88 -0
- package/utils/teammate.ts +292 -0
- package/utils/teammateContext.ts +96 -0
- package/utils/teammateMailbox.ts +1183 -0
- package/utils/telemetry/betaSessionTracing.ts +491 -0
- package/utils/telemetry/bigqueryExporter.ts +252 -0
- package/utils/telemetry/events.ts +75 -0
- package/utils/telemetry/instrumentation.ts +825 -0
- package/utils/telemetry/logger.ts +26 -0
- package/utils/telemetry/perfettoTracing.ts +1120 -0
- package/utils/telemetry/pluginTelemetry.ts +289 -0
- package/utils/telemetry/sessionTracing.ts +927 -0
- package/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/utils/telemetryAttributes.ts +71 -0
- package/utils/teleport/api.ts +466 -0
- package/utils/teleport/environmentSelection.ts +77 -0
- package/utils/teleport/environments.ts +120 -0
- package/utils/teleport/gitBundle.ts +292 -0
- package/utils/teleport.tsx +1226 -0
- package/utils/tempfile.ts +31 -0
- package/utils/terminal.ts +131 -0
- package/utils/terminalPanel.ts +191 -0
- package/utils/textHighlighting.ts +166 -0
- package/utils/theme.ts +639 -0
- package/utils/thinking.ts +162 -0
- package/utils/timeouts.ts +39 -0
- package/utils/tmuxSocket.ts +427 -0
- package/utils/todo/types.ts +18 -0
- package/utils/tokenBudget.ts +73 -0
- package/utils/tokens.ts +261 -0
- package/utils/toolErrors.ts +132 -0
- package/utils/toolPool.ts +79 -0
- package/utils/toolResultStorage.ts +1040 -0
- package/utils/toolSchemaCache.ts +26 -0
- package/utils/toolSearch.ts +756 -0
- package/utils/transcriptSearch.ts +202 -0
- package/utils/treeify.ts +170 -0
- package/utils/truncate.ts +179 -0
- package/utils/ultraplan/ccrSession.ts +349 -0
- package/utils/ultraplan/keyword.ts +127 -0
- package/utils/ultraplan/prompt.txt +1 -0
- package/utils/unaryLogging.ts +39 -0
- package/utils/undercover.ts +89 -0
- package/utils/user.ts +194 -0
- package/utils/userAgent.ts +10 -0
- package/utils/userPromptKeywords.ts +27 -0
- package/utils/uuid.ts +27 -0
- package/utils/warningHandler.ts +121 -0
- package/utils/which.ts +82 -0
- package/utils/windowsPaths.ts +173 -0
- package/utils/withResolvers.ts +13 -0
- package/utils/words.ts +800 -0
- package/utils/workloadContext.ts +57 -0
- package/utils/worktree.ts +1519 -0
- package/utils/worktreeModeEnabled.ts +11 -0
- package/utils/xdg.ts +65 -0
- package/utils/xmem.ts +6 -0
- package/utils/xml.ts +16 -0
- package/utils/yaml.ts +15 -0
- package/utils/zodToJsonSchema.ts +23 -0
package/utils/errors.ts
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { APIUserAbortError } from '@anthropic-ai/sdk'
|
|
2
|
+
|
|
3
|
+
export class ClaudeError extends Error {
|
|
4
|
+
constructor(message: string) {
|
|
5
|
+
super(message)
|
|
6
|
+
this.name = this.constructor.name
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class MalformedCommandError extends Error {}
|
|
11
|
+
|
|
12
|
+
export class AbortError extends Error {
|
|
13
|
+
constructor(message?: string) {
|
|
14
|
+
super(message)
|
|
15
|
+
this.name = 'AbortError'
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* True iff `e` is any of the abort-shaped errors the codebase encounters:
|
|
21
|
+
* our AbortError class, a DOMException from AbortController.abort()
|
|
22
|
+
* (.name === 'AbortError'), or the SDK's APIUserAbortError. The SDK class
|
|
23
|
+
* is checked via instanceof because minified builds mangle class names —
|
|
24
|
+
* constructor.name becomes something like 'nJT' and the SDK never sets
|
|
25
|
+
* this.name, so string matching silently fails in production.
|
|
26
|
+
*/
|
|
27
|
+
export function isAbortError(e: unknown): boolean {
|
|
28
|
+
return (
|
|
29
|
+
e instanceof AbortError ||
|
|
30
|
+
e instanceof APIUserAbortError ||
|
|
31
|
+
(e instanceof Error && e.name === 'AbortError')
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Custom error class for configuration file parsing errors
|
|
37
|
+
* Includes the file path and the default configuration that should be used
|
|
38
|
+
*/
|
|
39
|
+
export class ConfigParseError extends Error {
|
|
40
|
+
filePath: string
|
|
41
|
+
defaultConfig: unknown
|
|
42
|
+
|
|
43
|
+
constructor(message: string, filePath: string, defaultConfig: unknown) {
|
|
44
|
+
super(message)
|
|
45
|
+
this.name = 'ConfigParseError'
|
|
46
|
+
this.filePath = filePath
|
|
47
|
+
this.defaultConfig = defaultConfig
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class ShellError extends Error {
|
|
52
|
+
constructor(
|
|
53
|
+
public readonly stdout: string,
|
|
54
|
+
public readonly stderr: string,
|
|
55
|
+
public readonly code: number,
|
|
56
|
+
public readonly interrupted: boolean,
|
|
57
|
+
) {
|
|
58
|
+
super('Shell command failed')
|
|
59
|
+
this.name = 'ShellError'
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class TeleportOperationError extends Error {
|
|
64
|
+
constructor(
|
|
65
|
+
message: string,
|
|
66
|
+
public readonly formattedMessage: string,
|
|
67
|
+
) {
|
|
68
|
+
super(message)
|
|
69
|
+
this.name = 'TeleportOperationError'
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Error with a message that is safe to log to telemetry.
|
|
75
|
+
* Use the long name to confirm you've verified the message contains no
|
|
76
|
+
* sensitive data (file paths, URLs, code snippets).
|
|
77
|
+
*
|
|
78
|
+
* Single-arg: same message for user and telemetry
|
|
79
|
+
* Two-arg: different messages (e.g., full message has file path, telemetry doesn't)
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* // Same message for both
|
|
83
|
+
* throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(
|
|
84
|
+
* 'MCP server "slack" connection timed out'
|
|
85
|
+
* )
|
|
86
|
+
*
|
|
87
|
+
* // Different messages
|
|
88
|
+
* throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(
|
|
89
|
+
* `MCP tool timed out after ${ms}ms`, // Full message for logs/user
|
|
90
|
+
* 'MCP tool timed out' // Telemetry message
|
|
91
|
+
* )
|
|
92
|
+
*/
|
|
93
|
+
export class TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS extends Error {
|
|
94
|
+
readonly telemetryMessage: string
|
|
95
|
+
|
|
96
|
+
constructor(message: string, telemetryMessage?: string) {
|
|
97
|
+
super(message)
|
|
98
|
+
this.name = 'TelemetrySafeError'
|
|
99
|
+
this.telemetryMessage = telemetryMessage ?? message
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function hasExactErrorMessage(error: unknown, message: string): boolean {
|
|
104
|
+
return error instanceof Error && error.message === message
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Normalize an unknown value into an Error.
|
|
109
|
+
* Use at catch-site boundaries when you need an Error instance.
|
|
110
|
+
*/
|
|
111
|
+
export function toError(e: unknown): Error {
|
|
112
|
+
return e instanceof Error ? e : new Error(String(e))
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Extract a string message from an unknown error-like value.
|
|
117
|
+
* Use when you only need the message (e.g., for logging or display).
|
|
118
|
+
*/
|
|
119
|
+
export function errorMessage(e: unknown): string {
|
|
120
|
+
return e instanceof Error ? e.message : String(e)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Extract the errno code (e.g., 'ENOENT', 'EACCES') from a caught error.
|
|
125
|
+
* Returns undefined if the error has no code or is not an ErrnoException.
|
|
126
|
+
* Replaces the `(e as NodeJS.ErrnoException).code` cast pattern.
|
|
127
|
+
*/
|
|
128
|
+
export function getErrnoCode(e: unknown): string | undefined {
|
|
129
|
+
if (e && typeof e === 'object' && 'code' in e && typeof e.code === 'string') {
|
|
130
|
+
return e.code
|
|
131
|
+
}
|
|
132
|
+
return undefined
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* True if the error is ENOENT (file or directory does not exist).
|
|
137
|
+
* Replaces `(e as NodeJS.ErrnoException).code === 'ENOENT'`.
|
|
138
|
+
*/
|
|
139
|
+
export function isENOENT(e: unknown): boolean {
|
|
140
|
+
return getErrnoCode(e) === 'ENOENT'
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Extract the errno path (the filesystem path that triggered the error)
|
|
145
|
+
* from a caught error. Returns undefined if the error has no path.
|
|
146
|
+
* Replaces the `(e as NodeJS.ErrnoException).path` cast pattern.
|
|
147
|
+
*/
|
|
148
|
+
export function getErrnoPath(e: unknown): string | undefined {
|
|
149
|
+
if (e && typeof e === 'object' && 'path' in e && typeof e.path === 'string') {
|
|
150
|
+
return e.path
|
|
151
|
+
}
|
|
152
|
+
return undefined
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Extract error message + top N stack frames from an unknown error.
|
|
157
|
+
* Use when the error flows to the model as a tool_result — full stack
|
|
158
|
+
* traces are ~500-2000 chars of mostly-irrelevant internal frames and
|
|
159
|
+
* waste context tokens. Keep the full stack in debug logs instead.
|
|
160
|
+
*/
|
|
161
|
+
export function shortErrorStack(e: unknown, maxFrames = 5): string {
|
|
162
|
+
if (!(e instanceof Error)) return String(e)
|
|
163
|
+
if (!e.stack) return e.message
|
|
164
|
+
// V8/Bun stack format: "Name: message\n at frame1\n at frame2..."
|
|
165
|
+
// First line is the message; subsequent " at " lines are frames.
|
|
166
|
+
const lines = e.stack.split('\n')
|
|
167
|
+
const header = lines[0] ?? e.message
|
|
168
|
+
const frames = lines.slice(1).filter(l => l.trim().startsWith('at '))
|
|
169
|
+
if (frames.length <= maxFrames) return e.stack
|
|
170
|
+
return [header, ...frames.slice(0, maxFrames)].join('\n')
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* True if the error means the path is missing, inaccessible, or
|
|
175
|
+
* structurally unreachable — use in catch blocks after fs operations to
|
|
176
|
+
* distinguish expected "nothing there / no access" from unexpected errors.
|
|
177
|
+
*
|
|
178
|
+
* Covers:
|
|
179
|
+
* ENOENT — path does not exist
|
|
180
|
+
* EACCES — permission denied
|
|
181
|
+
* EPERM — operation not permitted
|
|
182
|
+
* ENOTDIR — a path component is not a directory (e.g. a file named
|
|
183
|
+
* `.claude` exists where a directory is expected)
|
|
184
|
+
* ELOOP — too many symlink levels (circular symlinks)
|
|
185
|
+
*/
|
|
186
|
+
export function isFsInaccessible(e: unknown): e is NodeJS.ErrnoException {
|
|
187
|
+
const code = getErrnoCode(e)
|
|
188
|
+
return (
|
|
189
|
+
code === 'ENOENT' ||
|
|
190
|
+
code === 'EACCES' ||
|
|
191
|
+
code === 'EPERM' ||
|
|
192
|
+
code === 'ENOTDIR' ||
|
|
193
|
+
code === 'ELOOP'
|
|
194
|
+
)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export type AxiosErrorKind =
|
|
198
|
+
| 'auth' // 401/403 — caller typically sets skipRetry
|
|
199
|
+
| 'timeout' // ECONNABORTED
|
|
200
|
+
| 'network' // ECONNREFUSED/ENOTFOUND
|
|
201
|
+
| 'http' // other axios error (may have status)
|
|
202
|
+
| 'other' // not an axios error
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Classify a caught error from an axios request into one of a few buckets.
|
|
206
|
+
* Replaces the ~20-line isAxiosError → 401/403 → ECONNABORTED → ECONNREFUSED
|
|
207
|
+
* chain duplicated across sync-style services (settingsSync, policyLimits,
|
|
208
|
+
* remoteManagedSettings, teamMemorySync).
|
|
209
|
+
*
|
|
210
|
+
* Checks the `.isAxiosError` marker property directly (same as
|
|
211
|
+
* axios.isAxiosError()) to keep this module dependency-free.
|
|
212
|
+
*/
|
|
213
|
+
export function classifyAxiosError(e: unknown): {
|
|
214
|
+
kind: AxiosErrorKind
|
|
215
|
+
status?: number
|
|
216
|
+
message: string
|
|
217
|
+
} {
|
|
218
|
+
const message = errorMessage(e)
|
|
219
|
+
if (
|
|
220
|
+
!e ||
|
|
221
|
+
typeof e !== 'object' ||
|
|
222
|
+
!('isAxiosError' in e) ||
|
|
223
|
+
!e.isAxiosError
|
|
224
|
+
) {
|
|
225
|
+
return { kind: 'other', message }
|
|
226
|
+
}
|
|
227
|
+
const err = e as {
|
|
228
|
+
response?: { status?: number }
|
|
229
|
+
code?: string
|
|
230
|
+
}
|
|
231
|
+
const status = err.response?.status
|
|
232
|
+
if (status === 401 || status === 403) return { kind: 'auth', status, message }
|
|
233
|
+
if (err.code === 'ECONNABORTED') return { kind: 'timeout', status, message }
|
|
234
|
+
if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
|
|
235
|
+
return { kind: 'network', status, message }
|
|
236
|
+
}
|
|
237
|
+
return { kind: 'http', status, message }
|
|
238
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import memoize from 'lodash-es/memoize.js'
|
|
2
|
+
import sample from 'lodash-es/sample.js'
|
|
3
|
+
import { getCwd } from '../utils/cwd.js'
|
|
4
|
+
import { getCurrentProjectConfig, saveCurrentProjectConfig } from './config.js'
|
|
5
|
+
import { env } from './env.js'
|
|
6
|
+
import { execFileNoThrowWithCwd } from './execFileNoThrow.js'
|
|
7
|
+
import { getIsGit, gitExe } from './git.js'
|
|
8
|
+
import { logError } from './log.js'
|
|
9
|
+
import { getGitEmail } from './user.js'
|
|
10
|
+
|
|
11
|
+
// Patterns that mark a file as non-core (auto-generated, dependency, or config).
|
|
12
|
+
// Used to filter example-command filename suggestions deterministically
|
|
13
|
+
// instead of shelling out to Haiku.
|
|
14
|
+
const NON_CORE_PATTERNS = [
|
|
15
|
+
// lock / dependency manifests
|
|
16
|
+
/(?:^|\/)(?:package-lock\.json|yarn\.lock|bun\.lock|bun\.lockb|pnpm-lock\.yaml|Pipfile\.lock|poetry\.lock|Cargo\.lock|Gemfile\.lock|go\.sum|composer\.lock|uv\.lock)$/,
|
|
17
|
+
// generated / build artifacts
|
|
18
|
+
/\.generated\./,
|
|
19
|
+
/(?:^|\/)(?:dist|build|out|target|node_modules|\.next|__pycache__)\//,
|
|
20
|
+
/\.(?:min\.js|min\.css|map|pyc|pyo)$/,
|
|
21
|
+
// data / docs / config extensions (not "write a test for" material)
|
|
22
|
+
/\.(?:json|ya?ml|toml|xml|ini|cfg|conf|env|lock|txt|md|mdx|rst|csv|log|svg)$/i,
|
|
23
|
+
// configuration / metadata
|
|
24
|
+
/(?:^|\/)\.?(?:eslintrc|prettierrc|babelrc|editorconfig|gitignore|gitattributes|dockerignore|npmrc)/,
|
|
25
|
+
/(?:^|\/)(?:tsconfig|jsconfig|biome|vitest\.config|jest\.config|webpack\.config|vite\.config|rollup\.config)\.[a-z]+$/,
|
|
26
|
+
/(?:^|\/)\.(?:github|vscode|idea|claude)\//,
|
|
27
|
+
// docs / changelogs (not "how does X work" material)
|
|
28
|
+
/(?:^|\/)(?:CHANGELOG|LICENSE|CONTRIBUTING|CODEOWNERS|README)(?:\.[a-z]+)?$/i,
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
function isCoreFile(path: string): boolean {
|
|
32
|
+
return !NON_CORE_PATTERNS.some(p => p.test(path))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Counts occurrences of items in an array and returns the top N items
|
|
37
|
+
* sorted by count in descending order, formatted as a string.
|
|
38
|
+
*/
|
|
39
|
+
export function countAndSortItems(items: string[], topN: number = 20): string {
|
|
40
|
+
const counts = new Map<string, number>()
|
|
41
|
+
for (const item of items) {
|
|
42
|
+
counts.set(item, (counts.get(item) || 0) + 1)
|
|
43
|
+
}
|
|
44
|
+
return Array.from(counts.entries())
|
|
45
|
+
.sort((a, b) => b[1] - a[1])
|
|
46
|
+
.slice(0, topN)
|
|
47
|
+
.map(([item, count]) => `${count.toString().padStart(6)} ${item}`)
|
|
48
|
+
.join('\n')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Picks up to `want` basenames from a frequency-sorted list of paths,
|
|
53
|
+
* skipping non-core files and spreading across different directories.
|
|
54
|
+
* Returns empty array if fewer than `want` core files are available.
|
|
55
|
+
*/
|
|
56
|
+
export function pickDiverseCoreFiles(
|
|
57
|
+
sortedPaths: string[],
|
|
58
|
+
want: number,
|
|
59
|
+
): string[] {
|
|
60
|
+
const picked: string[] = []
|
|
61
|
+
const seenBasenames = new Set<string>()
|
|
62
|
+
const dirTally = new Map<string, number>()
|
|
63
|
+
|
|
64
|
+
// Greedy: on each pass allow +1 file per directory. Keeps the
|
|
65
|
+
// top-5 from collapsing into a single hot folder while still
|
|
66
|
+
// letting a dominant folder contribute multiple files if the
|
|
67
|
+
// repo is narrow.
|
|
68
|
+
for (let cap = 1; picked.length < want && cap <= want; cap++) {
|
|
69
|
+
for (const p of sortedPaths) {
|
|
70
|
+
if (picked.length >= want) break
|
|
71
|
+
if (!isCoreFile(p)) continue
|
|
72
|
+
const lastSep = Math.max(p.lastIndexOf('/'), p.lastIndexOf('\\'))
|
|
73
|
+
const base = lastSep >= 0 ? p.slice(lastSep + 1) : p
|
|
74
|
+
if (!base || seenBasenames.has(base)) continue
|
|
75
|
+
const dir = lastSep >= 0 ? p.slice(0, lastSep) : '.'
|
|
76
|
+
if ((dirTally.get(dir) ?? 0) >= cap) continue
|
|
77
|
+
picked.push(base)
|
|
78
|
+
seenBasenames.add(base)
|
|
79
|
+
dirTally.set(dir, (dirTally.get(dir) ?? 0) + 1)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return picked.length >= want ? picked : []
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function getFrequentlyModifiedFiles(): Promise<string[]> {
|
|
87
|
+
if (process.env.NODE_ENV === 'test') return []
|
|
88
|
+
if (env.platform === 'win32') return []
|
|
89
|
+
if (!(await getIsGit())) return []
|
|
90
|
+
|
|
91
|
+
try {
|
|
92
|
+
// Collect frequently-modified files, preferring the user's own commits.
|
|
93
|
+
const userEmail = await getGitEmail()
|
|
94
|
+
|
|
95
|
+
const logArgs = [
|
|
96
|
+
'log',
|
|
97
|
+
'-n',
|
|
98
|
+
'1000',
|
|
99
|
+
'--pretty=format:',
|
|
100
|
+
'--name-only',
|
|
101
|
+
'--diff-filter=M',
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
const counts = new Map<string, number>()
|
|
105
|
+
const tallyInto = (stdout: string) => {
|
|
106
|
+
for (const line of stdout.split('\n')) {
|
|
107
|
+
const f = line.trim()
|
|
108
|
+
if (f) counts.set(f, (counts.get(f) ?? 0) + 1)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (userEmail) {
|
|
113
|
+
const { stdout } = await execFileNoThrowWithCwd(
|
|
114
|
+
'git',
|
|
115
|
+
[...logArgs, `--author=${userEmail}`],
|
|
116
|
+
{ cwd: getCwd() },
|
|
117
|
+
)
|
|
118
|
+
tallyInto(stdout)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Fall back to all authors if the user's own history is thin.
|
|
122
|
+
if (counts.size < 10) {
|
|
123
|
+
const { stdout } = await execFileNoThrowWithCwd(gitExe(), logArgs, {
|
|
124
|
+
cwd: getCwd(),
|
|
125
|
+
})
|
|
126
|
+
tallyInto(stdout)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const sorted = Array.from(counts.entries())
|
|
130
|
+
.sort((a, b) => b[1] - a[1])
|
|
131
|
+
.map(([p]) => p)
|
|
132
|
+
|
|
133
|
+
return pickDiverseCoreFiles(sorted, 5)
|
|
134
|
+
} catch (err) {
|
|
135
|
+
logError(err as Error)
|
|
136
|
+
return []
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const ONE_WEEK_IN_MS = 7 * 24 * 60 * 60 * 1000
|
|
141
|
+
|
|
142
|
+
export const getExampleCommandFromCache = memoize(() => {
|
|
143
|
+
const projectConfig = getCurrentProjectConfig()
|
|
144
|
+
const frequentFile = projectConfig.exampleFiles?.length
|
|
145
|
+
? sample(projectConfig.exampleFiles)
|
|
146
|
+
: '<filepath>'
|
|
147
|
+
|
|
148
|
+
const commands = [
|
|
149
|
+
'fix lint errors',
|
|
150
|
+
'fix typecheck errors',
|
|
151
|
+
`how does ${frequentFile} work?`,
|
|
152
|
+
`refactor ${frequentFile}`,
|
|
153
|
+
'how do I log an error?',
|
|
154
|
+
`edit ${frequentFile} to...`,
|
|
155
|
+
`write a test for ${frequentFile}`,
|
|
156
|
+
'create a util logging.py that...',
|
|
157
|
+
]
|
|
158
|
+
|
|
159
|
+
return `Try "${sample(commands)}"`
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
export const refreshExampleCommands = memoize(async (): Promise<void> => {
|
|
163
|
+
const projectConfig = getCurrentProjectConfig()
|
|
164
|
+
const now = Date.now()
|
|
165
|
+
const lastGenerated = projectConfig.exampleFilesGeneratedAt ?? 0
|
|
166
|
+
|
|
167
|
+
// Regenerate examples if they're over a week old
|
|
168
|
+
if (now - lastGenerated > ONE_WEEK_IN_MS) {
|
|
169
|
+
projectConfig.exampleFiles = []
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// If no example files cached, kickstart fetch in background
|
|
173
|
+
if (!projectConfig.exampleFiles?.length) {
|
|
174
|
+
void getFrequentlyModifiedFiles().then(files => {
|
|
175
|
+
if (files.length) {
|
|
176
|
+
saveCurrentProjectConfig(current => ({
|
|
177
|
+
...current,
|
|
178
|
+
exampleFiles: files,
|
|
179
|
+
exampleFilesGeneratedAt: Date.now(),
|
|
180
|
+
}))
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
}
|
|
184
|
+
})
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// This file represents useful wrappers over node:child_process
|
|
2
|
+
// These wrappers ease error handling and cross-platform compatbility
|
|
3
|
+
// By using execa, Windows automatically gets shell escaping + BAT / CMD handling
|
|
4
|
+
|
|
5
|
+
import { type ExecaError, execa } from 'execa'
|
|
6
|
+
import { getCwd } from '../utils/cwd.js'
|
|
7
|
+
import { logError } from './log.js'
|
|
8
|
+
|
|
9
|
+
export { execSyncWithDefaults_DEPRECATED } from './execFileNoThrowPortable.js'
|
|
10
|
+
|
|
11
|
+
const MS_IN_SECOND = 1000
|
|
12
|
+
const SECONDS_IN_MINUTE = 60
|
|
13
|
+
|
|
14
|
+
type ExecFileOptions = {
|
|
15
|
+
abortSignal?: AbortSignal
|
|
16
|
+
timeout?: number
|
|
17
|
+
preserveOutputOnError?: boolean
|
|
18
|
+
// Setting useCwd=false avoids circular dependencies during initialization
|
|
19
|
+
// getCwd() -> PersistentShell -> logEvent() -> execFileNoThrow
|
|
20
|
+
useCwd?: boolean
|
|
21
|
+
env?: NodeJS.ProcessEnv
|
|
22
|
+
stdin?: 'ignore' | 'inherit' | 'pipe'
|
|
23
|
+
input?: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function execFileNoThrow(
|
|
27
|
+
file: string,
|
|
28
|
+
args: string[],
|
|
29
|
+
options: ExecFileOptions = {
|
|
30
|
+
timeout: 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
|
|
31
|
+
preserveOutputOnError: true,
|
|
32
|
+
useCwd: true,
|
|
33
|
+
},
|
|
34
|
+
): Promise<{ stdout: string; stderr: string; code: number; error?: string }> {
|
|
35
|
+
return execFileNoThrowWithCwd(file, args, {
|
|
36
|
+
abortSignal: options.abortSignal,
|
|
37
|
+
timeout: options.timeout,
|
|
38
|
+
preserveOutputOnError: options.preserveOutputOnError,
|
|
39
|
+
cwd: options.useCwd ? getCwd() : undefined,
|
|
40
|
+
env: options.env,
|
|
41
|
+
stdin: options.stdin,
|
|
42
|
+
input: options.input,
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type ExecFileWithCwdOptions = {
|
|
47
|
+
abortSignal?: AbortSignal
|
|
48
|
+
timeout?: number
|
|
49
|
+
preserveOutputOnError?: boolean
|
|
50
|
+
maxBuffer?: number
|
|
51
|
+
cwd?: string
|
|
52
|
+
env?: NodeJS.ProcessEnv
|
|
53
|
+
shell?: boolean | string | undefined
|
|
54
|
+
stdin?: 'ignore' | 'inherit' | 'pipe'
|
|
55
|
+
input?: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
type ExecaResultWithError = {
|
|
59
|
+
shortMessage?: string
|
|
60
|
+
signal?: string
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Extracts a human-readable error message from an execa result.
|
|
65
|
+
*
|
|
66
|
+
* Priority order:
|
|
67
|
+
* 1. shortMessage - execa's human-readable error (e.g., "Command failed with exit code 1: ...")
|
|
68
|
+
* This is preferred because it already includes signal info when a process is killed,
|
|
69
|
+
* making it more informative than just the signal name.
|
|
70
|
+
* 2. signal - the signal that killed the process (e.g., "SIGTERM")
|
|
71
|
+
* 3. errorCode - fallback to just the numeric exit code
|
|
72
|
+
*/
|
|
73
|
+
function getErrorMessage(
|
|
74
|
+
result: ExecaResultWithError,
|
|
75
|
+
errorCode: number,
|
|
76
|
+
): string {
|
|
77
|
+
if (result.shortMessage) {
|
|
78
|
+
return result.shortMessage
|
|
79
|
+
}
|
|
80
|
+
if (typeof result.signal === 'string') {
|
|
81
|
+
return result.signal
|
|
82
|
+
}
|
|
83
|
+
return String(errorCode)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* execFile, but always resolves (never throws)
|
|
88
|
+
*/
|
|
89
|
+
export function execFileNoThrowWithCwd(
|
|
90
|
+
file: string,
|
|
91
|
+
args: string[],
|
|
92
|
+
{
|
|
93
|
+
abortSignal,
|
|
94
|
+
timeout: finalTimeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
|
|
95
|
+
preserveOutputOnError: finalPreserveOutput = true,
|
|
96
|
+
cwd: finalCwd,
|
|
97
|
+
env: finalEnv,
|
|
98
|
+
maxBuffer,
|
|
99
|
+
shell,
|
|
100
|
+
stdin: finalStdin,
|
|
101
|
+
input: finalInput,
|
|
102
|
+
}: ExecFileWithCwdOptions = {
|
|
103
|
+
timeout: 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
|
|
104
|
+
preserveOutputOnError: true,
|
|
105
|
+
maxBuffer: 1_000_000,
|
|
106
|
+
},
|
|
107
|
+
): Promise<{ stdout: string; stderr: string; code: number; error?: string }> {
|
|
108
|
+
return new Promise(resolve => {
|
|
109
|
+
// Use execa for cross-platform .bat/.cmd compatibility on Windows
|
|
110
|
+
execa(file, args, {
|
|
111
|
+
maxBuffer,
|
|
112
|
+
signal: abortSignal,
|
|
113
|
+
timeout: finalTimeout,
|
|
114
|
+
cwd: finalCwd,
|
|
115
|
+
env: finalEnv,
|
|
116
|
+
shell,
|
|
117
|
+
stdin: finalStdin,
|
|
118
|
+
input: finalInput,
|
|
119
|
+
reject: false, // Don't throw on non-zero exit codes
|
|
120
|
+
})
|
|
121
|
+
.then(result => {
|
|
122
|
+
if (result.failed) {
|
|
123
|
+
if (finalPreserveOutput) {
|
|
124
|
+
const errorCode = result.exitCode ?? 1
|
|
125
|
+
void resolve({
|
|
126
|
+
stdout: result.stdout || '',
|
|
127
|
+
stderr: result.stderr || '',
|
|
128
|
+
code: errorCode,
|
|
129
|
+
error: getErrorMessage(
|
|
130
|
+
result as unknown as ExecaResultWithError,
|
|
131
|
+
errorCode,
|
|
132
|
+
),
|
|
133
|
+
})
|
|
134
|
+
} else {
|
|
135
|
+
void resolve({ stdout: '', stderr: '', code: result.exitCode ?? 1 })
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
void resolve({
|
|
139
|
+
stdout: result.stdout,
|
|
140
|
+
stderr: result.stderr,
|
|
141
|
+
code: 0,
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
})
|
|
145
|
+
.catch((error: ExecaError) => {
|
|
146
|
+
logError(error)
|
|
147
|
+
void resolve({ stdout: '', stderr: '', code: 1 })
|
|
148
|
+
})
|
|
149
|
+
})
|
|
150
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type Options as ExecaOptions, execaSync } from 'execa'
|
|
2
|
+
import { getCwd } from '../utils/cwd.js'
|
|
3
|
+
import { slowLogging } from './slowOperations.js'
|
|
4
|
+
|
|
5
|
+
const MS_IN_SECOND = 1000
|
|
6
|
+
const SECONDS_IN_MINUTE = 60
|
|
7
|
+
|
|
8
|
+
type ExecSyncOptions = {
|
|
9
|
+
abortSignal?: AbortSignal
|
|
10
|
+
timeout?: number
|
|
11
|
+
input?: string
|
|
12
|
+
stdio?: ExecaOptions['stdio']
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
|
|
17
|
+
* Sync exec calls block the event loop and cause performance issues.
|
|
18
|
+
*/
|
|
19
|
+
export function execSyncWithDefaults_DEPRECATED(command: string): string | null
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
|
|
22
|
+
* Sync exec calls block the event loop and cause performance issues.
|
|
23
|
+
*/
|
|
24
|
+
export function execSyncWithDefaults_DEPRECATED(
|
|
25
|
+
command: string,
|
|
26
|
+
options: ExecSyncOptions,
|
|
27
|
+
): string | null
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
|
|
30
|
+
* Sync exec calls block the event loop and cause performance issues.
|
|
31
|
+
*/
|
|
32
|
+
export function execSyncWithDefaults_DEPRECATED(
|
|
33
|
+
command: string,
|
|
34
|
+
abortSignal: AbortSignal,
|
|
35
|
+
timeout?: number,
|
|
36
|
+
): string | null
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
|
|
39
|
+
* Sync exec calls block the event loop and cause performance issues.
|
|
40
|
+
*/
|
|
41
|
+
export function execSyncWithDefaults_DEPRECATED(
|
|
42
|
+
command: string,
|
|
43
|
+
optionsOrAbortSignal?: ExecSyncOptions | AbortSignal,
|
|
44
|
+
timeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
|
|
45
|
+
): string | null {
|
|
46
|
+
let options: ExecSyncOptions
|
|
47
|
+
|
|
48
|
+
if (optionsOrAbortSignal === undefined) {
|
|
49
|
+
// No second argument - use defaults
|
|
50
|
+
options = {}
|
|
51
|
+
} else if (optionsOrAbortSignal instanceof AbortSignal) {
|
|
52
|
+
// Old signature - second argument is AbortSignal
|
|
53
|
+
options = {
|
|
54
|
+
abortSignal: optionsOrAbortSignal,
|
|
55
|
+
timeout,
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
// New signature - second argument is options object
|
|
59
|
+
options = optionsOrAbortSignal
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const {
|
|
63
|
+
abortSignal,
|
|
64
|
+
timeout: finalTimeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
|
|
65
|
+
input,
|
|
66
|
+
stdio = ['ignore', 'pipe', 'pipe'],
|
|
67
|
+
} = options
|
|
68
|
+
|
|
69
|
+
abortSignal?.throwIfAborted()
|
|
70
|
+
using _ = slowLogging`exec: ${command.slice(0, 200)}`
|
|
71
|
+
try {
|
|
72
|
+
const result = execaSync(command, {
|
|
73
|
+
env: process.env,
|
|
74
|
+
maxBuffer: 1_000_000,
|
|
75
|
+
timeout: finalTimeout,
|
|
76
|
+
cwd: getCwd(),
|
|
77
|
+
stdio,
|
|
78
|
+
shell: true, // execSync typically runs shell commands
|
|
79
|
+
reject: false, // Don't throw on non-zero exit codes
|
|
80
|
+
input,
|
|
81
|
+
})
|
|
82
|
+
if (!result.stdout) {
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
return result.stdout.trim() || null
|
|
86
|
+
} catch {
|
|
87
|
+
return null
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ExecSyncOptions,
|
|
3
|
+
type ExecSyncOptionsWithBufferEncoding,
|
|
4
|
+
type ExecSyncOptionsWithStringEncoding,
|
|
5
|
+
execSync as nodeExecSync,
|
|
6
|
+
} from 'child_process'
|
|
7
|
+
import { slowLogging } from './slowOperations.js'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated Use async alternatives when possible. Sync exec calls block the event loop.
|
|
11
|
+
*
|
|
12
|
+
* Wrapped execSync with slow operation logging.
|
|
13
|
+
* Use this instead of child_process execSync directly to detect performance issues.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* import { execSync_DEPRECATED } from './execSyncWrapper.js'
|
|
17
|
+
* const result = execSync_DEPRECATED('git status', { encoding: 'utf8' })
|
|
18
|
+
*/
|
|
19
|
+
export function execSync_DEPRECATED(command: string): Buffer
|
|
20
|
+
export function execSync_DEPRECATED(
|
|
21
|
+
command: string,
|
|
22
|
+
options: ExecSyncOptionsWithStringEncoding,
|
|
23
|
+
): string
|
|
24
|
+
export function execSync_DEPRECATED(
|
|
25
|
+
command: string,
|
|
26
|
+
options: ExecSyncOptionsWithBufferEncoding,
|
|
27
|
+
): Buffer
|
|
28
|
+
export function execSync_DEPRECATED(
|
|
29
|
+
command: string,
|
|
30
|
+
options?: ExecSyncOptions,
|
|
31
|
+
): Buffer | string
|
|
32
|
+
export function execSync_DEPRECATED(
|
|
33
|
+
command: string,
|
|
34
|
+
options?: ExecSyncOptions,
|
|
35
|
+
): Buffer | string {
|
|
36
|
+
using _ = slowLogging`execSync: ${command.slice(0, 100)}`
|
|
37
|
+
return nodeExecSync(command, options)
|
|
38
|
+
}
|