@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,610 @@
|
|
|
1
|
+
import type { UUID } from 'crypto'
|
|
2
|
+
import { logEvent } from 'src/services/analytics/index.js'
|
|
3
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from 'src/services/analytics/metadata.js'
|
|
4
|
+
import { type Command, getCommandName, isCommandEnabled } from '../commands.js'
|
|
5
|
+
import { selectableUserMessagesFilter } from '../components/MessageSelector.js'
|
|
6
|
+
import type { SpinnerMode } from '../components/Spinner/types.js'
|
|
7
|
+
import type { QuerySource } from '../constants/querySource.js'
|
|
8
|
+
import { expandPastedTextRefs, parseReferences } from '../history.js'
|
|
9
|
+
import type { CanUseToolFn } from '../hooks/useCanUseTool.js'
|
|
10
|
+
import type { IDESelection } from '../hooks/useIdeSelection.js'
|
|
11
|
+
import type { AppState } from '../state/AppState.js'
|
|
12
|
+
import type { SetToolJSXFn } from '../Tool.js'
|
|
13
|
+
import type { LocalJSXCommandOnDone } from '../types/command.js'
|
|
14
|
+
import type { Message } from '../types/message.js'
|
|
15
|
+
import {
|
|
16
|
+
isValidImagePaste,
|
|
17
|
+
type PromptInputMode,
|
|
18
|
+
type QueuedCommand,
|
|
19
|
+
} from '../types/textInputTypes.js'
|
|
20
|
+
import { createAbortController } from './abortController.js'
|
|
21
|
+
import type { PastedContent } from './config.js'
|
|
22
|
+
import { logForDebugging } from './debug.js'
|
|
23
|
+
import type { EffortValue } from './effort.js'
|
|
24
|
+
import type { FileHistoryState } from './fileHistory.js'
|
|
25
|
+
import { fileHistoryEnabled, fileHistoryMakeSnapshot } from './fileHistory.js'
|
|
26
|
+
import { gracefulShutdownSync } from './gracefulShutdown.js'
|
|
27
|
+
import { enqueue } from './messageQueueManager.js'
|
|
28
|
+
import { resolveSkillModelOverride } from './model/model.js'
|
|
29
|
+
import type { ProcessUserInputContext } from './processUserInput/processUserInput.js'
|
|
30
|
+
import { processUserInput } from './processUserInput/processUserInput.js'
|
|
31
|
+
import type { QueryGuard } from './QueryGuard.js'
|
|
32
|
+
import { queryCheckpoint, startQueryProfile } from './queryProfiler.js'
|
|
33
|
+
import { runWithWorkload } from './workloadContext.js'
|
|
34
|
+
|
|
35
|
+
function exit(): void {
|
|
36
|
+
gracefulShutdownSync(0)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type BaseExecutionParams = {
|
|
40
|
+
queuedCommands?: QueuedCommand[]
|
|
41
|
+
messages: Message[]
|
|
42
|
+
mainLoopModel: string
|
|
43
|
+
ideSelection: IDESelection | undefined
|
|
44
|
+
querySource: QuerySource
|
|
45
|
+
commands: Command[]
|
|
46
|
+
queryGuard: QueryGuard
|
|
47
|
+
/**
|
|
48
|
+
* True when external loading (remote session, foregrounded background task)
|
|
49
|
+
* is active. These don't route through queryGuard, so the queue check must
|
|
50
|
+
* account for them separately. Omit (defaults to false) for the dequeue path
|
|
51
|
+
* (executeQueuedInput) — dequeued items were already queued past this check.
|
|
52
|
+
*/
|
|
53
|
+
isExternalLoading?: boolean
|
|
54
|
+
setToolJSX: SetToolJSXFn
|
|
55
|
+
getToolUseContext: (
|
|
56
|
+
messages: Message[],
|
|
57
|
+
newMessages: Message[],
|
|
58
|
+
abortController: AbortController,
|
|
59
|
+
mainLoopModel: string,
|
|
60
|
+
) => ProcessUserInputContext
|
|
61
|
+
setUserInputOnProcessing: (prompt?: string) => void
|
|
62
|
+
setAbortController: (abortController: AbortController | null) => void
|
|
63
|
+
onQuery: (
|
|
64
|
+
newMessages: Message[],
|
|
65
|
+
abortController: AbortController,
|
|
66
|
+
shouldQuery: boolean,
|
|
67
|
+
additionalAllowedTools: string[],
|
|
68
|
+
mainLoopModel: string,
|
|
69
|
+
onBeforeQuery?: (input: string, newMessages: Message[]) => Promise<boolean>,
|
|
70
|
+
input?: string,
|
|
71
|
+
effort?: EffortValue,
|
|
72
|
+
) => Promise<void>
|
|
73
|
+
setAppState: (updater: (prev: AppState) => AppState) => void
|
|
74
|
+
onBeforeQuery?: (input: string, newMessages: Message[]) => Promise<boolean>
|
|
75
|
+
canUseTool?: CanUseToolFn
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Parameters for core execution logic (no UI concerns).
|
|
80
|
+
*/
|
|
81
|
+
type ExecuteUserInputParams = BaseExecutionParams & {
|
|
82
|
+
resetHistory: () => void
|
|
83
|
+
onInputChange: (value: string) => void
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export type PromptInputHelpers = {
|
|
87
|
+
setCursorOffset: (offset: number) => void
|
|
88
|
+
clearBuffer: () => void
|
|
89
|
+
resetHistory: () => void
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export type HandlePromptSubmitParams = BaseExecutionParams & {
|
|
93
|
+
// Direct user input path (set when called from onSubmit, absent for queue processor)
|
|
94
|
+
input?: string
|
|
95
|
+
mode?: PromptInputMode
|
|
96
|
+
pastedContents?: Record<number, PastedContent>
|
|
97
|
+
helpers: PromptInputHelpers
|
|
98
|
+
onInputChange: (value: string) => void
|
|
99
|
+
setPastedContents: React.Dispatch<
|
|
100
|
+
React.SetStateAction<Record<number, PastedContent>>
|
|
101
|
+
>
|
|
102
|
+
abortController?: AbortController | null
|
|
103
|
+
addNotification?: (notification: {
|
|
104
|
+
key: string
|
|
105
|
+
text: string
|
|
106
|
+
priority: 'low' | 'medium' | 'high' | 'immediate'
|
|
107
|
+
}) => void
|
|
108
|
+
setMessages?: (updater: (prev: Message[]) => Message[]) => void
|
|
109
|
+
streamMode?: SpinnerMode
|
|
110
|
+
hasInterruptibleToolInProgress?: boolean
|
|
111
|
+
uuid?: UUID
|
|
112
|
+
/**
|
|
113
|
+
* When true, input starting with `/` is treated as plain text.
|
|
114
|
+
* Used for remotely-received messages (bridge/CCR) that should not
|
|
115
|
+
* trigger local slash commands or skills.
|
|
116
|
+
*/
|
|
117
|
+
skipSlashCommands?: boolean
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export async function handlePromptSubmit(
|
|
121
|
+
params: HandlePromptSubmitParams,
|
|
122
|
+
): Promise<void> {
|
|
123
|
+
const {
|
|
124
|
+
helpers,
|
|
125
|
+
queryGuard,
|
|
126
|
+
isExternalLoading = false,
|
|
127
|
+
commands,
|
|
128
|
+
onInputChange,
|
|
129
|
+
setPastedContents,
|
|
130
|
+
setToolJSX,
|
|
131
|
+
getToolUseContext,
|
|
132
|
+
messages,
|
|
133
|
+
mainLoopModel,
|
|
134
|
+
ideSelection,
|
|
135
|
+
setUserInputOnProcessing,
|
|
136
|
+
setAbortController,
|
|
137
|
+
onQuery,
|
|
138
|
+
setAppState,
|
|
139
|
+
onBeforeQuery,
|
|
140
|
+
canUseTool,
|
|
141
|
+
queuedCommands,
|
|
142
|
+
uuid,
|
|
143
|
+
skipSlashCommands,
|
|
144
|
+
} = params
|
|
145
|
+
|
|
146
|
+
const { setCursorOffset, clearBuffer, resetHistory } = helpers
|
|
147
|
+
|
|
148
|
+
// Queue processor path: commands are pre-validated and ready to execute.
|
|
149
|
+
// Skip all input validation, reference parsing, and queuing logic.
|
|
150
|
+
if (queuedCommands?.length) {
|
|
151
|
+
startQueryProfile()
|
|
152
|
+
await executeUserInput({
|
|
153
|
+
queuedCommands,
|
|
154
|
+
messages,
|
|
155
|
+
mainLoopModel,
|
|
156
|
+
ideSelection,
|
|
157
|
+
querySource: params.querySource,
|
|
158
|
+
commands,
|
|
159
|
+
queryGuard,
|
|
160
|
+
setToolJSX,
|
|
161
|
+
getToolUseContext,
|
|
162
|
+
setUserInputOnProcessing,
|
|
163
|
+
setAbortController,
|
|
164
|
+
onQuery,
|
|
165
|
+
setAppState,
|
|
166
|
+
onBeforeQuery,
|
|
167
|
+
resetHistory,
|
|
168
|
+
canUseTool,
|
|
169
|
+
onInputChange,
|
|
170
|
+
})
|
|
171
|
+
return
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const input = params.input ?? ''
|
|
175
|
+
const mode = params.mode ?? 'prompt'
|
|
176
|
+
const rawPastedContents = params.pastedContents ?? {}
|
|
177
|
+
|
|
178
|
+
// Images are only sent if their [Image #N] placeholder is still in the text.
|
|
179
|
+
// Deleting the inline pill drops the image; orphaned entries are filtered here.
|
|
180
|
+
const referencedIds = new Set(parseReferences(input).map(r => r.id))
|
|
181
|
+
const pastedContents = Object.fromEntries(
|
|
182
|
+
Object.entries(rawPastedContents).filter(
|
|
183
|
+
([, c]) => c.type !== 'image' || referencedIds.has(c.id),
|
|
184
|
+
),
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
const hasImages = Object.values(pastedContents).some(isValidImagePaste)
|
|
188
|
+
if (input.trim() === '') {
|
|
189
|
+
return
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Handle exit commands by triggering the exit command instead of direct process.exit
|
|
193
|
+
// Skip for remote bridge messages — "exit" typed on iOS shouldn't kill the local session
|
|
194
|
+
if (
|
|
195
|
+
!skipSlashCommands &&
|
|
196
|
+
['exit', 'quit', ':q', ':q!', ':wq', ':wq!'].includes(input.trim())
|
|
197
|
+
) {
|
|
198
|
+
// Trigger the exit command which will show the feedback dialog
|
|
199
|
+
const exitCommand = commands.find(cmd => cmd.name === 'exit')
|
|
200
|
+
if (exitCommand) {
|
|
201
|
+
// Submit the /exit command instead - recursive call needs to be handled
|
|
202
|
+
void handlePromptSubmit({
|
|
203
|
+
...params,
|
|
204
|
+
input: '/exit',
|
|
205
|
+
})
|
|
206
|
+
} else {
|
|
207
|
+
// Fallback to direct exit if exit command not found
|
|
208
|
+
exit()
|
|
209
|
+
}
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Parse references and replace with actual content early, before queueing
|
|
214
|
+
// or immediate-command dispatch, so queued commands and immediate commands
|
|
215
|
+
// both receive the expanded text from when it was submitted.
|
|
216
|
+
const finalInput = expandPastedTextRefs(input, pastedContents)
|
|
217
|
+
const pastedTextRefs = parseReferences(input).filter(
|
|
218
|
+
r => pastedContents[r.id]?.type === 'text',
|
|
219
|
+
)
|
|
220
|
+
const pastedTextCount = pastedTextRefs.length
|
|
221
|
+
const pastedTextBytes = pastedTextRefs.reduce(
|
|
222
|
+
(sum, r) => sum + (pastedContents[r.id]?.content.length ?? 0),
|
|
223
|
+
0,
|
|
224
|
+
)
|
|
225
|
+
logEvent('tengu_paste_text', { pastedTextCount, pastedTextBytes })
|
|
226
|
+
|
|
227
|
+
// Handle local-jsx immediate commands (e.g., /config, /doctor)
|
|
228
|
+
// Skip for remote bridge messages — slash commands from CCR clients are plain text
|
|
229
|
+
if (!skipSlashCommands && finalInput.trim().startsWith('/')) {
|
|
230
|
+
const trimmedInput = finalInput.trim()
|
|
231
|
+
const spaceIndex = trimmedInput.indexOf(' ')
|
|
232
|
+
const commandName =
|
|
233
|
+
spaceIndex === -1
|
|
234
|
+
? trimmedInput.slice(1)
|
|
235
|
+
: trimmedInput.slice(1, spaceIndex)
|
|
236
|
+
const commandArgs =
|
|
237
|
+
spaceIndex === -1 ? '' : trimmedInput.slice(spaceIndex + 1).trim()
|
|
238
|
+
|
|
239
|
+
const immediateCommand = commands.find(
|
|
240
|
+
cmd =>
|
|
241
|
+
cmd.immediate &&
|
|
242
|
+
isCommandEnabled(cmd) &&
|
|
243
|
+
(cmd.name === commandName ||
|
|
244
|
+
cmd.aliases?.includes(commandName) ||
|
|
245
|
+
getCommandName(cmd) === commandName),
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
if (
|
|
249
|
+
immediateCommand &&
|
|
250
|
+
immediateCommand.type === 'local-jsx' &&
|
|
251
|
+
(queryGuard.isActive || isExternalLoading)
|
|
252
|
+
) {
|
|
253
|
+
logEvent('tengu_immediate_command_executed', {
|
|
254
|
+
commandName:
|
|
255
|
+
immediateCommand.name as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
// Clear input
|
|
259
|
+
onInputChange('')
|
|
260
|
+
setCursorOffset(0)
|
|
261
|
+
setPastedContents({})
|
|
262
|
+
clearBuffer()
|
|
263
|
+
|
|
264
|
+
const context = getToolUseContext(
|
|
265
|
+
messages,
|
|
266
|
+
[],
|
|
267
|
+
createAbortController(),
|
|
268
|
+
mainLoopModel,
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
let doneWasCalled = false
|
|
272
|
+
const onDone: LocalJSXCommandOnDone = (result, options) => {
|
|
273
|
+
doneWasCalled = true
|
|
274
|
+
// Use clearLocalJSX to explicitly clear the local JSX command
|
|
275
|
+
setToolJSX({
|
|
276
|
+
jsx: null,
|
|
277
|
+
shouldHidePromptInput: false,
|
|
278
|
+
clearLocalJSX: true,
|
|
279
|
+
})
|
|
280
|
+
if (result && options?.display !== 'skip' && params.addNotification) {
|
|
281
|
+
params.addNotification({
|
|
282
|
+
key: `immediate-${immediateCommand.name}`,
|
|
283
|
+
text: result,
|
|
284
|
+
priority: 'immediate',
|
|
285
|
+
})
|
|
286
|
+
}
|
|
287
|
+
if (options?.nextInput) {
|
|
288
|
+
if (options.submitNextInput) {
|
|
289
|
+
enqueue({ value: options.nextInput, mode: 'prompt' })
|
|
290
|
+
} else {
|
|
291
|
+
onInputChange(options.nextInput)
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const impl = await immediateCommand.load()
|
|
297
|
+
const jsx = await impl.call(onDone, context, commandArgs)
|
|
298
|
+
|
|
299
|
+
// Skip if onDone already fired — prevents stuck isLocalJSXCommand
|
|
300
|
+
// (see processSlashCommand.tsx local-jsx case for full mechanism).
|
|
301
|
+
if (jsx && !doneWasCalled) {
|
|
302
|
+
setToolJSX({
|
|
303
|
+
jsx,
|
|
304
|
+
shouldHidePromptInput: false,
|
|
305
|
+
isLocalJSXCommand: true,
|
|
306
|
+
isImmediate: true,
|
|
307
|
+
})
|
|
308
|
+
}
|
|
309
|
+
return
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (queryGuard.isActive || isExternalLoading) {
|
|
314
|
+
// Only allow prompt and bash mode commands to be queued
|
|
315
|
+
if (mode !== 'prompt' && mode !== 'bash') {
|
|
316
|
+
return
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Interrupt the current turn when all executing tools have
|
|
320
|
+
// interruptBehavior 'cancel' (e.g. SleepTool).
|
|
321
|
+
if (params.hasInterruptibleToolInProgress) {
|
|
322
|
+
logForDebugging(
|
|
323
|
+
`[interrupt] Aborting current turn: streamMode=${params.streamMode}`,
|
|
324
|
+
)
|
|
325
|
+
logEvent('tengu_cancel', {
|
|
326
|
+
source:
|
|
327
|
+
'interrupt_on_submit' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
328
|
+
streamMode:
|
|
329
|
+
params.streamMode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
330
|
+
})
|
|
331
|
+
params.abortController?.abort('interrupt')
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Enqueue with string value + raw pastedContents. Images will be resized
|
|
335
|
+
// at execution time when processUserInput runs (not baked in here).
|
|
336
|
+
enqueue({
|
|
337
|
+
value: finalInput.trim(),
|
|
338
|
+
preExpansionValue: input.trim(),
|
|
339
|
+
mode,
|
|
340
|
+
pastedContents: hasImages ? pastedContents : undefined,
|
|
341
|
+
skipSlashCommands,
|
|
342
|
+
uuid,
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
onInputChange('')
|
|
346
|
+
setCursorOffset(0)
|
|
347
|
+
setPastedContents({})
|
|
348
|
+
resetHistory()
|
|
349
|
+
clearBuffer()
|
|
350
|
+
return
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Start query profiling for this query
|
|
354
|
+
startQueryProfile()
|
|
355
|
+
|
|
356
|
+
// Construct a QueuedCommand from the direct user input so both paths
|
|
357
|
+
// go through the same executeUserInput loop. This ensures images get
|
|
358
|
+
// resized via processUserInput regardless of how the command arrives.
|
|
359
|
+
const cmd: QueuedCommand = {
|
|
360
|
+
value: finalInput,
|
|
361
|
+
preExpansionValue: input,
|
|
362
|
+
mode,
|
|
363
|
+
pastedContents: hasImages ? pastedContents : undefined,
|
|
364
|
+
skipSlashCommands,
|
|
365
|
+
uuid,
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
await executeUserInput({
|
|
369
|
+
queuedCommands: [cmd],
|
|
370
|
+
messages,
|
|
371
|
+
mainLoopModel,
|
|
372
|
+
ideSelection,
|
|
373
|
+
querySource: params.querySource,
|
|
374
|
+
commands,
|
|
375
|
+
queryGuard,
|
|
376
|
+
setToolJSX,
|
|
377
|
+
getToolUseContext,
|
|
378
|
+
setUserInputOnProcessing,
|
|
379
|
+
setAbortController,
|
|
380
|
+
onQuery,
|
|
381
|
+
setAppState,
|
|
382
|
+
onBeforeQuery,
|
|
383
|
+
resetHistory,
|
|
384
|
+
canUseTool,
|
|
385
|
+
onInputChange,
|
|
386
|
+
})
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Core logic for executing user input without UI side effects.
|
|
391
|
+
*
|
|
392
|
+
* All commands arrive as `queuedCommands`. First command gets full treatment
|
|
393
|
+
* (attachments, ideSelection, pastedContents with image resizing). Commands 2-N
|
|
394
|
+
* get `skipAttachments` to avoid duplicating turn-level context.
|
|
395
|
+
*/
|
|
396
|
+
async function executeUserInput(params: ExecuteUserInputParams): Promise<void> {
|
|
397
|
+
const {
|
|
398
|
+
messages,
|
|
399
|
+
mainLoopModel,
|
|
400
|
+
ideSelection,
|
|
401
|
+
querySource,
|
|
402
|
+
queryGuard,
|
|
403
|
+
setToolJSX,
|
|
404
|
+
getToolUseContext,
|
|
405
|
+
setUserInputOnProcessing,
|
|
406
|
+
setAbortController,
|
|
407
|
+
onQuery,
|
|
408
|
+
setAppState,
|
|
409
|
+
onBeforeQuery,
|
|
410
|
+
resetHistory,
|
|
411
|
+
canUseTool,
|
|
412
|
+
queuedCommands,
|
|
413
|
+
} = params
|
|
414
|
+
|
|
415
|
+
// Note: paste references are already processed before calling this function
|
|
416
|
+
// (either in handlePromptSubmit before queuing, or before initial execution).
|
|
417
|
+
// Always create a fresh abort controller — queryGuard guarantees no concurrent
|
|
418
|
+
// executeUserInput call, so there's no prior controller to inherit.
|
|
419
|
+
const abortController = createAbortController()
|
|
420
|
+
setAbortController(abortController)
|
|
421
|
+
|
|
422
|
+
function makeContext(): ProcessUserInputContext {
|
|
423
|
+
return getToolUseContext(messages, [], abortController, mainLoopModel)
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Wrap in try-finally so the guard is released even if processUserInput
|
|
427
|
+
// throws or onQuery is skipped. onQuery's finally calls queryGuard.end(),
|
|
428
|
+
// which transitions running→idle; cancelReservation() below is a no-op in
|
|
429
|
+
// that case (only acts on dispatching state).
|
|
430
|
+
try {
|
|
431
|
+
// Reserve the guard BEFORE processUserInput — processBashCommand awaits
|
|
432
|
+
// BashTool.call() and processSlashCommand awaits getMessagesForSlashCommand,
|
|
433
|
+
// so the guard must be active during those awaits to ensure concurrent
|
|
434
|
+
// handlePromptSubmit calls queue (via the isActive check above) instead
|
|
435
|
+
// of starting a second executeUserInput. This call is a no-op if the
|
|
436
|
+
// guard is already in dispatching (legacy queue-processor path).
|
|
437
|
+
queryGuard.reserve()
|
|
438
|
+
queryCheckpoint('query_process_user_input_start')
|
|
439
|
+
|
|
440
|
+
const newMessages: Message[] = []
|
|
441
|
+
let shouldQuery = false
|
|
442
|
+
let allowedTools: string[] | undefined
|
|
443
|
+
let model: string | undefined
|
|
444
|
+
let effort: EffortValue | undefined
|
|
445
|
+
let nextInput: string | undefined
|
|
446
|
+
let submitNextInput: boolean | undefined
|
|
447
|
+
|
|
448
|
+
// Iterate all commands uniformly. First command gets attachments +
|
|
449
|
+
// ideSelection + pastedContents, rest skip attachments to avoid
|
|
450
|
+
// duplicating turn-level context (IDE selection, todos, diffs).
|
|
451
|
+
const commands = queuedCommands ?? []
|
|
452
|
+
|
|
453
|
+
// Compute the workload tag for this turn. queueProcessor can batch a
|
|
454
|
+
// cron prompt with a same-tick human prompt; only tag when EVERY
|
|
455
|
+
// command agrees on the same non-undefined workload — a human in the
|
|
456
|
+
// mix is actively waiting.
|
|
457
|
+
const firstWorkload = commands[0]?.workload
|
|
458
|
+
const turnWorkload =
|
|
459
|
+
firstWorkload !== undefined &&
|
|
460
|
+
commands.every(c => c.workload === firstWorkload)
|
|
461
|
+
? firstWorkload
|
|
462
|
+
: undefined
|
|
463
|
+
|
|
464
|
+
// Wrap the entire turn (processUserInput loop + onQuery) in an
|
|
465
|
+
// AsyncLocalStorage context. This is the ONLY way to correctly
|
|
466
|
+
// propagate workload across await boundaries: void-detached bg agents
|
|
467
|
+
// (executeForkedSlashCommand, AgentTool) capture the ALS context at
|
|
468
|
+
// invocation time, and every await inside them resumes in that
|
|
469
|
+
// context — isolated from the parent's continuation. A process-global
|
|
470
|
+
// mutable slot would be clobbered at the detached closure's first
|
|
471
|
+
// await by this function's synchronous return path. See state.ts.
|
|
472
|
+
await runWithWorkload(turnWorkload, async () => {
|
|
473
|
+
for (let i = 0; i < commands.length; i++) {
|
|
474
|
+
const cmd = commands[i]!
|
|
475
|
+
const isFirst = i === 0
|
|
476
|
+
const result = await processUserInput({
|
|
477
|
+
input: cmd.value,
|
|
478
|
+
preExpansionInput: cmd.preExpansionValue,
|
|
479
|
+
mode: cmd.mode,
|
|
480
|
+
setToolJSX,
|
|
481
|
+
context: makeContext(),
|
|
482
|
+
pastedContents: isFirst ? cmd.pastedContents : undefined,
|
|
483
|
+
messages,
|
|
484
|
+
setUserInputOnProcessing: isFirst
|
|
485
|
+
? setUserInputOnProcessing
|
|
486
|
+
: undefined,
|
|
487
|
+
isAlreadyProcessing: !isFirst,
|
|
488
|
+
querySource,
|
|
489
|
+
canUseTool,
|
|
490
|
+
uuid: cmd.uuid,
|
|
491
|
+
ideSelection: isFirst ? ideSelection : undefined,
|
|
492
|
+
skipSlashCommands: cmd.skipSlashCommands,
|
|
493
|
+
bridgeOrigin: cmd.bridgeOrigin,
|
|
494
|
+
isMeta: cmd.isMeta,
|
|
495
|
+
skipAttachments: !isFirst,
|
|
496
|
+
})
|
|
497
|
+
// Stamp origin here rather than threading another arg through
|
|
498
|
+
// processUserInput → processUserInputBase → processTextPrompt → createUserMessage.
|
|
499
|
+
// Derive origin from mode for task-notifications — mirrors the origin
|
|
500
|
+
// derivation at messages.ts (case 'queued_command'); intentionally
|
|
501
|
+
// does NOT mirror its isMeta:true so idle-dequeued notifications stay
|
|
502
|
+
// visible in the transcript via UserAgentNotificationMessage.
|
|
503
|
+
const origin =
|
|
504
|
+
cmd.origin ??
|
|
505
|
+
(cmd.mode === 'task-notification'
|
|
506
|
+
? ({ kind: 'task-notification' } as const)
|
|
507
|
+
: undefined)
|
|
508
|
+
if (origin) {
|
|
509
|
+
for (const m of result.messages) {
|
|
510
|
+
if (m.type === 'user') m.origin = origin
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
newMessages.push(...result.messages)
|
|
514
|
+
if (isFirst) {
|
|
515
|
+
shouldQuery = result.shouldQuery
|
|
516
|
+
allowedTools = result.allowedTools
|
|
517
|
+
model = result.model
|
|
518
|
+
effort = result.effort
|
|
519
|
+
nextInput = result.nextInput
|
|
520
|
+
submitNextInput = result.submitNextInput
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
queryCheckpoint('query_process_user_input_end')
|
|
525
|
+
if (fileHistoryEnabled()) {
|
|
526
|
+
queryCheckpoint('query_file_history_snapshot_start')
|
|
527
|
+
newMessages.filter(selectableUserMessagesFilter).forEach(message => {
|
|
528
|
+
void fileHistoryMakeSnapshot(
|
|
529
|
+
(updater: (prev: FileHistoryState) => FileHistoryState) => {
|
|
530
|
+
setAppState(prev => ({
|
|
531
|
+
...prev,
|
|
532
|
+
fileHistory: updater(prev.fileHistory),
|
|
533
|
+
}))
|
|
534
|
+
},
|
|
535
|
+
message.uuid,
|
|
536
|
+
)
|
|
537
|
+
})
|
|
538
|
+
queryCheckpoint('query_file_history_snapshot_end')
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
if (newMessages.length) {
|
|
542
|
+
// History is now added in the caller (onSubmit) for direct user submissions.
|
|
543
|
+
// This ensures queued command processing (notifications, already-queued user input)
|
|
544
|
+
// doesn't add to history, since those either shouldn't be in history or were
|
|
545
|
+
// already added when originally queued.
|
|
546
|
+
resetHistory()
|
|
547
|
+
setToolJSX({
|
|
548
|
+
jsx: null,
|
|
549
|
+
shouldHidePromptInput: false,
|
|
550
|
+
clearLocalJSX: true,
|
|
551
|
+
})
|
|
552
|
+
|
|
553
|
+
const primaryCmd = commands[0]
|
|
554
|
+
const primaryMode = primaryCmd?.mode ?? 'prompt'
|
|
555
|
+
const primaryInput =
|
|
556
|
+
primaryCmd && typeof primaryCmd.value === 'string'
|
|
557
|
+
? primaryCmd.value
|
|
558
|
+
: undefined
|
|
559
|
+
const shouldCallBeforeQuery = primaryMode === 'prompt'
|
|
560
|
+
await onQuery(
|
|
561
|
+
newMessages,
|
|
562
|
+
abortController,
|
|
563
|
+
shouldQuery,
|
|
564
|
+
allowedTools ?? [],
|
|
565
|
+
model
|
|
566
|
+
? resolveSkillModelOverride(model, mainLoopModel)
|
|
567
|
+
: mainLoopModel,
|
|
568
|
+
shouldCallBeforeQuery ? onBeforeQuery : undefined,
|
|
569
|
+
primaryInput,
|
|
570
|
+
effort,
|
|
571
|
+
)
|
|
572
|
+
} else {
|
|
573
|
+
// Local slash commands that skip messages (e.g., /model, /theme).
|
|
574
|
+
// Release the guard BEFORE clearing toolJSX to prevent spinner flash —
|
|
575
|
+
// the spinner formula checks: (!toolJSX || showSpinner) && isLoading.
|
|
576
|
+
// If we clear toolJSX while the guard is still reserved, spinner briefly
|
|
577
|
+
// shows. The finally below also calls cancelReservation (no-op if idle).
|
|
578
|
+
queryGuard.cancelReservation()
|
|
579
|
+
setToolJSX({
|
|
580
|
+
jsx: null,
|
|
581
|
+
shouldHidePromptInput: false,
|
|
582
|
+
clearLocalJSX: true,
|
|
583
|
+
})
|
|
584
|
+
resetHistory()
|
|
585
|
+
setAbortController(null)
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Handle nextInput from commands that want to chain (e.g., /discover activation)
|
|
589
|
+
if (nextInput) {
|
|
590
|
+
if (submitNextInput) {
|
|
591
|
+
enqueue({ value: nextInput, mode: 'prompt' })
|
|
592
|
+
} else {
|
|
593
|
+
params.onInputChange(nextInput)
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}) // end runWithWorkload — ALS context naturally scoped, no finally needed
|
|
597
|
+
} finally {
|
|
598
|
+
// Safety net: release the guard reservation if processUserInput threw
|
|
599
|
+
// or onQuery was skipped. No-op if onQuery already ran (guard is idle
|
|
600
|
+
// via end(), or running — cancelReservation only acts on dispatching).
|
|
601
|
+
// This is the single source of truth for releasing the reservation;
|
|
602
|
+
// useQueueProcessor no longer needs its own .finally().
|
|
603
|
+
queryGuard.cancelReservation()
|
|
604
|
+
// Safety net: clear the placeholder if processUserInput produced no
|
|
605
|
+
// messages or threw — otherwise it would stay visible until the next
|
|
606
|
+
// turn's resetLoadingState. Harmless when onQuery ran: setMessages grew
|
|
607
|
+
// displayedMessages past the baseline, so REPL.tsx already hid it.
|
|
608
|
+
setUserInputOnProcessing(undefined)
|
|
609
|
+
}
|
|
610
|
+
}
|
package/utils/hash.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* djb2 string hash — fast non-cryptographic hash returning a signed 32-bit int.
|
|
3
|
+
* Deterministic across runtimes (unlike Bun.hash which uses wyhash). Use as a
|
|
4
|
+
* fallback when Bun.hash isn't available, or when you need on-disk-stable
|
|
5
|
+
* output (e.g. cache directory names that must survive runtime upgrades).
|
|
6
|
+
*/
|
|
7
|
+
export function djb2Hash(str: string): number {
|
|
8
|
+
let hash = 0
|
|
9
|
+
for (let i = 0; i < str.length; i++) {
|
|
10
|
+
hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0
|
|
11
|
+
}
|
|
12
|
+
return hash
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Hash arbitrary content for change detection. Bun.hash is ~100x faster than
|
|
17
|
+
* sha256 and collision-resistant enough for diff detection (not crypto-safe).
|
|
18
|
+
*/
|
|
19
|
+
export function hashContent(content: string): string {
|
|
20
|
+
if (typeof Bun !== 'undefined') {
|
|
21
|
+
return Bun.hash(content).toString()
|
|
22
|
+
}
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
24
|
+
const crypto = require('crypto') as typeof import('crypto')
|
|
25
|
+
return crypto.createHash('sha256').update(content).digest('hex')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Hash two strings without allocating a concatenated temp string. Bun path
|
|
30
|
+
* seed-chains wyhash (hash(a) feeds as seed to hash(b)); Node path uses
|
|
31
|
+
* incremental SHA-256 update. Seed-chaining naturally disambiguates
|
|
32
|
+
* ("ts","code") vs ("tsc","ode") so no separator is needed under Bun.
|
|
33
|
+
*/
|
|
34
|
+
export function hashPair(a: string, b: string): string {
|
|
35
|
+
if (typeof Bun !== 'undefined') {
|
|
36
|
+
return Bun.hash(b, Bun.hash(a)).toString()
|
|
37
|
+
}
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
39
|
+
const crypto = require('crypto') as typeof import('crypto')
|
|
40
|
+
return crypto
|
|
41
|
+
.createHash('sha256')
|
|
42
|
+
.update(a)
|
|
43
|
+
.update('\0')
|
|
44
|
+
.update(b)
|
|
45
|
+
.digest('hex')
|
|
46
|
+
}
|