@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/cleanup.ts
ADDED
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
import * as fs from 'fs/promises'
|
|
2
|
+
import { homedir } from 'os'
|
|
3
|
+
import { join } from 'path'
|
|
4
|
+
import { logEvent } from '../services/analytics/index.js'
|
|
5
|
+
import { CACHE_PATHS } from './cachePaths.js'
|
|
6
|
+
import { logForDebugging } from './debug.js'
|
|
7
|
+
import { getClaudeConfigHomeDir } from './envUtils.js'
|
|
8
|
+
import { type FsOperations, getFsImplementation } from './fsOperations.js'
|
|
9
|
+
import { cleanupOldImageCaches } from './imageStore.js'
|
|
10
|
+
import * as lockfile from './lockfile.js'
|
|
11
|
+
import { logError } from './log.js'
|
|
12
|
+
import { cleanupOldVersions } from './nativeInstaller/index.js'
|
|
13
|
+
import { cleanupOldPastes } from './pasteStore.js'
|
|
14
|
+
import { getProjectsDir } from './sessionStorage.js'
|
|
15
|
+
import { getSettingsWithAllErrors } from './settings/allErrors.js'
|
|
16
|
+
import {
|
|
17
|
+
getSettings_DEPRECATED,
|
|
18
|
+
rawSettingsContainsKey,
|
|
19
|
+
} from './settings/settings.js'
|
|
20
|
+
import { TOOL_RESULTS_SUBDIR } from './toolResultStorage.js'
|
|
21
|
+
import { cleanupStaleAgentWorktrees } from './worktree.js'
|
|
22
|
+
|
|
23
|
+
const DEFAULT_CLEANUP_PERIOD_DAYS = 30
|
|
24
|
+
|
|
25
|
+
function getCutoffDate(): Date {
|
|
26
|
+
const settings = getSettings_DEPRECATED() || {}
|
|
27
|
+
const cleanupPeriodDays =
|
|
28
|
+
settings.cleanupPeriodDays ?? DEFAULT_CLEANUP_PERIOD_DAYS
|
|
29
|
+
const cleanupPeriodMs = cleanupPeriodDays * 24 * 60 * 60 * 1000
|
|
30
|
+
return new Date(Date.now() - cleanupPeriodMs)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type CleanupResult = {
|
|
34
|
+
messages: number
|
|
35
|
+
errors: number
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function addCleanupResults(
|
|
39
|
+
a: CleanupResult,
|
|
40
|
+
b: CleanupResult,
|
|
41
|
+
): CleanupResult {
|
|
42
|
+
return {
|
|
43
|
+
messages: a.messages + b.messages,
|
|
44
|
+
errors: a.errors + b.errors,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function convertFileNameToDate(filename: string): Date {
|
|
49
|
+
const isoStr = filename
|
|
50
|
+
.split('.')[0]!
|
|
51
|
+
.replace(/T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z/, 'T$1:$2:$3.$4Z')
|
|
52
|
+
return new Date(isoStr)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function cleanupOldFilesInDirectory(
|
|
56
|
+
dirPath: string,
|
|
57
|
+
cutoffDate: Date,
|
|
58
|
+
isMessagePath: boolean,
|
|
59
|
+
): Promise<CleanupResult> {
|
|
60
|
+
const result: CleanupResult = { messages: 0, errors: 0 }
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
const files = await getFsImplementation().readdir(dirPath)
|
|
64
|
+
|
|
65
|
+
for (const file of files) {
|
|
66
|
+
try {
|
|
67
|
+
// Convert filename format where all ':.' were replaced with '-'
|
|
68
|
+
const timestamp = convertFileNameToDate(file.name)
|
|
69
|
+
if (timestamp < cutoffDate) {
|
|
70
|
+
await getFsImplementation().unlink(join(dirPath, file.name))
|
|
71
|
+
// Increment the appropriate counter
|
|
72
|
+
if (isMessagePath) {
|
|
73
|
+
result.messages++
|
|
74
|
+
} else {
|
|
75
|
+
result.errors++
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
} catch (error) {
|
|
79
|
+
// Log but continue processing other files
|
|
80
|
+
logError(error as Error)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch (error: unknown) {
|
|
84
|
+
// Ignore if directory doesn't exist
|
|
85
|
+
if (error instanceof Error && 'code' in error && error.code !== 'ENOENT') {
|
|
86
|
+
logError(error)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return result
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export async function cleanupOldMessageFiles(): Promise<CleanupResult> {
|
|
94
|
+
const fsImpl = getFsImplementation()
|
|
95
|
+
const cutoffDate = getCutoffDate()
|
|
96
|
+
const errorPath = CACHE_PATHS.errors()
|
|
97
|
+
const baseCachePath = CACHE_PATHS.baseLogs()
|
|
98
|
+
|
|
99
|
+
// Clean up message and error logs
|
|
100
|
+
let result = await cleanupOldFilesInDirectory(errorPath, cutoffDate, false)
|
|
101
|
+
|
|
102
|
+
// Clean up MCP logs
|
|
103
|
+
try {
|
|
104
|
+
let dirents
|
|
105
|
+
try {
|
|
106
|
+
dirents = await fsImpl.readdir(baseCachePath)
|
|
107
|
+
} catch {
|
|
108
|
+
return result
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const mcpLogDirs = dirents
|
|
112
|
+
.filter(
|
|
113
|
+
dirent => dirent.isDirectory() && dirent.name.startsWith('mcp-logs-'),
|
|
114
|
+
)
|
|
115
|
+
.map(dirent => join(baseCachePath, dirent.name))
|
|
116
|
+
|
|
117
|
+
for (const mcpLogDir of mcpLogDirs) {
|
|
118
|
+
// Clean up files in MCP log directory
|
|
119
|
+
result = addCleanupResults(
|
|
120
|
+
result,
|
|
121
|
+
await cleanupOldFilesInDirectory(mcpLogDir, cutoffDate, true),
|
|
122
|
+
)
|
|
123
|
+
await tryRmdir(mcpLogDir, fsImpl)
|
|
124
|
+
}
|
|
125
|
+
} catch (error: unknown) {
|
|
126
|
+
if (error instanceof Error && 'code' in error && error.code !== 'ENOENT') {
|
|
127
|
+
logError(error)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return result
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function unlinkIfOld(
|
|
135
|
+
filePath: string,
|
|
136
|
+
cutoffDate: Date,
|
|
137
|
+
fsImpl: FsOperations,
|
|
138
|
+
): Promise<boolean> {
|
|
139
|
+
const stats = await fsImpl.stat(filePath)
|
|
140
|
+
if (stats.mtime < cutoffDate) {
|
|
141
|
+
await fsImpl.unlink(filePath)
|
|
142
|
+
return true
|
|
143
|
+
}
|
|
144
|
+
return false
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async function tryRmdir(dirPath: string, fsImpl: FsOperations): Promise<void> {
|
|
148
|
+
try {
|
|
149
|
+
await fsImpl.rmdir(dirPath)
|
|
150
|
+
} catch {
|
|
151
|
+
// not empty / doesn't exist
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export async function cleanupOldSessionFiles(): Promise<CleanupResult> {
|
|
156
|
+
const cutoffDate = getCutoffDate()
|
|
157
|
+
const result: CleanupResult = { messages: 0, errors: 0 }
|
|
158
|
+
const projectsDir = getProjectsDir()
|
|
159
|
+
const fsImpl = getFsImplementation()
|
|
160
|
+
|
|
161
|
+
let projectDirents
|
|
162
|
+
try {
|
|
163
|
+
projectDirents = await fsImpl.readdir(projectsDir)
|
|
164
|
+
} catch {
|
|
165
|
+
return result
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
for (const projectDirent of projectDirents) {
|
|
169
|
+
if (!projectDirent.isDirectory()) continue
|
|
170
|
+
const projectDir = join(projectsDir, projectDirent.name)
|
|
171
|
+
|
|
172
|
+
// Single readdir per project directory — partition into files and session dirs
|
|
173
|
+
let entries
|
|
174
|
+
try {
|
|
175
|
+
entries = await fsImpl.readdir(projectDir)
|
|
176
|
+
} catch {
|
|
177
|
+
result.errors++
|
|
178
|
+
continue
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
for (const entry of entries) {
|
|
182
|
+
if (entry.isFile()) {
|
|
183
|
+
if (!entry.name.endsWith('.jsonl') && !entry.name.endsWith('.cast')) {
|
|
184
|
+
continue
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
if (
|
|
188
|
+
await unlinkIfOld(join(projectDir, entry.name), cutoffDate, fsImpl)
|
|
189
|
+
) {
|
|
190
|
+
result.messages++
|
|
191
|
+
}
|
|
192
|
+
} catch {
|
|
193
|
+
result.errors++
|
|
194
|
+
}
|
|
195
|
+
} else if (entry.isDirectory()) {
|
|
196
|
+
// Session directory — clean up tool-results/<toolDir>/* beneath it
|
|
197
|
+
const sessionDir = join(projectDir, entry.name)
|
|
198
|
+
const toolResultsDir = join(sessionDir, TOOL_RESULTS_SUBDIR)
|
|
199
|
+
let toolDirs
|
|
200
|
+
try {
|
|
201
|
+
toolDirs = await fsImpl.readdir(toolResultsDir)
|
|
202
|
+
} catch {
|
|
203
|
+
// No tool-results dir — still try to remove an empty session dir
|
|
204
|
+
await tryRmdir(sessionDir, fsImpl)
|
|
205
|
+
continue
|
|
206
|
+
}
|
|
207
|
+
for (const toolEntry of toolDirs) {
|
|
208
|
+
if (toolEntry.isFile()) {
|
|
209
|
+
try {
|
|
210
|
+
if (
|
|
211
|
+
await unlinkIfOld(
|
|
212
|
+
join(toolResultsDir, toolEntry.name),
|
|
213
|
+
cutoffDate,
|
|
214
|
+
fsImpl,
|
|
215
|
+
)
|
|
216
|
+
) {
|
|
217
|
+
result.messages++
|
|
218
|
+
}
|
|
219
|
+
} catch {
|
|
220
|
+
result.errors++
|
|
221
|
+
}
|
|
222
|
+
} else if (toolEntry.isDirectory()) {
|
|
223
|
+
const toolDirPath = join(toolResultsDir, toolEntry.name)
|
|
224
|
+
let toolFiles
|
|
225
|
+
try {
|
|
226
|
+
toolFiles = await fsImpl.readdir(toolDirPath)
|
|
227
|
+
} catch {
|
|
228
|
+
continue
|
|
229
|
+
}
|
|
230
|
+
for (const tf of toolFiles) {
|
|
231
|
+
if (!tf.isFile()) continue
|
|
232
|
+
try {
|
|
233
|
+
if (
|
|
234
|
+
await unlinkIfOld(
|
|
235
|
+
join(toolDirPath, tf.name),
|
|
236
|
+
cutoffDate,
|
|
237
|
+
fsImpl,
|
|
238
|
+
)
|
|
239
|
+
) {
|
|
240
|
+
result.messages++
|
|
241
|
+
}
|
|
242
|
+
} catch {
|
|
243
|
+
result.errors++
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
await tryRmdir(toolDirPath, fsImpl)
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
await tryRmdir(toolResultsDir, fsImpl)
|
|
250
|
+
await tryRmdir(sessionDir, fsImpl)
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
await tryRmdir(projectDir, fsImpl)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return result
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Generic helper for cleaning up old files in a single directory
|
|
262
|
+
* @param dirPath Path to the directory to clean
|
|
263
|
+
* @param extension File extension to filter (e.g., '.md', '.jsonl')
|
|
264
|
+
* @param removeEmptyDir Whether to remove the directory if empty after cleanup
|
|
265
|
+
*/
|
|
266
|
+
async function cleanupSingleDirectory(
|
|
267
|
+
dirPath: string,
|
|
268
|
+
extension: string,
|
|
269
|
+
removeEmptyDir: boolean = true,
|
|
270
|
+
): Promise<CleanupResult> {
|
|
271
|
+
const cutoffDate = getCutoffDate()
|
|
272
|
+
const result: CleanupResult = { messages: 0, errors: 0 }
|
|
273
|
+
const fsImpl = getFsImplementation()
|
|
274
|
+
|
|
275
|
+
let dirents
|
|
276
|
+
try {
|
|
277
|
+
dirents = await fsImpl.readdir(dirPath)
|
|
278
|
+
} catch {
|
|
279
|
+
return result
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
for (const dirent of dirents) {
|
|
283
|
+
if (!dirent.isFile() || !dirent.name.endsWith(extension)) continue
|
|
284
|
+
try {
|
|
285
|
+
if (await unlinkIfOld(join(dirPath, dirent.name), cutoffDate, fsImpl)) {
|
|
286
|
+
result.messages++
|
|
287
|
+
}
|
|
288
|
+
} catch {
|
|
289
|
+
result.errors++
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (removeEmptyDir) {
|
|
294
|
+
await tryRmdir(dirPath, fsImpl)
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return result
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export function cleanupOldPlanFiles(): Promise<CleanupResult> {
|
|
301
|
+
const plansDir = join(getClaudeConfigHomeDir(), 'plans')
|
|
302
|
+
return cleanupSingleDirectory(plansDir, '.md')
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export async function cleanupOldFileHistoryBackups(): Promise<CleanupResult> {
|
|
306
|
+
const cutoffDate = getCutoffDate()
|
|
307
|
+
const result: CleanupResult = { messages: 0, errors: 0 }
|
|
308
|
+
const fsImpl = getFsImplementation()
|
|
309
|
+
|
|
310
|
+
try {
|
|
311
|
+
const configDir = getClaudeConfigHomeDir()
|
|
312
|
+
const fileHistoryStorageDir = join(configDir, 'file-history')
|
|
313
|
+
|
|
314
|
+
let dirents
|
|
315
|
+
try {
|
|
316
|
+
dirents = await fsImpl.readdir(fileHistoryStorageDir)
|
|
317
|
+
} catch {
|
|
318
|
+
return result
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const fileHistorySessionsDirs = dirents
|
|
322
|
+
.filter(dirent => dirent.isDirectory())
|
|
323
|
+
.map(dirent => join(fileHistoryStorageDir, dirent.name))
|
|
324
|
+
|
|
325
|
+
await Promise.all(
|
|
326
|
+
fileHistorySessionsDirs.map(async fileHistorySessionDir => {
|
|
327
|
+
try {
|
|
328
|
+
const stats = await fsImpl.stat(fileHistorySessionDir)
|
|
329
|
+
if (stats.mtime < cutoffDate) {
|
|
330
|
+
await fsImpl.rm(fileHistorySessionDir, {
|
|
331
|
+
recursive: true,
|
|
332
|
+
force: true,
|
|
333
|
+
})
|
|
334
|
+
result.messages++
|
|
335
|
+
}
|
|
336
|
+
} catch {
|
|
337
|
+
result.errors++
|
|
338
|
+
}
|
|
339
|
+
}),
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
await tryRmdir(fileHistoryStorageDir, fsImpl)
|
|
343
|
+
} catch (error) {
|
|
344
|
+
logError(error as Error)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return result
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export async function cleanupOldSessionEnvDirs(): Promise<CleanupResult> {
|
|
351
|
+
const cutoffDate = getCutoffDate()
|
|
352
|
+
const result: CleanupResult = { messages: 0, errors: 0 }
|
|
353
|
+
const fsImpl = getFsImplementation()
|
|
354
|
+
|
|
355
|
+
try {
|
|
356
|
+
const configDir = getClaudeConfigHomeDir()
|
|
357
|
+
const sessionEnvBaseDir = join(configDir, 'session-env')
|
|
358
|
+
|
|
359
|
+
let dirents
|
|
360
|
+
try {
|
|
361
|
+
dirents = await fsImpl.readdir(sessionEnvBaseDir)
|
|
362
|
+
} catch {
|
|
363
|
+
return result
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const sessionEnvDirs = dirents
|
|
367
|
+
.filter(dirent => dirent.isDirectory())
|
|
368
|
+
.map(dirent => join(sessionEnvBaseDir, dirent.name))
|
|
369
|
+
|
|
370
|
+
for (const sessionEnvDir of sessionEnvDirs) {
|
|
371
|
+
try {
|
|
372
|
+
const stats = await fsImpl.stat(sessionEnvDir)
|
|
373
|
+
if (stats.mtime < cutoffDate) {
|
|
374
|
+
await fsImpl.rm(sessionEnvDir, { recursive: true, force: true })
|
|
375
|
+
result.messages++
|
|
376
|
+
}
|
|
377
|
+
} catch {
|
|
378
|
+
result.errors++
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
await tryRmdir(sessionEnvBaseDir, fsImpl)
|
|
383
|
+
} catch (error) {
|
|
384
|
+
logError(error as Error)
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return result
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Cleans up old debug log files from ~/.claude/debug/
|
|
392
|
+
* Preserves the 'latest' symlink which points to the current session's log.
|
|
393
|
+
* Debug logs can grow very large (especially with the infinite logging loop bug)
|
|
394
|
+
* and accumulate indefinitely without this cleanup.
|
|
395
|
+
*/
|
|
396
|
+
export async function cleanupOldDebugLogs(): Promise<CleanupResult> {
|
|
397
|
+
const cutoffDate = getCutoffDate()
|
|
398
|
+
const result: CleanupResult = { messages: 0, errors: 0 }
|
|
399
|
+
const fsImpl = getFsImplementation()
|
|
400
|
+
const debugDir = join(getClaudeConfigHomeDir(), 'debug')
|
|
401
|
+
|
|
402
|
+
let dirents
|
|
403
|
+
try {
|
|
404
|
+
dirents = await fsImpl.readdir(debugDir)
|
|
405
|
+
} catch {
|
|
406
|
+
return result
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
for (const dirent of dirents) {
|
|
410
|
+
// Preserve the 'latest' symlink
|
|
411
|
+
if (
|
|
412
|
+
!dirent.isFile() ||
|
|
413
|
+
!dirent.name.endsWith('.txt') ||
|
|
414
|
+
dirent.name === 'latest'
|
|
415
|
+
) {
|
|
416
|
+
continue
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
if (await unlinkIfOld(join(debugDir, dirent.name), cutoffDate, fsImpl)) {
|
|
420
|
+
result.messages++
|
|
421
|
+
}
|
|
422
|
+
} catch {
|
|
423
|
+
result.errors++
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Intentionally do NOT remove debugDir even if empty — needed for future logs
|
|
428
|
+
return result
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
const ONE_DAY_MS = 24 * 60 * 60 * 1000
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Clean up old npm cache entries for Anthropic packages.
|
|
435
|
+
* This helps reduce disk usage since we publish many dev versions per day.
|
|
436
|
+
* Only runs once per day for Ant users.
|
|
437
|
+
*/
|
|
438
|
+
export async function cleanupNpmCacheForAnthropicPackages(): Promise<void> {
|
|
439
|
+
const markerPath = join(getClaudeConfigHomeDir(), '.npm-cache-cleanup')
|
|
440
|
+
|
|
441
|
+
try {
|
|
442
|
+
const stat = await fs.stat(markerPath)
|
|
443
|
+
if (Date.now() - stat.mtimeMs < ONE_DAY_MS) {
|
|
444
|
+
logForDebugging('npm cache cleanup: skipping, ran recently')
|
|
445
|
+
return
|
|
446
|
+
}
|
|
447
|
+
} catch {
|
|
448
|
+
// File doesn't exist, proceed with cleanup
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
try {
|
|
452
|
+
await lockfile.lock(markerPath, { retries: 0, realpath: false })
|
|
453
|
+
} catch {
|
|
454
|
+
logForDebugging('npm cache cleanup: skipping, lock held')
|
|
455
|
+
return
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
logForDebugging('npm cache cleanup: starting')
|
|
459
|
+
|
|
460
|
+
const npmCachePath = join(homedir(), '.npm', '_cacache')
|
|
461
|
+
|
|
462
|
+
const NPM_CACHE_RETENTION_COUNT = 5
|
|
463
|
+
|
|
464
|
+
const startTime = Date.now()
|
|
465
|
+
try {
|
|
466
|
+
const cacache = await import('cacache')
|
|
467
|
+
const cutoff = startTime - ONE_DAY_MS
|
|
468
|
+
|
|
469
|
+
// Stream index entries and collect all Anthropic package entries.
|
|
470
|
+
// Previous implementation used cacache.verify() which does a full
|
|
471
|
+
// integrity check + GC of the ENTIRE cache — O(all content blobs).
|
|
472
|
+
// On large caches this took 60+ seconds and blocked the event loop.
|
|
473
|
+
const stream = cacache.ls.stream(npmCachePath)
|
|
474
|
+
const anthropicEntries: { key: string; time: number }[] = []
|
|
475
|
+
for await (const entry of stream as AsyncIterable<{
|
|
476
|
+
key: string
|
|
477
|
+
time: number
|
|
478
|
+
}>) {
|
|
479
|
+
if (entry.key.includes('@anthropic-ai/claude-')) {
|
|
480
|
+
anthropicEntries.push({ key: entry.key, time: entry.time })
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Group by package name (everything before the last @version separator)
|
|
485
|
+
const byPackage = new Map<string, { key: string; time: number }[]>()
|
|
486
|
+
for (const entry of anthropicEntries) {
|
|
487
|
+
const atVersionIdx = entry.key.lastIndexOf('@')
|
|
488
|
+
const pkgName =
|
|
489
|
+
atVersionIdx > 0 ? entry.key.slice(0, atVersionIdx) : entry.key
|
|
490
|
+
const existing = byPackage.get(pkgName) ?? []
|
|
491
|
+
existing.push(entry)
|
|
492
|
+
byPackage.set(pkgName, existing)
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// Remove entries older than 1 day OR beyond the top N most recent per package
|
|
496
|
+
const keysToRemove: string[] = []
|
|
497
|
+
for (const [, entries] of byPackage) {
|
|
498
|
+
entries.sort((a, b) => b.time - a.time) // newest first
|
|
499
|
+
for (let i = 0; i < entries.length; i++) {
|
|
500
|
+
const entry = entries[i]!
|
|
501
|
+
if (entry.time < cutoff || i >= NPM_CACHE_RETENTION_COUNT) {
|
|
502
|
+
keysToRemove.push(entry.key)
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
await Promise.all(
|
|
508
|
+
keysToRemove.map(key => cacache.rm.entry(npmCachePath, key)),
|
|
509
|
+
)
|
|
510
|
+
|
|
511
|
+
await fs.writeFile(markerPath, new Date().toISOString())
|
|
512
|
+
|
|
513
|
+
const durationMs = Date.now() - startTime
|
|
514
|
+
if (keysToRemove.length > 0) {
|
|
515
|
+
logForDebugging(
|
|
516
|
+
`npm cache cleanup: Removed ${keysToRemove.length} old @anthropic-ai entries in ${durationMs}ms`,
|
|
517
|
+
)
|
|
518
|
+
} else {
|
|
519
|
+
logForDebugging(`npm cache cleanup: completed in ${durationMs}ms`)
|
|
520
|
+
}
|
|
521
|
+
logEvent('tengu_npm_cache_cleanup', {
|
|
522
|
+
success: true,
|
|
523
|
+
durationMs,
|
|
524
|
+
entriesRemoved: keysToRemove.length,
|
|
525
|
+
})
|
|
526
|
+
} catch (error) {
|
|
527
|
+
logError(error as Error)
|
|
528
|
+
logEvent('tengu_npm_cache_cleanup', {
|
|
529
|
+
success: false,
|
|
530
|
+
durationMs: Date.now() - startTime,
|
|
531
|
+
})
|
|
532
|
+
} finally {
|
|
533
|
+
await lockfile.unlock(markerPath, { realpath: false }).catch(() => {})
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Throttled wrapper around cleanupOldVersions for recurring cleanup in long-running sessions.
|
|
539
|
+
* Uses a marker file and lock to ensure it runs at most once per 24 hours,
|
|
540
|
+
* and does not block if another process is already running cleanup.
|
|
541
|
+
* The regular cleanupOldVersions() should still be used for installer flows.
|
|
542
|
+
*/
|
|
543
|
+
export async function cleanupOldVersionsThrottled(): Promise<void> {
|
|
544
|
+
const markerPath = join(getClaudeConfigHomeDir(), '.version-cleanup')
|
|
545
|
+
|
|
546
|
+
try {
|
|
547
|
+
const stat = await fs.stat(markerPath)
|
|
548
|
+
if (Date.now() - stat.mtimeMs < ONE_DAY_MS) {
|
|
549
|
+
logForDebugging('version cleanup: skipping, ran recently')
|
|
550
|
+
return
|
|
551
|
+
}
|
|
552
|
+
} catch {
|
|
553
|
+
// File doesn't exist, proceed with cleanup
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
try {
|
|
557
|
+
await lockfile.lock(markerPath, { retries: 0, realpath: false })
|
|
558
|
+
} catch {
|
|
559
|
+
logForDebugging('version cleanup: skipping, lock held')
|
|
560
|
+
return
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
logForDebugging('version cleanup: starting (throttled)')
|
|
564
|
+
|
|
565
|
+
try {
|
|
566
|
+
await cleanupOldVersions()
|
|
567
|
+
await fs.writeFile(markerPath, new Date().toISOString())
|
|
568
|
+
} catch (error) {
|
|
569
|
+
logError(error as Error)
|
|
570
|
+
} finally {
|
|
571
|
+
await lockfile.unlock(markerPath, { realpath: false }).catch(() => {})
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
export async function cleanupOldMessageFilesInBackground(): Promise<void> {
|
|
576
|
+
// If settings have validation errors but the user explicitly set cleanupPeriodDays,
|
|
577
|
+
// skip cleanup entirely rather than falling back to the default (30 days).
|
|
578
|
+
// This prevents accidentally deleting files when the user intended a different retention period.
|
|
579
|
+
const { errors } = getSettingsWithAllErrors()
|
|
580
|
+
if (errors.length > 0 && rawSettingsContainsKey('cleanupPeriodDays')) {
|
|
581
|
+
logForDebugging(
|
|
582
|
+
'Skipping cleanup: settings have validation errors but cleanupPeriodDays was explicitly set. Fix settings errors to enable cleanup.',
|
|
583
|
+
)
|
|
584
|
+
return
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
await cleanupOldMessageFiles()
|
|
588
|
+
await cleanupOldSessionFiles()
|
|
589
|
+
await cleanupOldPlanFiles()
|
|
590
|
+
await cleanupOldFileHistoryBackups()
|
|
591
|
+
await cleanupOldSessionEnvDirs()
|
|
592
|
+
await cleanupOldDebugLogs()
|
|
593
|
+
await cleanupOldImageCaches()
|
|
594
|
+
await cleanupOldPastes(getCutoffDate())
|
|
595
|
+
const removedWorktrees = await cleanupStaleAgentWorktrees(getCutoffDate())
|
|
596
|
+
if (removedWorktrees > 0) {
|
|
597
|
+
logEvent('tengu_worktree_cleanup', { removed: removedWorktrees })
|
|
598
|
+
}
|
|
599
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
600
|
+
await cleanupNpmCacheForAnthropicPackages()
|
|
601
|
+
}
|
|
602
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global registry for cleanup functions that should run during graceful shutdown.
|
|
3
|
+
* This module is separate from gracefulShutdown.ts to avoid circular dependencies.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Global registry for cleanup functions
|
|
7
|
+
const cleanupFunctions = new Set<() => Promise<void>>()
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Register a cleanup function to run during graceful shutdown.
|
|
11
|
+
* @param cleanupFn - Function to run during cleanup (can be sync or async)
|
|
12
|
+
* @returns Unregister function that removes the cleanup handler
|
|
13
|
+
*/
|
|
14
|
+
export function registerCleanup(cleanupFn: () => Promise<void>): () => void {
|
|
15
|
+
cleanupFunctions.add(cleanupFn)
|
|
16
|
+
return () => cleanupFunctions.delete(cleanupFn) // Return unregister function
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Run all registered cleanup functions.
|
|
21
|
+
* Used internally by gracefulShutdown.
|
|
22
|
+
*/
|
|
23
|
+
export async function runCleanupFunctions(): Promise<void> {
|
|
24
|
+
await Promise.all(Array.from(cleanupFunctions).map(fn => fn()))
|
|
25
|
+
}
|
package/utils/cliArgs.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a CLI flag value early, before Commander.js processes arguments.
|
|
3
|
+
* Supports both space-separated (--flag value) and equals-separated (--flag=value) syntax.
|
|
4
|
+
*
|
|
5
|
+
* This function is intended for flags that must be parsed before init() runs,
|
|
6
|
+
* such as --settings which affects configuration loading. For normal flag parsing,
|
|
7
|
+
* rely on Commander.js which handles this automatically.
|
|
8
|
+
*
|
|
9
|
+
* @param flagName The flag name including dashes (e.g., '--settings')
|
|
10
|
+
* @param argv Optional argv array to parse (defaults to process.argv)
|
|
11
|
+
* @returns The value if found, undefined otherwise
|
|
12
|
+
*/
|
|
13
|
+
export function eagerParseCliFlag(
|
|
14
|
+
flagName: string,
|
|
15
|
+
argv: string[] = process.argv,
|
|
16
|
+
): string | undefined {
|
|
17
|
+
for (let i = 0; i < argv.length; i++) {
|
|
18
|
+
const arg = argv[i]
|
|
19
|
+
// Handle --flag=value syntax
|
|
20
|
+
if (arg?.startsWith(`${flagName}=`)) {
|
|
21
|
+
return arg.slice(flagName.length + 1)
|
|
22
|
+
}
|
|
23
|
+
// Handle --flag value syntax
|
|
24
|
+
if (arg === flagName && i + 1 < argv.length) {
|
|
25
|
+
return argv[i + 1]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return undefined
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Handle the standard Unix `--` separator convention in CLI arguments.
|
|
33
|
+
*
|
|
34
|
+
* When using Commander.js with `.passThroughOptions()`, the `--` separator
|
|
35
|
+
* is passed through as a positional argument rather than being consumed.
|
|
36
|
+
* This means when a user runs:
|
|
37
|
+
* `cmd --opt value name -- subcmd --flag arg`
|
|
38
|
+
*
|
|
39
|
+
* Commander parses it as:
|
|
40
|
+
* positional1 = "name", positional2 = "--", rest = ["subcmd", "--flag", "arg"]
|
|
41
|
+
*
|
|
42
|
+
* This function corrects the parsing by extracting the actual command from
|
|
43
|
+
* the rest array when the positional is `--`.
|
|
44
|
+
*
|
|
45
|
+
* @param commandOrValue - The parsed positional that may be "--"
|
|
46
|
+
* @param args - The remaining arguments array
|
|
47
|
+
* @returns Object with corrected command and args
|
|
48
|
+
*/
|
|
49
|
+
export function extractArgsAfterDoubleDash(
|
|
50
|
+
commandOrValue: string,
|
|
51
|
+
args: string[] = [],
|
|
52
|
+
): { command: string; args: string[] } {
|
|
53
|
+
if (commandOrValue === '--' && args.length > 0) {
|
|
54
|
+
return {
|
|
55
|
+
command: args[0]!,
|
|
56
|
+
args: args.slice(1),
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { command: commandOrValue, args }
|
|
60
|
+
}
|