@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,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prevents macOS from sleeping while Claude is working.
|
|
3
|
+
*
|
|
4
|
+
* Uses the built-in `caffeinate` command to create a power assertion that
|
|
5
|
+
* prevents idle sleep. This keeps the Mac awake during API requests and
|
|
6
|
+
* tool execution so long-running operations don't get interrupted.
|
|
7
|
+
*
|
|
8
|
+
* The caffeinate process is spawned with a timeout and periodically restarted.
|
|
9
|
+
* This provides self-healing behavior: if the Node process is killed with
|
|
10
|
+
* SIGKILL (which doesn't run cleanup handlers), the orphaned caffeinate will
|
|
11
|
+
* automatically exit after the timeout expires.
|
|
12
|
+
*
|
|
13
|
+
* Only runs on macOS - no-op on other platforms.
|
|
14
|
+
*/
|
|
15
|
+
import { type ChildProcess, spawn } from 'child_process'
|
|
16
|
+
import { registerCleanup } from '../utils/cleanupRegistry.js'
|
|
17
|
+
import { logForDebugging } from '../utils/debug.js'
|
|
18
|
+
|
|
19
|
+
// Caffeinate timeout in seconds. Process auto-exits after this duration.
|
|
20
|
+
// We restart it before expiry to maintain continuous sleep prevention.
|
|
21
|
+
const CAFFEINATE_TIMEOUT_SECONDS = 300 // 5 minutes
|
|
22
|
+
|
|
23
|
+
// Restart interval - restart caffeinate before it expires.
|
|
24
|
+
// Use 4 minutes to give plenty of buffer before the 5 minute timeout.
|
|
25
|
+
const RESTART_INTERVAL_MS = 4 * 60 * 1000
|
|
26
|
+
|
|
27
|
+
let caffeinateProcess: ChildProcess | null = null
|
|
28
|
+
let restartInterval: ReturnType<typeof setInterval> | null = null
|
|
29
|
+
let refCount = 0
|
|
30
|
+
let cleanupRegistered = false
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Increment the reference count and start preventing sleep if needed.
|
|
34
|
+
* Call this when starting work that should keep the Mac awake.
|
|
35
|
+
*/
|
|
36
|
+
export function startPreventSleep(): void {
|
|
37
|
+
refCount++
|
|
38
|
+
|
|
39
|
+
if (refCount === 1) {
|
|
40
|
+
spawnCaffeinate()
|
|
41
|
+
startRestartInterval()
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Decrement the reference count and allow sleep if no more work is pending.
|
|
47
|
+
* Call this when work completes.
|
|
48
|
+
*/
|
|
49
|
+
export function stopPreventSleep(): void {
|
|
50
|
+
if (refCount > 0) {
|
|
51
|
+
refCount--
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (refCount === 0) {
|
|
55
|
+
stopRestartInterval()
|
|
56
|
+
killCaffeinate()
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Force stop preventing sleep, regardless of reference count.
|
|
62
|
+
* Use this for cleanup on exit.
|
|
63
|
+
*/
|
|
64
|
+
export function forceStopPreventSleep(): void {
|
|
65
|
+
refCount = 0
|
|
66
|
+
stopRestartInterval()
|
|
67
|
+
killCaffeinate()
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function startRestartInterval(): void {
|
|
71
|
+
// Only run on macOS
|
|
72
|
+
if (process.platform !== 'darwin') {
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Already running
|
|
77
|
+
if (restartInterval !== null) {
|
|
78
|
+
return
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
restartInterval = setInterval(() => {
|
|
82
|
+
// Only restart if we still need sleep prevention
|
|
83
|
+
if (refCount > 0) {
|
|
84
|
+
logForDebugging('Restarting caffeinate to maintain sleep prevention')
|
|
85
|
+
killCaffeinate()
|
|
86
|
+
spawnCaffeinate()
|
|
87
|
+
}
|
|
88
|
+
}, RESTART_INTERVAL_MS)
|
|
89
|
+
|
|
90
|
+
// Don't let the interval keep the Node process alive
|
|
91
|
+
restartInterval.unref()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function stopRestartInterval(): void {
|
|
95
|
+
if (restartInterval !== null) {
|
|
96
|
+
clearInterval(restartInterval)
|
|
97
|
+
restartInterval = null
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function spawnCaffeinate(): void {
|
|
102
|
+
// Only run on macOS
|
|
103
|
+
if (process.platform !== 'darwin') {
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Already running
|
|
108
|
+
if (caffeinateProcess !== null) {
|
|
109
|
+
return
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Register cleanup on first use to ensure caffeinate is killed on exit
|
|
113
|
+
if (!cleanupRegistered) {
|
|
114
|
+
cleanupRegistered = true
|
|
115
|
+
registerCleanup(async () => {
|
|
116
|
+
forceStopPreventSleep()
|
|
117
|
+
})
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
// -i: Create an assertion to prevent idle sleep
|
|
122
|
+
// This is the least aggressive option - display can still sleep
|
|
123
|
+
// -t: Timeout in seconds - caffeinate exits automatically after this
|
|
124
|
+
// This provides self-healing if Node is killed with SIGKILL
|
|
125
|
+
caffeinateProcess = spawn(
|
|
126
|
+
'caffeinate',
|
|
127
|
+
['-i', '-t', String(CAFFEINATE_TIMEOUT_SECONDS)],
|
|
128
|
+
{
|
|
129
|
+
stdio: 'ignore',
|
|
130
|
+
},
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
// Don't let caffeinate keep the Node process alive
|
|
134
|
+
caffeinateProcess.unref()
|
|
135
|
+
|
|
136
|
+
const thisProc = caffeinateProcess
|
|
137
|
+
caffeinateProcess.on('error', err => {
|
|
138
|
+
logForDebugging(`caffeinate spawn error: ${err.message}`)
|
|
139
|
+
if (caffeinateProcess === thisProc) caffeinateProcess = null
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
caffeinateProcess.on('exit', () => {
|
|
143
|
+
if (caffeinateProcess === thisProc) caffeinateProcess = null
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
logForDebugging('Started caffeinate to prevent sleep')
|
|
147
|
+
} catch {
|
|
148
|
+
// Silently fail - caffeinate not available or spawn failed
|
|
149
|
+
caffeinateProcess = null
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function killCaffeinate(): void {
|
|
154
|
+
if (caffeinateProcess !== null) {
|
|
155
|
+
const proc = caffeinateProcess
|
|
156
|
+
caffeinateProcess = null
|
|
157
|
+
try {
|
|
158
|
+
// SIGKILL for immediate termination - SIGTERM could be delayed
|
|
159
|
+
proc.kill('SIGKILL')
|
|
160
|
+
logForDebugging('Stopped caffeinate, allowing sleep')
|
|
161
|
+
} catch {
|
|
162
|
+
// Process may have already exited
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized rate limit message generation
|
|
3
|
+
* Single source of truth for all rate limit-related messages
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
getOauthAccountInfo,
|
|
8
|
+
getSubscriptionType,
|
|
9
|
+
isOverageProvisioningAllowed,
|
|
10
|
+
} from '../utils/auth.js'
|
|
11
|
+
import { hasClaudeAiBillingAccess } from '../utils/billing.js'
|
|
12
|
+
import { formatResetTime } from '../utils/format.js'
|
|
13
|
+
import type { ClaudeAILimits } from './claudeAiLimits.js'
|
|
14
|
+
|
|
15
|
+
const FEEDBACK_CHANNEL_ANT = '#briarpatch-cc'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* All possible rate limit error message prefixes
|
|
19
|
+
* Export this to avoid fragile string matching in UI components
|
|
20
|
+
*/
|
|
21
|
+
export const RATE_LIMIT_ERROR_PREFIXES = [
|
|
22
|
+
"You've hit your",
|
|
23
|
+
"You've used",
|
|
24
|
+
"You're now using extra usage",
|
|
25
|
+
"You're close to",
|
|
26
|
+
"You're out of extra usage",
|
|
27
|
+
] as const
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Check if a message is a rate limit error
|
|
31
|
+
*/
|
|
32
|
+
export function isRateLimitErrorMessage(text: string): boolean {
|
|
33
|
+
return RATE_LIMIT_ERROR_PREFIXES.some(prefix => text.startsWith(prefix))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type RateLimitMessage = {
|
|
37
|
+
message: string
|
|
38
|
+
severity: 'error' | 'warning'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Get the appropriate rate limit message based on limit state
|
|
43
|
+
* Returns null if no message should be shown
|
|
44
|
+
*/
|
|
45
|
+
export function getRateLimitMessage(
|
|
46
|
+
limits: ClaudeAILimits,
|
|
47
|
+
model: string,
|
|
48
|
+
): RateLimitMessage | null {
|
|
49
|
+
// Check overage scenarios first (when subscription is rejected but overage is available)
|
|
50
|
+
// getUsingOverageText is rendered separately from warning.
|
|
51
|
+
if (limits.isUsingOverage) {
|
|
52
|
+
// Show warning if approaching overage spending limit
|
|
53
|
+
if (limits.overageStatus === 'allowed_warning') {
|
|
54
|
+
return {
|
|
55
|
+
message: "You're close to your extra usage spending limit",
|
|
56
|
+
severity: 'warning',
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ERROR STATES - when limits are rejected
|
|
63
|
+
if (limits.status === 'rejected') {
|
|
64
|
+
return { message: getLimitReachedText(limits, model), severity: 'error' }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// WARNING STATES - when approaching limits with early warning
|
|
68
|
+
if (limits.status === 'allowed_warning') {
|
|
69
|
+
// Only show warnings when utilization is above threshold (70%)
|
|
70
|
+
// This prevents false warnings after week reset when API may send
|
|
71
|
+
// allowed_warning with stale data at low usage levels
|
|
72
|
+
const WARNING_THRESHOLD = 0.7
|
|
73
|
+
if (
|
|
74
|
+
limits.utilization !== undefined &&
|
|
75
|
+
limits.utilization < WARNING_THRESHOLD
|
|
76
|
+
) {
|
|
77
|
+
return null
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Don't warn non-billing Team/Enterprise users about approaching plan limits
|
|
81
|
+
// if overages are enabled - they'll seamlessly roll into overage
|
|
82
|
+
const subscriptionType = getSubscriptionType()
|
|
83
|
+
const isTeamOrEnterprise =
|
|
84
|
+
subscriptionType === 'team' || subscriptionType === 'enterprise'
|
|
85
|
+
const hasExtraUsageEnabled =
|
|
86
|
+
getOauthAccountInfo()?.hasExtraUsageEnabled === true
|
|
87
|
+
|
|
88
|
+
if (
|
|
89
|
+
isTeamOrEnterprise &&
|
|
90
|
+
hasExtraUsageEnabled &&
|
|
91
|
+
!hasClaudeAiBillingAccess()
|
|
92
|
+
) {
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const text = getEarlyWarningText(limits)
|
|
97
|
+
if (text) {
|
|
98
|
+
return { message: text, severity: 'warning' }
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// No message needed
|
|
103
|
+
return null
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Get error message for API errors (used in errors.ts)
|
|
108
|
+
* Returns the message string or null if no error message should be shown
|
|
109
|
+
*/
|
|
110
|
+
export function getRateLimitErrorMessage(
|
|
111
|
+
limits: ClaudeAILimits,
|
|
112
|
+
model: string,
|
|
113
|
+
): string | null {
|
|
114
|
+
const message = getRateLimitMessage(limits, model)
|
|
115
|
+
|
|
116
|
+
// Only return error messages, not warnings
|
|
117
|
+
if (message && message.severity === 'error') {
|
|
118
|
+
return message.message
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return null
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get warning message for UI footer
|
|
126
|
+
* Returns the warning message string or null if no warning should be shown
|
|
127
|
+
*/
|
|
128
|
+
export function getRateLimitWarning(
|
|
129
|
+
limits: ClaudeAILimits,
|
|
130
|
+
model: string,
|
|
131
|
+
): string | null {
|
|
132
|
+
const message = getRateLimitMessage(limits, model)
|
|
133
|
+
|
|
134
|
+
// Only return warnings for the footer - errors are shown in AssistantTextMessages
|
|
135
|
+
if (message && message.severity === 'warning') {
|
|
136
|
+
return message.message
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Don't show errors in the footer
|
|
140
|
+
return null
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function getLimitReachedText(limits: ClaudeAILimits, model: string): string {
|
|
144
|
+
const resetsAt = limits.resetsAt
|
|
145
|
+
const resetTime = resetsAt ? formatResetTime(resetsAt, true) : undefined
|
|
146
|
+
const overageResetTime = limits.overageResetsAt
|
|
147
|
+
? formatResetTime(limits.overageResetsAt, true)
|
|
148
|
+
: undefined
|
|
149
|
+
const resetMessage = resetTime ? ` · resets ${resetTime}` : ''
|
|
150
|
+
|
|
151
|
+
// if BOTH subscription (checked before this method) and overage are exhausted
|
|
152
|
+
if (limits.overageStatus === 'rejected') {
|
|
153
|
+
// Show the earliest reset time to indicate when user can resume
|
|
154
|
+
let overageResetMessage = ''
|
|
155
|
+
if (resetsAt && limits.overageResetsAt) {
|
|
156
|
+
// Both timestamps present - use the earlier one
|
|
157
|
+
if (resetsAt < limits.overageResetsAt) {
|
|
158
|
+
overageResetMessage = ` · resets ${resetTime}`
|
|
159
|
+
} else {
|
|
160
|
+
overageResetMessage = ` · resets ${overageResetTime}`
|
|
161
|
+
}
|
|
162
|
+
} else if (resetTime) {
|
|
163
|
+
overageResetMessage = ` · resets ${resetTime}`
|
|
164
|
+
} else if (overageResetTime) {
|
|
165
|
+
overageResetMessage = ` · resets ${overageResetTime}`
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (limits.overageDisabledReason === 'out_of_credits') {
|
|
169
|
+
return `You're out of extra usage${overageResetMessage}`
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return formatLimitReachedText('limit', overageResetMessage, model)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (limits.rateLimitType === 'seven_day_sonnet') {
|
|
176
|
+
const subscriptionType = getSubscriptionType()
|
|
177
|
+
const isProOrEnterprise =
|
|
178
|
+
subscriptionType === 'pro' || subscriptionType === 'enterprise'
|
|
179
|
+
// For pro and enterprise, Sonnet limit is the same as weekly
|
|
180
|
+
const limit = isProOrEnterprise ? 'weekly limit' : 'Sonnet limit'
|
|
181
|
+
return formatLimitReachedText(limit, resetMessage, model)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (limits.rateLimitType === 'seven_day_opus') {
|
|
185
|
+
return formatLimitReachedText('Opus limit', resetMessage, model)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (limits.rateLimitType === 'seven_day') {
|
|
189
|
+
return formatLimitReachedText('weekly limit', resetMessage, model)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (limits.rateLimitType === 'five_hour') {
|
|
193
|
+
return formatLimitReachedText('session limit', resetMessage, model)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return formatLimitReachedText('usage limit', resetMessage, model)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function getEarlyWarningText(limits: ClaudeAILimits): string | null {
|
|
200
|
+
let limitName: string | null = null
|
|
201
|
+
switch (limits.rateLimitType) {
|
|
202
|
+
case 'seven_day':
|
|
203
|
+
limitName = 'weekly limit'
|
|
204
|
+
break
|
|
205
|
+
case 'five_hour':
|
|
206
|
+
limitName = 'session limit'
|
|
207
|
+
break
|
|
208
|
+
case 'seven_day_opus':
|
|
209
|
+
limitName = 'Opus limit'
|
|
210
|
+
break
|
|
211
|
+
case 'seven_day_sonnet':
|
|
212
|
+
limitName = 'Sonnet limit'
|
|
213
|
+
break
|
|
214
|
+
case 'overage':
|
|
215
|
+
limitName = 'extra usage'
|
|
216
|
+
break
|
|
217
|
+
case undefined:
|
|
218
|
+
return null
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// utilization and resetsAt should be defined since early warning is calculated with them
|
|
222
|
+
const used = limits.utilization
|
|
223
|
+
? Math.floor(limits.utilization * 100)
|
|
224
|
+
: undefined
|
|
225
|
+
const resetTime = limits.resetsAt
|
|
226
|
+
? formatResetTime(limits.resetsAt, true)
|
|
227
|
+
: undefined
|
|
228
|
+
|
|
229
|
+
// Get upsell command based on subscription type and limit type
|
|
230
|
+
const upsell = getWarningUpsellText(limits.rateLimitType)
|
|
231
|
+
|
|
232
|
+
if (used && resetTime) {
|
|
233
|
+
const base = `You've used ${used}% of your ${limitName} · resets ${resetTime}`
|
|
234
|
+
return upsell ? `${base} · ${upsell}` : base
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (used) {
|
|
238
|
+
const base = `You've used ${used}% of your ${limitName}`
|
|
239
|
+
return upsell ? `${base} · ${upsell}` : base
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (limits.rateLimitType === 'overage') {
|
|
243
|
+
// For the "Approaching <x>" verbiage, "extra usage limit" makes more sense than "extra usage"
|
|
244
|
+
limitName += ' limit'
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (resetTime) {
|
|
248
|
+
const base = `Approaching ${limitName} · resets ${resetTime}`
|
|
249
|
+
return upsell ? `${base} · ${upsell}` : base
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const base = `Approaching ${limitName}`
|
|
253
|
+
return upsell ? `${base} · ${upsell}` : base
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Get the upsell command text for warning messages based on subscription and limit type.
|
|
258
|
+
* Returns null if no upsell should be shown.
|
|
259
|
+
* Only used for warnings because actual rate limit hits will see an interactive menu of options.
|
|
260
|
+
*/
|
|
261
|
+
function getWarningUpsellText(
|
|
262
|
+
rateLimitType: ClaudeAILimits['rateLimitType'],
|
|
263
|
+
): string | null {
|
|
264
|
+
const subscriptionType = getSubscriptionType()
|
|
265
|
+
const hasExtraUsageEnabled =
|
|
266
|
+
getOauthAccountInfo()?.hasExtraUsageEnabled === true
|
|
267
|
+
|
|
268
|
+
// 5-hour session limit warning
|
|
269
|
+
if (rateLimitType === 'five_hour') {
|
|
270
|
+
// Teams/Enterprise with overages disabled: prompt to request extra usage
|
|
271
|
+
// Only show if overage provisioning is allowed for this org type (e.g., not AWS marketplace)
|
|
272
|
+
if (subscriptionType === 'team' || subscriptionType === 'enterprise') {
|
|
273
|
+
if (!hasExtraUsageEnabled && isOverageProvisioningAllowed()) {
|
|
274
|
+
return '/extra-usage to request more'
|
|
275
|
+
}
|
|
276
|
+
// Teams/Enterprise with overages enabled or unsupported billing type don't need upsell
|
|
277
|
+
return null
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Pro/Max users: prompt to upgrade
|
|
281
|
+
if (subscriptionType === 'pro' || subscriptionType === 'max') {
|
|
282
|
+
return '/upgrade to keep using Claude Code'
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Overage warning (approaching spending limit)
|
|
287
|
+
if (rateLimitType === 'overage') {
|
|
288
|
+
if (subscriptionType === 'team' || subscriptionType === 'enterprise') {
|
|
289
|
+
if (!hasExtraUsageEnabled && isOverageProvisioningAllowed()) {
|
|
290
|
+
return '/extra-usage to request more'
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Weekly limit warnings don't show upsell per spec
|
|
296
|
+
return null
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Get notification text for overage mode transitions
|
|
301
|
+
* Used for transient notifications when entering overage mode
|
|
302
|
+
*/
|
|
303
|
+
export function getUsingOverageText(limits: ClaudeAILimits): string {
|
|
304
|
+
const resetTime = limits.resetsAt
|
|
305
|
+
? formatResetTime(limits.resetsAt, true)
|
|
306
|
+
: ''
|
|
307
|
+
|
|
308
|
+
let limitName = ''
|
|
309
|
+
if (limits.rateLimitType === 'five_hour') {
|
|
310
|
+
limitName = 'session limit'
|
|
311
|
+
} else if (limits.rateLimitType === 'seven_day') {
|
|
312
|
+
limitName = 'weekly limit'
|
|
313
|
+
} else if (limits.rateLimitType === 'seven_day_opus') {
|
|
314
|
+
limitName = 'Opus limit'
|
|
315
|
+
} else if (limits.rateLimitType === 'seven_day_sonnet') {
|
|
316
|
+
const subscriptionType = getSubscriptionType()
|
|
317
|
+
const isProOrEnterprise =
|
|
318
|
+
subscriptionType === 'pro' || subscriptionType === 'enterprise'
|
|
319
|
+
// For pro and enterprise, Sonnet limit is the same as weekly
|
|
320
|
+
limitName = isProOrEnterprise ? 'weekly limit' : 'Sonnet limit'
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (!limitName) {
|
|
324
|
+
return 'Now using extra usage'
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
const resetMessage = resetTime
|
|
328
|
+
? ` · Your ${limitName} resets ${resetTime}`
|
|
329
|
+
: ''
|
|
330
|
+
return `You're now using extra usage${resetMessage}`
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
function formatLimitReachedText(
|
|
334
|
+
limit: string,
|
|
335
|
+
resetMessage: string,
|
|
336
|
+
_model: string,
|
|
337
|
+
): string {
|
|
338
|
+
// Enhanced messaging for Ant users
|
|
339
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
340
|
+
return `You've hit your ${limit}${resetMessage}. If you have feedback about this limit, post in ${FEEDBACK_CHANNEL_ANT}. You can reset your limits with /reset-limits`
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return `You've hit your ${limit}${resetMessage}`
|
|
344
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Facade for rate limit header processing
|
|
3
|
+
* This isolates mock logic from production code
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { APIError } from '@anthropic-ai/sdk'
|
|
7
|
+
import {
|
|
8
|
+
applyMockHeaders,
|
|
9
|
+
checkMockFastModeRateLimit,
|
|
10
|
+
getMockHeaderless429Message,
|
|
11
|
+
getMockHeaders,
|
|
12
|
+
isMockFastModeRateLimitScenario,
|
|
13
|
+
shouldProcessMockLimits,
|
|
14
|
+
} from './mockRateLimits.js'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Process headers, applying mocks if /mock-limits command is active
|
|
18
|
+
*/
|
|
19
|
+
export function processRateLimitHeaders(
|
|
20
|
+
headers: globalThis.Headers,
|
|
21
|
+
): globalThis.Headers {
|
|
22
|
+
// Only apply mocks for Ant employees using /mock-limits command
|
|
23
|
+
if (shouldProcessMockLimits()) {
|
|
24
|
+
return applyMockHeaders(headers)
|
|
25
|
+
}
|
|
26
|
+
return headers
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Check if we should process rate limits (either real subscriber or /mock-limits command)
|
|
31
|
+
*/
|
|
32
|
+
export function shouldProcessRateLimits(isSubscriber: boolean): boolean {
|
|
33
|
+
return isSubscriber || shouldProcessMockLimits()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Check if mock rate limits should throw a 429 error
|
|
38
|
+
* Returns the error to throw, or null if no error should be thrown
|
|
39
|
+
* @param currentModel The model being used for the current request
|
|
40
|
+
* @param isFastModeActive Whether fast mode is currently active (for fast-mode-only mocks)
|
|
41
|
+
*/
|
|
42
|
+
export function checkMockRateLimitError(
|
|
43
|
+
currentModel: string,
|
|
44
|
+
isFastModeActive?: boolean,
|
|
45
|
+
): APIError | null {
|
|
46
|
+
if (!shouldProcessMockLimits()) {
|
|
47
|
+
return null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const headerlessMessage = getMockHeaderless429Message()
|
|
51
|
+
if (headerlessMessage) {
|
|
52
|
+
return new APIError(
|
|
53
|
+
429,
|
|
54
|
+
{ error: { type: 'rate_limit_error', message: headerlessMessage } },
|
|
55
|
+
headerlessMessage,
|
|
56
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
57
|
+
new globalThis.Headers(),
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const mockHeaders = getMockHeaders()
|
|
62
|
+
if (!mockHeaders) {
|
|
63
|
+
return null
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check if we should throw a 429 error
|
|
67
|
+
// Only throw if:
|
|
68
|
+
// 1. Status is rejected AND
|
|
69
|
+
// 2. Either no overage headers OR overage is also rejected
|
|
70
|
+
// 3. For Opus-specific limits, only throw if actually using an Opus model
|
|
71
|
+
const status = mockHeaders['anthropic-ratelimit-unified-status']
|
|
72
|
+
const overageStatus =
|
|
73
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status']
|
|
74
|
+
const rateLimitType =
|
|
75
|
+
mockHeaders['anthropic-ratelimit-unified-representative-claim']
|
|
76
|
+
|
|
77
|
+
// Check if this is an Opus-specific rate limit
|
|
78
|
+
const isOpusLimit = rateLimitType === 'seven_day_opus'
|
|
79
|
+
|
|
80
|
+
// Check if current model is an Opus model (handles all variants including aliases)
|
|
81
|
+
const isUsingOpus = currentModel.includes('opus')
|
|
82
|
+
|
|
83
|
+
// For Opus limits, only throw 429 if actually using Opus
|
|
84
|
+
// This simulates the real API behavior where fallback to Sonnet succeeds
|
|
85
|
+
if (isOpusLimit && !isUsingOpus) {
|
|
86
|
+
return null
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Check for mock fast mode rate limits (handles expiry, countdown, etc.)
|
|
90
|
+
if (isMockFastModeRateLimitScenario()) {
|
|
91
|
+
const fastModeHeaders = checkMockFastModeRateLimit(isFastModeActive)
|
|
92
|
+
if (fastModeHeaders === null) {
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
// Create a mock 429 error with the fast mode headers
|
|
96
|
+
const error = new APIError(
|
|
97
|
+
429,
|
|
98
|
+
{ error: { type: 'rate_limit_error', message: 'Rate limit exceeded' } },
|
|
99
|
+
'Rate limit exceeded',
|
|
100
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
101
|
+
new globalThis.Headers(
|
|
102
|
+
Object.entries(fastModeHeaders).filter(([_, v]) => v !== undefined) as [
|
|
103
|
+
string,
|
|
104
|
+
string,
|
|
105
|
+
][],
|
|
106
|
+
),
|
|
107
|
+
)
|
|
108
|
+
return error
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const shouldThrow429 =
|
|
112
|
+
status === 'rejected' && (!overageStatus || overageStatus === 'rejected')
|
|
113
|
+
|
|
114
|
+
if (shouldThrow429) {
|
|
115
|
+
// Create a mock 429 error with the appropriate headers
|
|
116
|
+
const error = new APIError(
|
|
117
|
+
429,
|
|
118
|
+
{ error: { type: 'rate_limit_error', message: 'Rate limit exceeded' } },
|
|
119
|
+
'Rate limit exceeded',
|
|
120
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
121
|
+
new globalThis.Headers(
|
|
122
|
+
Object.entries(mockHeaders).filter(([_, v]) => v !== undefined) as [
|
|
123
|
+
string,
|
|
124
|
+
string,
|
|
125
|
+
][],
|
|
126
|
+
),
|
|
127
|
+
)
|
|
128
|
+
return error
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return null
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Check if this is a mock 429 error that shouldn't be retried
|
|
136
|
+
*/
|
|
137
|
+
export function isMockRateLimitError(error: APIError): boolean {
|
|
138
|
+
return shouldProcessMockLimits() && error.status === 429
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Check if /mock-limits command is currently active (for UI purposes)
|
|
143
|
+
*/
|
|
144
|
+
export { shouldProcessMockLimits }
|