@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,189 @@
|
|
|
1
|
+
import { writeFile } from 'fs/promises'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import {
|
|
4
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
5
|
+
logEvent,
|
|
6
|
+
} from '../services/analytics/index.js'
|
|
7
|
+
import type { MCPResultType } from '../services/mcp/client.js'
|
|
8
|
+
import { toError } from './errors.js'
|
|
9
|
+
import { formatFileSize } from './format.js'
|
|
10
|
+
import { logError } from './log.js'
|
|
11
|
+
import { ensureToolResultsDir, getToolResultsDir } from './toolResultStorage.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generates a format description string based on the MCP result type and schema.
|
|
15
|
+
*/
|
|
16
|
+
export function getFormatDescription(
|
|
17
|
+
type: MCPResultType,
|
|
18
|
+
schema?: unknown,
|
|
19
|
+
): string {
|
|
20
|
+
switch (type) {
|
|
21
|
+
case 'toolResult':
|
|
22
|
+
return 'Plain text'
|
|
23
|
+
case 'structuredContent':
|
|
24
|
+
return schema ? `JSON with schema: ${schema}` : 'JSON'
|
|
25
|
+
case 'contentArray':
|
|
26
|
+
return schema ? `JSON array with schema: ${schema}` : 'JSON array'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Generates instruction text for Claude to read from a saved output file.
|
|
32
|
+
*
|
|
33
|
+
* @param rawOutputPath - Path to the saved output file
|
|
34
|
+
* @param contentLength - Length of the content in characters
|
|
35
|
+
* @param formatDescription - Description of the content format
|
|
36
|
+
* @param maxReadLength - Optional max chars for Read tool (for Bash output context)
|
|
37
|
+
* @returns Instruction text to include in the tool result
|
|
38
|
+
*/
|
|
39
|
+
export function getLargeOutputInstructions(
|
|
40
|
+
rawOutputPath: string,
|
|
41
|
+
contentLength: number,
|
|
42
|
+
formatDescription: string,
|
|
43
|
+
maxReadLength?: number,
|
|
44
|
+
): string {
|
|
45
|
+
const baseInstructions =
|
|
46
|
+
`Error: result (${contentLength.toLocaleString()} characters) exceeds maximum allowed tokens. Output has been saved to ${rawOutputPath}.\n` +
|
|
47
|
+
`Format: ${formatDescription}\n` +
|
|
48
|
+
`Use offset and limit parameters to read specific portions of the file, search within it for specific content, and jq to make structured queries.\n` +
|
|
49
|
+
`REQUIREMENTS FOR SUMMARIZATION/ANALYSIS/REVIEW:\n` +
|
|
50
|
+
`- You MUST read the content from the file at ${rawOutputPath} in sequential chunks until 100% of the content has been read.\n`
|
|
51
|
+
|
|
52
|
+
const truncationWarning = maxReadLength
|
|
53
|
+
? `- If you receive truncation warnings when reading the file ("[N lines truncated]"), reduce the chunk size until you have read 100% of the content without truncation ***DO NOT PROCEED UNTIL YOU HAVE DONE THIS***. Bash output is limited to ${maxReadLength.toLocaleString()} chars.\n`
|
|
54
|
+
: `- If you receive truncation warnings when reading the file, reduce the chunk size until you have read 100% of the content without truncation.\n`
|
|
55
|
+
|
|
56
|
+
const completionRequirement = `- Before producing ANY summary or analysis, you MUST explicitly describe what portion of the content you have read. ***If you did not read the entire content, you MUST explicitly state this.***\n`
|
|
57
|
+
|
|
58
|
+
return baseInstructions + truncationWarning + completionRequirement
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Map a mime type to a file extension. Conservative: known types get their
|
|
63
|
+
* proper extension; unknown types get 'bin'. The extension matters because
|
|
64
|
+
* the Read tool dispatches on it (PDFs, images, etc. need the right ext).
|
|
65
|
+
*/
|
|
66
|
+
export function extensionForMimeType(mimeType: string | undefined): string {
|
|
67
|
+
if (!mimeType) return 'bin'
|
|
68
|
+
// Strip any charset/boundary parameter
|
|
69
|
+
const mt = (mimeType.split(';')[0] ?? '').trim().toLowerCase()
|
|
70
|
+
switch (mt) {
|
|
71
|
+
case 'application/pdf':
|
|
72
|
+
return 'pdf'
|
|
73
|
+
case 'application/json':
|
|
74
|
+
return 'json'
|
|
75
|
+
case 'text/csv':
|
|
76
|
+
return 'csv'
|
|
77
|
+
case 'text/plain':
|
|
78
|
+
return 'txt'
|
|
79
|
+
case 'text/html':
|
|
80
|
+
return 'html'
|
|
81
|
+
case 'text/markdown':
|
|
82
|
+
return 'md'
|
|
83
|
+
case 'application/zip':
|
|
84
|
+
return 'zip'
|
|
85
|
+
case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
|
|
86
|
+
return 'docx'
|
|
87
|
+
case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
|
|
88
|
+
return 'xlsx'
|
|
89
|
+
case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
|
|
90
|
+
return 'pptx'
|
|
91
|
+
case 'application/msword':
|
|
92
|
+
return 'doc'
|
|
93
|
+
case 'application/vnd.ms-excel':
|
|
94
|
+
return 'xls'
|
|
95
|
+
case 'audio/mpeg':
|
|
96
|
+
return 'mp3'
|
|
97
|
+
case 'audio/wav':
|
|
98
|
+
return 'wav'
|
|
99
|
+
case 'audio/ogg':
|
|
100
|
+
return 'ogg'
|
|
101
|
+
case 'video/mp4':
|
|
102
|
+
return 'mp4'
|
|
103
|
+
case 'video/webm':
|
|
104
|
+
return 'webm'
|
|
105
|
+
case 'image/png':
|
|
106
|
+
return 'png'
|
|
107
|
+
case 'image/jpeg':
|
|
108
|
+
return 'jpg'
|
|
109
|
+
case 'image/gif':
|
|
110
|
+
return 'gif'
|
|
111
|
+
case 'image/webp':
|
|
112
|
+
return 'webp'
|
|
113
|
+
case 'image/svg+xml':
|
|
114
|
+
return 'svg'
|
|
115
|
+
default:
|
|
116
|
+
return 'bin'
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Heuristic for whether a content-type header indicates binary content that
|
|
122
|
+
* should be saved to disk rather than put into the model context.
|
|
123
|
+
* Text-ish types (text/*, json, xml, form data) are treated as non-binary.
|
|
124
|
+
*/
|
|
125
|
+
export function isBinaryContentType(contentType: string): boolean {
|
|
126
|
+
if (!contentType) return false
|
|
127
|
+
const mt = (contentType.split(';')[0] ?? '').trim().toLowerCase()
|
|
128
|
+
if (mt.startsWith('text/')) return false
|
|
129
|
+
// Structured text formats delivered with an application/ type. Use suffix
|
|
130
|
+
// or exact match rather than substring so 'openxmlformats' (docx/xlsx) stays binary.
|
|
131
|
+
if (mt.endsWith('+json') || mt === 'application/json') return false
|
|
132
|
+
if (mt.endsWith('+xml') || mt === 'application/xml') return false
|
|
133
|
+
if (mt.startsWith('application/javascript')) return false
|
|
134
|
+
if (mt === 'application/x-www-form-urlencoded') return false
|
|
135
|
+
return true
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export type PersistBinaryResult =
|
|
139
|
+
| { filepath: string; size: number; ext: string }
|
|
140
|
+
| { error: string }
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Write raw binary bytes to the tool-results directory with a mime-derived
|
|
144
|
+
* extension. Unlike persistToolResult (which stringifies), this writes the
|
|
145
|
+
* bytes as-is so the resulting file can be opened with native tools (Read
|
|
146
|
+
* for PDFs, pandas for xlsx, etc.).
|
|
147
|
+
*/
|
|
148
|
+
export async function persistBinaryContent(
|
|
149
|
+
bytes: Buffer,
|
|
150
|
+
mimeType: string | undefined,
|
|
151
|
+
persistId: string,
|
|
152
|
+
): Promise<PersistBinaryResult> {
|
|
153
|
+
await ensureToolResultsDir()
|
|
154
|
+
const ext = extensionForMimeType(mimeType)
|
|
155
|
+
const filepath = join(getToolResultsDir(), `${persistId}.${ext}`)
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
await writeFile(filepath, bytes)
|
|
159
|
+
} catch (error) {
|
|
160
|
+
const err = toError(error)
|
|
161
|
+
logError(err)
|
|
162
|
+
return { error: err.message }
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// mime type and extension are safe fixed-vocabulary strings (not paths/code)
|
|
166
|
+
logEvent('tengu_binary_content_persisted', {
|
|
167
|
+
mimeType: (mimeType ??
|
|
168
|
+
'unknown') as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
169
|
+
sizeBytes: bytes.length,
|
|
170
|
+
ext: ext as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
return { filepath, size: bytes.length, ext }
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Build a short message telling Claude where binary content was saved.
|
|
178
|
+
* Just states the path — no prescriptive hint, since what the model can
|
|
179
|
+
* actually do with the file depends on provider/tooling.
|
|
180
|
+
*/
|
|
181
|
+
export function getBinaryBlobSavedMessage(
|
|
182
|
+
filepath: string,
|
|
183
|
+
mimeType: string | undefined,
|
|
184
|
+
size: number,
|
|
185
|
+
sourceDescription: string,
|
|
186
|
+
): string {
|
|
187
|
+
const mt = mimeType || 'unknown type'
|
|
188
|
+
return `${sourceDescription}Binary content (${mt}, ${formatFileSize(size)}) saved to ${filepath}`
|
|
189
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ContentBlockParam,
|
|
3
|
+
ImageBlockParam,
|
|
4
|
+
TextBlockParam,
|
|
5
|
+
} from '@anthropic-ai/sdk/resources/index.mjs'
|
|
6
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
7
|
+
import {
|
|
8
|
+
countMessagesTokensWithAPI,
|
|
9
|
+
roughTokenCountEstimation,
|
|
10
|
+
} from '../services/tokenEstimation.js'
|
|
11
|
+
import { compressImageBlock } from './imageResizer.js'
|
|
12
|
+
import { logError } from './log.js'
|
|
13
|
+
|
|
14
|
+
export const MCP_TOKEN_COUNT_THRESHOLD_FACTOR = 0.5
|
|
15
|
+
export const IMAGE_TOKEN_ESTIMATE = 1600
|
|
16
|
+
const DEFAULT_MAX_MCP_OUTPUT_TOKENS = 25000
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the MCP output token cap. Precedence:
|
|
20
|
+
* 1. MAX_MCP_OUTPUT_TOKENS env var (explicit user override)
|
|
21
|
+
* 2. tengu_satin_quoll GrowthBook flag's `mcp_tool` key (tokens, not chars —
|
|
22
|
+
* unlike the other keys in that map which getPersistenceThreshold reads
|
|
23
|
+
* as chars; MCP has its own truncation layer upstream of that)
|
|
24
|
+
* 3. Hardcoded default
|
|
25
|
+
*/
|
|
26
|
+
export function getMaxMcpOutputTokens(): number {
|
|
27
|
+
const envValue = process.env.MAX_MCP_OUTPUT_TOKENS
|
|
28
|
+
if (envValue) {
|
|
29
|
+
const parsed = parseInt(envValue, 10)
|
|
30
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
31
|
+
return parsed
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const overrides = getFeatureValue_CACHED_MAY_BE_STALE<Record<
|
|
35
|
+
string,
|
|
36
|
+
number
|
|
37
|
+
> | null>('tengu_satin_quoll', {})
|
|
38
|
+
const override = overrides?.['mcp_tool']
|
|
39
|
+
if (
|
|
40
|
+
typeof override === 'number' &&
|
|
41
|
+
Number.isFinite(override) &&
|
|
42
|
+
override > 0
|
|
43
|
+
) {
|
|
44
|
+
return override
|
|
45
|
+
}
|
|
46
|
+
return DEFAULT_MAX_MCP_OUTPUT_TOKENS
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type MCPToolResult = string | ContentBlockParam[] | undefined
|
|
50
|
+
|
|
51
|
+
function isTextBlock(block: ContentBlockParam): block is TextBlockParam {
|
|
52
|
+
return block.type === 'text'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function isImageBlock(block: ContentBlockParam): block is ImageBlockParam {
|
|
56
|
+
return block.type === 'image'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function getContentSizeEstimate(content: MCPToolResult): number {
|
|
60
|
+
if (!content) return 0
|
|
61
|
+
|
|
62
|
+
if (typeof content === 'string') {
|
|
63
|
+
return roughTokenCountEstimation(content)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return content.reduce((total, block) => {
|
|
67
|
+
if (isTextBlock(block)) {
|
|
68
|
+
return total + roughTokenCountEstimation(block.text)
|
|
69
|
+
} else if (isImageBlock(block)) {
|
|
70
|
+
// Estimate for image tokens
|
|
71
|
+
return total + IMAGE_TOKEN_ESTIMATE
|
|
72
|
+
}
|
|
73
|
+
return total
|
|
74
|
+
}, 0)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function getMaxMcpOutputChars(): number {
|
|
78
|
+
return getMaxMcpOutputTokens() * 4
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function getTruncationMessage(): string {
|
|
82
|
+
return `\n\n[OUTPUT TRUNCATED - exceeded ${getMaxMcpOutputTokens()} token limit]
|
|
83
|
+
|
|
84
|
+
The tool output was truncated. If this MCP server provides pagination or filtering tools, use them to retrieve specific portions of the data. If pagination is not available, inform the user that you are working with truncated output and results may be incomplete.`
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function truncateString(content: string, maxChars: number): string {
|
|
88
|
+
if (content.length <= maxChars) {
|
|
89
|
+
return content
|
|
90
|
+
}
|
|
91
|
+
return content.slice(0, maxChars)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function truncateContentBlocks(
|
|
95
|
+
blocks: ContentBlockParam[],
|
|
96
|
+
maxChars: number,
|
|
97
|
+
): Promise<ContentBlockParam[]> {
|
|
98
|
+
const result: ContentBlockParam[] = []
|
|
99
|
+
let currentChars = 0
|
|
100
|
+
|
|
101
|
+
for (const block of blocks) {
|
|
102
|
+
if (isTextBlock(block)) {
|
|
103
|
+
const remainingChars = maxChars - currentChars
|
|
104
|
+
if (remainingChars <= 0) break
|
|
105
|
+
|
|
106
|
+
if (block.text.length <= remainingChars) {
|
|
107
|
+
result.push(block)
|
|
108
|
+
currentChars += block.text.length
|
|
109
|
+
} else {
|
|
110
|
+
result.push({ type: 'text', text: block.text.slice(0, remainingChars) })
|
|
111
|
+
break
|
|
112
|
+
}
|
|
113
|
+
} else if (isImageBlock(block)) {
|
|
114
|
+
// Include images but count their estimated size
|
|
115
|
+
const imageChars = IMAGE_TOKEN_ESTIMATE * 4
|
|
116
|
+
if (currentChars + imageChars <= maxChars) {
|
|
117
|
+
result.push(block)
|
|
118
|
+
currentChars += imageChars
|
|
119
|
+
} else {
|
|
120
|
+
// Image exceeds budget - try to compress it to fit remaining space
|
|
121
|
+
const remainingChars = maxChars - currentChars
|
|
122
|
+
if (remainingChars > 0) {
|
|
123
|
+
// Convert remaining chars to bytes for compression
|
|
124
|
+
// base64 uses ~4/3 the original size, so we calculate max bytes
|
|
125
|
+
const remainingBytes = Math.floor(remainingChars * 0.75)
|
|
126
|
+
try {
|
|
127
|
+
const compressedBlock = await compressImageBlock(
|
|
128
|
+
block,
|
|
129
|
+
remainingBytes,
|
|
130
|
+
)
|
|
131
|
+
result.push(compressedBlock)
|
|
132
|
+
// Update currentChars based on compressed image size
|
|
133
|
+
if (compressedBlock.source.type === 'base64') {
|
|
134
|
+
currentChars += compressedBlock.source.data.length
|
|
135
|
+
} else {
|
|
136
|
+
currentChars += imageChars
|
|
137
|
+
}
|
|
138
|
+
} catch {
|
|
139
|
+
// If compression fails, skip the image
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
} else {
|
|
144
|
+
result.push(block)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return result
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export async function mcpContentNeedsTruncation(
|
|
152
|
+
content: MCPToolResult,
|
|
153
|
+
): Promise<boolean> {
|
|
154
|
+
if (!content) return false
|
|
155
|
+
|
|
156
|
+
// Use size check as a heuristic to avoid unnecessary token counting API calls
|
|
157
|
+
const contentSizeEstimate = getContentSizeEstimate(content)
|
|
158
|
+
if (
|
|
159
|
+
contentSizeEstimate <=
|
|
160
|
+
getMaxMcpOutputTokens() * MCP_TOKEN_COUNT_THRESHOLD_FACTOR
|
|
161
|
+
) {
|
|
162
|
+
return false
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
const messages =
|
|
167
|
+
typeof content === 'string'
|
|
168
|
+
? [{ role: 'user' as const, content }]
|
|
169
|
+
: [{ role: 'user' as const, content }]
|
|
170
|
+
|
|
171
|
+
const tokenCount = await countMessagesTokensWithAPI(messages, [])
|
|
172
|
+
return !!(tokenCount && tokenCount > getMaxMcpOutputTokens())
|
|
173
|
+
} catch (error) {
|
|
174
|
+
logError(error)
|
|
175
|
+
// Assume no truncation needed on error
|
|
176
|
+
return false
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export async function truncateMcpContent(
|
|
181
|
+
content: MCPToolResult,
|
|
182
|
+
): Promise<MCPToolResult> {
|
|
183
|
+
if (!content) return content
|
|
184
|
+
|
|
185
|
+
const maxChars = getMaxMcpOutputChars()
|
|
186
|
+
const truncationMsg = getTruncationMessage()
|
|
187
|
+
|
|
188
|
+
if (typeof content === 'string') {
|
|
189
|
+
return truncateString(content, maxChars) + truncationMsg
|
|
190
|
+
} else {
|
|
191
|
+
const truncatedBlocks = await truncateContentBlocks(
|
|
192
|
+
content as ContentBlockParam[],
|
|
193
|
+
maxChars,
|
|
194
|
+
)
|
|
195
|
+
truncatedBlocks.push({ type: 'text', text: truncationMsg })
|
|
196
|
+
return truncatedBlocks
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export async function truncateMcpContentIfNeeded(
|
|
201
|
+
content: MCPToolResult,
|
|
202
|
+
): Promise<MCPToolResult> {
|
|
203
|
+
if (!(await mcpContentNeedsTruncation(content))) {
|
|
204
|
+
return content
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return await truncateMcpContent(content)
|
|
208
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'
|
|
2
|
+
import {
|
|
3
|
+
type JSONRPCMessage,
|
|
4
|
+
JSONRPCMessageSchema,
|
|
5
|
+
} from '@modelcontextprotocol/sdk/types.js'
|
|
6
|
+
import type WsWebSocket from 'ws'
|
|
7
|
+
import { logForDiagnosticsNoPII } from './diagLogs.js'
|
|
8
|
+
import { toError } from './errors.js'
|
|
9
|
+
import { jsonParse, jsonStringify } from './slowOperations.js'
|
|
10
|
+
|
|
11
|
+
// WebSocket readyState constants (same for both native and ws)
|
|
12
|
+
const WS_CONNECTING = 0
|
|
13
|
+
const WS_OPEN = 1
|
|
14
|
+
|
|
15
|
+
// Minimal interface shared by globalThis.WebSocket and ws.WebSocket
|
|
16
|
+
type WebSocketLike = {
|
|
17
|
+
readonly readyState: number
|
|
18
|
+
close(): void
|
|
19
|
+
send(data: string): void
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class WebSocketTransport implements Transport {
|
|
23
|
+
private started = false
|
|
24
|
+
private opened: Promise<void>
|
|
25
|
+
private isBun = typeof Bun !== 'undefined'
|
|
26
|
+
|
|
27
|
+
constructor(private ws: WebSocketLike) {
|
|
28
|
+
this.opened = new Promise((resolve, reject) => {
|
|
29
|
+
if (this.ws.readyState === WS_OPEN) {
|
|
30
|
+
resolve()
|
|
31
|
+
} else if (this.isBun) {
|
|
32
|
+
const nws = this.ws as unknown as globalThis.WebSocket
|
|
33
|
+
const onOpen = () => {
|
|
34
|
+
nws.removeEventListener('open', onOpen)
|
|
35
|
+
nws.removeEventListener('error', onError)
|
|
36
|
+
resolve()
|
|
37
|
+
}
|
|
38
|
+
const onError = (event: Event) => {
|
|
39
|
+
nws.removeEventListener('open', onOpen)
|
|
40
|
+
nws.removeEventListener('error', onError)
|
|
41
|
+
logForDiagnosticsNoPII('error', 'mcp_websocket_connect_fail')
|
|
42
|
+
reject(event)
|
|
43
|
+
}
|
|
44
|
+
nws.addEventListener('open', onOpen)
|
|
45
|
+
nws.addEventListener('error', onError)
|
|
46
|
+
} else {
|
|
47
|
+
const nws = this.ws as unknown as WsWebSocket
|
|
48
|
+
nws.on('open', () => {
|
|
49
|
+
resolve()
|
|
50
|
+
})
|
|
51
|
+
nws.on('error', error => {
|
|
52
|
+
logForDiagnosticsNoPII('error', 'mcp_websocket_connect_fail')
|
|
53
|
+
reject(error)
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
// Attach persistent event handlers
|
|
59
|
+
if (this.isBun) {
|
|
60
|
+
const nws = this.ws as unknown as globalThis.WebSocket
|
|
61
|
+
nws.addEventListener('message', this.onBunMessage)
|
|
62
|
+
nws.addEventListener('error', this.onBunError)
|
|
63
|
+
nws.addEventListener('close', this.onBunClose)
|
|
64
|
+
} else {
|
|
65
|
+
const nws = this.ws as unknown as WsWebSocket
|
|
66
|
+
nws.on('message', this.onNodeMessage)
|
|
67
|
+
nws.on('error', this.onNodeError)
|
|
68
|
+
nws.on('close', this.onNodeClose)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
onclose?: () => void
|
|
73
|
+
onerror?: (error: Error) => void
|
|
74
|
+
onmessage?: (message: JSONRPCMessage) => void
|
|
75
|
+
|
|
76
|
+
// Bun (native WebSocket) event handlers
|
|
77
|
+
private onBunMessage = (event: MessageEvent) => {
|
|
78
|
+
try {
|
|
79
|
+
const data =
|
|
80
|
+
typeof event.data === 'string' ? event.data : String(event.data)
|
|
81
|
+
const messageObj = jsonParse(data)
|
|
82
|
+
const message = JSONRPCMessageSchema.parse(messageObj)
|
|
83
|
+
this.onmessage?.(message)
|
|
84
|
+
} catch (error) {
|
|
85
|
+
this.handleError(error)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private onBunError = () => {
|
|
90
|
+
this.handleError(new Error('WebSocket error'))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private onBunClose = () => {
|
|
94
|
+
this.handleCloseCleanup()
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Node (ws package) event handlers
|
|
98
|
+
private onNodeMessage = (data: Buffer) => {
|
|
99
|
+
try {
|
|
100
|
+
const messageObj = jsonParse(data.toString('utf-8'))
|
|
101
|
+
const message = JSONRPCMessageSchema.parse(messageObj)
|
|
102
|
+
this.onmessage?.(message)
|
|
103
|
+
} catch (error) {
|
|
104
|
+
this.handleError(error)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private onNodeError = (error: unknown) => {
|
|
109
|
+
this.handleError(error)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private onNodeClose = () => {
|
|
113
|
+
this.handleCloseCleanup()
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Shared error handler
|
|
117
|
+
private handleError(error: unknown): void {
|
|
118
|
+
logForDiagnosticsNoPII('error', 'mcp_websocket_message_fail')
|
|
119
|
+
this.onerror?.(toError(error))
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Shared close handler with listener cleanup
|
|
123
|
+
private handleCloseCleanup(): void {
|
|
124
|
+
this.onclose?.()
|
|
125
|
+
// Clean up listeners after close
|
|
126
|
+
if (this.isBun) {
|
|
127
|
+
const nws = this.ws as unknown as globalThis.WebSocket
|
|
128
|
+
nws.removeEventListener('message', this.onBunMessage)
|
|
129
|
+
nws.removeEventListener('error', this.onBunError)
|
|
130
|
+
nws.removeEventListener('close', this.onBunClose)
|
|
131
|
+
} else {
|
|
132
|
+
const nws = this.ws as unknown as WsWebSocket
|
|
133
|
+
nws.off('message', this.onNodeMessage)
|
|
134
|
+
nws.off('error', this.onNodeError)
|
|
135
|
+
nws.off('close', this.onNodeClose)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Starts listening for messages on the WebSocket.
|
|
141
|
+
*/
|
|
142
|
+
async start(): Promise<void> {
|
|
143
|
+
if (this.started) {
|
|
144
|
+
throw new Error('Start can only be called once per transport.')
|
|
145
|
+
}
|
|
146
|
+
await this.opened
|
|
147
|
+
if (this.ws.readyState !== WS_OPEN) {
|
|
148
|
+
logForDiagnosticsNoPII('error', 'mcp_websocket_start_not_opened')
|
|
149
|
+
throw new Error('WebSocket is not open. Cannot start transport.')
|
|
150
|
+
}
|
|
151
|
+
this.started = true
|
|
152
|
+
// Unlike stdio, WebSocket connections are typically already established when the transport is created.
|
|
153
|
+
// No explicit connection action needed here, just attaching listeners.
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Closes the WebSocket connection.
|
|
158
|
+
*/
|
|
159
|
+
async close(): Promise<void> {
|
|
160
|
+
if (
|
|
161
|
+
this.ws.readyState === WS_OPEN ||
|
|
162
|
+
this.ws.readyState === WS_CONNECTING
|
|
163
|
+
) {
|
|
164
|
+
this.ws.close()
|
|
165
|
+
}
|
|
166
|
+
// Ensure listeners are removed even if close was called externally or connection was already closed
|
|
167
|
+
this.handleCloseCleanup()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Sends a JSON-RPC message over the WebSocket connection.
|
|
172
|
+
*/
|
|
173
|
+
async send(message: JSONRPCMessage): Promise<void> {
|
|
174
|
+
if (this.ws.readyState !== WS_OPEN) {
|
|
175
|
+
logForDiagnosticsNoPII('error', 'mcp_websocket_send_not_opened')
|
|
176
|
+
throw new Error('WebSocket is not open. Cannot send message.')
|
|
177
|
+
}
|
|
178
|
+
const json = jsonStringify(message)
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
if (this.isBun) {
|
|
182
|
+
// Native WebSocket.send() is synchronous (no callback)
|
|
183
|
+
this.ws.send(json)
|
|
184
|
+
} else {
|
|
185
|
+
await new Promise<void>((resolve, reject) => {
|
|
186
|
+
;(this.ws as unknown as WsWebSocket).send(json, error => {
|
|
187
|
+
if (error) {
|
|
188
|
+
reject(error)
|
|
189
|
+
} else {
|
|
190
|
+
resolve()
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
} catch (error) {
|
|
196
|
+
this.handleError(error)
|
|
197
|
+
throw error
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|