@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,75 @@
|
|
|
1
|
+
import { sep } from 'path'
|
|
2
|
+
import { getOriginalCwd } from '../bootstrap/state.js'
|
|
3
|
+
import type { LogOption } from '../types/logs.js'
|
|
4
|
+
import { quote } from './bash/shellQuote.js'
|
|
5
|
+
import { getSessionIdFromLog } from './sessionStorage.js'
|
|
6
|
+
|
|
7
|
+
export type CrossProjectResumeResult =
|
|
8
|
+
| {
|
|
9
|
+
isCrossProject: false
|
|
10
|
+
}
|
|
11
|
+
| {
|
|
12
|
+
isCrossProject: true
|
|
13
|
+
isSameRepoWorktree: true
|
|
14
|
+
projectPath: string
|
|
15
|
+
}
|
|
16
|
+
| {
|
|
17
|
+
isCrossProject: true
|
|
18
|
+
isSameRepoWorktree: false
|
|
19
|
+
command: string
|
|
20
|
+
projectPath: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Check if a log is from a different project directory and determine
|
|
25
|
+
* whether it's a related worktree or a completely different project.
|
|
26
|
+
*
|
|
27
|
+
* For same-repo worktrees, we can resume directly without requiring cd.
|
|
28
|
+
* For different projects, we generate the cd command.
|
|
29
|
+
*/
|
|
30
|
+
export function checkCrossProjectResume(
|
|
31
|
+
log: LogOption,
|
|
32
|
+
showAllProjects: boolean,
|
|
33
|
+
worktreePaths: string[],
|
|
34
|
+
): CrossProjectResumeResult {
|
|
35
|
+
const currentCwd = getOriginalCwd()
|
|
36
|
+
|
|
37
|
+
if (!showAllProjects || !log.projectPath || log.projectPath === currentCwd) {
|
|
38
|
+
return { isCrossProject: false }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Gate worktree detection to ants only for staged rollout
|
|
42
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
43
|
+
const sessionId = getSessionIdFromLog(log)
|
|
44
|
+
const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`
|
|
45
|
+
return {
|
|
46
|
+
isCrossProject: true,
|
|
47
|
+
isSameRepoWorktree: false,
|
|
48
|
+
command,
|
|
49
|
+
projectPath: log.projectPath,
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Check if log.projectPath is under a worktree of the same repo
|
|
54
|
+
const isSameRepo = worktreePaths.some(
|
|
55
|
+
wt => log.projectPath === wt || log.projectPath!.startsWith(wt + sep),
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
if (isSameRepo) {
|
|
59
|
+
return {
|
|
60
|
+
isCrossProject: true,
|
|
61
|
+
isSameRepoWorktree: true,
|
|
62
|
+
projectPath: log.projectPath,
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Different repo - generate cd command
|
|
67
|
+
const sessionId = getSessionIdFromLog(log)
|
|
68
|
+
const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`
|
|
69
|
+
return {
|
|
70
|
+
isCrossProject: true,
|
|
71
|
+
isSameRepoWorktree: false,
|
|
72
|
+
command,
|
|
73
|
+
projectPath: log.projectPath,
|
|
74
|
+
}
|
|
75
|
+
}
|
package/utils/crypto.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Indirection point for the package.json "browser" field. When bun builds
|
|
2
|
+
// browser-sdk.js with --target browser, this file is swapped for
|
|
3
|
+
// crypto.browser.ts — avoiding a ~500KB crypto-browserify polyfill that Bun
|
|
4
|
+
// would otherwise inline for `import ... from 'crypto'`. Node/bun builds use
|
|
5
|
+
// this file unchanged.
|
|
6
|
+
//
|
|
7
|
+
// NOTE: `export { randomUUID } from 'crypto'` (re-export syntax) breaks under
|
|
8
|
+
// bun-internal's bytecode compilation — the generated bytecode shows the
|
|
9
|
+
// import but the binding doesn't link (`ReferenceError: randomUUID is not
|
|
10
|
+
// defined`). The explicit import-then-export below produces a correct live
|
|
11
|
+
// binding. See integration-tests-ant-native failure on PR #20957/#21178.
|
|
12
|
+
import { randomUUID } from 'crypto'
|
|
13
|
+
export { randomUUID }
|
package/utils/cwd.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'async_hooks'
|
|
2
|
+
import { getCwdState, getOriginalCwd } from '../bootstrap/state.js'
|
|
3
|
+
|
|
4
|
+
const cwdOverrideStorage = new AsyncLocalStorage<string>()
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Run a function with an overridden working directory for the current async context.
|
|
8
|
+
* All calls to pwd()/getCwd() within the function (and its async descendants) will
|
|
9
|
+
* return the overridden cwd instead of the global one. This enables concurrent
|
|
10
|
+
* agents to each see their own working directory without affecting each other.
|
|
11
|
+
*/
|
|
12
|
+
export function runWithCwdOverride<T>(cwd: string, fn: () => T): T {
|
|
13
|
+
return cwdOverrideStorage.run(cwd, fn)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Get the current working directory
|
|
18
|
+
*/
|
|
19
|
+
export function pwd(): string {
|
|
20
|
+
return cwdOverrideStorage.getStore() ?? getCwdState()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get the current working directory or the original working directory if the current one is not available
|
|
25
|
+
*/
|
|
26
|
+
export function getCwd(): string {
|
|
27
|
+
try {
|
|
28
|
+
return pwd()
|
|
29
|
+
} catch {
|
|
30
|
+
return getOriginalCwd()
|
|
31
|
+
}
|
|
32
|
+
}
|
package/utils/debug.ts
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { appendFile, mkdir, symlink, unlink } from 'fs/promises'
|
|
2
|
+
import memoize from 'lodash-es/memoize.js'
|
|
3
|
+
import { dirname, join } from 'path'
|
|
4
|
+
import { getSessionId } from 'src/bootstrap/state.js'
|
|
5
|
+
|
|
6
|
+
import { type BufferedWriter, createBufferedWriter } from './bufferedWriter.js'
|
|
7
|
+
import { registerCleanup } from './cleanupRegistry.js'
|
|
8
|
+
import {
|
|
9
|
+
type DebugFilter,
|
|
10
|
+
parseDebugFilter,
|
|
11
|
+
shouldShowDebugMessage,
|
|
12
|
+
} from './debugFilter.js'
|
|
13
|
+
import { getClaudeConfigHomeDir, isEnvTruthy } from './envUtils.js'
|
|
14
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
15
|
+
import { writeToStderr } from './process.js'
|
|
16
|
+
import { jsonStringify } from './slowOperations.js'
|
|
17
|
+
|
|
18
|
+
export type DebugLogLevel = 'verbose' | 'debug' | 'info' | 'warn' | 'error'
|
|
19
|
+
|
|
20
|
+
const LEVEL_ORDER: Record<DebugLogLevel, number> = {
|
|
21
|
+
verbose: 0,
|
|
22
|
+
debug: 1,
|
|
23
|
+
info: 2,
|
|
24
|
+
warn: 3,
|
|
25
|
+
error: 4,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Minimum log level to include in debug output. Defaults to 'debug', which
|
|
30
|
+
* filters out 'verbose' messages. Set CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose to
|
|
31
|
+
* include high-volume diagnostics (e.g. full statusLine command, shell, cwd,
|
|
32
|
+
* stdout/stderr) that would otherwise drown out useful debug output.
|
|
33
|
+
*/
|
|
34
|
+
export const getMinDebugLogLevel = memoize((): DebugLogLevel => {
|
|
35
|
+
const raw = process.env.CLAUDE_CODE_DEBUG_LOG_LEVEL?.toLowerCase().trim()
|
|
36
|
+
if (raw && Object.hasOwn(LEVEL_ORDER, raw)) {
|
|
37
|
+
return raw as DebugLogLevel
|
|
38
|
+
}
|
|
39
|
+
return 'debug'
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
let runtimeDebugEnabled = false
|
|
43
|
+
|
|
44
|
+
export const isDebugMode = memoize((): boolean => {
|
|
45
|
+
return (
|
|
46
|
+
runtimeDebugEnabled ||
|
|
47
|
+
isEnvTruthy(process.env.DEBUG) ||
|
|
48
|
+
isEnvTruthy(process.env.DEBUG_SDK) ||
|
|
49
|
+
process.argv.includes('--debug') ||
|
|
50
|
+
process.argv.includes('-d') ||
|
|
51
|
+
isDebugToStdErr() ||
|
|
52
|
+
// Also check for --debug=pattern syntax
|
|
53
|
+
process.argv.some(arg => arg.startsWith('--debug=')) ||
|
|
54
|
+
// --debug-file implicitly enables debug mode
|
|
55
|
+
getDebugFilePath() !== null
|
|
56
|
+
)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Enables debug logging mid-session (e.g. via /debug). Non-ants don't write
|
|
61
|
+
* debug logs by default, so this lets them start capturing without restarting
|
|
62
|
+
* with --debug. Returns true if logging was already active.
|
|
63
|
+
*/
|
|
64
|
+
export function enableDebugLogging(): boolean {
|
|
65
|
+
const wasActive = isDebugMode() || process.env.USER_TYPE === 'ant'
|
|
66
|
+
runtimeDebugEnabled = true
|
|
67
|
+
isDebugMode.cache.clear?.()
|
|
68
|
+
return wasActive
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Extract and parse debug filter from command line arguments
|
|
72
|
+
// Exported for testing purposes
|
|
73
|
+
export const getDebugFilter = memoize((): DebugFilter | null => {
|
|
74
|
+
// Look for --debug=pattern in argv
|
|
75
|
+
const debugArg = process.argv.find(arg => arg.startsWith('--debug='))
|
|
76
|
+
if (!debugArg) {
|
|
77
|
+
return null
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Extract the pattern after the equals sign
|
|
81
|
+
const filterPattern = debugArg.substring('--debug='.length)
|
|
82
|
+
return parseDebugFilter(filterPattern)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
export const isDebugToStdErr = memoize((): boolean => {
|
|
86
|
+
return (
|
|
87
|
+
process.argv.includes('--debug-to-stderr') || process.argv.includes('-d2e')
|
|
88
|
+
)
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
export const getDebugFilePath = memoize((): string | null => {
|
|
92
|
+
for (let i = 0; i < process.argv.length; i++) {
|
|
93
|
+
const arg = process.argv[i]!
|
|
94
|
+
if (arg.startsWith('--debug-file=')) {
|
|
95
|
+
return arg.substring('--debug-file='.length)
|
|
96
|
+
}
|
|
97
|
+
if (arg === '--debug-file' && i + 1 < process.argv.length) {
|
|
98
|
+
return process.argv[i + 1]!
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return null
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
function shouldLogDebugMessage(message: string): boolean {
|
|
105
|
+
if (process.env.NODE_ENV === 'test' && !isDebugToStdErr()) {
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Non-ants only write debug logs when debug mode is active (via --debug at
|
|
110
|
+
// startup or /debug mid-session). Ants always log for /share, bug reports.
|
|
111
|
+
if (process.env.USER_TYPE !== 'ant' && !isDebugMode()) {
|
|
112
|
+
return false
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (
|
|
116
|
+
typeof process === 'undefined' ||
|
|
117
|
+
typeof process.versions === 'undefined' ||
|
|
118
|
+
typeof process.versions.node === 'undefined'
|
|
119
|
+
) {
|
|
120
|
+
return false
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const filter = getDebugFilter()
|
|
124
|
+
return shouldShowDebugMessage(message, filter)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let hasFormattedOutput = false
|
|
128
|
+
export function setHasFormattedOutput(value: boolean): void {
|
|
129
|
+
hasFormattedOutput = value
|
|
130
|
+
}
|
|
131
|
+
export function getHasFormattedOutput(): boolean {
|
|
132
|
+
return hasFormattedOutput
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
let debugWriter: BufferedWriter | null = null
|
|
136
|
+
let pendingWrite: Promise<void> = Promise.resolve()
|
|
137
|
+
|
|
138
|
+
// Module-level so .bind captures only its explicit args, not the
|
|
139
|
+
// writeFn closure's parent scope (Jarred, #22257).
|
|
140
|
+
async function appendAsync(
|
|
141
|
+
needMkdir: boolean,
|
|
142
|
+
dir: string,
|
|
143
|
+
path: string,
|
|
144
|
+
content: string,
|
|
145
|
+
): Promise<void> {
|
|
146
|
+
if (needMkdir) {
|
|
147
|
+
await mkdir(dir, { recursive: true }).catch(() => {})
|
|
148
|
+
}
|
|
149
|
+
await appendFile(path, content)
|
|
150
|
+
void updateLatestDebugLogSymlink()
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function noop(): void {}
|
|
154
|
+
|
|
155
|
+
function getDebugWriter(): BufferedWriter {
|
|
156
|
+
if (!debugWriter) {
|
|
157
|
+
let ensuredDir: string | null = null
|
|
158
|
+
debugWriter = createBufferedWriter({
|
|
159
|
+
writeFn: content => {
|
|
160
|
+
const path = getDebugLogPath()
|
|
161
|
+
const dir = dirname(path)
|
|
162
|
+
const needMkdir = ensuredDir !== dir
|
|
163
|
+
ensuredDir = dir
|
|
164
|
+
if (isDebugMode()) {
|
|
165
|
+
// immediateMode: must stay sync. Async writes are lost on direct
|
|
166
|
+
// process.exit() and keep the event loop alive in beforeExit
|
|
167
|
+
// handlers (infinite loop with Perfetto tracing). See #22257.
|
|
168
|
+
if (needMkdir) {
|
|
169
|
+
try {
|
|
170
|
+
getFsImplementation().mkdirSync(dir)
|
|
171
|
+
} catch {
|
|
172
|
+
// Directory already exists
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
getFsImplementation().appendFileSync(path, content)
|
|
176
|
+
void updateLatestDebugLogSymlink()
|
|
177
|
+
return
|
|
178
|
+
}
|
|
179
|
+
// Buffered path (ants without --debug): flushes ~1/sec so chain
|
|
180
|
+
// depth stays ~1. .bind over a closure so only the bound args are
|
|
181
|
+
// retained, not this scope.
|
|
182
|
+
pendingWrite = pendingWrite
|
|
183
|
+
.then(appendAsync.bind(null, needMkdir, dir, path, content))
|
|
184
|
+
.catch(noop)
|
|
185
|
+
},
|
|
186
|
+
flushIntervalMs: 1000,
|
|
187
|
+
maxBufferSize: 100,
|
|
188
|
+
immediateMode: isDebugMode(),
|
|
189
|
+
})
|
|
190
|
+
registerCleanup(async () => {
|
|
191
|
+
debugWriter?.dispose()
|
|
192
|
+
await pendingWrite
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
return debugWriter
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export async function flushDebugLogs(): Promise<void> {
|
|
199
|
+
debugWriter?.flush()
|
|
200
|
+
await pendingWrite
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export function logForDebugging(
|
|
204
|
+
message: string,
|
|
205
|
+
{ level }: { level: DebugLogLevel } = {
|
|
206
|
+
level: 'debug',
|
|
207
|
+
},
|
|
208
|
+
): void {
|
|
209
|
+
if (LEVEL_ORDER[level] < LEVEL_ORDER[getMinDebugLogLevel()]) {
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
if (!shouldLogDebugMessage(message)) {
|
|
213
|
+
return
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Multiline messages break the jsonl output format, so make any multiline messages JSON.
|
|
217
|
+
if (hasFormattedOutput && message.includes('\n')) {
|
|
218
|
+
message = jsonStringify(message)
|
|
219
|
+
}
|
|
220
|
+
const timestamp = new Date().toISOString()
|
|
221
|
+
const output = `${timestamp} [${level.toUpperCase()}] ${message.trim()}\n`
|
|
222
|
+
if (isDebugToStdErr()) {
|
|
223
|
+
writeToStderr(output)
|
|
224
|
+
return
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
getDebugWriter().write(output)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export function getDebugLogPath(): string {
|
|
231
|
+
return (
|
|
232
|
+
getDebugFilePath() ??
|
|
233
|
+
process.env.CLAUDE_CODE_DEBUG_LOGS_DIR ??
|
|
234
|
+
join(getClaudeConfigHomeDir(), 'debug', `${getSessionId()}.txt`)
|
|
235
|
+
)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Updates the latest debug log symlink to point to the current debug log file.
|
|
240
|
+
* Creates or updates a symlink at ~/.claude/debug/latest
|
|
241
|
+
*/
|
|
242
|
+
const updateLatestDebugLogSymlink = memoize(async (): Promise<void> => {
|
|
243
|
+
try {
|
|
244
|
+
const debugLogPath = getDebugLogPath()
|
|
245
|
+
const debugLogsDir = dirname(debugLogPath)
|
|
246
|
+
const latestSymlinkPath = join(debugLogsDir, 'latest')
|
|
247
|
+
|
|
248
|
+
await unlink(latestSymlinkPath).catch(() => {})
|
|
249
|
+
await symlink(debugLogPath, latestSymlinkPath)
|
|
250
|
+
} catch {
|
|
251
|
+
// Silently fail if symlink creation fails
|
|
252
|
+
}
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Logs errors for Ants only, always visible in production.
|
|
257
|
+
*/
|
|
258
|
+
export function logAntError(context: string, error: unknown): void {
|
|
259
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
260
|
+
return
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (error instanceof Error && error.stack) {
|
|
264
|
+
logForDebugging(`[ANT-ONLY] ${context} stack trace:\n${error.stack}`, {
|
|
265
|
+
level: 'error',
|
|
266
|
+
})
|
|
267
|
+
}
|
|
268
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import memoize from 'lodash-es/memoize.js'
|
|
2
|
+
|
|
3
|
+
export type DebugFilter = {
|
|
4
|
+
include: string[]
|
|
5
|
+
exclude: string[]
|
|
6
|
+
isExclusive: boolean
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Parse debug filter string into a filter configuration
|
|
11
|
+
* Examples:
|
|
12
|
+
* - "api,hooks" -> include only api and hooks categories
|
|
13
|
+
* - "!1p,!file" -> exclude logging and file categories
|
|
14
|
+
* - undefined/empty -> no filtering (show all)
|
|
15
|
+
*/
|
|
16
|
+
export const parseDebugFilter = memoize(
|
|
17
|
+
(filterString?: string): DebugFilter | null => {
|
|
18
|
+
if (!filterString || filterString.trim() === '') {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const filters = filterString
|
|
23
|
+
.split(',')
|
|
24
|
+
.map(f => f.trim())
|
|
25
|
+
.filter(Boolean)
|
|
26
|
+
|
|
27
|
+
// If no valid filters remain, return null
|
|
28
|
+
if (filters.length === 0) {
|
|
29
|
+
return null
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Check for mixed inclusive/exclusive filters
|
|
33
|
+
const hasExclusive = filters.some(f => f.startsWith('!'))
|
|
34
|
+
const hasInclusive = filters.some(f => !f.startsWith('!'))
|
|
35
|
+
|
|
36
|
+
if (hasExclusive && hasInclusive) {
|
|
37
|
+
// For now, we'll treat this as an error case and show all messages
|
|
38
|
+
// Log error using logForDebugging to avoid console.error lint rule
|
|
39
|
+
// We'll import and use it later when the circular dependency is resolved
|
|
40
|
+
// For now, just return null silently
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Clean up filters (remove ! prefix) and normalize
|
|
45
|
+
const cleanFilters = filters.map(f => f.replace(/^!/, '').toLowerCase())
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
include: hasExclusive ? [] : cleanFilters,
|
|
49
|
+
exclude: hasExclusive ? cleanFilters : [],
|
|
50
|
+
isExclusive: hasExclusive,
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Extract debug categories from a message
|
|
57
|
+
* Supports multiple patterns:
|
|
58
|
+
* - "category: message" -> ["category"]
|
|
59
|
+
* - "[CATEGORY] message" -> ["category"]
|
|
60
|
+
* - "MCP server \"name\": message" -> ["mcp", "name"]
|
|
61
|
+
* - "[ANT-ONLY] 1P event: tengu_timer" -> ["ant-only", "1p"]
|
|
62
|
+
*
|
|
63
|
+
* Returns lowercase categories for case-insensitive matching
|
|
64
|
+
*/
|
|
65
|
+
export function extractDebugCategories(message: string): string[] {
|
|
66
|
+
const categories: string[] = []
|
|
67
|
+
|
|
68
|
+
// Pattern 3: MCP server "servername" - Check this first to avoid false positives
|
|
69
|
+
const mcpMatch = message.match(/^MCP server ["']([^"']+)["']/)
|
|
70
|
+
if (mcpMatch && mcpMatch[1]) {
|
|
71
|
+
categories.push('mcp')
|
|
72
|
+
categories.push(mcpMatch[1].toLowerCase())
|
|
73
|
+
} else {
|
|
74
|
+
// Pattern 1: "category: message" (simple prefix) - only if not MCP pattern
|
|
75
|
+
const prefixMatch = message.match(/^([^:[]+):/)
|
|
76
|
+
if (prefixMatch && prefixMatch[1]) {
|
|
77
|
+
categories.push(prefixMatch[1].trim().toLowerCase())
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Pattern 2: [CATEGORY] at the start
|
|
82
|
+
const bracketMatch = message.match(/^\[([^\]]+)]/)
|
|
83
|
+
if (bracketMatch && bracketMatch[1]) {
|
|
84
|
+
categories.push(bracketMatch[1].trim().toLowerCase())
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Pattern 4: Check for additional categories in the message
|
|
88
|
+
// e.g., "[ANT-ONLY] 1P event: tengu_timer" should match both "ant-only" and "1p"
|
|
89
|
+
if (message.toLowerCase().includes('1p event:')) {
|
|
90
|
+
categories.push('1p')
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Pattern 5: Look for secondary categories after the first pattern
|
|
94
|
+
// e.g., "AutoUpdaterWrapper: Installation type: development"
|
|
95
|
+
const secondaryMatch = message.match(
|
|
96
|
+
/:\s*([^:]+?)(?:\s+(?:type|mode|status|event))?:/,
|
|
97
|
+
)
|
|
98
|
+
if (secondaryMatch && secondaryMatch[1]) {
|
|
99
|
+
const secondary = secondaryMatch[1].trim().toLowerCase()
|
|
100
|
+
// Only add if it's a reasonable category name (not too long, no spaces)
|
|
101
|
+
if (secondary.length < 30 && !secondary.includes(' ')) {
|
|
102
|
+
categories.push(secondary)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// If no categories found, return empty array (uncategorized)
|
|
107
|
+
return Array.from(new Set(categories)) // Remove duplicates
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Check if debug message should be shown based on filter
|
|
112
|
+
* @param categories - Categories extracted from the message
|
|
113
|
+
* @param filter - Parsed filter configuration
|
|
114
|
+
* @returns true if message should be shown
|
|
115
|
+
*/
|
|
116
|
+
export function shouldShowDebugCategories(
|
|
117
|
+
categories: string[],
|
|
118
|
+
filter: DebugFilter | null,
|
|
119
|
+
): boolean {
|
|
120
|
+
// No filter means show everything
|
|
121
|
+
if (!filter) {
|
|
122
|
+
return true
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// If no categories found, handle based on filter mode
|
|
126
|
+
if (categories.length === 0) {
|
|
127
|
+
// In exclusive mode, uncategorized messages are excluded by default for security
|
|
128
|
+
// In inclusive mode, uncategorized messages are excluded (must match a category)
|
|
129
|
+
return false
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (filter.isExclusive) {
|
|
133
|
+
// Exclusive mode: show if none of the categories are in the exclude list
|
|
134
|
+
return !categories.some(cat => filter.exclude.includes(cat))
|
|
135
|
+
} else {
|
|
136
|
+
// Inclusive mode: show if any of the categories are in the include list
|
|
137
|
+
return categories.some(cat => filter.include.includes(cat))
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Main function to check if a debug message should be shown
|
|
143
|
+
* Combines extraction and filtering
|
|
144
|
+
*/
|
|
145
|
+
export function shouldShowDebugMessage(
|
|
146
|
+
message: string,
|
|
147
|
+
filter: DebugFilter | null,
|
|
148
|
+
): boolean {
|
|
149
|
+
// Fast path: no filter means show everything
|
|
150
|
+
if (!filter) {
|
|
151
|
+
return true
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Only extract categories if we have a filter
|
|
155
|
+
const categories = extractDebugCategories(message)
|
|
156
|
+
return shouldShowDebugCategories(categories, filter)
|
|
157
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep Link Origin Banner
|
|
3
|
+
*
|
|
4
|
+
* Builds the warning text shown when a session was opened by an external
|
|
5
|
+
* claude-cli:// deep link. Linux xdg-open and browsers with "always allow"
|
|
6
|
+
* set dispatch the link with no OS-level confirmation, so the application
|
|
7
|
+
* provides its own provenance signal — mirroring claude.ai's security
|
|
8
|
+
* interstitial for external-source prefills.
|
|
9
|
+
*
|
|
10
|
+
* The user must press Enter to submit; this banner primes them to read the
|
|
11
|
+
* prompt (which may use homoglyphs or padding to hide instructions) and
|
|
12
|
+
* notice which directory — and therefore which CLAUDE.md — was loaded.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { stat } from 'fs/promises'
|
|
16
|
+
import { homedir } from 'os'
|
|
17
|
+
import { join, sep } from 'path'
|
|
18
|
+
import { formatNumber, formatRelativeTimeAgo } from '../format.js'
|
|
19
|
+
import { getCommonDir } from '../git/gitFilesystem.js'
|
|
20
|
+
import { getGitDir } from '../git.js'
|
|
21
|
+
|
|
22
|
+
const STALE_FETCH_WARN_MS = 7 * 24 * 60 * 60 * 1000
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Above this length, a pre-filled prompt no longer fits on one screen
|
|
26
|
+
* (~12-15 lines on an 80-col terminal). The banner switches from "review
|
|
27
|
+
* carefully" to an explicit "scroll to review the entire prompt" so a
|
|
28
|
+
* malicious tail buried past line 60 isn't silently off-screen.
|
|
29
|
+
*/
|
|
30
|
+
const LONG_PREFILL_THRESHOLD = 1000
|
|
31
|
+
|
|
32
|
+
export type DeepLinkBannerInfo = {
|
|
33
|
+
/** Resolved working directory the session launched in. */
|
|
34
|
+
cwd: string
|
|
35
|
+
/** Length of the ?q= prompt pre-filled in the input box. Undefined = no prefill. */
|
|
36
|
+
prefillLength?: number
|
|
37
|
+
/** The ?repo= slug if the cwd was resolved from the githubRepoPaths MRU. */
|
|
38
|
+
repo?: string
|
|
39
|
+
/** Last-fetch timestamp for the repo (FETCH_HEAD mtime). Undefined = never fetched or not a git repo. */
|
|
40
|
+
lastFetch?: Date
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Build the multi-line warning banner for a deep-link-originated session.
|
|
45
|
+
*
|
|
46
|
+
* Always shows the working directory so the user can see which CLAUDE.md
|
|
47
|
+
* will load. When the link pre-filled a prompt, adds a second line prompting
|
|
48
|
+
* the user to review it — the prompt itself is visible in the input box.
|
|
49
|
+
*
|
|
50
|
+
* When the cwd was resolved from a ?repo= slug, also shows the slug and the
|
|
51
|
+
* clone's last-fetch age so the user knows which local clone was selected
|
|
52
|
+
* and whether its CLAUDE.md may be stale relative to upstream.
|
|
53
|
+
*/
|
|
54
|
+
export function buildDeepLinkBanner(info: DeepLinkBannerInfo): string {
|
|
55
|
+
const lines = [
|
|
56
|
+
`This session was opened by an external deep link in ${tildify(info.cwd)}`,
|
|
57
|
+
]
|
|
58
|
+
if (info.repo) {
|
|
59
|
+
const age = info.lastFetch ? formatRelativeTimeAgo(info.lastFetch) : 'never'
|
|
60
|
+
const stale =
|
|
61
|
+
!info.lastFetch ||
|
|
62
|
+
Date.now() - info.lastFetch.getTime() > STALE_FETCH_WARN_MS
|
|
63
|
+
lines.push(
|
|
64
|
+
`Resolved ${info.repo} from local clones · last fetched ${age}${stale ? ' — CLAUDE.md may be stale' : ''}`,
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
if (info.prefillLength) {
|
|
68
|
+
lines.push(
|
|
69
|
+
info.prefillLength > LONG_PREFILL_THRESHOLD
|
|
70
|
+
? `The prompt below (${formatNumber(info.prefillLength)} chars) was supplied by the link — scroll to review the entire prompt before pressing Enter.`
|
|
71
|
+
: 'The prompt below was supplied by the link — review carefully before pressing Enter.',
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
return lines.join('\n')
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Read the mtime of .git/FETCH_HEAD, which git updates on every fetch or
|
|
79
|
+
* pull. Returns undefined if the directory is not a git repo or has never
|
|
80
|
+
* been fetched.
|
|
81
|
+
*
|
|
82
|
+
* FETCH_HEAD is per-worktree — fetching from the main worktree does not
|
|
83
|
+
* touch a sibling worktree's FETCH_HEAD. When cwd is a worktree, we check
|
|
84
|
+
* both and return whichever is newer so a recently-fetched main repo
|
|
85
|
+
* doesn't read as "never fetched" just because the deep link landed in
|
|
86
|
+
* a worktree.
|
|
87
|
+
*/
|
|
88
|
+
export async function readLastFetchTime(
|
|
89
|
+
cwd: string,
|
|
90
|
+
): Promise<Date | undefined> {
|
|
91
|
+
const gitDir = await getGitDir(cwd)
|
|
92
|
+
if (!gitDir) return undefined
|
|
93
|
+
const commonDir = await getCommonDir(gitDir)
|
|
94
|
+
const [local, common] = await Promise.all([
|
|
95
|
+
mtimeOrUndefined(join(gitDir, 'FETCH_HEAD')),
|
|
96
|
+
commonDir
|
|
97
|
+
? mtimeOrUndefined(join(commonDir, 'FETCH_HEAD'))
|
|
98
|
+
: Promise.resolve(undefined),
|
|
99
|
+
])
|
|
100
|
+
if (local && common) return local > common ? local : common
|
|
101
|
+
return local ?? common
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async function mtimeOrUndefined(p: string): Promise<Date | undefined> {
|
|
105
|
+
try {
|
|
106
|
+
const { mtime } = await stat(p)
|
|
107
|
+
return mtime
|
|
108
|
+
} catch {
|
|
109
|
+
return undefined
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Shorten home-dir-prefixed paths to ~ notation for the banner.
|
|
115
|
+
* Not using getDisplayPath() because cwd is the current working directory,
|
|
116
|
+
* so the relative-path branch would collapse it to the empty string.
|
|
117
|
+
*/
|
|
118
|
+
function tildify(p: string): string {
|
|
119
|
+
const home = homedir()
|
|
120
|
+
if (p === home) return '~'
|
|
121
|
+
if (p.startsWith(home + sep)) return '~' + p.slice(home.length)
|
|
122
|
+
return p
|
|
123
|
+
}
|