@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,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query profiling utility for measuring and reporting time spent in the query
|
|
3
|
+
* pipeline from user input to first token arrival. Enable by setting CLAUDE_CODE_PROFILE_QUERY=1
|
|
4
|
+
*
|
|
5
|
+
* Uses Node.js built-in performance hooks API for standard timing measurement.
|
|
6
|
+
* Tracks each query session with detailed checkpoints for identifying bottlenecks.
|
|
7
|
+
*
|
|
8
|
+
* Checkpoints tracked (in order):
|
|
9
|
+
* - query_user_input_received: Start of profiling
|
|
10
|
+
* - query_context_loading_start/end: Loading system prompts and contexts
|
|
11
|
+
* - query_query_start: Entry to query call from REPL
|
|
12
|
+
* - query_fn_entry: Entry to query() function
|
|
13
|
+
* - query_microcompact_start/end: Microcompaction of messages
|
|
14
|
+
* - query_autocompact_start/end: Autocompaction check
|
|
15
|
+
* - query_setup_start/end: StreamingToolExecutor and model setup
|
|
16
|
+
* - query_api_loop_start: Start of API retry loop
|
|
17
|
+
* - query_api_streaming_start: Start of streaming API call
|
|
18
|
+
* - query_tool_schema_build_start/end: Building tool schemas
|
|
19
|
+
* - query_message_normalization_start/end: Normalizing messages
|
|
20
|
+
* - query_client_creation_start/end: Creating Anthropic client
|
|
21
|
+
* - query_api_request_sent: HTTP request dispatched (before await, inside retry body)
|
|
22
|
+
* - query_response_headers_received: .withResponse() resolved (headers arrived)
|
|
23
|
+
* - query_first_chunk_received: First streaming chunk received (TTFT)
|
|
24
|
+
* - query_api_streaming_end: Streaming complete
|
|
25
|
+
* - query_tool_execution_start/end: Tool execution
|
|
26
|
+
* - query_recursive_call: Before recursive query call
|
|
27
|
+
* - query_end: End of query
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { logForDebugging } from './debug.js'
|
|
31
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
32
|
+
import { formatMs, formatTimelineLine, getPerformance } from './profilerBase.js'
|
|
33
|
+
|
|
34
|
+
// Module-level state - initialized once when the module loads
|
|
35
|
+
// eslint-disable-next-line custom-rules/no-process-env-top-level
|
|
36
|
+
const ENABLED = isEnvTruthy(process.env.CLAUDE_CODE_PROFILE_QUERY)
|
|
37
|
+
|
|
38
|
+
// Track memory snapshots separately (perf_hooks doesn't track memory)
|
|
39
|
+
const memorySnapshots = new Map<string, NodeJS.MemoryUsage>()
|
|
40
|
+
|
|
41
|
+
// Track query count for reporting
|
|
42
|
+
let queryCount = 0
|
|
43
|
+
|
|
44
|
+
// Track first token received time separately for summary
|
|
45
|
+
let firstTokenTime: number | null = null
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Start profiling a new query session
|
|
49
|
+
*/
|
|
50
|
+
export function startQueryProfile(): void {
|
|
51
|
+
if (!ENABLED) return
|
|
52
|
+
|
|
53
|
+
const perf = getPerformance()
|
|
54
|
+
|
|
55
|
+
// Clear previous marks and memory snapshots
|
|
56
|
+
perf.clearMarks()
|
|
57
|
+
memorySnapshots.clear()
|
|
58
|
+
firstTokenTime = null
|
|
59
|
+
|
|
60
|
+
queryCount++
|
|
61
|
+
|
|
62
|
+
// Record the start checkpoint
|
|
63
|
+
queryCheckpoint('query_user_input_received')
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Record a checkpoint with the given name
|
|
68
|
+
*/
|
|
69
|
+
export function queryCheckpoint(name: string): void {
|
|
70
|
+
if (!ENABLED) return
|
|
71
|
+
|
|
72
|
+
const perf = getPerformance()
|
|
73
|
+
perf.mark(name)
|
|
74
|
+
memorySnapshots.set(name, process.memoryUsage())
|
|
75
|
+
|
|
76
|
+
// Track first token specially
|
|
77
|
+
if (name === 'query_first_chunk_received' && firstTokenTime === null) {
|
|
78
|
+
const marks = perf.getEntriesByType('mark')
|
|
79
|
+
if (marks.length > 0) {
|
|
80
|
+
const lastMark = marks[marks.length - 1]
|
|
81
|
+
firstTokenTime = lastMark?.startTime ?? 0
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* End the current query profiling session
|
|
88
|
+
*/
|
|
89
|
+
export function endQueryProfile(): void {
|
|
90
|
+
if (!ENABLED) return
|
|
91
|
+
|
|
92
|
+
queryCheckpoint('query_profile_end')
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Identify slow operations (> 100ms delta)
|
|
97
|
+
*/
|
|
98
|
+
function getSlowWarning(deltaMs: number, name: string): string {
|
|
99
|
+
// Don't flag the first checkpoint as slow - it measures time from process start,
|
|
100
|
+
// not actual processing overhead
|
|
101
|
+
if (name === 'query_user_input_received') {
|
|
102
|
+
return ''
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (deltaMs > 1000) {
|
|
106
|
+
return ` ⚠️ VERY SLOW`
|
|
107
|
+
}
|
|
108
|
+
if (deltaMs > 100) {
|
|
109
|
+
return ` ⚠️ SLOW`
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Specific warnings for known bottlenecks
|
|
113
|
+
if (name.includes('git_status') && deltaMs > 50) {
|
|
114
|
+
return ' ⚠️ git status'
|
|
115
|
+
}
|
|
116
|
+
if (name.includes('tool_schema') && deltaMs > 50) {
|
|
117
|
+
return ' ⚠️ tool schemas'
|
|
118
|
+
}
|
|
119
|
+
if (name.includes('client_creation') && deltaMs > 50) {
|
|
120
|
+
return ' ⚠️ client creation'
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return ''
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Get a formatted report of all checkpoints for the current/last query
|
|
128
|
+
*/
|
|
129
|
+
function getQueryProfileReport(): string {
|
|
130
|
+
if (!ENABLED) {
|
|
131
|
+
return 'Query profiling not enabled (set CLAUDE_CODE_PROFILE_QUERY=1)'
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const perf = getPerformance()
|
|
135
|
+
const marks = perf.getEntriesByType('mark')
|
|
136
|
+
if (marks.length === 0) {
|
|
137
|
+
return 'No query profiling checkpoints recorded'
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const lines: string[] = []
|
|
141
|
+
lines.push('='.repeat(80))
|
|
142
|
+
lines.push(`QUERY PROFILING REPORT - Query #${queryCount}`)
|
|
143
|
+
lines.push('='.repeat(80))
|
|
144
|
+
lines.push('')
|
|
145
|
+
|
|
146
|
+
// Use first mark as baseline (query start time) to show relative times
|
|
147
|
+
const baselineTime = marks[0]?.startTime ?? 0
|
|
148
|
+
let prevTime = baselineTime
|
|
149
|
+
let apiRequestSentTime = 0
|
|
150
|
+
let firstChunkTime = 0
|
|
151
|
+
|
|
152
|
+
for (const mark of marks) {
|
|
153
|
+
const relativeTime = mark.startTime - baselineTime
|
|
154
|
+
const deltaMs = mark.startTime - prevTime
|
|
155
|
+
lines.push(
|
|
156
|
+
formatTimelineLine(
|
|
157
|
+
relativeTime,
|
|
158
|
+
deltaMs,
|
|
159
|
+
mark.name,
|
|
160
|
+
memorySnapshots.get(mark.name),
|
|
161
|
+
10,
|
|
162
|
+
9,
|
|
163
|
+
getSlowWarning(deltaMs, mark.name),
|
|
164
|
+
),
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
// Track key milestones for summary (use relative times)
|
|
168
|
+
if (mark.name === 'query_api_request_sent') {
|
|
169
|
+
apiRequestSentTime = relativeTime
|
|
170
|
+
}
|
|
171
|
+
if (mark.name === 'query_first_chunk_received') {
|
|
172
|
+
firstChunkTime = relativeTime
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
prevTime = mark.startTime
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Calculate summary statistics (relative to baseline)
|
|
179
|
+
const lastMark = marks[marks.length - 1]
|
|
180
|
+
const totalTime = lastMark ? lastMark.startTime - baselineTime : 0
|
|
181
|
+
|
|
182
|
+
lines.push('')
|
|
183
|
+
lines.push('-'.repeat(80))
|
|
184
|
+
|
|
185
|
+
if (firstChunkTime > 0) {
|
|
186
|
+
const preRequestOverhead = apiRequestSentTime
|
|
187
|
+
const networkLatency = firstChunkTime - apiRequestSentTime
|
|
188
|
+
const preRequestPercent = (
|
|
189
|
+
(preRequestOverhead / firstChunkTime) *
|
|
190
|
+
100
|
|
191
|
+
).toFixed(1)
|
|
192
|
+
const networkPercent = ((networkLatency / firstChunkTime) * 100).toFixed(1)
|
|
193
|
+
|
|
194
|
+
lines.push(`Total TTFT: ${formatMs(firstChunkTime)}ms`)
|
|
195
|
+
lines.push(
|
|
196
|
+
` - Pre-request overhead: ${formatMs(preRequestOverhead)}ms (${preRequestPercent}%)`,
|
|
197
|
+
)
|
|
198
|
+
lines.push(
|
|
199
|
+
` - Network latency: ${formatMs(networkLatency)}ms (${networkPercent}%)`,
|
|
200
|
+
)
|
|
201
|
+
} else {
|
|
202
|
+
lines.push(`Total time: ${formatMs(totalTime)}ms`)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Add phase summary
|
|
206
|
+
lines.push(getPhaseSummary(marks, baselineTime))
|
|
207
|
+
|
|
208
|
+
lines.push('='.repeat(80))
|
|
209
|
+
|
|
210
|
+
return lines.join('\n')
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Get phase-based summary showing time spent in each major phase
|
|
215
|
+
*/
|
|
216
|
+
function getPhaseSummary(
|
|
217
|
+
marks: Array<{ name: string; startTime: number }>,
|
|
218
|
+
baselineTime: number,
|
|
219
|
+
): string {
|
|
220
|
+
const phases: Array<{ name: string; start: string; end: string }> = [
|
|
221
|
+
{
|
|
222
|
+
name: 'Context loading',
|
|
223
|
+
start: 'query_context_loading_start',
|
|
224
|
+
end: 'query_context_loading_end',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: 'Microcompact',
|
|
228
|
+
start: 'query_microcompact_start',
|
|
229
|
+
end: 'query_microcompact_end',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'Autocompact',
|
|
233
|
+
start: 'query_autocompact_start',
|
|
234
|
+
end: 'query_autocompact_end',
|
|
235
|
+
},
|
|
236
|
+
{ name: 'Query setup', start: 'query_setup_start', end: 'query_setup_end' },
|
|
237
|
+
{
|
|
238
|
+
name: 'Tool schemas',
|
|
239
|
+
start: 'query_tool_schema_build_start',
|
|
240
|
+
end: 'query_tool_schema_build_end',
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'Message normalization',
|
|
244
|
+
start: 'query_message_normalization_start',
|
|
245
|
+
end: 'query_message_normalization_end',
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'Client creation',
|
|
249
|
+
start: 'query_client_creation_start',
|
|
250
|
+
end: 'query_client_creation_end',
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
name: 'Network TTFB',
|
|
254
|
+
start: 'query_api_request_sent',
|
|
255
|
+
end: 'query_first_chunk_received',
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: 'Tool execution',
|
|
259
|
+
start: 'query_tool_execution_start',
|
|
260
|
+
end: 'query_tool_execution_end',
|
|
261
|
+
},
|
|
262
|
+
]
|
|
263
|
+
|
|
264
|
+
const markMap = new Map(marks.map(m => [m.name, m.startTime - baselineTime]))
|
|
265
|
+
|
|
266
|
+
const lines: string[] = []
|
|
267
|
+
lines.push('')
|
|
268
|
+
lines.push('PHASE BREAKDOWN:')
|
|
269
|
+
|
|
270
|
+
for (const phase of phases) {
|
|
271
|
+
const startTime = markMap.get(phase.start)
|
|
272
|
+
const endTime = markMap.get(phase.end)
|
|
273
|
+
|
|
274
|
+
if (startTime !== undefined && endTime !== undefined) {
|
|
275
|
+
const duration = endTime - startTime
|
|
276
|
+
const bar = '█'.repeat(Math.min(Math.ceil(duration / 10), 50)) // 1 block per 10ms, max 50
|
|
277
|
+
lines.push(
|
|
278
|
+
` ${phase.name.padEnd(22)} ${formatMs(duration).padStart(10)}ms ${bar}`,
|
|
279
|
+
)
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Calculate pre-API overhead (everything before api_request_sent)
|
|
284
|
+
const apiRequestSent = markMap.get('query_api_request_sent')
|
|
285
|
+
if (apiRequestSent !== undefined) {
|
|
286
|
+
lines.push('')
|
|
287
|
+
lines.push(
|
|
288
|
+
` ${'Total pre-API overhead'.padEnd(22)} ${formatMs(apiRequestSent).padStart(10)}ms`,
|
|
289
|
+
)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return lines.join('\n')
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Log the query profile report to debug output
|
|
297
|
+
*/
|
|
298
|
+
export function logQueryProfileReport(): void {
|
|
299
|
+
if (!ENABLED) return
|
|
300
|
+
logForDebugging(getQueryProfileReport())
|
|
301
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { QueuedCommand } from '../types/textInputTypes.js'
|
|
2
|
+
import {
|
|
3
|
+
dequeue,
|
|
4
|
+
dequeueAllMatching,
|
|
5
|
+
hasCommandsInQueue,
|
|
6
|
+
peek,
|
|
7
|
+
} from './messageQueueManager.js'
|
|
8
|
+
|
|
9
|
+
type ProcessQueueParams = {
|
|
10
|
+
executeInput: (commands: QueuedCommand[]) => Promise<void>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
type ProcessQueueResult = {
|
|
14
|
+
processed: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Check if a queued command is a slash command (value starts with '/').
|
|
19
|
+
*/
|
|
20
|
+
function isSlashCommand(cmd: QueuedCommand): boolean {
|
|
21
|
+
if (typeof cmd.value === 'string') {
|
|
22
|
+
return cmd.value.trim().startsWith('/')
|
|
23
|
+
}
|
|
24
|
+
// For ContentBlockParam[], check the first text block
|
|
25
|
+
for (const block of cmd.value) {
|
|
26
|
+
if (block.type === 'text') {
|
|
27
|
+
return block.text.trim().startsWith('/')
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return false
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Processes commands from the queue.
|
|
35
|
+
*
|
|
36
|
+
* Slash commands (starting with '/') and bash-mode commands are processed
|
|
37
|
+
* one at a time so each goes through the executeInput path individually.
|
|
38
|
+
* Bash commands need individual processing to preserve per-command error
|
|
39
|
+
* isolation, exit codes, and progress UI. Other non-slash commands are
|
|
40
|
+
* batched: all items **with the same mode** as the highest-priority item
|
|
41
|
+
* are drained at once and passed as a single array to executeInput — each
|
|
42
|
+
* becomes its own user message with its own UUID. Different modes
|
|
43
|
+
* (e.g. prompt vs task-notification) are never mixed because they are
|
|
44
|
+
* treated differently downstream.
|
|
45
|
+
*
|
|
46
|
+
* The caller is responsible for ensuring no query is currently running
|
|
47
|
+
* and for calling this function again after each command completes
|
|
48
|
+
* until the queue is empty.
|
|
49
|
+
*
|
|
50
|
+
* @returns result with processed status
|
|
51
|
+
*/
|
|
52
|
+
export function processQueueIfReady({
|
|
53
|
+
executeInput,
|
|
54
|
+
}: ProcessQueueParams): ProcessQueueResult {
|
|
55
|
+
// This processor runs on the REPL main thread between turns. Skip anything
|
|
56
|
+
// addressed to a subagent — an unfiltered peek() returning a subagent
|
|
57
|
+
// notification would set targetMode, dequeueAllMatching would find nothing
|
|
58
|
+
// matching that mode with agentId===undefined, and we'd return processed:
|
|
59
|
+
// false with the queue unchanged → the React effect never re-fires and any
|
|
60
|
+
// queued user prompt stalls permanently.
|
|
61
|
+
const isMainThread = (cmd: QueuedCommand) => cmd.agentId === undefined
|
|
62
|
+
|
|
63
|
+
const next = peek(isMainThread)
|
|
64
|
+
if (!next) {
|
|
65
|
+
return { processed: false }
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Slash commands and bash-mode commands are processed individually.
|
|
69
|
+
// Bash commands need per-command error isolation, exit codes, and progress UI.
|
|
70
|
+
if (isSlashCommand(next) || next.mode === 'bash') {
|
|
71
|
+
const cmd = dequeue(isMainThread)!
|
|
72
|
+
void executeInput([cmd])
|
|
73
|
+
return { processed: true }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Drain all non-slash-command items with the same mode at once.
|
|
77
|
+
const targetMode = next.mode
|
|
78
|
+
const commands = dequeueAllMatching(
|
|
79
|
+
cmd => isMainThread(cmd) && !isSlashCommand(cmd) && cmd.mode === targetMode,
|
|
80
|
+
)
|
|
81
|
+
if (commands.length === 0) {
|
|
82
|
+
return { processed: false }
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void executeInput(commands)
|
|
86
|
+
return { processed: true }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Checks if the queue has pending commands.
|
|
91
|
+
* Use this to determine if queue processing should be triggered.
|
|
92
|
+
*/
|
|
93
|
+
export function hasQueuedCommands(): boolean {
|
|
94
|
+
return hasCommandsInQueue()
|
|
95
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { type FileHandle, open } from 'fs/promises'
|
|
2
|
+
import { isENOENT } from './errors.js'
|
|
3
|
+
|
|
4
|
+
export const CHUNK_SIZE = 8 * 1024
|
|
5
|
+
export const MAX_SCAN_BYTES = 10 * 1024 * 1024
|
|
6
|
+
const NL = 0x0a
|
|
7
|
+
|
|
8
|
+
export type EditContext = {
|
|
9
|
+
/** Slice of the file: contextLines before/after the match, on line boundaries. */
|
|
10
|
+
content: string
|
|
11
|
+
/** 1-based line number of content's first line in the original file. */
|
|
12
|
+
lineOffset: number
|
|
13
|
+
/** True if MAX_SCAN_BYTES was hit without finding the needle. */
|
|
14
|
+
truncated: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Finds `needle` in the file at `path` and returns a context-window slice
|
|
19
|
+
* containing the match plus `contextLines` of surrounding context on each side.
|
|
20
|
+
*
|
|
21
|
+
* Scans in 8KB chunks with a straddle overlap so matches crossing a chunk
|
|
22
|
+
* boundary are found. Capped at MAX_SCAN_BYTES. No stat — EOF detected via
|
|
23
|
+
* bytesRead.
|
|
24
|
+
*
|
|
25
|
+
* React callers: wrap in useState lazy-init then use() + Suspense. useMemo
|
|
26
|
+
* re-runs when callers pass fresh array literals.
|
|
27
|
+
*
|
|
28
|
+
* Returns null on ENOENT. Returns { truncated: true, content: '' } if the
|
|
29
|
+
* needle isn't found within MAX_SCAN_BYTES.
|
|
30
|
+
*/
|
|
31
|
+
export async function readEditContext(
|
|
32
|
+
path: string,
|
|
33
|
+
needle: string,
|
|
34
|
+
contextLines = 3,
|
|
35
|
+
): Promise<EditContext | null> {
|
|
36
|
+
const handle = await openForScan(path)
|
|
37
|
+
if (handle === null) return null
|
|
38
|
+
try {
|
|
39
|
+
return await scanForContext(handle, needle, contextLines)
|
|
40
|
+
} finally {
|
|
41
|
+
await handle.close()
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Opens `path` for reading. Returns null on ENOENT. Caller owns close().
|
|
47
|
+
*/
|
|
48
|
+
export async function openForScan(path: string): Promise<FileHandle | null> {
|
|
49
|
+
try {
|
|
50
|
+
return await open(path, 'r')
|
|
51
|
+
} catch (e) {
|
|
52
|
+
if (isENOENT(e)) return null
|
|
53
|
+
throw e
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Handle-accepting core of readEditContext. Caller owns open/close.
|
|
59
|
+
*/
|
|
60
|
+
export async function scanForContext(
|
|
61
|
+
handle: FileHandle,
|
|
62
|
+
needle: string,
|
|
63
|
+
contextLines: number,
|
|
64
|
+
): Promise<EditContext> {
|
|
65
|
+
if (needle === '') return { content: '', lineOffset: 1, truncated: false }
|
|
66
|
+
const needleLF = Buffer.from(needle, 'utf8')
|
|
67
|
+
// Model sends LF; files may be CRLF. Count newlines to size the overlap for
|
|
68
|
+
// the longer CRLF form; defer encoding the CRLF buffer until LF scan misses.
|
|
69
|
+
let nlCount = 0
|
|
70
|
+
for (let i = 0; i < needleLF.length; i++) if (needleLF[i] === NL) nlCount++
|
|
71
|
+
let needleCRLF: Buffer | undefined
|
|
72
|
+
const overlap = needleLF.length + nlCount - 1
|
|
73
|
+
|
|
74
|
+
const buf = Buffer.allocUnsafe(CHUNK_SIZE + overlap)
|
|
75
|
+
let pos = 0
|
|
76
|
+
let linesBeforePos = 0
|
|
77
|
+
let prevTail = 0
|
|
78
|
+
|
|
79
|
+
while (pos < MAX_SCAN_BYTES) {
|
|
80
|
+
const { bytesRead } = await handle.read(buf, prevTail, CHUNK_SIZE, pos)
|
|
81
|
+
if (bytesRead === 0) break
|
|
82
|
+
const viewLen = prevTail + bytesRead
|
|
83
|
+
|
|
84
|
+
let matchAt = indexOfWithin(buf, needleLF, viewLen)
|
|
85
|
+
let matchLen = needleLF.length
|
|
86
|
+
if (matchAt === -1 && nlCount > 0) {
|
|
87
|
+
needleCRLF ??= Buffer.from(needle.replaceAll('\n', '\r\n'), 'utf8')
|
|
88
|
+
matchAt = indexOfWithin(buf, needleCRLF, viewLen)
|
|
89
|
+
matchLen = needleCRLF.length
|
|
90
|
+
}
|
|
91
|
+
if (matchAt !== -1) {
|
|
92
|
+
const absMatch = pos - prevTail + matchAt
|
|
93
|
+
return await sliceContext(
|
|
94
|
+
handle,
|
|
95
|
+
buf,
|
|
96
|
+
absMatch,
|
|
97
|
+
matchLen,
|
|
98
|
+
contextLines,
|
|
99
|
+
linesBeforePos + countNewlines(buf, 0, matchAt),
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
pos += bytesRead
|
|
103
|
+
// Shift the tail to the front for straddle. linesBeforePos tracks
|
|
104
|
+
// newlines in bytes we've DISCARDED (not in buf) — count only the
|
|
105
|
+
// non-overlap portion we're about to copyWithin over.
|
|
106
|
+
const nextTail = Math.min(overlap, viewLen)
|
|
107
|
+
linesBeforePos += countNewlines(buf, 0, viewLen - nextTail)
|
|
108
|
+
prevTail = nextTail
|
|
109
|
+
buf.copyWithin(0, viewLen - prevTail, viewLen)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return { content: '', lineOffset: 1, truncated: pos >= MAX_SCAN_BYTES }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Reads the entire file via `handle` up to MAX_SCAN_BYTES. Returns null if the
|
|
117
|
+
* file exceeds the cap. For the multi-edit path in FileEditToolDiff where
|
|
118
|
+
* sequential replacements need the full string.
|
|
119
|
+
*
|
|
120
|
+
* Single buffer, doubles on fill — ~log2(size/8KB) allocs instead of O(n)
|
|
121
|
+
* chunks + concat. Reads directly into the right offset; no intermediate copies.
|
|
122
|
+
*/
|
|
123
|
+
export async function readCapped(handle: FileHandle): Promise<string | null> {
|
|
124
|
+
let buf = Buffer.allocUnsafe(CHUNK_SIZE)
|
|
125
|
+
let total = 0
|
|
126
|
+
for (;;) {
|
|
127
|
+
if (total === buf.length) {
|
|
128
|
+
const grown = Buffer.allocUnsafe(
|
|
129
|
+
Math.min(buf.length * 2, MAX_SCAN_BYTES + CHUNK_SIZE),
|
|
130
|
+
)
|
|
131
|
+
buf.copy(grown, 0, 0, total)
|
|
132
|
+
buf = grown
|
|
133
|
+
}
|
|
134
|
+
const { bytesRead } = await handle.read(
|
|
135
|
+
buf,
|
|
136
|
+
total,
|
|
137
|
+
buf.length - total,
|
|
138
|
+
total,
|
|
139
|
+
)
|
|
140
|
+
if (bytesRead === 0) break
|
|
141
|
+
total += bytesRead
|
|
142
|
+
if (total > MAX_SCAN_BYTES) return null
|
|
143
|
+
}
|
|
144
|
+
return normalizeCRLF(buf, total)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** buf.indexOf bounded to [0, end) without allocating a view. */
|
|
148
|
+
function indexOfWithin(buf: Buffer, needle: Buffer, end: number): number {
|
|
149
|
+
const at = buf.indexOf(needle)
|
|
150
|
+
return at === -1 || at + needle.length > end ? -1 : at
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function countNewlines(buf: Buffer, start: number, end: number): number {
|
|
154
|
+
let n = 0
|
|
155
|
+
for (let i = start; i < end; i++) if (buf[i] === NL) n++
|
|
156
|
+
return n
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Decode buf[0..len) to utf8, normalizing CRLF only if CR is present. */
|
|
160
|
+
function normalizeCRLF(buf: Buffer, len: number): string {
|
|
161
|
+
const s = buf.toString('utf8', 0, len)
|
|
162
|
+
return s.includes('\r') ? s.replaceAll('\r\n', '\n') : s
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Given an absolute match offset, read ±contextLines around it and return
|
|
167
|
+
* the decoded slice with its starting line number. Reuses `scratch` (the
|
|
168
|
+
* caller's scan buffer) for back/forward/output reads — zero new allocs
|
|
169
|
+
* when the context fits, one alloc otherwise.
|
|
170
|
+
*/
|
|
171
|
+
async function sliceContext(
|
|
172
|
+
handle: FileHandle,
|
|
173
|
+
scratch: Buffer,
|
|
174
|
+
matchStart: number,
|
|
175
|
+
matchLen: number,
|
|
176
|
+
contextLines: number,
|
|
177
|
+
linesBeforeMatch: number,
|
|
178
|
+
): Promise<EditContext> {
|
|
179
|
+
// Scan backward from matchStart to find contextLines prior newlines.
|
|
180
|
+
const backChunk = Math.min(matchStart, CHUNK_SIZE)
|
|
181
|
+
const { bytesRead: backRead } = await handle.read(
|
|
182
|
+
scratch,
|
|
183
|
+
0,
|
|
184
|
+
backChunk,
|
|
185
|
+
matchStart - backChunk,
|
|
186
|
+
)
|
|
187
|
+
let ctxStart = matchStart
|
|
188
|
+
let nlSeen = 0
|
|
189
|
+
for (let i = backRead - 1; i >= 0 && nlSeen <= contextLines; i--) {
|
|
190
|
+
if (scratch[i] === NL) {
|
|
191
|
+
nlSeen++
|
|
192
|
+
if (nlSeen > contextLines) break
|
|
193
|
+
}
|
|
194
|
+
ctxStart--
|
|
195
|
+
}
|
|
196
|
+
// Compute lineOffset now, before scratch is overwritten by the forward read.
|
|
197
|
+
const walkedBack = matchStart - ctxStart
|
|
198
|
+
const lineOffset =
|
|
199
|
+
linesBeforeMatch -
|
|
200
|
+
countNewlines(scratch, backRead - walkedBack, backRead) +
|
|
201
|
+
1
|
|
202
|
+
|
|
203
|
+
// Scan forward from matchEnd to find contextLines trailing newlines.
|
|
204
|
+
const matchEnd = matchStart + matchLen
|
|
205
|
+
const { bytesRead: fwdRead } = await handle.read(
|
|
206
|
+
scratch,
|
|
207
|
+
0,
|
|
208
|
+
CHUNK_SIZE,
|
|
209
|
+
matchEnd,
|
|
210
|
+
)
|
|
211
|
+
let ctxEnd = matchEnd
|
|
212
|
+
nlSeen = 0
|
|
213
|
+
for (let i = 0; i < fwdRead; i++) {
|
|
214
|
+
ctxEnd++
|
|
215
|
+
if (scratch[i] === NL) {
|
|
216
|
+
nlSeen++
|
|
217
|
+
if (nlSeen >= contextLines + 1) break
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Read the exact context range. Reuse scratch if it fits.
|
|
222
|
+
const len = ctxEnd - ctxStart
|
|
223
|
+
const out = len <= scratch.length ? scratch : Buffer.allocUnsafe(len)
|
|
224
|
+
const { bytesRead: outRead } = await handle.read(out, 0, len, ctxStart)
|
|
225
|
+
|
|
226
|
+
return { content: normalizeCRLF(out, outRead), lineOffset, truncated: false }
|
|
227
|
+
}
|