@xortex/xcode 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +171 -0
- package/bin/xcode +127 -0
- package/bin/xcode-test +84 -0
- package/bin/xcode.cmd +31 -0
- package/constants/apiLimits.ts +94 -0
- package/constants/betas.ts +52 -0
- package/constants/common.ts +33 -0
- package/constants/cyberRiskInstruction.ts +24 -0
- package/constants/errorIds.ts +15 -0
- package/constants/figures.ts +45 -0
- package/constants/files.ts +156 -0
- package/constants/github-app.ts +144 -0
- package/constants/keys.ts +11 -0
- package/constants/messages.ts +1 -0
- package/constants/oauth.ts +234 -0
- package/constants/outputStyles.ts +216 -0
- package/constants/product.ts +76 -0
- package/constants/prompts.ts +939 -0
- package/constants/spinnerVerbs.ts +204 -0
- package/constants/system.ts +95 -0
- package/constants/systemPromptSections.ts +68 -0
- package/constants/toolLimits.ts +56 -0
- package/constants/tools.ts +112 -0
- package/constants/turnCompletionVerbs.ts +12 -0
- package/constants/xml.ts +86 -0
- package/entrypoints/agentSdkTypes.ts +443 -0
- package/entrypoints/cli.tsx +307 -0
- package/entrypoints/init.ts +340 -0
- package/entrypoints/mcp.ts +196 -0
- package/entrypoints/sandboxTypes.ts +156 -0
- package/entrypoints/sdk/controlSchemas.ts +663 -0
- package/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/entrypoints/sdk/coreTypes.generated.ts +2 -0
- package/entrypoints/sdk/coreTypes.ts +62 -0
- package/entrypoints/sdk/runtimeTypes.ts +140 -0
- package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
- package/entrypoints/sdk/toolTypes.ts +90 -0
- package/main.tsx +4686 -0
- package/package.json +120 -0
- package/services/AgentSummary/agentSummary.ts +179 -0
- package/services/MagicDocs/magicDocs.ts +254 -0
- package/services/MagicDocs/prompts.ts +127 -0
- package/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/services/PromptSuggestion/speculation.ts +991 -0
- package/services/SessionMemory/prompts.ts +324 -0
- package/services/SessionMemory/sessionMemory.ts +495 -0
- package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/services/analytics/config.ts +38 -0
- package/services/analytics/datadog.ts +307 -0
- package/services/analytics/firstPartyEventLogger.ts +449 -0
- package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/services/analytics/growthbook.ts +1155 -0
- package/services/analytics/index.ts +173 -0
- package/services/analytics/metadata.ts +973 -0
- package/services/analytics/sink.ts +114 -0
- package/services/analytics/sinkKillswitch.ts +25 -0
- package/services/api/adminRequests.ts +119 -0
- package/services/api/bootstrap.ts +141 -0
- package/services/api/claude.ts +3422 -0
- package/services/api/client.ts +406 -0
- package/services/api/dumpPrompts.ts +226 -0
- package/services/api/emptyUsage.ts +22 -0
- package/services/api/errorUtils.ts +260 -0
- package/services/api/errors.ts +1207 -0
- package/services/api/filesApi.ts +748 -0
- package/services/api/firstTokenDate.ts +60 -0
- package/services/api/gemini.ts +359 -0
- package/services/api/geminiAdapter.ts +123 -0
- package/services/api/geminiClient.ts +291 -0
- package/services/api/grove.ts +357 -0
- package/services/api/logging.ts +788 -0
- package/services/api/metricsOptOut.ts +159 -0
- package/services/api/openRouterClient.ts +453 -0
- package/services/api/overageCreditGrant.ts +137 -0
- package/services/api/promptCacheBreakDetection.ts +727 -0
- package/services/api/referral.ts +281 -0
- package/services/api/sessionIngress.ts +514 -0
- package/services/api/ultrareviewQuota.ts +38 -0
- package/services/api/usage.ts +63 -0
- package/services/api/withRetry.ts +822 -0
- package/services/autoDream/autoDream.ts +324 -0
- package/services/autoDream/config.ts +21 -0
- package/services/autoDream/consolidationLock.ts +140 -0
- package/services/autoDream/consolidationPrompt.ts +65 -0
- package/services/awaySummary.ts +74 -0
- package/services/claudeAiLimits.ts +515 -0
- package/services/claudeAiLimitsHook.ts +23 -0
- package/services/compact/apiMicrocompact.ts +153 -0
- package/services/compact/autoCompact.ts +351 -0
- package/services/compact/compact.ts +1705 -0
- package/services/compact/compactWarningHook.ts +16 -0
- package/services/compact/compactWarningState.ts +18 -0
- package/services/compact/grouping.ts +63 -0
- package/services/compact/microCompact.ts +530 -0
- package/services/compact/postCompactCleanup.ts +77 -0
- package/services/compact/prompt.ts +374 -0
- package/services/compact/sessionMemoryCompact.ts +630 -0
- package/services/compact/timeBasedMCConfig.ts +43 -0
- package/services/diagnosticTracking.ts +397 -0
- package/services/extractMemories/extractMemories.ts +517 -0
- package/services/extractMemories/prompts.ts +154 -0
- package/services/internalLogging.ts +90 -0
- package/services/lsp/LSPClient.ts +447 -0
- package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/services/lsp/LSPServerInstance.ts +511 -0
- package/services/lsp/LSPServerManager.ts +420 -0
- package/services/lsp/config.ts +79 -0
- package/services/lsp/manager.ts +289 -0
- package/services/lsp/passiveFeedback.ts +328 -0
- package/services/mcp/InProcessTransport.ts +63 -0
- package/services/mcp/MCPConnectionManager.tsx +73 -0
- package/services/mcp/SdkControlTransport.ts +136 -0
- package/services/mcp/auth.ts +2465 -0
- package/services/mcp/channelAllowlist.ts +76 -0
- package/services/mcp/channelNotification.ts +316 -0
- package/services/mcp/channelPermissions.ts +240 -0
- package/services/mcp/claudeai.ts +164 -0
- package/services/mcp/client.ts +3348 -0
- package/services/mcp/config.ts +1578 -0
- package/services/mcp/elicitationHandler.ts +313 -0
- package/services/mcp/envExpansion.ts +38 -0
- package/services/mcp/headersHelper.ts +138 -0
- package/services/mcp/mcpStringUtils.ts +106 -0
- package/services/mcp/normalization.ts +23 -0
- package/services/mcp/oauthPort.ts +78 -0
- package/services/mcp/officialRegistry.ts +72 -0
- package/services/mcp/types.ts +258 -0
- package/services/mcp/useManageMCPConnections.ts +1141 -0
- package/services/mcp/utils.ts +575 -0
- package/services/mcp/vscodeSdkMcp.ts +112 -0
- package/services/mcp/xaa.ts +511 -0
- package/services/mcp/xaaIdpLogin.ts +487 -0
- package/services/mcpServerApproval.tsx +41 -0
- package/services/mockRateLimits.ts +882 -0
- package/services/notifier.ts +156 -0
- package/services/oauth/auth-code-listener.ts +211 -0
- package/services/oauth/client.ts +566 -0
- package/services/oauth/crypto.ts +23 -0
- package/services/oauth/getOauthProfile.ts +53 -0
- package/services/oauth/index.ts +198 -0
- package/services/plugins/PluginInstallationManager.ts +184 -0
- package/services/plugins/pluginCliCommands.ts +344 -0
- package/services/plugins/pluginOperations.ts +1088 -0
- package/services/policyLimits/index.ts +663 -0
- package/services/policyLimits/types.ts +27 -0
- package/services/preventSleep.ts +165 -0
- package/services/rateLimitMessages.ts +344 -0
- package/services/rateLimitMocking.ts +144 -0
- package/services/remoteManagedSettings/index.ts +638 -0
- package/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/services/remoteManagedSettings/syncCache.ts +112 -0
- package/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/services/remoteManagedSettings/types.ts +31 -0
- package/services/settingsSync/index.ts +581 -0
- package/services/settingsSync/types.ts +67 -0
- package/services/teamMemorySync/index.ts +1256 -0
- package/services/teamMemorySync/secretScanner.ts +324 -0
- package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/services/teamMemorySync/types.ts +156 -0
- package/services/teamMemorySync/watcher.ts +387 -0
- package/services/tips/tipHistory.ts +17 -0
- package/services/tips/tipRegistry.ts +686 -0
- package/services/tips/tipScheduler.ts +58 -0
- package/services/tokenEstimation.ts +495 -0
- package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/services/tools/StreamingToolExecutor.ts +530 -0
- package/services/tools/toolExecution.ts +1745 -0
- package/services/tools/toolHooks.ts +650 -0
- package/services/tools/toolOrchestration.ts +188 -0
- package/services/vcr.ts +406 -0
- package/services/voice.ts +525 -0
- package/services/voiceKeyterms.ts +106 -0
- package/services/voiceStreamSTT.ts +544 -0
- package/tools/AgentTool/AgentTool.tsx +1398 -0
- package/tools/AgentTool/UI.tsx +872 -0
- package/tools/AgentTool/agentColorManager.ts +66 -0
- package/tools/AgentTool/agentDisplay.ts +104 -0
- package/tools/AgentTool/agentMemory.ts +177 -0
- package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/tools/AgentTool/agentToolUtils.ts +686 -0
- package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/tools/AgentTool/builtInAgents.ts +72 -0
- package/tools/AgentTool/constants.ts +12 -0
- package/tools/AgentTool/forkSubagent.ts +210 -0
- package/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/tools/AgentTool/prompt.ts +287 -0
- package/tools/AgentTool/resumeAgent.ts +265 -0
- package/tools/AgentTool/runAgent.ts +973 -0
- package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/tools/BashTool/BashTool.tsx +1144 -0
- package/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/tools/BashTool/UI.tsx +185 -0
- package/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/tools/BashTool/bashPermissions.ts +2621 -0
- package/tools/BashTool/bashSecurity.ts +2592 -0
- package/tools/BashTool/commandSemantics.ts +140 -0
- package/tools/BashTool/commentLabel.ts +13 -0
- package/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/tools/BashTool/modeValidation.ts +115 -0
- package/tools/BashTool/pathValidation.ts +1303 -0
- package/tools/BashTool/prompt.ts +369 -0
- package/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/tools/BashTool/sedEditParser.ts +322 -0
- package/tools/BashTool/sedValidation.ts +684 -0
- package/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/tools/BashTool/toolName.ts +2 -0
- package/tools/BashTool/utils.ts +223 -0
- package/tools/BriefTool/BriefTool.ts +204 -0
- package/tools/BriefTool/UI.tsx +101 -0
- package/tools/BriefTool/attachments.ts +110 -0
- package/tools/BriefTool/prompt.ts +22 -0
- package/tools/BriefTool/upload.ts +174 -0
- package/tools/ConfigTool/ConfigTool.ts +467 -0
- package/tools/ConfigTool/UI.tsx +38 -0
- package/tools/ConfigTool/constants.ts +1 -0
- package/tools/ConfigTool/prompt.ts +93 -0
- package/tools/ConfigTool/supportedSettings.ts +211 -0
- package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/tools/EnterPlanModeTool/constants.ts +1 -0
- package/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/tools/EnterWorktreeTool/constants.ts +1 -0
- package/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/tools/ExitPlanModeTool/constants.ts +2 -0
- package/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/tools/ExitWorktreeTool/constants.ts +1 -0
- package/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/tools/FileEditTool/FileEditTool.ts +625 -0
- package/tools/FileEditTool/UI.tsx +289 -0
- package/tools/FileEditTool/constants.ts +11 -0
- package/tools/FileEditTool/prompt.ts +28 -0
- package/tools/FileEditTool/types.ts +85 -0
- package/tools/FileEditTool/utils.ts +775 -0
- package/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/tools/FileReadTool/UI.tsx +185 -0
- package/tools/FileReadTool/imageProcessor.ts +94 -0
- package/tools/FileReadTool/limits.ts +92 -0
- package/tools/FileReadTool/prompt.ts +49 -0
- package/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/tools/FileWriteTool/UI.tsx +405 -0
- package/tools/FileWriteTool/prompt.ts +18 -0
- package/tools/GlobTool/GlobTool.ts +198 -0
- package/tools/GlobTool/UI.tsx +63 -0
- package/tools/GlobTool/prompt.ts +7 -0
- package/tools/GrepTool/GrepTool.ts +577 -0
- package/tools/GrepTool/UI.tsx +201 -0
- package/tools/GrepTool/prompt.ts +18 -0
- package/tools/LSPTool/LSPTool.ts +860 -0
- package/tools/LSPTool/UI.tsx +228 -0
- package/tools/LSPTool/formatters.ts +592 -0
- package/tools/LSPTool/prompt.ts +21 -0
- package/tools/LSPTool/schemas.ts +215 -0
- package/tools/LSPTool/symbolContext.ts +90 -0
- package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/tools/MCPTool/MCPTool.ts +77 -0
- package/tools/MCPTool/UI.tsx +403 -0
- package/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/tools/MCPTool/prompt.ts +3 -0
- package/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/tools/NotebookEditTool/UI.tsx +93 -0
- package/tools/NotebookEditTool/constants.ts +2 -0
- package/tools/NotebookEditTool/prompt.ts +3 -0
- package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/tools/PowerShellTool/UI.tsx +131 -0
- package/tools/PowerShellTool/clmTypes.ts +211 -0
- package/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/tools/PowerShellTool/commonParameters.ts +30 -0
- package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/tools/PowerShellTool/gitSafety.ts +176 -0
- package/tools/PowerShellTool/modeValidation.ts +404 -0
- package/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/tools/PowerShellTool/prompt.ts +145 -0
- package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/tools/PowerShellTool/toolName.ts +2 -0
- package/tools/REPLTool/constants.ts +46 -0
- package/tools/REPLTool/primitiveTools.ts +39 -0
- package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/tools/ScheduleCronTool/UI.tsx +60 -0
- package/tools/ScheduleCronTool/prompt.ts +135 -0
- package/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/tools/SendMessageTool/UI.tsx +31 -0
- package/tools/SendMessageTool/constants.ts +1 -0
- package/tools/SendMessageTool/prompt.ts +49 -0
- package/tools/SkillTool/SkillTool.ts +1108 -0
- package/tools/SkillTool/UI.tsx +128 -0
- package/tools/SkillTool/constants.ts +1 -0
- package/tools/SkillTool/prompt.ts +241 -0
- package/tools/SleepTool/prompt.ts +17 -0
- package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/tools/TaskCreateTool/constants.ts +1 -0
- package/tools/TaskCreateTool/prompt.ts +56 -0
- package/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/tools/TaskGetTool/constants.ts +1 -0
- package/tools/TaskGetTool/prompt.ts +24 -0
- package/tools/TaskListTool/TaskListTool.ts +116 -0
- package/tools/TaskListTool/constants.ts +1 -0
- package/tools/TaskListTool/prompt.ts +49 -0
- package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/tools/TaskOutputTool/constants.ts +1 -0
- package/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/tools/TaskStopTool/UI.tsx +41 -0
- package/tools/TaskStopTool/prompt.ts +8 -0
- package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/tools/TaskUpdateTool/constants.ts +1 -0
- package/tools/TaskUpdateTool/prompt.ts +77 -0
- package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/tools/TeamCreateTool/UI.tsx +6 -0
- package/tools/TeamCreateTool/constants.ts +1 -0
- package/tools/TeamCreateTool/prompt.ts +113 -0
- package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/tools/TeamDeleteTool/UI.tsx +20 -0
- package/tools/TeamDeleteTool/constants.ts +1 -0
- package/tools/TeamDeleteTool/prompt.ts +16 -0
- package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/tools/TodoWriteTool/constants.ts +1 -0
- package/tools/TodoWriteTool/prompt.ts +184 -0
- package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/tools/ToolSearchTool/constants.ts +1 -0
- package/tools/ToolSearchTool/prompt.ts +121 -0
- package/tools/TungstenTool/TungstenTool.ts +4 -0
- package/tools/WebFetchTool/UI.tsx +72 -0
- package/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/tools/WebFetchTool/preapproved.ts +166 -0
- package/tools/WebFetchTool/prompt.ts +46 -0
- package/tools/WebFetchTool/utils.ts +530 -0
- package/tools/WebSearchTool/UI.tsx +101 -0
- package/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/tools/WebSearchTool/prompt.ts +34 -0
- package/tools/WorkflowTool/constants.ts +2 -0
- package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
- package/tools/XMemIngestTool/prompt.ts +13 -0
- package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
- package/tools/XMemRetrieveTool/prompt.ts +16 -0
- package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
- package/tools/XMemSearchTool/prompt.ts +11 -0
- package/tools/shared/gitOperationTracking.ts +277 -0
- package/tools/shared/spawnMultiAgent.ts +1093 -0
- package/tools/testing/TestingPermissionTool.tsx +74 -0
- package/tools/utils.ts +40 -0
- package/utils/CircularBuffer.ts +84 -0
- package/utils/Cursor.ts +1530 -0
- package/utils/QueryGuard.ts +121 -0
- package/utils/Shell.ts +474 -0
- package/utils/ShellCommand.ts +465 -0
- package/utils/abortController.ts +99 -0
- package/utils/activityManager.ts +164 -0
- package/utils/advisor.ts +145 -0
- package/utils/agentContext.ts +178 -0
- package/utils/agentId.ts +99 -0
- package/utils/agentSwarmsEnabled.ts +44 -0
- package/utils/agenticSessionSearch.ts +307 -0
- package/utils/analyzeContext.ts +1382 -0
- package/utils/ansiToPng.ts +334 -0
- package/utils/ansiToSvg.ts +272 -0
- package/utils/api.ts +718 -0
- package/utils/apiPreconnect.ts +71 -0
- package/utils/appleTerminalBackup.ts +124 -0
- package/utils/argumentSubstitution.ts +145 -0
- package/utils/array.ts +13 -0
- package/utils/asciicast.ts +239 -0
- package/utils/attachments.ts +4091 -0
- package/utils/attribution.ts +393 -0
- package/utils/auth.ts +2002 -0
- package/utils/authFileDescriptor.ts +196 -0
- package/utils/authPortable.ts +19 -0
- package/utils/autoModeDenials.ts +26 -0
- package/utils/autoRunIssue.tsx +122 -0
- package/utils/autoUpdater.ts +561 -0
- package/utils/aws.ts +74 -0
- package/utils/awsAuthStatusManager.ts +81 -0
- package/utils/axios.ts +8 -0
- package/utils/background/remote/preconditions.ts +235 -0
- package/utils/background/remote/remoteSession.ts +98 -0
- package/utils/backgroundHousekeeping.ts +94 -0
- package/utils/bash/ParsedCommand.ts +318 -0
- package/utils/bash/ShellSnapshot.ts +582 -0
- package/utils/bash/ast.ts +2679 -0
- package/utils/bash/bashParser.ts +4436 -0
- package/utils/bash/bashPipeCommand.ts +294 -0
- package/utils/bash/commands.ts +1339 -0
- package/utils/bash/heredoc.ts +733 -0
- package/utils/bash/parser.ts +230 -0
- package/utils/bash/prefix.ts +204 -0
- package/utils/bash/registry.ts +53 -0
- package/utils/bash/shellCompletion.ts +259 -0
- package/utils/bash/shellPrefix.ts +28 -0
- package/utils/bash/shellQuote.ts +304 -0
- package/utils/bash/shellQuoting.ts +128 -0
- package/utils/bash/specs/alias.ts +14 -0
- package/utils/bash/specs/index.ts +18 -0
- package/utils/bash/specs/nohup.ts +13 -0
- package/utils/bash/specs/pyright.ts +91 -0
- package/utils/bash/specs/sleep.ts +13 -0
- package/utils/bash/specs/srun.ts +31 -0
- package/utils/bash/specs/time.ts +13 -0
- package/utils/bash/specs/timeout.ts +20 -0
- package/utils/bash/treeSitterAnalysis.ts +506 -0
- package/utils/betas.ts +434 -0
- package/utils/billing.ts +78 -0
- package/utils/binaryCheck.ts +53 -0
- package/utils/browser.ts +68 -0
- package/utils/bufferedWriter.ts +100 -0
- package/utils/bundledMode.ts +22 -0
- package/utils/caCerts.ts +115 -0
- package/utils/caCertsConfig.ts +88 -0
- package/utils/cachePaths.ts +38 -0
- package/utils/classifierApprovals.ts +88 -0
- package/utils/classifierApprovalsHook.ts +17 -0
- package/utils/claudeCodeHints.ts +193 -0
- package/utils/claudeDesktop.ts +152 -0
- package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/utils/claudeInChrome/common.ts +540 -0
- package/utils/claudeInChrome/mcpServer.ts +292 -0
- package/utils/claudeInChrome/prompt.ts +83 -0
- package/utils/claudeInChrome/setup.ts +400 -0
- package/utils/claudeInChrome/setupPortable.ts +233 -0
- package/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/utils/claudemd.ts +1479 -0
- package/utils/cleanup.ts +602 -0
- package/utils/cleanupRegistry.ts +25 -0
- package/utils/cliArgs.ts +60 -0
- package/utils/cliHighlight.ts +54 -0
- package/utils/codeIndexing.ts +206 -0
- package/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/utils/collapseHookSummaries.ts +59 -0
- package/utils/collapseReadSearch.ts +1109 -0
- package/utils/collapseTeammateShutdowns.ts +55 -0
- package/utils/color-diff-mock.ts +27 -0
- package/utils/combinedAbortSignal.ts +47 -0
- package/utils/commandLifecycle.ts +21 -0
- package/utils/commitAttribution.ts +961 -0
- package/utils/completionCache.ts +166 -0
- package/utils/computerUse/appNames.ts +196 -0
- package/utils/computerUse/cleanup.ts +86 -0
- package/utils/computerUse/common.ts +61 -0
- package/utils/computerUse/computerUseLock.ts +215 -0
- package/utils/computerUse/drainRunLoop.ts +79 -0
- package/utils/computerUse/escHotkey.ts +54 -0
- package/utils/computerUse/executor.ts +658 -0
- package/utils/computerUse/gates.ts +72 -0
- package/utils/computerUse/hostAdapter.ts +69 -0
- package/utils/computerUse/inputLoader.ts +30 -0
- package/utils/computerUse/mcpServer.ts +106 -0
- package/utils/computerUse/setup.ts +53 -0
- package/utils/computerUse/swiftLoader.ts +23 -0
- package/utils/computerUse/toolRendering.tsx +125 -0
- package/utils/computerUse/wrapper.tsx +336 -0
- package/utils/concurrentSessions.ts +204 -0
- package/utils/config.ts +1817 -0
- package/utils/configConstants.ts +21 -0
- package/utils/contentArray.ts +51 -0
- package/utils/context.ts +221 -0
- package/utils/contextAnalysis.ts +272 -0
- package/utils/contextSuggestions.ts +235 -0
- package/utils/controlMessageCompat.ts +32 -0
- package/utils/conversationRecovery.ts +597 -0
- package/utils/cron.ts +308 -0
- package/utils/cronJitterConfig.ts +75 -0
- package/utils/cronScheduler.ts +565 -0
- package/utils/cronTasks.ts +458 -0
- package/utils/cronTasksLock.ts +195 -0
- package/utils/crossProjectResume.ts +75 -0
- package/utils/crypto.ts +13 -0
- package/utils/cwd.ts +32 -0
- package/utils/debug.ts +268 -0
- package/utils/debugFilter.ts +157 -0
- package/utils/deepLink/banner.ts +123 -0
- package/utils/deepLink/parseDeepLink.ts +170 -0
- package/utils/deepLink/protocolHandler.ts +136 -0
- package/utils/deepLink/registerProtocol.ts +348 -0
- package/utils/deepLink/terminalLauncher.ts +557 -0
- package/utils/deepLink/terminalPreference.ts +54 -0
- package/utils/desktopDeepLink.ts +236 -0
- package/utils/detectRepository.ts +178 -0
- package/utils/diagLogs.ts +94 -0
- package/utils/diff.ts +177 -0
- package/utils/directMemberMessage.ts +69 -0
- package/utils/displayTags.ts +51 -0
- package/utils/doctorContextWarnings.ts +265 -0
- package/utils/doctorDiagnostic.ts +625 -0
- package/utils/dxt/helpers.ts +88 -0
- package/utils/dxt/zip.ts +226 -0
- package/utils/earlyInput.ts +191 -0
- package/utils/editor.ts +183 -0
- package/utils/effort.ts +329 -0
- package/utils/embeddedTools.ts +29 -0
- package/utils/env.ts +347 -0
- package/utils/envDynamic.ts +151 -0
- package/utils/envUtils.ts +183 -0
- package/utils/envValidation.ts +38 -0
- package/utils/errorLogSink.ts +235 -0
- package/utils/errors.ts +238 -0
- package/utils/exampleCommands.ts +184 -0
- package/utils/execFileNoThrow.ts +150 -0
- package/utils/execFileNoThrowPortable.ts +89 -0
- package/utils/execSyncWrapper.ts +38 -0
- package/utils/exportRenderer.tsx +98 -0
- package/utils/extraUsage.ts +23 -0
- package/utils/fastMode.ts +532 -0
- package/utils/file.ts +584 -0
- package/utils/fileHistory.ts +1115 -0
- package/utils/fileOperationAnalytics.ts +71 -0
- package/utils/filePersistence/filePersistence.ts +287 -0
- package/utils/filePersistence/outputsScanner.ts +126 -0
- package/utils/fileRead.ts +102 -0
- package/utils/fileReadCache.ts +96 -0
- package/utils/fileStateCache.ts +142 -0
- package/utils/findExecutable.ts +17 -0
- package/utils/fingerprint.ts +76 -0
- package/utils/forkedAgent.ts +689 -0
- package/utils/format.ts +308 -0
- package/utils/formatBriefTimestamp.ts +81 -0
- package/utils/fpsTracker.ts +47 -0
- package/utils/frontmatterParser.ts +370 -0
- package/utils/fsOperations.ts +770 -0
- package/utils/fullscreen.ts +202 -0
- package/utils/generatedFiles.ts +136 -0
- package/utils/generators.ts +88 -0
- package/utils/genericProcessUtils.ts +184 -0
- package/utils/getWorktreePaths.ts +70 -0
- package/utils/getWorktreePathsPortable.ts +27 -0
- package/utils/ghPrStatus.ts +106 -0
- package/utils/git/gitConfigParser.ts +277 -0
- package/utils/git/gitFilesystem.ts +699 -0
- package/utils/git/gitignore.ts +99 -0
- package/utils/git.ts +926 -0
- package/utils/gitDiff.ts +532 -0
- package/utils/gitSettings.ts +18 -0
- package/utils/github/ghAuthStatus.ts +29 -0
- package/utils/githubRepoPathMapping.ts +162 -0
- package/utils/glob.ts +130 -0
- package/utils/gracefulShutdown.ts +529 -0
- package/utils/groupToolUses.ts +182 -0
- package/utils/handlePromptSubmit.ts +610 -0
- package/utils/hash.ts +46 -0
- package/utils/headlessProfiler.ts +178 -0
- package/utils/heapDumpService.ts +303 -0
- package/utils/heatmap.ts +198 -0
- package/utils/highlightMatch.tsx +28 -0
- package/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/utils/hooks/execAgentHook.ts +339 -0
- package/utils/hooks/execHttpHook.ts +242 -0
- package/utils/hooks/execPromptHook.ts +211 -0
- package/utils/hooks/fileChangedWatcher.ts +191 -0
- package/utils/hooks/hookEvents.ts +192 -0
- package/utils/hooks/hookHelpers.ts +83 -0
- package/utils/hooks/hooksConfigManager.ts +400 -0
- package/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/utils/hooks/hooksSettings.ts +271 -0
- package/utils/hooks/postSamplingHooks.ts +70 -0
- package/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/utils/hooks/registerSkillHooks.ts +64 -0
- package/utils/hooks/sessionHooks.ts +447 -0
- package/utils/hooks/skillImprovement.ts +267 -0
- package/utils/hooks/ssrfGuard.ts +294 -0
- package/utils/hooks.ts +5022 -0
- package/utils/horizontalScroll.ts +137 -0
- package/utils/http.ts +136 -0
- package/utils/hyperlink.ts +39 -0
- package/utils/iTermBackup.ts +73 -0
- package/utils/ide.ts +1494 -0
- package/utils/idePathConversion.ts +90 -0
- package/utils/idleTimeout.ts +53 -0
- package/utils/imagePaste.ts +416 -0
- package/utils/imageResizer.ts +880 -0
- package/utils/imageStore.ts +167 -0
- package/utils/imageValidation.ts +104 -0
- package/utils/immediateCommand.ts +15 -0
- package/utils/inProcessTeammateHelpers.ts +102 -0
- package/utils/ink.ts +26 -0
- package/utils/intl.ts +94 -0
- package/utils/jetbrains.ts +191 -0
- package/utils/json.ts +277 -0
- package/utils/jsonRead.ts +16 -0
- package/utils/keyboardShortcuts.ts +14 -0
- package/utils/lazySchema.ts +8 -0
- package/utils/listSessionsImpl.ts +454 -0
- package/utils/localInstaller.ts +162 -0
- package/utils/lockfile.ts +43 -0
- package/utils/log.ts +362 -0
- package/utils/logoV2Utils.ts +347 -0
- package/utils/mailbox.ts +73 -0
- package/utils/managedEnv.ts +199 -0
- package/utils/managedEnvConstants.ts +191 -0
- package/utils/markdown.ts +381 -0
- package/utils/markdownConfigLoader.ts +600 -0
- package/utils/mcp/dateTimeParser.ts +121 -0
- package/utils/mcp/elicitationValidation.ts +336 -0
- package/utils/mcpInstructionsDelta.ts +130 -0
- package/utils/mcpOutputStorage.ts +189 -0
- package/utils/mcpValidation.ts +208 -0
- package/utils/mcpWebSocketTransport.ts +200 -0
- package/utils/memoize.ts +269 -0
- package/utils/memory/types.ts +12 -0
- package/utils/memory/versions.ts +8 -0
- package/utils/memoryFileDetection.ts +289 -0
- package/utils/messagePredicates.ts +8 -0
- package/utils/messageQueueManager.ts +547 -0
- package/utils/messages/mappers.ts +290 -0
- package/utils/messages/systemInit.ts +96 -0
- package/utils/messages.ts +5520 -0
- package/utils/model/agent.ts +157 -0
- package/utils/model/aliases.ts +35 -0
- package/utils/model/antModels.ts +64 -0
- package/utils/model/bedrock.ts +265 -0
- package/utils/model/check1mAccess.ts +72 -0
- package/utils/model/configs.ts +158 -0
- package/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/utils/model/deprecation.ts +101 -0
- package/utils/model/model.ts +654 -0
- package/utils/model/modelAllowlist.ts +170 -0
- package/utils/model/modelCapabilities.ts +118 -0
- package/utils/model/modelOptions.ts +589 -0
- package/utils/model/modelStrings.ts +170 -0
- package/utils/model/modelSupportOverrides.ts +50 -0
- package/utils/model/providers.ts +42 -0
- package/utils/model/validateModel.ts +159 -0
- package/utils/modelCost.ts +231 -0
- package/utils/modifiers.ts +36 -0
- package/utils/mtls.ts +179 -0
- package/utils/nativeInstaller/download.ts +523 -0
- package/utils/nativeInstaller/index.ts +18 -0
- package/utils/nativeInstaller/installer.ts +1708 -0
- package/utils/nativeInstaller/packageManagers.ts +336 -0
- package/utils/nativeInstaller/pidLock.ts +433 -0
- package/utils/notebook.ts +224 -0
- package/utils/objectGroupBy.ts +18 -0
- package/utils/pasteStore.ts +104 -0
- package/utils/path.ts +155 -0
- package/utils/pdf.ts +300 -0
- package/utils/pdfUtils.ts +70 -0
- package/utils/peerAddress.ts +21 -0
- package/utils/permissions/PermissionMode.ts +141 -0
- package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/utils/permissions/PermissionResult.ts +35 -0
- package/utils/permissions/PermissionRule.ts +40 -0
- package/utils/permissions/PermissionUpdate.ts +389 -0
- package/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/utils/permissions/autoModeState.ts +39 -0
- package/utils/permissions/bashClassifier.ts +61 -0
- package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/utils/permissions/classifierDecision.ts +98 -0
- package/utils/permissions/classifierShared.ts +39 -0
- package/utils/permissions/dangerousPatterns.ts +80 -0
- package/utils/permissions/denialTracking.ts +45 -0
- package/utils/permissions/filesystem.ts +1777 -0
- package/utils/permissions/getNextPermissionMode.ts +101 -0
- package/utils/permissions/pathValidation.ts +485 -0
- package/utils/permissions/permissionExplainer.ts +250 -0
- package/utils/permissions/permissionRuleParser.ts +198 -0
- package/utils/permissions/permissionSetup.ts +1532 -0
- package/utils/permissions/permissions.ts +1486 -0
- package/utils/permissions/permissionsLoader.ts +296 -0
- package/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/utils/permissions/shellRuleMatching.ts +228 -0
- package/utils/permissions/yoloClassifier.ts +1495 -0
- package/utils/planModeV2.ts +95 -0
- package/utils/plans.ts +397 -0
- package/utils/platform.ts +150 -0
- package/utils/plugins/addDirPluginSettings.ts +71 -0
- package/utils/plugins/cacheUtils.ts +196 -0
- package/utils/plugins/dependencyResolver.ts +305 -0
- package/utils/plugins/fetchTelemetry.ts +135 -0
- package/utils/plugins/gitAvailability.ts +69 -0
- package/utils/plugins/headlessPluginInstall.ts +174 -0
- package/utils/plugins/hintRecommendation.ts +164 -0
- package/utils/plugins/installCounts.ts +292 -0
- package/utils/plugins/installedPluginsManager.ts +1268 -0
- package/utils/plugins/loadPluginAgents.ts +348 -0
- package/utils/plugins/loadPluginCommands.ts +946 -0
- package/utils/plugins/loadPluginHooks.ts +287 -0
- package/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/utils/plugins/lspPluginIntegration.ts +387 -0
- package/utils/plugins/lspRecommendation.ts +374 -0
- package/utils/plugins/managedPlugins.ts +27 -0
- package/utils/plugins/marketplaceHelpers.ts +592 -0
- package/utils/plugins/marketplaceManager.ts +2643 -0
- package/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/utils/plugins/mcpbHandler.ts +968 -0
- package/utils/plugins/officialMarketplace.ts +25 -0
- package/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/utils/plugins/performStartupChecks.tsx +70 -0
- package/utils/plugins/pluginAutoupdate.ts +284 -0
- package/utils/plugins/pluginBlocklist.ts +127 -0
- package/utils/plugins/pluginDirectories.ts +178 -0
- package/utils/plugins/pluginFlagging.ts +208 -0
- package/utils/plugins/pluginIdentifier.ts +123 -0
- package/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/utils/plugins/pluginLoader.ts +3302 -0
- package/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/utils/plugins/pluginPolicy.ts +20 -0
- package/utils/plugins/pluginStartupCheck.ts +341 -0
- package/utils/plugins/pluginVersioning.ts +157 -0
- package/utils/plugins/reconciler.ts +265 -0
- package/utils/plugins/refresh.ts +215 -0
- package/utils/plugins/schemas.ts +1681 -0
- package/utils/plugins/validatePlugin.ts +903 -0
- package/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/utils/plugins/zipCache.ts +406 -0
- package/utils/plugins/zipCacheAdapters.ts +164 -0
- package/utils/powershell/dangerousCmdlets.ts +185 -0
- package/utils/powershell/parser.ts +1804 -0
- package/utils/powershell/staticPrefix.ts +316 -0
- package/utils/preflightChecks.tsx +151 -0
- package/utils/privacyLevel.ts +55 -0
- package/utils/process.ts +68 -0
- package/utils/processUserInput/processBashCommand.tsx +140 -0
- package/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/utils/processUserInput/processTextPrompt.ts +100 -0
- package/utils/processUserInput/processUserInput.ts +605 -0
- package/utils/profilerBase.ts +46 -0
- package/utils/promptCategory.ts +49 -0
- package/utils/promptEditor.ts +188 -0
- package/utils/promptShellExecution.ts +183 -0
- package/utils/proxy.ts +426 -0
- package/utils/queryContext.ts +179 -0
- package/utils/queryHelpers.ts +552 -0
- package/utils/queryProfiler.ts +301 -0
- package/utils/queueProcessor.ts +95 -0
- package/utils/readEditContext.ts +227 -0
- package/utils/readFileInRange.ts +383 -0
- package/utils/releaseNotes.ts +360 -0
- package/utils/renderOptions.ts +113 -0
- package/utils/ripgrep.ts +679 -0
- package/utils/sandbox/sandbox-adapter.ts +985 -0
- package/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/utils/sanitization.ts +91 -0
- package/utils/screenshotClipboard.ts +121 -0
- package/utils/sdkEventQueue.ts +134 -0
- package/utils/secureStorage/fallbackStorage.ts +70 -0
- package/utils/secureStorage/index.ts +17 -0
- package/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/utils/secureStorage/plainTextStorage.ts +84 -0
- package/utils/semanticBoolean.ts +29 -0
- package/utils/semanticNumber.ts +36 -0
- package/utils/semver.ts +59 -0
- package/utils/sequential.ts +56 -0
- package/utils/sessionActivity.ts +133 -0
- package/utils/sessionEnvVars.ts +22 -0
- package/utils/sessionEnvironment.ts +166 -0
- package/utils/sessionFileAccessHooks.ts +250 -0
- package/utils/sessionIngressAuth.ts +140 -0
- package/utils/sessionRestore.ts +551 -0
- package/utils/sessionStart.ts +232 -0
- package/utils/sessionState.ts +150 -0
- package/utils/sessionStorage.ts +5105 -0
- package/utils/sessionStoragePortable.ts +793 -0
- package/utils/sessionTitle.ts +129 -0
- package/utils/sessionUrl.ts +64 -0
- package/utils/set.ts +53 -0
- package/utils/settings/allErrors.ts +32 -0
- package/utils/settings/applySettingsChange.ts +92 -0
- package/utils/settings/changeDetector.ts +488 -0
- package/utils/settings/constants.ts +202 -0
- package/utils/settings/internalWrites.ts +37 -0
- package/utils/settings/managedPath.ts +34 -0
- package/utils/settings/mdm/constants.ts +81 -0
- package/utils/settings/mdm/rawRead.ts +130 -0
- package/utils/settings/mdm/settings.ts +316 -0
- package/utils/settings/permissionValidation.ts +262 -0
- package/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/utils/settings/schemaOutput.ts +8 -0
- package/utils/settings/settings.ts +1015 -0
- package/utils/settings/settingsCache.ts +80 -0
- package/utils/settings/toolValidationConfig.ts +103 -0
- package/utils/settings/types.ts +1149 -0
- package/utils/settings/validateEditTool.ts +45 -0
- package/utils/settings/validation.ts +265 -0
- package/utils/settings/validationTips.ts +164 -0
- package/utils/shell/bashProvider.ts +255 -0
- package/utils/shell/outputLimits.ts +14 -0
- package/utils/shell/powershellDetection.ts +107 -0
- package/utils/shell/powershellProvider.ts +123 -0
- package/utils/shell/prefix.ts +367 -0
- package/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/utils/shell/resolveDefaultShell.ts +14 -0
- package/utils/shell/shellProvider.ts +33 -0
- package/utils/shell/shellToolUtils.ts +22 -0
- package/utils/shell/specPrefix.ts +241 -0
- package/utils/shellConfig.ts +167 -0
- package/utils/sideQuery.ts +222 -0
- package/utils/sideQuestion.ts +155 -0
- package/utils/signal.ts +43 -0
- package/utils/sinks.ts +16 -0
- package/utils/skills/skillChangeDetector.ts +311 -0
- package/utils/slashCommandParsing.ts +60 -0
- package/utils/sleep.ts +84 -0
- package/utils/sliceAnsi.ts +91 -0
- package/utils/slowOperations.ts +286 -0
- package/utils/standaloneAgent.ts +23 -0
- package/utils/startupProfiler.ts +194 -0
- package/utils/staticRender.tsx +116 -0
- package/utils/stats.ts +1061 -0
- package/utils/statsCache.ts +434 -0
- package/utils/status.tsx +362 -0
- package/utils/statusNoticeDefinitions.tsx +198 -0
- package/utils/statusNoticeHelpers.ts +20 -0
- package/utils/stream.ts +76 -0
- package/utils/streamJsonStdoutGuard.ts +123 -0
- package/utils/streamlinedTransform.ts +201 -0
- package/utils/stringUtils.ts +235 -0
- package/utils/subprocessEnv.ts +99 -0
- package/utils/suggestions/commandSuggestions.ts +567 -0
- package/utils/suggestions/directoryCompletion.ts +263 -0
- package/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/utils/suggestions/skillUsageTracking.ts +55 -0
- package/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/utils/swarm/backends/ITermBackend.ts +370 -0
- package/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/utils/swarm/backends/detection.ts +128 -0
- package/utils/swarm/backends/it2Setup.ts +245 -0
- package/utils/swarm/backends/registry.ts +464 -0
- package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/utils/swarm/backends/types.ts +311 -0
- package/utils/swarm/constants.ts +33 -0
- package/utils/swarm/inProcessRunner.ts +1552 -0
- package/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/utils/swarm/permissionSync.ts +928 -0
- package/utils/swarm/reconnection.ts +119 -0
- package/utils/swarm/spawnInProcess.ts +328 -0
- package/utils/swarm/spawnUtils.ts +146 -0
- package/utils/swarm/teamHelpers.ts +683 -0
- package/utils/swarm/teammateInit.ts +129 -0
- package/utils/swarm/teammateLayoutManager.ts +107 -0
- package/utils/swarm/teammateModel.ts +10 -0
- package/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/utils/systemDirectories.ts +74 -0
- package/utils/systemPrompt.ts +123 -0
- package/utils/systemPromptType.ts +14 -0
- package/utils/systemTheme.ts +119 -0
- package/utils/taggedId.ts +54 -0
- package/utils/task/TaskOutput.ts +390 -0
- package/utils/task/diskOutput.ts +451 -0
- package/utils/task/framework.ts +308 -0
- package/utils/task/outputFormatting.ts +38 -0
- package/utils/task/sdkProgress.ts +36 -0
- package/utils/tasks.ts +862 -0
- package/utils/teamDiscovery.ts +81 -0
- package/utils/teamMemoryOps.ts +88 -0
- package/utils/teammate.ts +292 -0
- package/utils/teammateContext.ts +96 -0
- package/utils/teammateMailbox.ts +1183 -0
- package/utils/telemetry/betaSessionTracing.ts +491 -0
- package/utils/telemetry/bigqueryExporter.ts +252 -0
- package/utils/telemetry/events.ts +75 -0
- package/utils/telemetry/instrumentation.ts +825 -0
- package/utils/telemetry/logger.ts +26 -0
- package/utils/telemetry/perfettoTracing.ts +1120 -0
- package/utils/telemetry/pluginTelemetry.ts +289 -0
- package/utils/telemetry/sessionTracing.ts +927 -0
- package/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/utils/telemetryAttributes.ts +71 -0
- package/utils/teleport/api.ts +466 -0
- package/utils/teleport/environmentSelection.ts +77 -0
- package/utils/teleport/environments.ts +120 -0
- package/utils/teleport/gitBundle.ts +292 -0
- package/utils/teleport.tsx +1226 -0
- package/utils/tempfile.ts +31 -0
- package/utils/terminal.ts +131 -0
- package/utils/terminalPanel.ts +191 -0
- package/utils/textHighlighting.ts +166 -0
- package/utils/theme.ts +639 -0
- package/utils/thinking.ts +162 -0
- package/utils/timeouts.ts +39 -0
- package/utils/tmuxSocket.ts +427 -0
- package/utils/todo/types.ts +18 -0
- package/utils/tokenBudget.ts +73 -0
- package/utils/tokens.ts +261 -0
- package/utils/toolErrors.ts +132 -0
- package/utils/toolPool.ts +79 -0
- package/utils/toolResultStorage.ts +1040 -0
- package/utils/toolSchemaCache.ts +26 -0
- package/utils/toolSearch.ts +756 -0
- package/utils/transcriptSearch.ts +202 -0
- package/utils/treeify.ts +170 -0
- package/utils/truncate.ts +179 -0
- package/utils/ultraplan/ccrSession.ts +349 -0
- package/utils/ultraplan/keyword.ts +127 -0
- package/utils/ultraplan/prompt.txt +1 -0
- package/utils/unaryLogging.ts +39 -0
- package/utils/undercover.ts +89 -0
- package/utils/user.ts +194 -0
- package/utils/userAgent.ts +10 -0
- package/utils/userPromptKeywords.ts +27 -0
- package/utils/uuid.ts +27 -0
- package/utils/warningHandler.ts +121 -0
- package/utils/which.ts +82 -0
- package/utils/windowsPaths.ts +173 -0
- package/utils/withResolvers.ts +13 -0
- package/utils/words.ts +800 -0
- package/utils/workloadContext.ts +57 -0
- package/utils/worktree.ts +1519 -0
- package/utils/worktreeModeEnabled.ts +11 -0
- package/utils/xdg.ts +65 -0
- package/utils/xmem.ts +6 -0
- package/utils/xml.ts +16 -0
- package/utils/yaml.ts +15 -0
- package/utils/zodToJsonSchema.ts +23 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import chokidar, { type FSWatcher } from 'chokidar'
|
|
2
|
+
import { stat } from 'fs/promises'
|
|
3
|
+
import * as platformPath from 'path'
|
|
4
|
+
import { getIsRemoteMode } from '../../bootstrap/state.js'
|
|
5
|
+
import { registerCleanup } from '../cleanupRegistry.js'
|
|
6
|
+
import { logForDebugging } from '../debug.js'
|
|
7
|
+
import { errorMessage } from '../errors.js'
|
|
8
|
+
import {
|
|
9
|
+
type ConfigChangeSource,
|
|
10
|
+
executeConfigChangeHooks,
|
|
11
|
+
hasBlockingResult,
|
|
12
|
+
} from '../hooks.js'
|
|
13
|
+
import { createSignal } from '../signal.js'
|
|
14
|
+
import { jsonStringify } from '../slowOperations.js'
|
|
15
|
+
import { SETTING_SOURCES, type SettingSource } from './constants.js'
|
|
16
|
+
import { clearInternalWrites, consumeInternalWrite } from './internalWrites.js'
|
|
17
|
+
import { getManagedSettingsDropInDir } from './managedPath.js'
|
|
18
|
+
import {
|
|
19
|
+
getHkcuSettings,
|
|
20
|
+
getMdmSettings,
|
|
21
|
+
refreshMdmSettings,
|
|
22
|
+
setMdmSettingsCache,
|
|
23
|
+
} from './mdm/settings.js'
|
|
24
|
+
import { getSettingsFilePathForSource } from './settings.js'
|
|
25
|
+
import { resetSettingsCache } from './settingsCache.js'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Time in milliseconds to wait for file writes to stabilize before processing.
|
|
29
|
+
* This helps avoid processing partial writes or rapid successive changes.
|
|
30
|
+
*/
|
|
31
|
+
const FILE_STABILITY_THRESHOLD_MS = 1000
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Polling interval in milliseconds for checking file stability.
|
|
35
|
+
* Used by chokidar's awaitWriteFinish option.
|
|
36
|
+
* Must be lower than FILE_STABILITY_THRESHOLD_MS.
|
|
37
|
+
*/
|
|
38
|
+
const FILE_STABILITY_POLL_INTERVAL_MS = 500
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Time window in milliseconds to consider a file change as internal.
|
|
42
|
+
* If a file change occurs within this window after markInternalWrite() is called,
|
|
43
|
+
* it's assumed to be from Claude Code itself and won't trigger a notification.
|
|
44
|
+
*/
|
|
45
|
+
const INTERNAL_WRITE_WINDOW_MS = 5000
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Poll interval for MDM settings (registry/plist) changes.
|
|
49
|
+
* These can't be watched via filesystem events, so we poll periodically.
|
|
50
|
+
*/
|
|
51
|
+
const MDM_POLL_INTERVAL_MS = 30 * 60 * 1000 // 30 minutes
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Grace period in milliseconds before processing a settings file deletion.
|
|
55
|
+
* Handles the common delete-and-recreate pattern during auto-updates or when
|
|
56
|
+
* another session starts up. If an `add` or `change` event fires within this
|
|
57
|
+
* window (file was recreated), the deletion is cancelled and treated as a change.
|
|
58
|
+
*
|
|
59
|
+
* Must exceed chokidar's awaitWriteFinish delay (stabilityThreshold + pollInterval)
|
|
60
|
+
* so the grace window outlasts the write stability check on the recreated file.
|
|
61
|
+
*/
|
|
62
|
+
const DELETION_GRACE_MS =
|
|
63
|
+
FILE_STABILITY_THRESHOLD_MS + FILE_STABILITY_POLL_INTERVAL_MS + 200
|
|
64
|
+
|
|
65
|
+
let watcher: FSWatcher | null = null
|
|
66
|
+
let mdmPollTimer: ReturnType<typeof setInterval> | null = null
|
|
67
|
+
let lastMdmSnapshot: string | null = null
|
|
68
|
+
let initialized = false
|
|
69
|
+
let disposed = false
|
|
70
|
+
const pendingDeletions = new Map<string, ReturnType<typeof setTimeout>>()
|
|
71
|
+
const settingsChanged = createSignal<[source: SettingSource]>()
|
|
72
|
+
|
|
73
|
+
// Test overrides for timing constants
|
|
74
|
+
let testOverrides: {
|
|
75
|
+
stabilityThreshold?: number
|
|
76
|
+
pollInterval?: number
|
|
77
|
+
mdmPollInterval?: number
|
|
78
|
+
deletionGrace?: number
|
|
79
|
+
} | null = null
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Initialize file watching
|
|
83
|
+
*/
|
|
84
|
+
export async function initialize(): Promise<void> {
|
|
85
|
+
if (getIsRemoteMode()) return
|
|
86
|
+
if (initialized || disposed) return
|
|
87
|
+
initialized = true
|
|
88
|
+
|
|
89
|
+
// Start MDM poll for registry/plist changes (independent of filesystem watching)
|
|
90
|
+
startMdmPoll()
|
|
91
|
+
|
|
92
|
+
// Register cleanup to properly dispose during graceful shutdown
|
|
93
|
+
registerCleanup(dispose)
|
|
94
|
+
|
|
95
|
+
const { dirs, settingsFiles, dropInDir } = await getWatchTargets()
|
|
96
|
+
if (disposed) return // dispose() ran during the await
|
|
97
|
+
if (dirs.length === 0) return
|
|
98
|
+
|
|
99
|
+
logForDebugging(
|
|
100
|
+
`Watching for changes in setting files ${[...settingsFiles].join(', ')}...${dropInDir ? ` and drop-in directory ${dropInDir}` : ''}`,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
watcher = chokidar.watch(dirs, {
|
|
104
|
+
persistent: true,
|
|
105
|
+
ignoreInitial: true,
|
|
106
|
+
depth: 0, // Only watch immediate children, not subdirectories
|
|
107
|
+
awaitWriteFinish: {
|
|
108
|
+
stabilityThreshold:
|
|
109
|
+
testOverrides?.stabilityThreshold ?? FILE_STABILITY_THRESHOLD_MS,
|
|
110
|
+
pollInterval:
|
|
111
|
+
testOverrides?.pollInterval ?? FILE_STABILITY_POLL_INTERVAL_MS,
|
|
112
|
+
},
|
|
113
|
+
ignored: (path, stats) => {
|
|
114
|
+
// Ignore special file types (sockets, FIFOs, devices) - they cannot be watched
|
|
115
|
+
// and will error with EOPNOTSUPP on macOS.
|
|
116
|
+
if (stats && !stats.isFile() && !stats.isDirectory()) return true
|
|
117
|
+
// Ignore .git directories
|
|
118
|
+
if (path.split(platformPath.sep).some(dir => dir === '.git')) return true
|
|
119
|
+
// Allow directories (chokidar needs them for directory-level watching)
|
|
120
|
+
// and paths without stats (chokidar's initial check before stat)
|
|
121
|
+
if (!stats || stats.isDirectory()) return false
|
|
122
|
+
// Only watch known settings files, ignore everything else in the directory
|
|
123
|
+
// Note: chokidar normalizes paths to forward slashes on Windows, so we
|
|
124
|
+
// normalize back to native format for comparison
|
|
125
|
+
const normalized = platformPath.normalize(path)
|
|
126
|
+
if (settingsFiles.has(normalized)) return false
|
|
127
|
+
// Also accept .json files inside the managed-settings.d/ drop-in directory
|
|
128
|
+
if (
|
|
129
|
+
dropInDir &&
|
|
130
|
+
normalized.startsWith(dropInDir + platformPath.sep) &&
|
|
131
|
+
normalized.endsWith('.json')
|
|
132
|
+
) {
|
|
133
|
+
return false
|
|
134
|
+
}
|
|
135
|
+
return true
|
|
136
|
+
},
|
|
137
|
+
// Additional options for stability
|
|
138
|
+
ignorePermissionErrors: true,
|
|
139
|
+
usePolling: false, // Use native file system events
|
|
140
|
+
atomic: true, // Handle atomic writes better
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
watcher.on('change', handleChange)
|
|
144
|
+
watcher.on('unlink', handleDelete)
|
|
145
|
+
watcher.on('add', handleAdd)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Clean up file watcher. Returns a promise that resolves when chokidar's
|
|
150
|
+
* close() settles — callers that need the watcher fully stopped before
|
|
151
|
+
* removing the watched directory (e.g. test teardown) must await this.
|
|
152
|
+
* Fire-and-forget is still valid where timing doesn't matter.
|
|
153
|
+
*/
|
|
154
|
+
export function dispose(): Promise<void> {
|
|
155
|
+
disposed = true
|
|
156
|
+
if (mdmPollTimer) {
|
|
157
|
+
clearInterval(mdmPollTimer)
|
|
158
|
+
mdmPollTimer = null
|
|
159
|
+
}
|
|
160
|
+
for (const timer of pendingDeletions.values()) clearTimeout(timer)
|
|
161
|
+
pendingDeletions.clear()
|
|
162
|
+
lastMdmSnapshot = null
|
|
163
|
+
clearInternalWrites()
|
|
164
|
+
settingsChanged.clear()
|
|
165
|
+
const w = watcher
|
|
166
|
+
watcher = null
|
|
167
|
+
return w ? w.close() : Promise.resolve()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Subscribe to settings changes
|
|
172
|
+
*/
|
|
173
|
+
export const subscribe = settingsChanged.subscribe
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Collect settings file paths and their deduplicated parent directories to watch.
|
|
177
|
+
* Returns all potential settings file paths for watched directories, not just those
|
|
178
|
+
* that exist at init time, so that newly-created files are also detected.
|
|
179
|
+
*/
|
|
180
|
+
async function getWatchTargets(): Promise<{
|
|
181
|
+
dirs: string[]
|
|
182
|
+
settingsFiles: Set<string>
|
|
183
|
+
dropInDir: string | null
|
|
184
|
+
}> {
|
|
185
|
+
// Map from directory to all potential settings files in that directory
|
|
186
|
+
const dirToSettingsFiles = new Map<string, Set<string>>()
|
|
187
|
+
const dirsWithExistingFiles = new Set<string>()
|
|
188
|
+
|
|
189
|
+
for (const source of SETTING_SOURCES) {
|
|
190
|
+
// Skip flagSettings - they're provided via CLI and won't change during the session.
|
|
191
|
+
// Additionally, they may be temp files in $TMPDIR which can contain special files
|
|
192
|
+
// (FIFOs, sockets) that cause the file watcher to hang or error.
|
|
193
|
+
// See: https://github.com/anthropics/claude-code/issues/16469
|
|
194
|
+
if (source === 'flagSettings') {
|
|
195
|
+
continue
|
|
196
|
+
}
|
|
197
|
+
const path = getSettingsFilePathForSource(source)
|
|
198
|
+
if (!path) {
|
|
199
|
+
continue
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const dir = platformPath.dirname(path)
|
|
203
|
+
|
|
204
|
+
// Track all potential settings files in each directory
|
|
205
|
+
if (!dirToSettingsFiles.has(dir)) {
|
|
206
|
+
dirToSettingsFiles.set(dir, new Set())
|
|
207
|
+
}
|
|
208
|
+
dirToSettingsFiles.get(dir)!.add(path)
|
|
209
|
+
|
|
210
|
+
// Check if file exists - only watch directories that have at least one existing file
|
|
211
|
+
try {
|
|
212
|
+
const stats = await stat(path)
|
|
213
|
+
if (stats.isFile()) {
|
|
214
|
+
dirsWithExistingFiles.add(dir)
|
|
215
|
+
}
|
|
216
|
+
} catch {
|
|
217
|
+
// File doesn't exist, that's fine
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// For watched directories, include ALL potential settings file paths
|
|
222
|
+
// This ensures files created after init are also detected
|
|
223
|
+
const settingsFiles = new Set<string>()
|
|
224
|
+
for (const dir of dirsWithExistingFiles) {
|
|
225
|
+
const filesInDir = dirToSettingsFiles.get(dir)
|
|
226
|
+
if (filesInDir) {
|
|
227
|
+
for (const file of filesInDir) {
|
|
228
|
+
settingsFiles.add(file)
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Also watch the managed-settings.d/ drop-in directory for policy fragments.
|
|
234
|
+
// We add it as a separate watched directory so chokidar's depth:0 watches
|
|
235
|
+
// its immediate children (the .json files). Any .json file inside it maps
|
|
236
|
+
// to the 'policySettings' source.
|
|
237
|
+
let dropInDir: string | null = null
|
|
238
|
+
const managedDropIn = getManagedSettingsDropInDir()
|
|
239
|
+
try {
|
|
240
|
+
const stats = await stat(managedDropIn)
|
|
241
|
+
if (stats.isDirectory()) {
|
|
242
|
+
dirsWithExistingFiles.add(managedDropIn)
|
|
243
|
+
dropInDir = managedDropIn
|
|
244
|
+
}
|
|
245
|
+
} catch {
|
|
246
|
+
// Drop-in directory doesn't exist, that's fine
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return { dirs: [...dirsWithExistingFiles], settingsFiles, dropInDir }
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function settingSourceToConfigChangeSource(
|
|
253
|
+
source: SettingSource,
|
|
254
|
+
): ConfigChangeSource {
|
|
255
|
+
switch (source) {
|
|
256
|
+
case 'userSettings':
|
|
257
|
+
return 'user_settings'
|
|
258
|
+
case 'projectSettings':
|
|
259
|
+
return 'project_settings'
|
|
260
|
+
case 'localSettings':
|
|
261
|
+
return 'local_settings'
|
|
262
|
+
case 'flagSettings':
|
|
263
|
+
case 'policySettings':
|
|
264
|
+
return 'policy_settings'
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function handleChange(path: string): void {
|
|
269
|
+
const source = getSourceForPath(path)
|
|
270
|
+
if (!source) return
|
|
271
|
+
|
|
272
|
+
// If a deletion was pending for this path (delete-and-recreate pattern),
|
|
273
|
+
// cancel the deletion — we'll process this as a change instead.
|
|
274
|
+
const pendingTimer = pendingDeletions.get(path)
|
|
275
|
+
if (pendingTimer) {
|
|
276
|
+
clearTimeout(pendingTimer)
|
|
277
|
+
pendingDeletions.delete(path)
|
|
278
|
+
logForDebugging(
|
|
279
|
+
`Cancelled pending deletion of ${path} — file was recreated`,
|
|
280
|
+
)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Check if this was an internal write
|
|
284
|
+
if (consumeInternalWrite(path, INTERNAL_WRITE_WINDOW_MS)) {
|
|
285
|
+
return
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
logForDebugging(`Detected change to ${path}`)
|
|
289
|
+
|
|
290
|
+
// Fire ConfigChange hook first — if blocked (exit code 2 or decision: 'block'),
|
|
291
|
+
// skip applying the change to the session
|
|
292
|
+
void executeConfigChangeHooks(
|
|
293
|
+
settingSourceToConfigChangeSource(source),
|
|
294
|
+
path,
|
|
295
|
+
).then(results => {
|
|
296
|
+
if (hasBlockingResult(results)) {
|
|
297
|
+
logForDebugging(`ConfigChange hook blocked change to ${path}`)
|
|
298
|
+
return
|
|
299
|
+
}
|
|
300
|
+
fanOut(source)
|
|
301
|
+
})
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Handle a file being re-added (e.g. after a delete-and-recreate). Cancels any
|
|
306
|
+
* pending deletion grace timer and treats the event as a change.
|
|
307
|
+
*/
|
|
308
|
+
function handleAdd(path: string): void {
|
|
309
|
+
const source = getSourceForPath(path)
|
|
310
|
+
if (!source) return
|
|
311
|
+
|
|
312
|
+
// Cancel any pending deletion — the file is back
|
|
313
|
+
const pendingTimer = pendingDeletions.get(path)
|
|
314
|
+
if (pendingTimer) {
|
|
315
|
+
clearTimeout(pendingTimer)
|
|
316
|
+
pendingDeletions.delete(path)
|
|
317
|
+
logForDebugging(`Cancelled pending deletion of ${path} — file was re-added`)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Treat as a change (re-read settings)
|
|
321
|
+
handleChange(path)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Handle a file being deleted. Uses a grace period to absorb delete-and-recreate
|
|
326
|
+
* patterns (e.g. auto-updater, another session starting up). If the file is
|
|
327
|
+
* recreated within the grace period (detected via 'add' or 'change' event),
|
|
328
|
+
* the deletion is cancelled and treated as a normal change instead.
|
|
329
|
+
*/
|
|
330
|
+
function handleDelete(path: string): void {
|
|
331
|
+
const source = getSourceForPath(path)
|
|
332
|
+
if (!source) return
|
|
333
|
+
|
|
334
|
+
logForDebugging(`Detected deletion of ${path}`)
|
|
335
|
+
|
|
336
|
+
// If there's already a pending deletion for this path, let it run
|
|
337
|
+
if (pendingDeletions.has(path)) return
|
|
338
|
+
|
|
339
|
+
const timer = setTimeout(
|
|
340
|
+
(p, src) => {
|
|
341
|
+
pendingDeletions.delete(p)
|
|
342
|
+
|
|
343
|
+
// Fire ConfigChange hook first — if blocked, skip applying the deletion
|
|
344
|
+
void executeConfigChangeHooks(
|
|
345
|
+
settingSourceToConfigChangeSource(src),
|
|
346
|
+
p,
|
|
347
|
+
).then(results => {
|
|
348
|
+
if (hasBlockingResult(results)) {
|
|
349
|
+
logForDebugging(`ConfigChange hook blocked deletion of ${p}`)
|
|
350
|
+
return
|
|
351
|
+
}
|
|
352
|
+
fanOut(src)
|
|
353
|
+
})
|
|
354
|
+
},
|
|
355
|
+
testOverrides?.deletionGrace ?? DELETION_GRACE_MS,
|
|
356
|
+
path,
|
|
357
|
+
source,
|
|
358
|
+
)
|
|
359
|
+
pendingDeletions.set(path, timer)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function getSourceForPath(path: string): SettingSource | undefined {
|
|
363
|
+
// Normalize path because chokidar uses forward slashes on Windows
|
|
364
|
+
const normalizedPath = platformPath.normalize(path)
|
|
365
|
+
|
|
366
|
+
// Check if the path is inside the managed-settings.d/ drop-in directory
|
|
367
|
+
const dropInDir = getManagedSettingsDropInDir()
|
|
368
|
+
if (normalizedPath.startsWith(dropInDir + platformPath.sep)) {
|
|
369
|
+
return 'policySettings'
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return SETTING_SOURCES.find(
|
|
373
|
+
source => getSettingsFilePathForSource(source) === normalizedPath,
|
|
374
|
+
)
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Start polling for MDM settings changes (registry/plist).
|
|
379
|
+
* Takes a snapshot of current MDM settings and compares on each tick.
|
|
380
|
+
*/
|
|
381
|
+
function startMdmPoll(): void {
|
|
382
|
+
// Capture initial snapshot (includes both admin MDM and user-writable HKCU)
|
|
383
|
+
const initial = getMdmSettings()
|
|
384
|
+
const initialHkcu = getHkcuSettings()
|
|
385
|
+
lastMdmSnapshot = jsonStringify({
|
|
386
|
+
mdm: initial.settings,
|
|
387
|
+
hkcu: initialHkcu.settings,
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
mdmPollTimer = setInterval(() => {
|
|
391
|
+
if (disposed) return
|
|
392
|
+
|
|
393
|
+
void (async () => {
|
|
394
|
+
try {
|
|
395
|
+
const { mdm: current, hkcu: currentHkcu } = await refreshMdmSettings()
|
|
396
|
+
if (disposed) return
|
|
397
|
+
|
|
398
|
+
const currentSnapshot = jsonStringify({
|
|
399
|
+
mdm: current.settings,
|
|
400
|
+
hkcu: currentHkcu.settings,
|
|
401
|
+
})
|
|
402
|
+
|
|
403
|
+
if (currentSnapshot !== lastMdmSnapshot) {
|
|
404
|
+
lastMdmSnapshot = currentSnapshot
|
|
405
|
+
// Update the cache so sync readers pick up new values
|
|
406
|
+
setMdmSettingsCache(current, currentHkcu)
|
|
407
|
+
logForDebugging('Detected MDM settings change via poll')
|
|
408
|
+
fanOut('policySettings')
|
|
409
|
+
}
|
|
410
|
+
} catch (error) {
|
|
411
|
+
logForDebugging(`MDM poll error: ${errorMessage(error)}`)
|
|
412
|
+
}
|
|
413
|
+
})()
|
|
414
|
+
}, testOverrides?.mdmPollInterval ?? MDM_POLL_INTERVAL_MS)
|
|
415
|
+
|
|
416
|
+
// Don't let the timer keep the process alive
|
|
417
|
+
mdmPollTimer.unref()
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Reset the settings cache, then notify all listeners.
|
|
422
|
+
*
|
|
423
|
+
* The cache reset MUST happen here (single producer), not in each listener
|
|
424
|
+
* (N consumers). Previously, listeners like useSettingsChange and
|
|
425
|
+
* applySettingsChange reset defensively because some notification paths
|
|
426
|
+
* (file-watch at :289/340, MDM poll at :385) did not reset before iterating
|
|
427
|
+
* listeners. That defense caused N-way thrashing when N listeners were
|
|
428
|
+
* subscribed: each listener cleared the cache, re-read from disk (populating
|
|
429
|
+
* it), then the next listener cleared it again — N full disk reloads per
|
|
430
|
+
* notification. Profile showed 5 loadSettingsFromDisk calls in 12ms when
|
|
431
|
+
* remote managed settings resolved at startup.
|
|
432
|
+
*
|
|
433
|
+
* With the reset centralized here, one notification = one disk reload: the
|
|
434
|
+
* first listener to call getSettingsWithErrors() pays the miss and
|
|
435
|
+
* repopulates; all subsequent listeners hit the cache.
|
|
436
|
+
*/
|
|
437
|
+
function fanOut(source: SettingSource): void {
|
|
438
|
+
resetSettingsCache()
|
|
439
|
+
settingsChanged.emit(source)
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Manually notify listeners of a settings change.
|
|
444
|
+
* Used for programmatic settings changes (e.g., remote managed settings refresh)
|
|
445
|
+
* that don't involve file system changes.
|
|
446
|
+
*/
|
|
447
|
+
export function notifyChange(source: SettingSource): void {
|
|
448
|
+
logForDebugging(`Programmatic settings change notification for ${source}`)
|
|
449
|
+
fanOut(source)
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Reset internal state for testing purposes only.
|
|
454
|
+
* This allows re-initialization after dispose().
|
|
455
|
+
* Optionally accepts timing overrides for faster test execution.
|
|
456
|
+
*
|
|
457
|
+
* Closes the watcher and returns the close promise so preload's afterEach
|
|
458
|
+
* can await it BEFORE nuking perTestSettingsDir. Without this, chokidar's
|
|
459
|
+
* pending awaitWriteFinish poll fires on the deleted dir → ENOENT (#25253).
|
|
460
|
+
*/
|
|
461
|
+
export function resetForTesting(overrides?: {
|
|
462
|
+
stabilityThreshold?: number
|
|
463
|
+
pollInterval?: number
|
|
464
|
+
mdmPollInterval?: number
|
|
465
|
+
deletionGrace?: number
|
|
466
|
+
}): Promise<void> {
|
|
467
|
+
if (mdmPollTimer) {
|
|
468
|
+
clearInterval(mdmPollTimer)
|
|
469
|
+
mdmPollTimer = null
|
|
470
|
+
}
|
|
471
|
+
for (const timer of pendingDeletions.values()) clearTimeout(timer)
|
|
472
|
+
pendingDeletions.clear()
|
|
473
|
+
lastMdmSnapshot = null
|
|
474
|
+
initialized = false
|
|
475
|
+
disposed = false
|
|
476
|
+
testOverrides = overrides ?? null
|
|
477
|
+
const w = watcher
|
|
478
|
+
watcher = null
|
|
479
|
+
return w ? w.close() : Promise.resolve()
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
export const settingsChangeDetector = {
|
|
483
|
+
initialize,
|
|
484
|
+
dispose,
|
|
485
|
+
subscribe,
|
|
486
|
+
notifyChange,
|
|
487
|
+
resetForTesting,
|
|
488
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { getAllowedSettingSources } from '../../bootstrap/state.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* All possible sources where settings can come from
|
|
5
|
+
* Order matters - later sources override earlier ones
|
|
6
|
+
*/
|
|
7
|
+
export const SETTING_SOURCES = [
|
|
8
|
+
// User settings (global)
|
|
9
|
+
'userSettings',
|
|
10
|
+
|
|
11
|
+
// Project settings (shared per-directory)
|
|
12
|
+
'projectSettings',
|
|
13
|
+
|
|
14
|
+
// Local settings (gitignored)
|
|
15
|
+
'localSettings',
|
|
16
|
+
|
|
17
|
+
// Flag settings (from --settings flag)
|
|
18
|
+
'flagSettings',
|
|
19
|
+
|
|
20
|
+
// Policy settings (managed-settings.json or remote settings from API)
|
|
21
|
+
'policySettings',
|
|
22
|
+
] as const
|
|
23
|
+
|
|
24
|
+
export type SettingSource = (typeof SETTING_SOURCES)[number]
|
|
25
|
+
|
|
26
|
+
export function getSettingSourceName(source: SettingSource): string {
|
|
27
|
+
switch (source) {
|
|
28
|
+
case 'userSettings':
|
|
29
|
+
return 'user'
|
|
30
|
+
case 'projectSettings':
|
|
31
|
+
return 'project'
|
|
32
|
+
case 'localSettings':
|
|
33
|
+
return 'project, gitignored'
|
|
34
|
+
case 'flagSettings':
|
|
35
|
+
return 'cli flag'
|
|
36
|
+
case 'policySettings':
|
|
37
|
+
return 'managed'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Get short display name for a setting source (capitalized, for context/skills UI)
|
|
43
|
+
* @param source The setting source or 'plugin'/'built-in'
|
|
44
|
+
* @returns Short capitalized display name like 'User', 'Project', 'Plugin'
|
|
45
|
+
*/
|
|
46
|
+
export function getSourceDisplayName(
|
|
47
|
+
source: SettingSource | 'plugin' | 'built-in',
|
|
48
|
+
): string {
|
|
49
|
+
switch (source) {
|
|
50
|
+
case 'userSettings':
|
|
51
|
+
return 'User'
|
|
52
|
+
case 'projectSettings':
|
|
53
|
+
return 'Project'
|
|
54
|
+
case 'localSettings':
|
|
55
|
+
return 'Local'
|
|
56
|
+
case 'flagSettings':
|
|
57
|
+
return 'Flag'
|
|
58
|
+
case 'policySettings':
|
|
59
|
+
return 'Managed'
|
|
60
|
+
case 'plugin':
|
|
61
|
+
return 'Plugin'
|
|
62
|
+
case 'built-in':
|
|
63
|
+
return 'Built-in'
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get display name for a setting or permission rule source (lowercase, for inline use)
|
|
69
|
+
* @param source The setting source or permission rule source
|
|
70
|
+
* @returns Display name for the source in lowercase
|
|
71
|
+
*/
|
|
72
|
+
export function getSettingSourceDisplayNameLowercase(
|
|
73
|
+
source: SettingSource | 'cliArg' | 'command' | 'session',
|
|
74
|
+
): string {
|
|
75
|
+
switch (source) {
|
|
76
|
+
case 'userSettings':
|
|
77
|
+
return 'user settings'
|
|
78
|
+
case 'projectSettings':
|
|
79
|
+
return 'shared project settings'
|
|
80
|
+
case 'localSettings':
|
|
81
|
+
return 'project local settings'
|
|
82
|
+
case 'flagSettings':
|
|
83
|
+
return 'command line arguments'
|
|
84
|
+
case 'policySettings':
|
|
85
|
+
return 'enterprise managed settings'
|
|
86
|
+
case 'cliArg':
|
|
87
|
+
return 'CLI argument'
|
|
88
|
+
case 'command':
|
|
89
|
+
return 'command configuration'
|
|
90
|
+
case 'session':
|
|
91
|
+
return 'current session'
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get display name for a setting or permission rule source (capitalized, for UI labels)
|
|
97
|
+
* @param source The setting source or permission rule source
|
|
98
|
+
* @returns Display name for the source with first letter capitalized
|
|
99
|
+
*/
|
|
100
|
+
export function getSettingSourceDisplayNameCapitalized(
|
|
101
|
+
source: SettingSource | 'cliArg' | 'command' | 'session',
|
|
102
|
+
): string {
|
|
103
|
+
switch (source) {
|
|
104
|
+
case 'userSettings':
|
|
105
|
+
return 'User settings'
|
|
106
|
+
case 'projectSettings':
|
|
107
|
+
return 'Shared project settings'
|
|
108
|
+
case 'localSettings':
|
|
109
|
+
return 'Project local settings'
|
|
110
|
+
case 'flagSettings':
|
|
111
|
+
return 'Command line arguments'
|
|
112
|
+
case 'policySettings':
|
|
113
|
+
return 'Enterprise managed settings'
|
|
114
|
+
case 'cliArg':
|
|
115
|
+
return 'CLI argument'
|
|
116
|
+
case 'command':
|
|
117
|
+
return 'Command configuration'
|
|
118
|
+
case 'session':
|
|
119
|
+
return 'Current session'
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Parse the --setting-sources CLI flag into SettingSource array
|
|
125
|
+
* @param flag Comma-separated string like "user,project,local"
|
|
126
|
+
* @returns Array of SettingSource values
|
|
127
|
+
*/
|
|
128
|
+
export function parseSettingSourcesFlag(flag: string): SettingSource[] {
|
|
129
|
+
if (flag === '') return []
|
|
130
|
+
|
|
131
|
+
const names = flag.split(',').map(s => s.trim())
|
|
132
|
+
const result: SettingSource[] = []
|
|
133
|
+
|
|
134
|
+
for (const name of names) {
|
|
135
|
+
switch (name) {
|
|
136
|
+
case 'user':
|
|
137
|
+
result.push('userSettings')
|
|
138
|
+
break
|
|
139
|
+
case 'project':
|
|
140
|
+
result.push('projectSettings')
|
|
141
|
+
break
|
|
142
|
+
case 'local':
|
|
143
|
+
result.push('localSettings')
|
|
144
|
+
break
|
|
145
|
+
default:
|
|
146
|
+
throw new Error(
|
|
147
|
+
`Invalid setting source: ${name}. Valid options are: user, project, local`,
|
|
148
|
+
)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return result
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Get enabled setting sources with policy/flag always included
|
|
157
|
+
* @returns Array of enabled SettingSource values
|
|
158
|
+
*/
|
|
159
|
+
export function getEnabledSettingSources(): SettingSource[] {
|
|
160
|
+
const allowed = getAllowedSettingSources()
|
|
161
|
+
|
|
162
|
+
// Always include policy and flag settings
|
|
163
|
+
const result = new Set<SettingSource>(allowed)
|
|
164
|
+
result.add('policySettings')
|
|
165
|
+
result.add('flagSettings')
|
|
166
|
+
return Array.from(result)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Check if a specific source is enabled
|
|
171
|
+
* @param source The source to check
|
|
172
|
+
* @returns true if the source should be loaded
|
|
173
|
+
*/
|
|
174
|
+
export function isSettingSourceEnabled(source: SettingSource): boolean {
|
|
175
|
+
const enabled = getEnabledSettingSources()
|
|
176
|
+
return enabled.includes(source)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Editable setting sources (excludes policySettings and flagSettings which are read-only)
|
|
181
|
+
*/
|
|
182
|
+
export type EditableSettingSource = Exclude<
|
|
183
|
+
SettingSource,
|
|
184
|
+
'policySettings' | 'flagSettings'
|
|
185
|
+
>
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* List of sources where permission rules can be saved, in display order.
|
|
189
|
+
* Used by permission-rule and hook-save UIs to present source options.
|
|
190
|
+
*/
|
|
191
|
+
export const SOURCES = [
|
|
192
|
+
'localSettings',
|
|
193
|
+
'projectSettings',
|
|
194
|
+
'userSettings',
|
|
195
|
+
] as const satisfies readonly EditableSettingSource[]
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* The JSON Schema URL for Claude Code settings
|
|
199
|
+
* You can edit the contents at https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/claude-code-settings.json
|
|
200
|
+
*/
|
|
201
|
+
export const CLAUDE_CODE_SETTINGS_SCHEMA_URL =
|
|
202
|
+
'https://json.schemastore.org/claude-code-settings.json'
|