@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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks timestamps of in-process settings-file writes so the chokidar watcher
|
|
3
|
+
* in changeDetector.ts can ignore its own echoes.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from changeDetector.ts to break the settings.ts → changeDetector.ts →
|
|
6
|
+
* hooks.ts → … → settings.ts cycle. settings.ts needs to mark "I'm about to
|
|
7
|
+
* write" before the write lands; changeDetector needs to read the mark when
|
|
8
|
+
* chokidar fires. The map is the only shared state — everything else in
|
|
9
|
+
* changeDetector (chokidar, hooks, mdm polling) is irrelevant to settings.ts.
|
|
10
|
+
*
|
|
11
|
+
* Callers pass resolved paths. The path→source resolution (getSettingsFilePathForSource)
|
|
12
|
+
* lives in settings.ts, so settings.ts does it before calling here. No imports.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const timestamps = new Map<string, number>()
|
|
16
|
+
|
|
17
|
+
export function markInternalWrite(path: string): void {
|
|
18
|
+
timestamps.set(path, Date.now())
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* True if `path` was marked within `windowMs`. Consumes the mark on match —
|
|
23
|
+
* the watcher fires once per write, so a matched mark shouldn't suppress
|
|
24
|
+
* the next (real, external) change to the same file.
|
|
25
|
+
*/
|
|
26
|
+
export function consumeInternalWrite(path: string, windowMs: number): boolean {
|
|
27
|
+
const ts = timestamps.get(path)
|
|
28
|
+
if (ts !== undefined && Date.now() - ts < windowMs) {
|
|
29
|
+
timestamps.delete(path)
|
|
30
|
+
return true
|
|
31
|
+
}
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function clearInternalWrites(): void {
|
|
36
|
+
timestamps.clear()
|
|
37
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import memoize from 'lodash-es/memoize.js'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { getPlatform } from '../platform.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Get the path to the managed settings directory based on the current platform.
|
|
7
|
+
*/
|
|
8
|
+
export const getManagedFilePath = memoize(function (): string {
|
|
9
|
+
// Allow override for testing/demos (Ant-only, eliminated from external builds)
|
|
10
|
+
if (
|
|
11
|
+
process.env.USER_TYPE === 'ant' &&
|
|
12
|
+
process.env.CLAUDE_CODE_MANAGED_SETTINGS_PATH
|
|
13
|
+
) {
|
|
14
|
+
return process.env.CLAUDE_CODE_MANAGED_SETTINGS_PATH
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
switch (getPlatform()) {
|
|
18
|
+
case 'macos':
|
|
19
|
+
return '/Library/Application Support/ClaudeCode'
|
|
20
|
+
case 'windows':
|
|
21
|
+
return 'C:\\Program Files\\ClaudeCode'
|
|
22
|
+
default:
|
|
23
|
+
return '/etc/claude-code'
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get the path to the managed-settings.d/ drop-in directory.
|
|
29
|
+
* managed-settings.json is merged first (base), then files in this directory
|
|
30
|
+
* are merged alphabetically on top (drop-ins override base, later files win).
|
|
31
|
+
*/
|
|
32
|
+
export const getManagedSettingsDropInDir = memoize(function (): string {
|
|
33
|
+
return join(getManagedFilePath(), 'managed-settings.d')
|
|
34
|
+
})
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants and path builders for MDM settings modules.
|
|
3
|
+
*
|
|
4
|
+
* This module has ZERO heavy imports (only `os`) — safe to use from mdmRawRead.ts.
|
|
5
|
+
* Both mdmRawRead.ts and mdmSettings.ts import from here to avoid duplication.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { homedir, userInfo } from 'os'
|
|
9
|
+
import { join } from 'path'
|
|
10
|
+
|
|
11
|
+
/** macOS preference domain for Claude Code MDM profiles. */
|
|
12
|
+
export const MACOS_PREFERENCE_DOMAIN = 'com.anthropic.claudecode'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Windows registry key paths for Claude Code MDM policies.
|
|
16
|
+
*
|
|
17
|
+
* These keys live under SOFTWARE\Policies which is on the WOW64 shared key
|
|
18
|
+
* list — both 32-bit and 64-bit processes see the same values without
|
|
19
|
+
* redirection. Do not move these to SOFTWARE\ClaudeCode, as SOFTWARE is
|
|
20
|
+
* redirected and 32-bit processes would silently read from WOW6432Node.
|
|
21
|
+
* See: https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys
|
|
22
|
+
*/
|
|
23
|
+
export const WINDOWS_REGISTRY_KEY_PATH_HKLM =
|
|
24
|
+
'HKLM\\SOFTWARE\\Policies\\ClaudeCode'
|
|
25
|
+
export const WINDOWS_REGISTRY_KEY_PATH_HKCU =
|
|
26
|
+
'HKCU\\SOFTWARE\\Policies\\ClaudeCode'
|
|
27
|
+
|
|
28
|
+
/** Windows registry value name containing the JSON settings blob. */
|
|
29
|
+
export const WINDOWS_REGISTRY_VALUE_NAME = 'Settings'
|
|
30
|
+
|
|
31
|
+
/** Path to macOS plutil binary. */
|
|
32
|
+
export const PLUTIL_PATH = '/usr/bin/plutil'
|
|
33
|
+
|
|
34
|
+
/** Arguments for plutil to convert plist to JSON on stdout (append plist path). */
|
|
35
|
+
export const PLUTIL_ARGS_PREFIX = ['-convert', 'json', '-o', '-', '--'] as const
|
|
36
|
+
|
|
37
|
+
/** Subprocess timeout in milliseconds. */
|
|
38
|
+
export const MDM_SUBPROCESS_TIMEOUT_MS = 5000
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Build the list of macOS plist paths in priority order (highest first).
|
|
42
|
+
* Evaluates `process.env.USER_TYPE` at call time so ant-only paths are
|
|
43
|
+
* included only when appropriate.
|
|
44
|
+
*/
|
|
45
|
+
export function getMacOSPlistPaths(): Array<{ path: string; label: string }> {
|
|
46
|
+
let username = ''
|
|
47
|
+
try {
|
|
48
|
+
username = userInfo().username
|
|
49
|
+
} catch {
|
|
50
|
+
// ignore
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const paths: Array<{ path: string; label: string }> = []
|
|
54
|
+
|
|
55
|
+
if (username) {
|
|
56
|
+
paths.push({
|
|
57
|
+
path: `/Library/Managed Preferences/${username}/${MACOS_PREFERENCE_DOMAIN}.plist`,
|
|
58
|
+
label: 'per-user managed preferences',
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
paths.push({
|
|
63
|
+
path: `/Library/Managed Preferences/${MACOS_PREFERENCE_DOMAIN}.plist`,
|
|
64
|
+
label: 'device-level managed preferences',
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
// Allow user-writable preferences for local MDM testing in ant builds only.
|
|
68
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
69
|
+
paths.push({
|
|
70
|
+
path: join(
|
|
71
|
+
homedir(),
|
|
72
|
+
'Library',
|
|
73
|
+
'Preferences',
|
|
74
|
+
`${MACOS_PREFERENCE_DOMAIN}.plist`,
|
|
75
|
+
),
|
|
76
|
+
label: 'user preferences (ant-only)',
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return paths
|
|
81
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal module for firing MDM subprocess reads without blocking the event loop.
|
|
3
|
+
* Has minimal imports — only child_process, fs, and mdmConstants (which only imports os).
|
|
4
|
+
*
|
|
5
|
+
* Two usage patterns:
|
|
6
|
+
* 1. Startup: startMdmRawRead() fires at main.tsx module evaluation, results consumed later via getMdmRawReadPromise()
|
|
7
|
+
* 2. Poll/fallback: fireRawRead() creates a fresh read on demand (used by changeDetector and SDK entrypoint)
|
|
8
|
+
*
|
|
9
|
+
* Raw stdout is consumed by mdmSettings.ts via consumeRawReadResult().
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { execFile } from 'child_process'
|
|
13
|
+
import { existsSync } from 'fs'
|
|
14
|
+
import {
|
|
15
|
+
getMacOSPlistPaths,
|
|
16
|
+
MDM_SUBPROCESS_TIMEOUT_MS,
|
|
17
|
+
PLUTIL_ARGS_PREFIX,
|
|
18
|
+
PLUTIL_PATH,
|
|
19
|
+
WINDOWS_REGISTRY_KEY_PATH_HKCU,
|
|
20
|
+
WINDOWS_REGISTRY_KEY_PATH_HKLM,
|
|
21
|
+
WINDOWS_REGISTRY_VALUE_NAME,
|
|
22
|
+
} from './constants.js'
|
|
23
|
+
|
|
24
|
+
export type RawReadResult = {
|
|
25
|
+
plistStdouts: Array<{ stdout: string; label: string }> | null
|
|
26
|
+
hklmStdout: string | null
|
|
27
|
+
hkcuStdout: string | null
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let rawReadPromise: Promise<RawReadResult> | null = null
|
|
31
|
+
|
|
32
|
+
function execFilePromise(
|
|
33
|
+
cmd: string,
|
|
34
|
+
args: string[],
|
|
35
|
+
): Promise<{ stdout: string; code: number | null }> {
|
|
36
|
+
return new Promise(resolve => {
|
|
37
|
+
execFile(
|
|
38
|
+
cmd,
|
|
39
|
+
args,
|
|
40
|
+
{ encoding: 'utf-8', timeout: MDM_SUBPROCESS_TIMEOUT_MS },
|
|
41
|
+
(err, stdout) => {
|
|
42
|
+
// biome-ignore lint/nursery/noFloatingPromises: resolve() is not a floating promise
|
|
43
|
+
resolve({ stdout: stdout ?? '', code: err ? 1 : 0 })
|
|
44
|
+
},
|
|
45
|
+
)
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Fire fresh subprocess reads for MDM settings and return raw stdout.
|
|
51
|
+
* On macOS: spawns plutil for each plist path in parallel, picks first winner.
|
|
52
|
+
* On Windows: spawns reg query for HKLM and HKCU in parallel.
|
|
53
|
+
* On Linux: returns empty (no MDM equivalent).
|
|
54
|
+
*/
|
|
55
|
+
export function fireRawRead(): Promise<RawReadResult> {
|
|
56
|
+
return (async (): Promise<RawReadResult> => {
|
|
57
|
+
if (process.platform === 'darwin') {
|
|
58
|
+
const plistPaths = getMacOSPlistPaths()
|
|
59
|
+
|
|
60
|
+
const allResults = await Promise.all(
|
|
61
|
+
plistPaths.map(async ({ path, label }) => {
|
|
62
|
+
// Fast-path: skip the plutil subprocess if the plist file does not
|
|
63
|
+
// exist. Spawning plutil takes ~5ms even for an immediate ENOENT,
|
|
64
|
+
// and non-MDM machines never have these files.
|
|
65
|
+
// Uses synchronous existsSync to preserve the spawn-during-imports
|
|
66
|
+
// invariant: execFilePromise must be the first await so plutil
|
|
67
|
+
// spawns before the event loop polls (see main.tsx:3-4).
|
|
68
|
+
if (!existsSync(path)) {
|
|
69
|
+
return { stdout: '', label, ok: false }
|
|
70
|
+
}
|
|
71
|
+
const { stdout, code } = await execFilePromise(PLUTIL_PATH, [
|
|
72
|
+
...PLUTIL_ARGS_PREFIX,
|
|
73
|
+
path,
|
|
74
|
+
])
|
|
75
|
+
return { stdout, label, ok: code === 0 && !!stdout }
|
|
76
|
+
}),
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
// First source wins (array is in priority order)
|
|
80
|
+
const winner = allResults.find(r => r.ok)
|
|
81
|
+
return {
|
|
82
|
+
plistStdouts: winner
|
|
83
|
+
? [{ stdout: winner.stdout, label: winner.label }]
|
|
84
|
+
: [],
|
|
85
|
+
hklmStdout: null,
|
|
86
|
+
hkcuStdout: null,
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (process.platform === 'win32') {
|
|
91
|
+
const [hklm, hkcu] = await Promise.all([
|
|
92
|
+
execFilePromise('reg', [
|
|
93
|
+
'query',
|
|
94
|
+
WINDOWS_REGISTRY_KEY_PATH_HKLM,
|
|
95
|
+
'/v',
|
|
96
|
+
WINDOWS_REGISTRY_VALUE_NAME,
|
|
97
|
+
]),
|
|
98
|
+
execFilePromise('reg', [
|
|
99
|
+
'query',
|
|
100
|
+
WINDOWS_REGISTRY_KEY_PATH_HKCU,
|
|
101
|
+
'/v',
|
|
102
|
+
WINDOWS_REGISTRY_VALUE_NAME,
|
|
103
|
+
]),
|
|
104
|
+
])
|
|
105
|
+
return {
|
|
106
|
+
plistStdouts: null,
|
|
107
|
+
hklmStdout: hklm.code === 0 ? hklm.stdout : null,
|
|
108
|
+
hkcuStdout: hkcu.code === 0 ? hkcu.stdout : null,
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return { plistStdouts: null, hklmStdout: null, hkcuStdout: null }
|
|
113
|
+
})()
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Fire raw subprocess reads once for startup. Called at main.tsx module evaluation.
|
|
118
|
+
* Results are consumed via getMdmRawReadPromise().
|
|
119
|
+
*/
|
|
120
|
+
export function startMdmRawRead(): void {
|
|
121
|
+
if (rawReadPromise) return
|
|
122
|
+
rawReadPromise = fireRawRead()
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Get the startup promise. Returns null if startMdmRawRead() wasn't called.
|
|
127
|
+
*/
|
|
128
|
+
export function getMdmRawReadPromise(): Promise<RawReadResult> | null {
|
|
129
|
+
return rawReadPromise
|
|
130
|
+
}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDM (Mobile Device Management) profile enforcement for Claude Code managed settings.
|
|
3
|
+
*
|
|
4
|
+
* Reads enterprise settings from OS-level MDM configuration:
|
|
5
|
+
* - macOS: `com.anthropic.claudecode` preference domain
|
|
6
|
+
* (MDM profiles at /Library/Managed Preferences/ only — not user-writable ~/Library/Preferences/)
|
|
7
|
+
* - Windows: `HKLM\SOFTWARE\Policies\ClaudeCode` (admin-only)
|
|
8
|
+
* and `HKCU\SOFTWARE\Policies\ClaudeCode` (user-writable, lowest priority)
|
|
9
|
+
* - Linux: No MDM equivalent (uses /etc/claude-code/managed-settings.json instead)
|
|
10
|
+
*
|
|
11
|
+
* Policy settings use "first source wins" — the highest-priority source that exists
|
|
12
|
+
* provides all policy settings. Priority (highest to lowest):
|
|
13
|
+
* remote → HKLM/plist → managed-settings.json → HKCU
|
|
14
|
+
*
|
|
15
|
+
* Architecture:
|
|
16
|
+
* constants.ts — shared constants and plist path builder (zero heavy imports)
|
|
17
|
+
* rawRead.ts — subprocess I/O only (zero heavy imports, fires at main.tsx evaluation)
|
|
18
|
+
* settings.ts — parsing, caching, first-source-wins logic (this file)
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { join } from 'path'
|
|
22
|
+
import { logForDebugging } from '../../debug.js'
|
|
23
|
+
import { logForDiagnosticsNoPII } from '../../diagLogs.js'
|
|
24
|
+
import { readFileSync } from '../../fileRead.js'
|
|
25
|
+
import { getFsImplementation } from '../../fsOperations.js'
|
|
26
|
+
import { safeParseJSON } from '../../json.js'
|
|
27
|
+
import { profileCheckpoint } from '../../startupProfiler.js'
|
|
28
|
+
import {
|
|
29
|
+
getManagedFilePath,
|
|
30
|
+
getManagedSettingsDropInDir,
|
|
31
|
+
} from '../managedPath.js'
|
|
32
|
+
import { type SettingsJson, SettingsSchema } from '../types.js'
|
|
33
|
+
import {
|
|
34
|
+
filterInvalidPermissionRules,
|
|
35
|
+
formatZodError,
|
|
36
|
+
type ValidationError,
|
|
37
|
+
} from '../validation.js'
|
|
38
|
+
import {
|
|
39
|
+
WINDOWS_REGISTRY_KEY_PATH_HKCU,
|
|
40
|
+
WINDOWS_REGISTRY_KEY_PATH_HKLM,
|
|
41
|
+
WINDOWS_REGISTRY_VALUE_NAME,
|
|
42
|
+
} from './constants.js'
|
|
43
|
+
import {
|
|
44
|
+
fireRawRead,
|
|
45
|
+
getMdmRawReadPromise,
|
|
46
|
+
type RawReadResult,
|
|
47
|
+
} from './rawRead.js'
|
|
48
|
+
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Types and cache
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
type MdmResult = { settings: SettingsJson; errors: ValidationError[] }
|
|
54
|
+
const EMPTY_RESULT: MdmResult = Object.freeze({ settings: {}, errors: [] })
|
|
55
|
+
let mdmCache: MdmResult | null = null
|
|
56
|
+
let hkcuCache: MdmResult | null = null
|
|
57
|
+
let mdmLoadPromise: Promise<void> | null = null
|
|
58
|
+
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Startup load — fires early, awaited before first settings read
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Kick off async MDM/HKCU reads. Call this as early as possible in
|
|
65
|
+
* startup so the subprocess runs in parallel with module loading.
|
|
66
|
+
*/
|
|
67
|
+
export function startMdmSettingsLoad(): void {
|
|
68
|
+
if (mdmLoadPromise) return
|
|
69
|
+
mdmLoadPromise = (async () => {
|
|
70
|
+
profileCheckpoint('mdm_load_start')
|
|
71
|
+
const startTime = Date.now()
|
|
72
|
+
|
|
73
|
+
// Use the startup raw read if cli.tsx fired it, otherwise fire a fresh one.
|
|
74
|
+
// Both paths produce the same RawReadResult; consumeRawReadResult parses it.
|
|
75
|
+
const rawPromise = getMdmRawReadPromise() ?? fireRawRead()
|
|
76
|
+
const { mdm, hkcu } = consumeRawReadResult(await rawPromise)
|
|
77
|
+
mdmCache = mdm
|
|
78
|
+
hkcuCache = hkcu
|
|
79
|
+
profileCheckpoint('mdm_load_end')
|
|
80
|
+
|
|
81
|
+
const duration = Date.now() - startTime
|
|
82
|
+
logForDebugging(`MDM settings load completed in ${duration}ms`)
|
|
83
|
+
if (Object.keys(mdm.settings).length > 0) {
|
|
84
|
+
logForDebugging(
|
|
85
|
+
`MDM settings found: ${Object.keys(mdm.settings).join(', ')}`,
|
|
86
|
+
)
|
|
87
|
+
try {
|
|
88
|
+
logForDiagnosticsNoPII('info', 'mdm_settings_loaded', {
|
|
89
|
+
duration_ms: duration,
|
|
90
|
+
key_count: Object.keys(mdm.settings).length,
|
|
91
|
+
error_count: mdm.errors.length,
|
|
92
|
+
})
|
|
93
|
+
} catch {
|
|
94
|
+
// Diagnostic logging is best-effort
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
})()
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Await the in-flight MDM load. Call this before the first settings read.
|
|
102
|
+
* If startMdmSettingsLoad() was called early enough, this resolves immediately.
|
|
103
|
+
*/
|
|
104
|
+
export async function ensureMdmSettingsLoaded(): Promise<void> {
|
|
105
|
+
if (!mdmLoadPromise) {
|
|
106
|
+
startMdmSettingsLoad()
|
|
107
|
+
}
|
|
108
|
+
await mdmLoadPromise
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Sync cache readers — used by the settings pipeline (loadSettingsFromDisk)
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Read admin-controlled MDM settings from the session cache.
|
|
117
|
+
*
|
|
118
|
+
* Returns settings from admin-only sources:
|
|
119
|
+
* - macOS: /Library/Managed Preferences/ (requires root)
|
|
120
|
+
* - Windows: HKLM registry (requires admin)
|
|
121
|
+
*
|
|
122
|
+
* Does NOT include HKCU (user-writable) — use getHkcuSettings() for that.
|
|
123
|
+
*/
|
|
124
|
+
export function getMdmSettings(): MdmResult {
|
|
125
|
+
return mdmCache ?? EMPTY_RESULT
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Read HKCU registry settings (user-writable, lowest policy priority).
|
|
130
|
+
* Only relevant on Windows — returns empty on other platforms.
|
|
131
|
+
*/
|
|
132
|
+
export function getHkcuSettings(): MdmResult {
|
|
133
|
+
return hkcuCache ?? EMPTY_RESULT
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// Cache management
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Clear the MDM and HKCU settings caches, forcing a fresh read on next load.
|
|
142
|
+
*/
|
|
143
|
+
export function clearMdmSettingsCache(): void {
|
|
144
|
+
mdmCache = null
|
|
145
|
+
hkcuCache = null
|
|
146
|
+
mdmLoadPromise = null
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Update the session caches directly. Used by the change detector poll.
|
|
151
|
+
*/
|
|
152
|
+
export function setMdmSettingsCache(mdm: MdmResult, hkcu: MdmResult): void {
|
|
153
|
+
mdmCache = mdm
|
|
154
|
+
hkcuCache = hkcu
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Refresh — fires a fresh raw read, parses, returns results.
|
|
159
|
+
// Used by the 30-minute poll in changeDetector.ts.
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Fire a fresh MDM subprocess read and parse the results.
|
|
164
|
+
* Does NOT update the cache — caller decides whether to apply.
|
|
165
|
+
*/
|
|
166
|
+
export async function refreshMdmSettings(): Promise<{
|
|
167
|
+
mdm: MdmResult
|
|
168
|
+
hkcu: MdmResult
|
|
169
|
+
}> {
|
|
170
|
+
const raw = await fireRawRead()
|
|
171
|
+
return consumeRawReadResult(raw)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Parsing — converts raw subprocess output to validated MdmResult
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Parse JSON command output (plutil stdout or registry JSON value) into SettingsJson.
|
|
180
|
+
* Filters invalid permission rules before schema validation so one bad rule
|
|
181
|
+
* doesn't cause the entire MDM settings to be rejected.
|
|
182
|
+
*/
|
|
183
|
+
export function parseCommandOutputAsSettings(
|
|
184
|
+
stdout: string,
|
|
185
|
+
sourcePath: string,
|
|
186
|
+
): { settings: SettingsJson; errors: ValidationError[] } {
|
|
187
|
+
const data = safeParseJSON(stdout, false)
|
|
188
|
+
if (!data || typeof data !== 'object') {
|
|
189
|
+
return { settings: {}, errors: [] }
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const ruleWarnings = filterInvalidPermissionRules(data, sourcePath)
|
|
193
|
+
const parseResult = SettingsSchema().safeParse(data)
|
|
194
|
+
if (!parseResult.success) {
|
|
195
|
+
const errors = formatZodError(parseResult.error, sourcePath)
|
|
196
|
+
return { settings: {}, errors: [...ruleWarnings, ...errors] }
|
|
197
|
+
}
|
|
198
|
+
return { settings: parseResult.data, errors: ruleWarnings }
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Parse reg query stdout to extract a registry string value.
|
|
203
|
+
* Matches both REG_SZ and REG_EXPAND_SZ, case-insensitive.
|
|
204
|
+
*
|
|
205
|
+
* Expected format:
|
|
206
|
+
* Settings REG_SZ {"json":"value"}
|
|
207
|
+
*/
|
|
208
|
+
export function parseRegQueryStdout(
|
|
209
|
+
stdout: string,
|
|
210
|
+
valueName = 'Settings',
|
|
211
|
+
): string | null {
|
|
212
|
+
const lines = stdout.split(/\r?\n/)
|
|
213
|
+
const escaped = valueName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
214
|
+
const re = new RegExp(`^\\s+${escaped}\\s+REG_(?:EXPAND_)?SZ\\s+(.*)$`, 'i')
|
|
215
|
+
for (const line of lines) {
|
|
216
|
+
const match = line.match(re)
|
|
217
|
+
if (match && match[1]) {
|
|
218
|
+
return match[1].trimEnd()
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return null
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Convert raw subprocess output into parsed MDM and HKCU results,
|
|
226
|
+
* applying the first-source-wins policy.
|
|
227
|
+
*/
|
|
228
|
+
function consumeRawReadResult(raw: RawReadResult): {
|
|
229
|
+
mdm: MdmResult
|
|
230
|
+
hkcu: MdmResult
|
|
231
|
+
} {
|
|
232
|
+
// macOS: plist result (first source wins — already filtered in mdmRawRead)
|
|
233
|
+
if (raw.plistStdouts && raw.plistStdouts.length > 0) {
|
|
234
|
+
const { stdout, label } = raw.plistStdouts[0]!
|
|
235
|
+
const result = parseCommandOutputAsSettings(stdout, label)
|
|
236
|
+
if (Object.keys(result.settings).length > 0) {
|
|
237
|
+
return { mdm: result, hkcu: EMPTY_RESULT }
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Windows: HKLM result
|
|
242
|
+
if (raw.hklmStdout) {
|
|
243
|
+
const jsonString = parseRegQueryStdout(raw.hklmStdout)
|
|
244
|
+
if (jsonString) {
|
|
245
|
+
const result = parseCommandOutputAsSettings(
|
|
246
|
+
jsonString,
|
|
247
|
+
`Registry: ${WINDOWS_REGISTRY_KEY_PATH_HKLM}\\${WINDOWS_REGISTRY_VALUE_NAME}`,
|
|
248
|
+
)
|
|
249
|
+
if (Object.keys(result.settings).length > 0) {
|
|
250
|
+
return { mdm: result, hkcu: EMPTY_RESULT }
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// No admin MDM — check managed-settings.json before using HKCU
|
|
256
|
+
if (hasManagedSettingsFile()) {
|
|
257
|
+
return { mdm: EMPTY_RESULT, hkcu: EMPTY_RESULT }
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Fall through to HKCU (already read in parallel)
|
|
261
|
+
if (raw.hkcuStdout) {
|
|
262
|
+
const jsonString = parseRegQueryStdout(raw.hkcuStdout)
|
|
263
|
+
if (jsonString) {
|
|
264
|
+
const result = parseCommandOutputAsSettings(
|
|
265
|
+
jsonString,
|
|
266
|
+
`Registry: ${WINDOWS_REGISTRY_KEY_PATH_HKCU}\\${WINDOWS_REGISTRY_VALUE_NAME}`,
|
|
267
|
+
)
|
|
268
|
+
return { mdm: EMPTY_RESULT, hkcu: result }
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return { mdm: EMPTY_RESULT, hkcu: EMPTY_RESULT }
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Check if file-based managed settings (managed-settings.json or any
|
|
277
|
+
* managed-settings.d/*.json) exist and have content. Cheap sync check
|
|
278
|
+
* used to skip HKCU when a higher-priority file-based source exists.
|
|
279
|
+
*/
|
|
280
|
+
function hasManagedSettingsFile(): boolean {
|
|
281
|
+
try {
|
|
282
|
+
const filePath = join(getManagedFilePath(), 'managed-settings.json')
|
|
283
|
+
const content = readFileSync(filePath)
|
|
284
|
+
const data = safeParseJSON(content, false)
|
|
285
|
+
if (data && typeof data === 'object' && Object.keys(data).length > 0) {
|
|
286
|
+
return true
|
|
287
|
+
}
|
|
288
|
+
} catch {
|
|
289
|
+
// fall through to drop-in check
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const dropInDir = getManagedSettingsDropInDir()
|
|
293
|
+
const entries = getFsImplementation().readdirSync(dropInDir)
|
|
294
|
+
for (const d of entries) {
|
|
295
|
+
if (
|
|
296
|
+
!(d.isFile() || d.isSymbolicLink()) ||
|
|
297
|
+
!d.name.endsWith('.json') ||
|
|
298
|
+
d.name.startsWith('.')
|
|
299
|
+
) {
|
|
300
|
+
continue
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const content = readFileSync(join(dropInDir, d.name))
|
|
304
|
+
const data = safeParseJSON(content, false)
|
|
305
|
+
if (data && typeof data === 'object' && Object.keys(data).length > 0) {
|
|
306
|
+
return true
|
|
307
|
+
}
|
|
308
|
+
} catch {
|
|
309
|
+
// skip unreadable/malformed file
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
} catch {
|
|
313
|
+
// drop-in dir doesn't exist
|
|
314
|
+
}
|
|
315
|
+
return false
|
|
316
|
+
}
|