@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,73 @@
|
|
|
1
|
+
// Shorthand (+500k) anchored to start/end to avoid false positives in natural language.
|
|
2
|
+
// Verbose (use/spend 2M tokens) matches anywhere.
|
|
3
|
+
const SHORTHAND_START_RE = /^\s*\+(\d+(?:\.\d+)?)\s*(k|m|b)\b/i
|
|
4
|
+
// Lookbehind (?<=\s) is avoided — it defeats YARR JIT in JSC, and the
|
|
5
|
+
// interpreter scans O(n) even with the $ anchor. Capture the whitespace
|
|
6
|
+
// instead; callers offset match.index by 1 where position matters.
|
|
7
|
+
const SHORTHAND_END_RE = /\s\+(\d+(?:\.\d+)?)\s*(k|m|b)\s*[.!?]?\s*$/i
|
|
8
|
+
const VERBOSE_RE = /\b(?:use|spend)\s+(\d+(?:\.\d+)?)\s*(k|m|b)\s*tokens?\b/i
|
|
9
|
+
const VERBOSE_RE_G = new RegExp(VERBOSE_RE.source, 'gi')
|
|
10
|
+
|
|
11
|
+
const MULTIPLIERS: Record<string, number> = {
|
|
12
|
+
k: 1_000,
|
|
13
|
+
m: 1_000_000,
|
|
14
|
+
b: 1_000_000_000,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function parseBudgetMatch(value: string, suffix: string): number {
|
|
18
|
+
return parseFloat(value) * MULTIPLIERS[suffix.toLowerCase()]!
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function parseTokenBudget(text: string): number | null {
|
|
22
|
+
const startMatch = text.match(SHORTHAND_START_RE)
|
|
23
|
+
if (startMatch) return parseBudgetMatch(startMatch[1]!, startMatch[2]!)
|
|
24
|
+
const endMatch = text.match(SHORTHAND_END_RE)
|
|
25
|
+
if (endMatch) return parseBudgetMatch(endMatch[1]!, endMatch[2]!)
|
|
26
|
+
const verboseMatch = text.match(VERBOSE_RE)
|
|
27
|
+
if (verboseMatch) return parseBudgetMatch(verboseMatch[1]!, verboseMatch[2]!)
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function findTokenBudgetPositions(
|
|
32
|
+
text: string,
|
|
33
|
+
): Array<{ start: number; end: number }> {
|
|
34
|
+
const positions: Array<{ start: number; end: number }> = []
|
|
35
|
+
const startMatch = text.match(SHORTHAND_START_RE)
|
|
36
|
+
if (startMatch) {
|
|
37
|
+
const offset =
|
|
38
|
+
startMatch.index! +
|
|
39
|
+
startMatch[0].length -
|
|
40
|
+
startMatch[0].trimStart().length
|
|
41
|
+
positions.push({
|
|
42
|
+
start: offset,
|
|
43
|
+
end: startMatch.index! + startMatch[0].length,
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
const endMatch = text.match(SHORTHAND_END_RE)
|
|
47
|
+
if (endMatch) {
|
|
48
|
+
// Avoid double-counting when input is just "+500k"
|
|
49
|
+
const endStart = endMatch.index! + 1 // +1: regex includes leading \s
|
|
50
|
+
const alreadyCovered = positions.some(
|
|
51
|
+
p => endStart >= p.start && endStart < p.end,
|
|
52
|
+
)
|
|
53
|
+
if (!alreadyCovered) {
|
|
54
|
+
positions.push({
|
|
55
|
+
start: endStart,
|
|
56
|
+
end: endMatch.index! + endMatch[0].length,
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const match of text.matchAll(VERBOSE_RE_G)) {
|
|
61
|
+
positions.push({ start: match.index, end: match.index + match[0].length })
|
|
62
|
+
}
|
|
63
|
+
return positions
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function getBudgetContinuationMessage(
|
|
67
|
+
pct: number,
|
|
68
|
+
turnTokens: number,
|
|
69
|
+
budget: number,
|
|
70
|
+
): string {
|
|
71
|
+
const fmt = (n: number): string => new Intl.NumberFormat('en-US').format(n)
|
|
72
|
+
return `Stopped at ${pct}% of token target (${fmt(turnTokens)} / ${fmt(budget)}). Keep working \u2014 do not summarize.`
|
|
73
|
+
}
|
package/utils/tokens.ts
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import type { BetaUsage as Usage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'
|
|
2
|
+
import { roughTokenCountEstimationForMessages } from '../services/tokenEstimation.js'
|
|
3
|
+
import type { AssistantMessage, Message } from '../types/message.js'
|
|
4
|
+
import { SYNTHETIC_MESSAGES, SYNTHETIC_MODEL } from './messages.js'
|
|
5
|
+
import { jsonStringify } from './slowOperations.js'
|
|
6
|
+
|
|
7
|
+
export function getTokenUsage(message: Message): Usage | undefined {
|
|
8
|
+
if (
|
|
9
|
+
message?.type === 'assistant' &&
|
|
10
|
+
'usage' in message.message &&
|
|
11
|
+
!(
|
|
12
|
+
message.message.content[0]?.type === 'text' &&
|
|
13
|
+
SYNTHETIC_MESSAGES.has(message.message.content[0].text)
|
|
14
|
+
) &&
|
|
15
|
+
message.message.model !== SYNTHETIC_MODEL
|
|
16
|
+
) {
|
|
17
|
+
return message.message.usage
|
|
18
|
+
}
|
|
19
|
+
return undefined
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Get the API response id for an assistant message with real (non-synthetic) usage.
|
|
24
|
+
* Used to identify split assistant records that came from the same API response —
|
|
25
|
+
* when parallel tool calls are streamed, each content block becomes a separate
|
|
26
|
+
* AssistantMessage record, but they all share the same message.id.
|
|
27
|
+
*/
|
|
28
|
+
function getAssistantMessageId(message: Message): string | undefined {
|
|
29
|
+
if (
|
|
30
|
+
message?.type === 'assistant' &&
|
|
31
|
+
'id' in message.message &&
|
|
32
|
+
message.message.model !== SYNTHETIC_MODEL
|
|
33
|
+
) {
|
|
34
|
+
return message.message.id
|
|
35
|
+
}
|
|
36
|
+
return undefined
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Calculate total context window tokens from an API response's usage data.
|
|
41
|
+
* Includes input_tokens + cache tokens + output_tokens.
|
|
42
|
+
*
|
|
43
|
+
* This represents the full context size at the time of that API call.
|
|
44
|
+
* Use tokenCountWithEstimation() when you need context size from messages.
|
|
45
|
+
*/
|
|
46
|
+
export function getTokenCountFromUsage(usage: Usage): number {
|
|
47
|
+
return (
|
|
48
|
+
usage.input_tokens +
|
|
49
|
+
(usage.cache_creation_input_tokens ?? 0) +
|
|
50
|
+
(usage.cache_read_input_tokens ?? 0) +
|
|
51
|
+
usage.output_tokens
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function tokenCountFromLastAPIResponse(messages: Message[]): number {
|
|
56
|
+
let i = messages.length - 1
|
|
57
|
+
while (i >= 0) {
|
|
58
|
+
const message = messages[i]
|
|
59
|
+
const usage = message ? getTokenUsage(message) : undefined
|
|
60
|
+
if (usage) {
|
|
61
|
+
return getTokenCountFromUsage(usage)
|
|
62
|
+
}
|
|
63
|
+
i--
|
|
64
|
+
}
|
|
65
|
+
return 0
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Final context window size from the last API response's usage.iterations[-1].
|
|
70
|
+
* Used for task_budget.remaining computation across compaction boundaries —
|
|
71
|
+
* the server's budget countdown is context-based, so remaining decrements by
|
|
72
|
+
* the pre-compact final window, not billing spend. See monorepo
|
|
73
|
+
* api/api/sampling/prompt/renderer.py:292 for the server-side computation.
|
|
74
|
+
*
|
|
75
|
+
* Falls back to top-level input_tokens + output_tokens when iterations is
|
|
76
|
+
* absent (no server-side tool loops, so top-level usage IS the final window).
|
|
77
|
+
* Both paths exclude cache tokens to match #304930's formula.
|
|
78
|
+
*/
|
|
79
|
+
export function finalContextTokensFromLastResponse(
|
|
80
|
+
messages: Message[],
|
|
81
|
+
): number {
|
|
82
|
+
let i = messages.length - 1
|
|
83
|
+
while (i >= 0) {
|
|
84
|
+
const message = messages[i]
|
|
85
|
+
const usage = message ? getTokenUsage(message) : undefined
|
|
86
|
+
if (usage) {
|
|
87
|
+
// Stainless types don't include iterations yet — cast like advisor.ts:43
|
|
88
|
+
const iterations = (
|
|
89
|
+
usage as {
|
|
90
|
+
iterations?: Array<{
|
|
91
|
+
input_tokens: number
|
|
92
|
+
output_tokens: number
|
|
93
|
+
}> | null
|
|
94
|
+
}
|
|
95
|
+
).iterations
|
|
96
|
+
if (iterations && iterations.length > 0) {
|
|
97
|
+
const last = iterations.at(-1)!
|
|
98
|
+
return last.input_tokens + last.output_tokens
|
|
99
|
+
}
|
|
100
|
+
// No iterations → no server tool loop → top-level usage IS the final
|
|
101
|
+
// window. Match the iterations path's formula (input + output, no cache)
|
|
102
|
+
// rather than getTokenCountFromUsage — #304930 defines final window as
|
|
103
|
+
// non-cache input + output. Whether the server's budget countdown
|
|
104
|
+
// (renderer.py:292 calculate_context_tokens) counts cache the same way
|
|
105
|
+
// is an open question; aligning with the iterations path keeps the two
|
|
106
|
+
// branches consistent until that's resolved.
|
|
107
|
+
return usage.input_tokens + usage.output_tokens
|
|
108
|
+
}
|
|
109
|
+
i--
|
|
110
|
+
}
|
|
111
|
+
return 0
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Get only the output_tokens from the last API response.
|
|
116
|
+
* This excludes input context (system prompt, tools, prior messages).
|
|
117
|
+
*
|
|
118
|
+
* WARNING: Do NOT use this for threshold comparisons (autocompact, session memory).
|
|
119
|
+
* Use tokenCountWithEstimation() instead, which measures full context size.
|
|
120
|
+
* This function is only useful for measuring how many tokens Claude generated
|
|
121
|
+
* in a single response, not how full the context window is.
|
|
122
|
+
*/
|
|
123
|
+
export function messageTokenCountFromLastAPIResponse(
|
|
124
|
+
messages: Message[],
|
|
125
|
+
): number {
|
|
126
|
+
let i = messages.length - 1
|
|
127
|
+
while (i >= 0) {
|
|
128
|
+
const message = messages[i]
|
|
129
|
+
const usage = message ? getTokenUsage(message) : undefined
|
|
130
|
+
if (usage) {
|
|
131
|
+
return usage.output_tokens
|
|
132
|
+
}
|
|
133
|
+
i--
|
|
134
|
+
}
|
|
135
|
+
return 0
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function getCurrentUsage(messages: Message[]): {
|
|
139
|
+
input_tokens: number
|
|
140
|
+
output_tokens: number
|
|
141
|
+
cache_creation_input_tokens: number
|
|
142
|
+
cache_read_input_tokens: number
|
|
143
|
+
} | null {
|
|
144
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
145
|
+
const message = messages[i]
|
|
146
|
+
const usage = message ? getTokenUsage(message) : undefined
|
|
147
|
+
if (usage) {
|
|
148
|
+
return {
|
|
149
|
+
input_tokens: usage.input_tokens,
|
|
150
|
+
output_tokens: usage.output_tokens,
|
|
151
|
+
cache_creation_input_tokens: usage.cache_creation_input_tokens ?? 0,
|
|
152
|
+
cache_read_input_tokens: usage.cache_read_input_tokens ?? 0,
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return null
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function doesMostRecentAssistantMessageExceed200k(
|
|
160
|
+
messages: Message[],
|
|
161
|
+
): boolean {
|
|
162
|
+
const THRESHOLD = 200_000
|
|
163
|
+
|
|
164
|
+
const lastAsst = messages.findLast(m => m.type === 'assistant')
|
|
165
|
+
if (!lastAsst) return false
|
|
166
|
+
const usage = getTokenUsage(lastAsst)
|
|
167
|
+
return usage ? getTokenCountFromUsage(usage) > THRESHOLD : false
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Calculate the character content length of an assistant message.
|
|
172
|
+
* Used for spinner token estimation (characters / 4 ≈ tokens).
|
|
173
|
+
* This is used when subagent streaming events are filtered out and we
|
|
174
|
+
* need to count content from completed messages instead.
|
|
175
|
+
*
|
|
176
|
+
* Counts the same content that handleMessageFromStream would count via deltas:
|
|
177
|
+
* - text (text_delta)
|
|
178
|
+
* - thinking (thinking_delta)
|
|
179
|
+
* - redacted_thinking data
|
|
180
|
+
* - tool_use input (input_json_delta)
|
|
181
|
+
* Note: signature_delta is excluded from streaming counts (not model output).
|
|
182
|
+
*/
|
|
183
|
+
export function getAssistantMessageContentLength(
|
|
184
|
+
message: AssistantMessage,
|
|
185
|
+
): number {
|
|
186
|
+
let contentLength = 0
|
|
187
|
+
for (const block of message.message.content) {
|
|
188
|
+
if (block.type === 'text') {
|
|
189
|
+
contentLength += block.text.length
|
|
190
|
+
} else if (block.type === 'thinking') {
|
|
191
|
+
contentLength += block.thinking.length
|
|
192
|
+
} else if (block.type === 'redacted_thinking') {
|
|
193
|
+
contentLength += block.data.length
|
|
194
|
+
} else if (block.type === 'tool_use') {
|
|
195
|
+
contentLength += jsonStringify(block.input).length
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return contentLength
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Get the current context window size in tokens.
|
|
203
|
+
*
|
|
204
|
+
* This is the CANONICAL function for measuring context size when checking
|
|
205
|
+
* thresholds (autocompact, session memory init, etc.). Uses the last API
|
|
206
|
+
* response's token count (input + output + cache) plus estimates for any
|
|
207
|
+
* messages added since.
|
|
208
|
+
*
|
|
209
|
+
* Always use this instead of:
|
|
210
|
+
* - Cumulative token counting (which double-counts as context grows)
|
|
211
|
+
* - messageTokenCountFromLastAPIResponse (which only counts output_tokens)
|
|
212
|
+
* - tokenCountFromLastAPIResponse (which doesn't estimate new messages)
|
|
213
|
+
*
|
|
214
|
+
* Implementation note on parallel tool calls: when the model makes multiple
|
|
215
|
+
* tool calls in one response, the streaming code emits a SEPARATE assistant
|
|
216
|
+
* record per content block (all sharing the same message.id and usage), and
|
|
217
|
+
* the query loop interleaves each tool_result immediately after its tool_use.
|
|
218
|
+
* So the messages array looks like:
|
|
219
|
+
* [..., assistant(id=A), user(result), assistant(id=A), user(result), ...]
|
|
220
|
+
* If we stop at the LAST assistant record, we only estimate the one tool_result
|
|
221
|
+
* after it and miss all the earlier interleaved tool_results — which will ALL
|
|
222
|
+
* be in the next API request. To avoid undercounting, after finding a usage-
|
|
223
|
+
* bearing record we walk back to the FIRST sibling with the same message.id
|
|
224
|
+
* so every interleaved tool_result is included in the rough estimate.
|
|
225
|
+
*/
|
|
226
|
+
export function tokenCountWithEstimation(messages: readonly Message[]): number {
|
|
227
|
+
let i = messages.length - 1
|
|
228
|
+
while (i >= 0) {
|
|
229
|
+
const message = messages[i]
|
|
230
|
+
const usage = message ? getTokenUsage(message) : undefined
|
|
231
|
+
if (message && usage) {
|
|
232
|
+
// Walk back past any earlier sibling records split from the same API
|
|
233
|
+
// response (same message.id) so interleaved tool_results between them
|
|
234
|
+
// are included in the estimation slice.
|
|
235
|
+
const responseId = getAssistantMessageId(message)
|
|
236
|
+
if (responseId) {
|
|
237
|
+
let j = i - 1
|
|
238
|
+
while (j >= 0) {
|
|
239
|
+
const prior = messages[j]
|
|
240
|
+
const priorId = prior ? getAssistantMessageId(prior) : undefined
|
|
241
|
+
if (priorId === responseId) {
|
|
242
|
+
// Earlier split of the same API response — anchor here instead.
|
|
243
|
+
i = j
|
|
244
|
+
} else if (priorId !== undefined) {
|
|
245
|
+
// Hit a different API response — stop walking.
|
|
246
|
+
break
|
|
247
|
+
}
|
|
248
|
+
// priorId === undefined: a user/tool_result/attachment message,
|
|
249
|
+
// possibly interleaved between splits — keep walking.
|
|
250
|
+
j--
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return (
|
|
254
|
+
getTokenCountFromUsage(usage) +
|
|
255
|
+
roughTokenCountEstimationForMessages(messages.slice(i + 1))
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
i--
|
|
259
|
+
}
|
|
260
|
+
return roughTokenCountEstimationForMessages(messages)
|
|
261
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { ZodError } from 'zod/v4'
|
|
2
|
+
import { AbortError, ShellError } from './errors.js'
|
|
3
|
+
import { INTERRUPT_MESSAGE_FOR_TOOL_USE } from './messages.js'
|
|
4
|
+
|
|
5
|
+
export function formatError(error: unknown): string {
|
|
6
|
+
if (error instanceof AbortError) {
|
|
7
|
+
return error.message || INTERRUPT_MESSAGE_FOR_TOOL_USE
|
|
8
|
+
}
|
|
9
|
+
if (!(error instanceof Error)) {
|
|
10
|
+
return String(error)
|
|
11
|
+
}
|
|
12
|
+
const parts = getErrorParts(error)
|
|
13
|
+
const fullMessage =
|
|
14
|
+
parts.filter(Boolean).join('\n').trim() || 'Command failed with no output'
|
|
15
|
+
if (fullMessage.length <= 10000) {
|
|
16
|
+
return fullMessage
|
|
17
|
+
}
|
|
18
|
+
const halfLength = 5000
|
|
19
|
+
const start = fullMessage.slice(0, halfLength)
|
|
20
|
+
const end = fullMessage.slice(-halfLength)
|
|
21
|
+
return `${start}\n\n... [${fullMessage.length - 10000} characters truncated] ...\n\n${end}`
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function getErrorParts(error: Error): string[] {
|
|
25
|
+
if (error instanceof ShellError) {
|
|
26
|
+
return [
|
|
27
|
+
`Exit code ${error.code}`,
|
|
28
|
+
error.interrupted ? INTERRUPT_MESSAGE_FOR_TOOL_USE : '',
|
|
29
|
+
error.stderr,
|
|
30
|
+
error.stdout,
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
const parts = [error.message]
|
|
34
|
+
if ('stderr' in error && typeof error.stderr === 'string') {
|
|
35
|
+
parts.push(error.stderr)
|
|
36
|
+
}
|
|
37
|
+
if ('stdout' in error && typeof error.stdout === 'string') {
|
|
38
|
+
parts.push(error.stdout)
|
|
39
|
+
}
|
|
40
|
+
return parts
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Formats a Zod validation path into a readable string
|
|
45
|
+
* e.g., ['todos', 0, 'activeForm'] => 'todos[0].activeForm'
|
|
46
|
+
*/
|
|
47
|
+
function formatValidationPath(path: PropertyKey[]): string {
|
|
48
|
+
if (path.length === 0) return ''
|
|
49
|
+
|
|
50
|
+
return path.reduce((acc, segment, index) => {
|
|
51
|
+
const segmentStr = String(segment)
|
|
52
|
+
if (typeof segment === 'number') {
|
|
53
|
+
return `${String(acc)}[${segmentStr}]`
|
|
54
|
+
}
|
|
55
|
+
return index === 0 ? segmentStr : `${String(acc)}.${segmentStr}`
|
|
56
|
+
}, '') as string
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Converts Zod validation errors into a human-readable and LLM friendly error message
|
|
61
|
+
*
|
|
62
|
+
* @param toolName The name of the tool that failed validation
|
|
63
|
+
* @param error The Zod error object
|
|
64
|
+
* @returns A formatted error message string
|
|
65
|
+
*/
|
|
66
|
+
export function formatZodValidationError(
|
|
67
|
+
toolName: string,
|
|
68
|
+
error: ZodError,
|
|
69
|
+
): string {
|
|
70
|
+
const missingParams = error.issues
|
|
71
|
+
.filter(
|
|
72
|
+
err =>
|
|
73
|
+
err.code === 'invalid_type' &&
|
|
74
|
+
err.message.includes('received undefined'),
|
|
75
|
+
)
|
|
76
|
+
.map(err => formatValidationPath(err.path))
|
|
77
|
+
|
|
78
|
+
const unexpectedParams = error.issues
|
|
79
|
+
.filter(err => err.code === 'unrecognized_keys')
|
|
80
|
+
.flatMap(err => err.keys)
|
|
81
|
+
|
|
82
|
+
const typeMismatchParams = error.issues
|
|
83
|
+
.filter(
|
|
84
|
+
err =>
|
|
85
|
+
err.code === 'invalid_type' &&
|
|
86
|
+
!err.message.includes('received undefined'),
|
|
87
|
+
)
|
|
88
|
+
.map(err => {
|
|
89
|
+
const typeErr = err as { expected: string }
|
|
90
|
+
const receivedMatch = err.message.match(/received (\w+)/)
|
|
91
|
+
const received = receivedMatch ? receivedMatch[1] : 'unknown'
|
|
92
|
+
return {
|
|
93
|
+
param: formatValidationPath(err.path),
|
|
94
|
+
expected: typeErr.expected,
|
|
95
|
+
received,
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
// Default to original error message if we can't create a better one
|
|
100
|
+
let errorContent = error.message
|
|
101
|
+
|
|
102
|
+
// Build a human-readable error message
|
|
103
|
+
const errorParts = []
|
|
104
|
+
|
|
105
|
+
if (missingParams.length > 0) {
|
|
106
|
+
const missingParamErrors = missingParams.map(
|
|
107
|
+
param => `The required parameter \`${param}\` is missing`,
|
|
108
|
+
)
|
|
109
|
+
errorParts.push(...missingParamErrors)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (unexpectedParams.length > 0) {
|
|
113
|
+
const unexpectedParamErrors = unexpectedParams.map(
|
|
114
|
+
param => `An unexpected parameter \`${param}\` was provided`,
|
|
115
|
+
)
|
|
116
|
+
errorParts.push(...unexpectedParamErrors)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (typeMismatchParams.length > 0) {
|
|
120
|
+
const typeErrors = typeMismatchParams.map(
|
|
121
|
+
({ param, expected, received }) =>
|
|
122
|
+
`The parameter \`${param}\` type is expected as \`${expected}\` but provided as \`${received}\``,
|
|
123
|
+
)
|
|
124
|
+
errorParts.push(...typeErrors)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (errorParts.length > 0) {
|
|
128
|
+
errorContent = `${toolName} failed due to the following ${errorParts.length > 1 ? 'issues' : 'issue'}:\n${errorParts.join('\n')}`
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return errorContent
|
|
132
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { feature } from 'bun:bundle'
|
|
2
|
+
import partition from 'lodash-es/partition.js'
|
|
3
|
+
import uniqBy from 'lodash-es/uniqBy.js'
|
|
4
|
+
import { COORDINATOR_MODE_ALLOWED_TOOLS } from '../constants/tools.js'
|
|
5
|
+
import { isMcpTool } from '../services/mcp/utils.js'
|
|
6
|
+
import type { Tool, ToolPermissionContext, Tools } from '../Tool.js'
|
|
7
|
+
|
|
8
|
+
// MCP tool name suffixes for PR activity subscription. These are lightweight
|
|
9
|
+
// orchestration actions the coordinator calls directly rather than delegating
|
|
10
|
+
// to workers. Matched by suffix since the MCP server name prefix may vary.
|
|
11
|
+
const PR_ACTIVITY_TOOL_SUFFIXES = [
|
|
12
|
+
'subscribe_pr_activity',
|
|
13
|
+
'unsubscribe_pr_activity',
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export function isPrActivitySubscriptionTool(name: string): boolean {
|
|
17
|
+
return PR_ACTIVITY_TOOL_SUFFIXES.some(suffix => name.endsWith(suffix))
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Dead code elimination: conditional imports for feature-gated modules
|
|
21
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
22
|
+
const coordinatorModeModule = feature('COORDINATOR_MODE')
|
|
23
|
+
? (require('../coordinator/coordinatorMode.js') as typeof import('../coordinator/coordinatorMode.js'))
|
|
24
|
+
: null
|
|
25
|
+
/* eslint-enable @typescript-eslint/no-require-imports */
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Filters a tool array to the set allowed in coordinator mode.
|
|
29
|
+
* Shared between the REPL path (mergeAndFilterTools) and the headless
|
|
30
|
+
* path (main.tsx) so both stay in sync.
|
|
31
|
+
*
|
|
32
|
+
* PR activity subscription tools are always allowed since subscription
|
|
33
|
+
* management is orchestration.
|
|
34
|
+
*/
|
|
35
|
+
export function applyCoordinatorToolFilter(tools: Tools): Tools {
|
|
36
|
+
return tools.filter(
|
|
37
|
+
t =>
|
|
38
|
+
COORDINATOR_MODE_ALLOWED_TOOLS.has(t.name) ||
|
|
39
|
+
isPrActivitySubscriptionTool(t.name),
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Pure function that merges tool pools and applies coordinator mode filtering.
|
|
45
|
+
*
|
|
46
|
+
* Lives in a React-free file so print.ts can import it without pulling
|
|
47
|
+
* react/ink into the SDK module graph. The useMergedTools hook delegates
|
|
48
|
+
* to this function inside useMemo.
|
|
49
|
+
*
|
|
50
|
+
* @param initialTools - Extra tools to include (built-in + startup MCP from props).
|
|
51
|
+
* @param assembled - Tools from assembleToolPool (built-in + MCP, deduped).
|
|
52
|
+
* @param mode - The permission context mode.
|
|
53
|
+
* @returns Merged, deduplicated, and coordinator-filtered tool array.
|
|
54
|
+
*/
|
|
55
|
+
export function mergeAndFilterTools(
|
|
56
|
+
initialTools: Tools,
|
|
57
|
+
assembled: Tools,
|
|
58
|
+
mode: ToolPermissionContext['mode'],
|
|
59
|
+
): Tools {
|
|
60
|
+
// Merge initialTools on top - they take precedence in deduplication.
|
|
61
|
+
// initialTools may include built-in tools (from getTools() in REPL.tsx) which
|
|
62
|
+
// overlap with assembled tools. uniqBy handles this deduplication.
|
|
63
|
+
// Partition-sort for prompt-cache stability (same as assembleToolPool):
|
|
64
|
+
// built-ins must stay a contiguous prefix for the server's cache policy.
|
|
65
|
+
const [mcp, builtIn] = partition(
|
|
66
|
+
uniqBy([...initialTools, ...assembled], 'name'),
|
|
67
|
+
isMcpTool,
|
|
68
|
+
)
|
|
69
|
+
const byName = (a: Tool, b: Tool) => a.name.localeCompare(b.name)
|
|
70
|
+
const tools = [...builtIn.sort(byName), ...mcp.sort(byName)]
|
|
71
|
+
|
|
72
|
+
if (feature('COORDINATOR_MODE') && coordinatorModeModule) {
|
|
73
|
+
if (coordinatorModeModule.isCoordinatorMode()) {
|
|
74
|
+
return applyCoordinatorToolFilter(tools)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return tools
|
|
79
|
+
}
|