@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,95 @@
|
|
|
1
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
2
|
+
import { getRateLimitTier, getSubscriptionType } from './auth.js'
|
|
3
|
+
import { isEnvDefinedFalsy, isEnvTruthy } from './envUtils.js'
|
|
4
|
+
|
|
5
|
+
export function getPlanModeV2AgentCount(): number {
|
|
6
|
+
// Environment variable override takes precedence
|
|
7
|
+
if (process.env.CLAUDE_CODE_PLAN_V2_AGENT_COUNT) {
|
|
8
|
+
const count = parseInt(process.env.CLAUDE_CODE_PLAN_V2_AGENT_COUNT, 10)
|
|
9
|
+
if (!isNaN(count) && count > 0 && count <= 10) {
|
|
10
|
+
return count
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const subscriptionType = getSubscriptionType()
|
|
15
|
+
const rateLimitTier = getRateLimitTier()
|
|
16
|
+
|
|
17
|
+
if (
|
|
18
|
+
subscriptionType === 'max' &&
|
|
19
|
+
rateLimitTier === 'default_claude_max_20x'
|
|
20
|
+
) {
|
|
21
|
+
return 3
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (subscriptionType === 'enterprise' || subscriptionType === 'team') {
|
|
25
|
+
return 3
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return 1
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function getPlanModeV2ExploreAgentCount(): number {
|
|
32
|
+
if (process.env.CLAUDE_CODE_PLAN_V2_EXPLORE_AGENT_COUNT) {
|
|
33
|
+
const count = parseInt(
|
|
34
|
+
process.env.CLAUDE_CODE_PLAN_V2_EXPLORE_AGENT_COUNT,
|
|
35
|
+
10,
|
|
36
|
+
)
|
|
37
|
+
if (!isNaN(count) && count > 0 && count <= 10) {
|
|
38
|
+
return count
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return 3
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check if plan mode interview phase is enabled.
|
|
47
|
+
*
|
|
48
|
+
* Config: ant=always_on, external=tengu_plan_mode_interview_phase gate, envVar=true
|
|
49
|
+
*/
|
|
50
|
+
export function isPlanModeInterviewPhaseEnabled(): boolean {
|
|
51
|
+
// Always on for ants
|
|
52
|
+
if (process.env.USER_TYPE === 'ant') return true
|
|
53
|
+
|
|
54
|
+
const env = process.env.CLAUDE_CODE_PLAN_MODE_INTERVIEW_PHASE
|
|
55
|
+
if (isEnvTruthy(env)) return true
|
|
56
|
+
if (isEnvDefinedFalsy(env)) return false
|
|
57
|
+
|
|
58
|
+
return getFeatureValue_CACHED_MAY_BE_STALE(
|
|
59
|
+
'tengu_plan_mode_interview_phase',
|
|
60
|
+
false,
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export type PewterLedgerVariant = 'trim' | 'cut' | 'cap' | null
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* tengu_pewter_ledger — plan file structure prompt experiment.
|
|
68
|
+
*
|
|
69
|
+
* Controls the Phase 4 "Final Plan" bullets in the 5-phase plan mode
|
|
70
|
+
* workflow (messages.ts getPlanPhase4Section). 5-phase is 99% of plan
|
|
71
|
+
* traffic; interview-phase (ants) is untouched as a reference population.
|
|
72
|
+
*
|
|
73
|
+
* Arms: null (control), 'trim', 'cut', 'cap' — progressively stricter
|
|
74
|
+
* guidance on plan file size.
|
|
75
|
+
*
|
|
76
|
+
* Baseline (control, 14d ending 2026-03-02, N=26.3M):
|
|
77
|
+
* p50 4,906 chars | p90 11,617 | mean 6,207 | 82% Opus 4.6
|
|
78
|
+
* Reject rate monotonic with size: 20% at <2K → 50% at 20K+
|
|
79
|
+
*
|
|
80
|
+
* Primary: session-level Avg Cost (fact__201omjcij85f) — Opus output is
|
|
81
|
+
* 5× input price so cost is an output-weighted proxy. planLengthChars
|
|
82
|
+
* on tengu_plan_exit is the mechanism but NOT the goal — the cap arm
|
|
83
|
+
* could shrink the plan file while increasing total output via
|
|
84
|
+
* write→count→edit cycles.
|
|
85
|
+
* Guardrail: feedback-bad rate, requests/session (too-thin plans →
|
|
86
|
+
* more implementation iterations), tool error rate
|
|
87
|
+
*/
|
|
88
|
+
export function getPewterLedgerVariant(): PewterLedgerVariant {
|
|
89
|
+
const raw = getFeatureValue_CACHED_MAY_BE_STALE<string | null>(
|
|
90
|
+
'tengu_pewter_ledger',
|
|
91
|
+
null,
|
|
92
|
+
)
|
|
93
|
+
if (raw === 'trim' || raw === 'cut' || raw === 'cap') return raw
|
|
94
|
+
return null
|
|
95
|
+
}
|
package/utils/plans.ts
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto'
|
|
2
|
+
import { copyFile, writeFile } from 'fs/promises'
|
|
3
|
+
import memoize from 'lodash-es/memoize.js'
|
|
4
|
+
import { join, resolve, sep } from 'path'
|
|
5
|
+
import type { AgentId, SessionId } from 'src/types/ids.js'
|
|
6
|
+
import type { LogOption } from 'src/types/logs.js'
|
|
7
|
+
import type {
|
|
8
|
+
AssistantMessage,
|
|
9
|
+
AttachmentMessage,
|
|
10
|
+
SystemFileSnapshotMessage,
|
|
11
|
+
UserMessage,
|
|
12
|
+
} from 'src/types/message.js'
|
|
13
|
+
import { getPlanSlugCache, getSessionId } from '../bootstrap/state.js'
|
|
14
|
+
import { EXIT_PLAN_MODE_V2_TOOL_NAME } from '../tools/ExitPlanModeTool/constants.js'
|
|
15
|
+
import { getCwd } from './cwd.js'
|
|
16
|
+
import { logForDebugging } from './debug.js'
|
|
17
|
+
import { getClaudeConfigHomeDir } from './envUtils.js'
|
|
18
|
+
import { isENOENT } from './errors.js'
|
|
19
|
+
import { getEnvironmentKind } from './filePersistence/outputsScanner.js'
|
|
20
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
21
|
+
import { logError } from './log.js'
|
|
22
|
+
import { getInitialSettings } from './settings/settings.js'
|
|
23
|
+
import { generateWordSlug } from './words.js'
|
|
24
|
+
|
|
25
|
+
const MAX_SLUG_RETRIES = 10
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get or generate a word slug for the current session's plan.
|
|
29
|
+
* The slug is generated lazily on first access and cached for the session.
|
|
30
|
+
* If a plan file with the generated slug already exists, retries up to 10 times.
|
|
31
|
+
*/
|
|
32
|
+
export function getPlanSlug(sessionId?: SessionId): string {
|
|
33
|
+
const id = sessionId ?? getSessionId()
|
|
34
|
+
const cache = getPlanSlugCache()
|
|
35
|
+
let slug = cache.get(id)
|
|
36
|
+
if (!slug) {
|
|
37
|
+
const plansDir = getPlansDirectory()
|
|
38
|
+
// Try to find a unique slug that doesn't conflict with existing files
|
|
39
|
+
for (let i = 0; i < MAX_SLUG_RETRIES; i++) {
|
|
40
|
+
slug = generateWordSlug()
|
|
41
|
+
const filePath = join(plansDir, `${slug}.md`)
|
|
42
|
+
if (!getFsImplementation().existsSync(filePath)) {
|
|
43
|
+
break
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
cache.set(id, slug!)
|
|
47
|
+
}
|
|
48
|
+
return slug!
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Set a specific plan slug for a session (used when resuming a session)
|
|
53
|
+
*/
|
|
54
|
+
export function setPlanSlug(sessionId: SessionId, slug: string): void {
|
|
55
|
+
getPlanSlugCache().set(sessionId, slug)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Clear the plan slug for the current session.
|
|
60
|
+
* This should be called on /clear to ensure a fresh plan file is used.
|
|
61
|
+
*/
|
|
62
|
+
export function clearPlanSlug(sessionId?: SessionId): void {
|
|
63
|
+
const id = sessionId ?? getSessionId()
|
|
64
|
+
getPlanSlugCache().delete(id)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Clear ALL plan slug entries (all sessions).
|
|
69
|
+
* Use this on /clear to free sub-session slug entries.
|
|
70
|
+
*/
|
|
71
|
+
export function clearAllPlanSlugs(): void {
|
|
72
|
+
getPlanSlugCache().clear()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Memoized: called from render bodies (FileReadTool/FileEditTool/FileWriteTool UI.tsx)
|
|
76
|
+
// and permission checks. Inputs (initial settings + cwd) are fixed at startup, so the
|
|
77
|
+
// mkdirSync result is stable for the session. Without memoization, each rendered tool
|
|
78
|
+
// message triggers a mkdirSync syscall (regressed in #20005).
|
|
79
|
+
export const getPlansDirectory = memoize(function getPlansDirectory(): string {
|
|
80
|
+
const settings = getInitialSettings()
|
|
81
|
+
const settingsDir = settings.plansDirectory
|
|
82
|
+
let plansPath: string
|
|
83
|
+
|
|
84
|
+
if (settingsDir) {
|
|
85
|
+
// Settings.json (relative to project root)
|
|
86
|
+
const cwd = getCwd()
|
|
87
|
+
const resolved = resolve(cwd, settingsDir)
|
|
88
|
+
|
|
89
|
+
// Validate path stays within project root to prevent path traversal
|
|
90
|
+
if (!resolved.startsWith(cwd + sep) && resolved !== cwd) {
|
|
91
|
+
logError(
|
|
92
|
+
new Error(`plansDirectory must be within project root: ${settingsDir}`),
|
|
93
|
+
)
|
|
94
|
+
plansPath = join(getClaudeConfigHomeDir(), 'plans')
|
|
95
|
+
} else {
|
|
96
|
+
plansPath = resolved
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
// Default
|
|
100
|
+
plansPath = join(getClaudeConfigHomeDir(), 'plans')
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Ensure directory exists (mkdirSync with recursive: true is a no-op if it exists)
|
|
104
|
+
try {
|
|
105
|
+
getFsImplementation().mkdirSync(plansPath)
|
|
106
|
+
} catch (error) {
|
|
107
|
+
logError(error)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return plansPath
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get the file path for a session's plan
|
|
115
|
+
* @param agentId Optional agent ID for subagents. If not provided, returns main session plan.
|
|
116
|
+
* For main conversation (no agentId), returns {planSlug}.md
|
|
117
|
+
* For subagents (agentId provided), returns {planSlug}-agent-{agentId}.md
|
|
118
|
+
*/
|
|
119
|
+
export function getPlanFilePath(agentId?: AgentId): string {
|
|
120
|
+
const planSlug = getPlanSlug(getSessionId())
|
|
121
|
+
|
|
122
|
+
// Main conversation: simple filename with word slug
|
|
123
|
+
if (!agentId) {
|
|
124
|
+
return join(getPlansDirectory(), `${planSlug}.md`)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Subagents: include agent ID
|
|
128
|
+
return join(getPlansDirectory(), `${planSlug}-agent-${agentId}.md`)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Get the plan content for a session
|
|
133
|
+
* @param agentId Optional agent ID for subagents. If not provided, returns main session plan.
|
|
134
|
+
*/
|
|
135
|
+
export function getPlan(agentId?: AgentId): string | null {
|
|
136
|
+
const filePath = getPlanFilePath(agentId)
|
|
137
|
+
try {
|
|
138
|
+
return getFsImplementation().readFileSync(filePath, { encoding: 'utf-8' })
|
|
139
|
+
} catch (error) {
|
|
140
|
+
if (isENOENT(error)) return null
|
|
141
|
+
logError(error)
|
|
142
|
+
return null
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Extract the plan slug from a log's message history.
|
|
148
|
+
*/
|
|
149
|
+
function getSlugFromLog(log: LogOption): string | undefined {
|
|
150
|
+
return log.messages.find(m => m.slug)?.slug
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Restore plan slug from a resumed session.
|
|
155
|
+
* Sets the slug in the session cache so getPlanSlug returns it.
|
|
156
|
+
* If the plan file is missing, attempts to recover it from a file snapshot
|
|
157
|
+
* (written incrementally during the session) or from message history.
|
|
158
|
+
* Returns true if a plan file exists (or was recovered) for the slug.
|
|
159
|
+
* @param log The log to restore from
|
|
160
|
+
* @param targetSessionId The session ID to associate the plan slug with.
|
|
161
|
+
* This should be the ORIGINAL session ID being resumed,
|
|
162
|
+
* not the temporary session ID from before resume.
|
|
163
|
+
*/
|
|
164
|
+
export async function copyPlanForResume(
|
|
165
|
+
log: LogOption,
|
|
166
|
+
targetSessionId?: SessionId,
|
|
167
|
+
): Promise<boolean> {
|
|
168
|
+
const slug = getSlugFromLog(log)
|
|
169
|
+
if (!slug) {
|
|
170
|
+
return false
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Set the slug for the target session ID (or current if not provided)
|
|
174
|
+
const sessionId = targetSessionId ?? getSessionId()
|
|
175
|
+
setPlanSlug(sessionId, slug)
|
|
176
|
+
|
|
177
|
+
// Attempt to read the plan file directly — recovery triggers on ENOENT.
|
|
178
|
+
const planPath = join(getPlansDirectory(), `${slug}.md`)
|
|
179
|
+
try {
|
|
180
|
+
await getFsImplementation().readFile(planPath, { encoding: 'utf-8' })
|
|
181
|
+
return true
|
|
182
|
+
} catch (e: unknown) {
|
|
183
|
+
if (!isENOENT(e)) {
|
|
184
|
+
// Don't throw — called fire-and-forget (void copyPlanForResume(...)) with no .catch()
|
|
185
|
+
logError(e)
|
|
186
|
+
return false
|
|
187
|
+
}
|
|
188
|
+
// Only attempt recovery in remote sessions (CCR) where files don't persist
|
|
189
|
+
if (getEnvironmentKind() === null) {
|
|
190
|
+
return false
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
logForDebugging(
|
|
194
|
+
`Plan file missing during resume: ${planPath}. Attempting recovery.`,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
// Try file snapshot first (written incrementally during session)
|
|
198
|
+
const snapshotPlan = findFileSnapshotEntry(log.messages, 'plan')
|
|
199
|
+
let recovered: string | null = null
|
|
200
|
+
if (snapshotPlan && snapshotPlan.content.length > 0) {
|
|
201
|
+
recovered = snapshotPlan.content
|
|
202
|
+
logForDebugging(
|
|
203
|
+
`Plan recovered from file snapshot, ${recovered.length} chars`,
|
|
204
|
+
{ level: 'info' },
|
|
205
|
+
)
|
|
206
|
+
} else {
|
|
207
|
+
// Fall back to searching message history
|
|
208
|
+
recovered = recoverPlanFromMessages(log)
|
|
209
|
+
if (recovered) {
|
|
210
|
+
logForDebugging(
|
|
211
|
+
`Plan recovered from message history, ${recovered.length} chars`,
|
|
212
|
+
{ level: 'info' },
|
|
213
|
+
)
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (recovered) {
|
|
218
|
+
try {
|
|
219
|
+
await writeFile(planPath, recovered, { encoding: 'utf-8' })
|
|
220
|
+
return true
|
|
221
|
+
} catch (writeError) {
|
|
222
|
+
logError(writeError)
|
|
223
|
+
return false
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
logForDebugging(
|
|
227
|
+
'Plan file recovery failed: no file snapshot or plan content found in message history',
|
|
228
|
+
)
|
|
229
|
+
return false
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Copy a plan file for a forked session. Unlike copyPlanForResume (which reuses
|
|
235
|
+
* the original slug), this generates a NEW slug for the forked session and
|
|
236
|
+
* writes the original plan content to the new file. This prevents the original
|
|
237
|
+
* and forked sessions from clobbering each other's plan files.
|
|
238
|
+
*/
|
|
239
|
+
export async function copyPlanForFork(
|
|
240
|
+
log: LogOption,
|
|
241
|
+
targetSessionId: SessionId,
|
|
242
|
+
): Promise<boolean> {
|
|
243
|
+
const originalSlug = getSlugFromLog(log)
|
|
244
|
+
if (!originalSlug) {
|
|
245
|
+
return false
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const plansDir = getPlansDirectory()
|
|
249
|
+
const originalPlanPath = join(plansDir, `${originalSlug}.md`)
|
|
250
|
+
|
|
251
|
+
// Generate a new slug for the forked session (do NOT reuse the original)
|
|
252
|
+
const newSlug = getPlanSlug(targetSessionId)
|
|
253
|
+
const newPlanPath = join(plansDir, `${newSlug}.md`)
|
|
254
|
+
try {
|
|
255
|
+
await copyFile(originalPlanPath, newPlanPath)
|
|
256
|
+
return true
|
|
257
|
+
} catch (error) {
|
|
258
|
+
if (isENOENT(error)) {
|
|
259
|
+
return false
|
|
260
|
+
}
|
|
261
|
+
logError(error)
|
|
262
|
+
return false
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Recover plan content from the message history. Plan content can appear in
|
|
268
|
+
* three forms depending on what happened during the session:
|
|
269
|
+
*
|
|
270
|
+
* 1. ExitPlanMode tool_use input — normalizeToolInput injects the plan content
|
|
271
|
+
* into the tool_use input, which persists in the transcript.
|
|
272
|
+
*
|
|
273
|
+
* 2. planContent field on user messages — set during the "clear context and
|
|
274
|
+
* implement" flow when ExitPlanMode is approved.
|
|
275
|
+
*
|
|
276
|
+
* 3. plan_file_reference attachment — created by auto-compact to preserve the
|
|
277
|
+
* plan across compaction boundaries.
|
|
278
|
+
*/
|
|
279
|
+
function recoverPlanFromMessages(log: LogOption): string | null {
|
|
280
|
+
for (let i = log.messages.length - 1; i >= 0; i--) {
|
|
281
|
+
const msg = log.messages[i]
|
|
282
|
+
if (!msg) {
|
|
283
|
+
continue
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (msg.type === 'assistant') {
|
|
287
|
+
const { content } = (msg as AssistantMessage).message
|
|
288
|
+
if (Array.isArray(content)) {
|
|
289
|
+
for (const block of content) {
|
|
290
|
+
if (
|
|
291
|
+
block.type === 'tool_use' &&
|
|
292
|
+
block.name === EXIT_PLAN_MODE_V2_TOOL_NAME
|
|
293
|
+
) {
|
|
294
|
+
const input = block.input as Record<string, unknown> | undefined
|
|
295
|
+
const plan = input?.plan
|
|
296
|
+
if (typeof plan === 'string' && plan.length > 0) {
|
|
297
|
+
return plan
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (msg.type === 'user') {
|
|
305
|
+
const userMsg = msg as UserMessage
|
|
306
|
+
if (
|
|
307
|
+
typeof userMsg.planContent === 'string' &&
|
|
308
|
+
userMsg.planContent.length > 0
|
|
309
|
+
) {
|
|
310
|
+
return userMsg.planContent
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (msg.type === 'attachment') {
|
|
315
|
+
const attachmentMsg = msg as AttachmentMessage
|
|
316
|
+
if (attachmentMsg.attachment?.type === 'plan_file_reference') {
|
|
317
|
+
const plan = (attachmentMsg.attachment as { planContent?: string })
|
|
318
|
+
.planContent
|
|
319
|
+
if (typeof plan === 'string' && plan.length > 0) {
|
|
320
|
+
return plan
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return null
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Find a file entry in the most recent file-snapshot system message in the transcript.
|
|
330
|
+
* Scans backwards to find the latest snapshot.
|
|
331
|
+
*/
|
|
332
|
+
function findFileSnapshotEntry(
|
|
333
|
+
messages: LogOption['messages'],
|
|
334
|
+
key: string,
|
|
335
|
+
): { key: string; path: string; content: string } | undefined {
|
|
336
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
337
|
+
const msg = messages[i]
|
|
338
|
+
if (
|
|
339
|
+
msg?.type === 'system' &&
|
|
340
|
+
'subtype' in msg &&
|
|
341
|
+
msg.subtype === 'file_snapshot' &&
|
|
342
|
+
'snapshotFiles' in msg
|
|
343
|
+
) {
|
|
344
|
+
const files = msg.snapshotFiles as Array<{
|
|
345
|
+
key: string
|
|
346
|
+
path: string
|
|
347
|
+
content: string
|
|
348
|
+
}>
|
|
349
|
+
return files.find(f => f.key === key)
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return undefined
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Persist a snapshot of session files (plan, todos) to the transcript.
|
|
357
|
+
* Called incrementally whenever these files change. Only active in remote
|
|
358
|
+
* sessions (CCR) where local files don't persist between sessions.
|
|
359
|
+
*/
|
|
360
|
+
export async function persistFileSnapshotIfRemote(): Promise<void> {
|
|
361
|
+
if (getEnvironmentKind() === null) {
|
|
362
|
+
return
|
|
363
|
+
}
|
|
364
|
+
try {
|
|
365
|
+
const snapshotFiles: SystemFileSnapshotMessage['snapshotFiles'] = []
|
|
366
|
+
|
|
367
|
+
// Snapshot plan file
|
|
368
|
+
const plan = getPlan()
|
|
369
|
+
if (plan) {
|
|
370
|
+
snapshotFiles.push({
|
|
371
|
+
key: 'plan',
|
|
372
|
+
path: getPlanFilePath(),
|
|
373
|
+
content: plan,
|
|
374
|
+
})
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (snapshotFiles.length === 0) {
|
|
378
|
+
return
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const message: SystemFileSnapshotMessage = {
|
|
382
|
+
type: 'system',
|
|
383
|
+
subtype: 'file_snapshot',
|
|
384
|
+
content: 'File snapshot',
|
|
385
|
+
level: 'info',
|
|
386
|
+
isMeta: true,
|
|
387
|
+
timestamp: new Date().toISOString(),
|
|
388
|
+
uuid: randomUUID(),
|
|
389
|
+
snapshotFiles,
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
const { recordTranscript } = await import('./sessionStorage.js')
|
|
393
|
+
await recordTranscript([message])
|
|
394
|
+
} catch (error) {
|
|
395
|
+
logError(error)
|
|
396
|
+
}
|
|
397
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { readdir, readFile } from 'fs/promises'
|
|
2
|
+
import memoize from 'lodash-es/memoize.js'
|
|
3
|
+
import { release as osRelease } from 'os'
|
|
4
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
5
|
+
import { logError } from './log.js'
|
|
6
|
+
|
|
7
|
+
export type Platform = 'macos' | 'windows' | 'wsl' | 'linux' | 'unknown'
|
|
8
|
+
|
|
9
|
+
export const SUPPORTED_PLATFORMS: Platform[] = ['macos', 'wsl']
|
|
10
|
+
|
|
11
|
+
export const getPlatform = memoize((): Platform => {
|
|
12
|
+
try {
|
|
13
|
+
if (process.platform === 'darwin') {
|
|
14
|
+
return 'macos'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (process.platform === 'win32') {
|
|
18
|
+
return 'windows'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (process.platform === 'linux') {
|
|
22
|
+
// Check if running in WSL (Windows Subsystem for Linux)
|
|
23
|
+
try {
|
|
24
|
+
const procVersion = getFsImplementation().readFileSync(
|
|
25
|
+
'/proc/version',
|
|
26
|
+
{ encoding: 'utf8' },
|
|
27
|
+
)
|
|
28
|
+
if (
|
|
29
|
+
procVersion.toLowerCase().includes('microsoft') ||
|
|
30
|
+
procVersion.toLowerCase().includes('wsl')
|
|
31
|
+
) {
|
|
32
|
+
return 'wsl'
|
|
33
|
+
}
|
|
34
|
+
} catch (error) {
|
|
35
|
+
// Error reading /proc/version, assume regular Linux
|
|
36
|
+
logError(error)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Regular Linux
|
|
40
|
+
return 'linux'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Unknown platform
|
|
44
|
+
return 'unknown'
|
|
45
|
+
} catch (error) {
|
|
46
|
+
logError(error)
|
|
47
|
+
return 'unknown'
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
export const getWslVersion = memoize((): string | undefined => {
|
|
52
|
+
// Only check for WSL on Linux systems
|
|
53
|
+
if (process.platform !== 'linux') {
|
|
54
|
+
return undefined
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const procVersion = getFsImplementation().readFileSync('/proc/version', {
|
|
58
|
+
encoding: 'utf8',
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
// First check for explicit WSL version markers (e.g., "WSL2", "WSL3", etc.)
|
|
62
|
+
const wslVersionMatch = procVersion.match(/WSL(\d+)/i)
|
|
63
|
+
if (wslVersionMatch && wslVersionMatch[1]) {
|
|
64
|
+
return wslVersionMatch[1]
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// If no explicit WSL version but contains Microsoft, assume WSL1
|
|
68
|
+
// This handles the original WSL1 format: "4.4.0-19041-Microsoft"
|
|
69
|
+
if (procVersion.toLowerCase().includes('microsoft')) {
|
|
70
|
+
return '1'
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Not WSL or unable to determine version
|
|
74
|
+
return undefined
|
|
75
|
+
} catch (error) {
|
|
76
|
+
logError(error)
|
|
77
|
+
return undefined
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
export type LinuxDistroInfo = {
|
|
82
|
+
linuxDistroId?: string
|
|
83
|
+
linuxDistroVersion?: string
|
|
84
|
+
linuxKernel?: string
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export const getLinuxDistroInfo = memoize(
|
|
88
|
+
async (): Promise<LinuxDistroInfo | undefined> => {
|
|
89
|
+
if (process.platform !== 'linux') {
|
|
90
|
+
return undefined
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const result: LinuxDistroInfo = {
|
|
94
|
+
linuxKernel: osRelease(),
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
const content = await readFile('/etc/os-release', 'utf8')
|
|
99
|
+
for (const line of content.split('\n')) {
|
|
100
|
+
const match = line.match(/^(ID|VERSION_ID)=(.*)$/)
|
|
101
|
+
if (match && match[1] && match[2]) {
|
|
102
|
+
const value = match[2].replace(/^"|"$/g, '')
|
|
103
|
+
if (match[1] === 'ID') {
|
|
104
|
+
result.linuxDistroId = value
|
|
105
|
+
} else {
|
|
106
|
+
result.linuxDistroVersion = value
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch {
|
|
111
|
+
// /etc/os-release may not exist on all Linux systems
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return result
|
|
115
|
+
},
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
const VCS_MARKERS: Array<[string, string]> = [
|
|
119
|
+
['.git', 'git'],
|
|
120
|
+
['.hg', 'mercurial'],
|
|
121
|
+
['.svn', 'svn'],
|
|
122
|
+
['.p4config', 'perforce'],
|
|
123
|
+
['$tf', 'tfs'],
|
|
124
|
+
['.tfvc', 'tfs'],
|
|
125
|
+
['.jj', 'jujutsu'],
|
|
126
|
+
['.sl', 'sapling'],
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
export async function detectVcs(dir?: string): Promise<string[]> {
|
|
130
|
+
const detected = new Set<string>()
|
|
131
|
+
|
|
132
|
+
// Check for Perforce via env var
|
|
133
|
+
if (process.env.P4PORT) {
|
|
134
|
+
detected.add('perforce')
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
const targetDir = dir ?? getFsImplementation().cwd()
|
|
139
|
+
const entries = new Set(await readdir(targetDir))
|
|
140
|
+
for (const [marker, vcs] of VCS_MARKERS) {
|
|
141
|
+
if (entries.has(marker)) {
|
|
142
|
+
detected.add(vcs)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} catch {
|
|
146
|
+
// Directory may not be readable
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return [...detected]
|
|
150
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads plugin-related settings (enabledPlugins, extraKnownMarketplaces)
|
|
3
|
+
* from --add-dir directories.
|
|
4
|
+
*
|
|
5
|
+
* These have the LOWEST priority — callers must spread standard settings
|
|
6
|
+
* on top so that user/project/local/flag/policy sources all override.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { join } from 'path'
|
|
10
|
+
import type { z } from 'zod/v4'
|
|
11
|
+
import { getAdditionalDirectoriesForClaudeMd } from '../../bootstrap/state.js'
|
|
12
|
+
import { parseSettingsFile } from '../settings/settings.js'
|
|
13
|
+
import type {
|
|
14
|
+
ExtraKnownMarketplaceSchema,
|
|
15
|
+
SettingsJson,
|
|
16
|
+
} from '../settings/types.js'
|
|
17
|
+
|
|
18
|
+
type ExtraKnownMarketplace = z.infer<
|
|
19
|
+
ReturnType<typeof ExtraKnownMarketplaceSchema>
|
|
20
|
+
>
|
|
21
|
+
|
|
22
|
+
const SETTINGS_FILES = ['settings.json', 'settings.local.json'] as const
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Returns a merged record of enabledPlugins from all --add-dir directories.
|
|
26
|
+
*
|
|
27
|
+
* Within each directory, settings.local.json is processed after settings.json
|
|
28
|
+
* (local wins within that dir). Across directories, later CLI-order wins on
|
|
29
|
+
* conflict.
|
|
30
|
+
*
|
|
31
|
+
* This has the lowest priority — callers must spread their standard settings
|
|
32
|
+
* on top to let user/project/local/flag/policy override.
|
|
33
|
+
*/
|
|
34
|
+
export function getAddDirEnabledPlugins(): NonNullable<
|
|
35
|
+
SettingsJson['enabledPlugins']
|
|
36
|
+
> {
|
|
37
|
+
const result: NonNullable<SettingsJson['enabledPlugins']> = {}
|
|
38
|
+
for (const dir of getAdditionalDirectoriesForClaudeMd()) {
|
|
39
|
+
for (const file of SETTINGS_FILES) {
|
|
40
|
+
const { settings } = parseSettingsFile(join(dir, '.claude', file))
|
|
41
|
+
if (!settings?.enabledPlugins) {
|
|
42
|
+
continue
|
|
43
|
+
}
|
|
44
|
+
Object.assign(result, settings.enabledPlugins)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return result
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Returns a merged record of extraKnownMarketplaces from all --add-dir directories.
|
|
52
|
+
*
|
|
53
|
+
* Same priority rules as getAddDirEnabledPlugins: settings.local.json wins
|
|
54
|
+
* within each dir, and callers spread standard settings on top.
|
|
55
|
+
*/
|
|
56
|
+
export function getAddDirExtraMarketplaces(): Record<
|
|
57
|
+
string,
|
|
58
|
+
ExtraKnownMarketplace
|
|
59
|
+
> {
|
|
60
|
+
const result: Record<string, ExtraKnownMarketplace> = {}
|
|
61
|
+
for (const dir of getAdditionalDirectoriesForClaudeMd()) {
|
|
62
|
+
for (const file of SETTINGS_FILES) {
|
|
63
|
+
const { settings } = parseSettingsFile(join(dir, '.claude', file))
|
|
64
|
+
if (!settings?.extraKnownMarketplaces) {
|
|
65
|
+
continue
|
|
66
|
+
}
|
|
67
|
+
Object.assign(result, settings.extraKnownMarketplaces)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result
|
|
71
|
+
}
|