@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,882 @@
|
|
|
1
|
+
// Mock rate limits for testing [ANT-ONLY]
|
|
2
|
+
// This allows testing various rate limit scenarios without hitting actual limits
|
|
3
|
+
//
|
|
4
|
+
// ⚠️ WARNING: This is for internal testing/demo purposes only!
|
|
5
|
+
// The mock headers may not exactly match the API specification or real-world behavior.
|
|
6
|
+
// Always validate against actual API responses before relying on this for production features.
|
|
7
|
+
|
|
8
|
+
import type { SubscriptionType } from '../services/oauth/types.js'
|
|
9
|
+
import { setMockBillingAccessOverride } from '../utils/billing.js'
|
|
10
|
+
import type { OverageDisabledReason } from './claudeAiLimits.js'
|
|
11
|
+
|
|
12
|
+
type MockHeaders = {
|
|
13
|
+
'anthropic-ratelimit-unified-status'?:
|
|
14
|
+
| 'allowed'
|
|
15
|
+
| 'allowed_warning'
|
|
16
|
+
| 'rejected'
|
|
17
|
+
'anthropic-ratelimit-unified-reset'?: string
|
|
18
|
+
'anthropic-ratelimit-unified-representative-claim'?:
|
|
19
|
+
| 'five_hour'
|
|
20
|
+
| 'seven_day'
|
|
21
|
+
| 'seven_day_opus'
|
|
22
|
+
| 'seven_day_sonnet'
|
|
23
|
+
'anthropic-ratelimit-unified-overage-status'?:
|
|
24
|
+
| 'allowed'
|
|
25
|
+
| 'allowed_warning'
|
|
26
|
+
| 'rejected'
|
|
27
|
+
'anthropic-ratelimit-unified-overage-reset'?: string
|
|
28
|
+
'anthropic-ratelimit-unified-overage-disabled-reason'?: OverageDisabledReason
|
|
29
|
+
'anthropic-ratelimit-unified-fallback'?: 'available'
|
|
30
|
+
'anthropic-ratelimit-unified-fallback-percentage'?: string
|
|
31
|
+
'retry-after'?: string
|
|
32
|
+
// Early warning utilization headers
|
|
33
|
+
'anthropic-ratelimit-unified-5h-utilization'?: string
|
|
34
|
+
'anthropic-ratelimit-unified-5h-reset'?: string
|
|
35
|
+
'anthropic-ratelimit-unified-5h-surpassed-threshold'?: string
|
|
36
|
+
'anthropic-ratelimit-unified-7d-utilization'?: string
|
|
37
|
+
'anthropic-ratelimit-unified-7d-reset'?: string
|
|
38
|
+
'anthropic-ratelimit-unified-7d-surpassed-threshold'?: string
|
|
39
|
+
'anthropic-ratelimit-unified-overage-utilization'?: string
|
|
40
|
+
'anthropic-ratelimit-unified-overage-surpassed-threshold'?: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type MockHeaderKey =
|
|
44
|
+
| 'status'
|
|
45
|
+
| 'reset'
|
|
46
|
+
| 'claim'
|
|
47
|
+
| 'overage-status'
|
|
48
|
+
| 'overage-reset'
|
|
49
|
+
| 'overage-disabled-reason'
|
|
50
|
+
| 'fallback'
|
|
51
|
+
| 'fallback-percentage'
|
|
52
|
+
| 'retry-after'
|
|
53
|
+
| '5h-utilization'
|
|
54
|
+
| '5h-reset'
|
|
55
|
+
| '5h-surpassed-threshold'
|
|
56
|
+
| '7d-utilization'
|
|
57
|
+
| '7d-reset'
|
|
58
|
+
| '7d-surpassed-threshold'
|
|
59
|
+
|
|
60
|
+
export type MockScenario =
|
|
61
|
+
| 'normal'
|
|
62
|
+
| 'session-limit-reached'
|
|
63
|
+
| 'approaching-weekly-limit'
|
|
64
|
+
| 'weekly-limit-reached'
|
|
65
|
+
| 'overage-active'
|
|
66
|
+
| 'overage-warning'
|
|
67
|
+
| 'overage-exhausted'
|
|
68
|
+
| 'out-of-credits'
|
|
69
|
+
| 'org-zero-credit-limit'
|
|
70
|
+
| 'org-spend-cap-hit'
|
|
71
|
+
| 'member-zero-credit-limit'
|
|
72
|
+
| 'seat-tier-zero-credit-limit'
|
|
73
|
+
| 'opus-limit'
|
|
74
|
+
| 'opus-warning'
|
|
75
|
+
| 'sonnet-limit'
|
|
76
|
+
| 'sonnet-warning'
|
|
77
|
+
| 'fast-mode-limit'
|
|
78
|
+
| 'fast-mode-short-limit'
|
|
79
|
+
| 'extra-usage-required'
|
|
80
|
+
| 'clear'
|
|
81
|
+
|
|
82
|
+
let mockHeaders: MockHeaders = {}
|
|
83
|
+
let mockEnabled = false
|
|
84
|
+
let mockHeaderless429Message: string | null = null
|
|
85
|
+
let mockSubscriptionType: SubscriptionType | null = null
|
|
86
|
+
let mockFastModeRateLimitDurationMs: number | null = null
|
|
87
|
+
let mockFastModeRateLimitExpiresAt: number | null = null
|
|
88
|
+
// Default subscription type for mock testing
|
|
89
|
+
const DEFAULT_MOCK_SUBSCRIPTION: SubscriptionType = 'max'
|
|
90
|
+
|
|
91
|
+
// Track individual exceeded limits with their reset times
|
|
92
|
+
type ExceededLimit = {
|
|
93
|
+
type: 'five_hour' | 'seven_day' | 'seven_day_opus' | 'seven_day_sonnet'
|
|
94
|
+
resetsAt: number // Unix timestamp
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
let exceededLimits: ExceededLimit[] = []
|
|
98
|
+
|
|
99
|
+
// New approach: Toggle individual headers
|
|
100
|
+
export function setMockHeader(
|
|
101
|
+
key: MockHeaderKey,
|
|
102
|
+
value: string | undefined,
|
|
103
|
+
): void {
|
|
104
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
mockEnabled = true
|
|
109
|
+
|
|
110
|
+
// Special case for retry-after which doesn't have the prefix
|
|
111
|
+
const fullKey = (
|
|
112
|
+
key === 'retry-after' ? 'retry-after' : `anthropic-ratelimit-unified-${key}`
|
|
113
|
+
) as keyof MockHeaders
|
|
114
|
+
|
|
115
|
+
if (value === undefined || value === 'clear') {
|
|
116
|
+
delete mockHeaders[fullKey]
|
|
117
|
+
if (key === 'claim') {
|
|
118
|
+
exceededLimits = []
|
|
119
|
+
}
|
|
120
|
+
// Update retry-after if status changed
|
|
121
|
+
if (key === 'status' || key === 'overage-status') {
|
|
122
|
+
updateRetryAfter()
|
|
123
|
+
}
|
|
124
|
+
return
|
|
125
|
+
} else {
|
|
126
|
+
// Handle special cases for reset times
|
|
127
|
+
if (key === 'reset' || key === 'overage-reset') {
|
|
128
|
+
// If user provides a number, treat it as hours from now
|
|
129
|
+
const hours = Number(value)
|
|
130
|
+
if (!isNaN(hours)) {
|
|
131
|
+
value = String(Math.floor(Date.now() / 1000) + hours * 3600)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Handle claims - add to exceeded limits
|
|
136
|
+
if (key === 'claim') {
|
|
137
|
+
const validClaims = [
|
|
138
|
+
'five_hour',
|
|
139
|
+
'seven_day',
|
|
140
|
+
'seven_day_opus',
|
|
141
|
+
'seven_day_sonnet',
|
|
142
|
+
]
|
|
143
|
+
if (validClaims.includes(value)) {
|
|
144
|
+
// Determine reset time based on claim type
|
|
145
|
+
let resetsAt: number
|
|
146
|
+
if (value === 'five_hour') {
|
|
147
|
+
resetsAt = Math.floor(Date.now() / 1000) + 5 * 3600
|
|
148
|
+
} else if (
|
|
149
|
+
value === 'seven_day' ||
|
|
150
|
+
value === 'seven_day_opus' ||
|
|
151
|
+
value === 'seven_day_sonnet'
|
|
152
|
+
) {
|
|
153
|
+
resetsAt = Math.floor(Date.now() / 1000) + 7 * 24 * 3600
|
|
154
|
+
} else {
|
|
155
|
+
resetsAt = Math.floor(Date.now() / 1000) + 3600
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Add to exceeded limits (remove if already exists)
|
|
159
|
+
exceededLimits = exceededLimits.filter(l => l.type !== value)
|
|
160
|
+
exceededLimits.push({ type: value as ExceededLimit['type'], resetsAt })
|
|
161
|
+
|
|
162
|
+
// Set the representative claim (furthest reset time)
|
|
163
|
+
updateRepresentativeClaim()
|
|
164
|
+
return
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Widen to a string-valued record so dynamic key assignment is allowed.
|
|
168
|
+
// MockHeaders values are string-literal unions; assigning a raw user-input
|
|
169
|
+
// string requires widening, but this is mock/test code so it's acceptable.
|
|
170
|
+
const headers: Partial<Record<keyof MockHeaders, string>> = mockHeaders
|
|
171
|
+
headers[fullKey] = value
|
|
172
|
+
|
|
173
|
+
// Update retry-after if status changed
|
|
174
|
+
if (key === 'status' || key === 'overage-status') {
|
|
175
|
+
updateRetryAfter()
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// If all headers are cleared, disable mocking
|
|
180
|
+
if (Object.keys(mockHeaders).length === 0) {
|
|
181
|
+
mockEnabled = false
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Helper to update retry-after based on current state
|
|
186
|
+
function updateRetryAfter(): void {
|
|
187
|
+
const status = mockHeaders['anthropic-ratelimit-unified-status']
|
|
188
|
+
const overageStatus =
|
|
189
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status']
|
|
190
|
+
const reset = mockHeaders['anthropic-ratelimit-unified-reset']
|
|
191
|
+
|
|
192
|
+
if (
|
|
193
|
+
status === 'rejected' &&
|
|
194
|
+
(!overageStatus || overageStatus === 'rejected') &&
|
|
195
|
+
reset
|
|
196
|
+
) {
|
|
197
|
+
// Calculate seconds until reset
|
|
198
|
+
const resetTimestamp = Number(reset)
|
|
199
|
+
const secondsUntilReset = Math.max(
|
|
200
|
+
0,
|
|
201
|
+
resetTimestamp - Math.floor(Date.now() / 1000),
|
|
202
|
+
)
|
|
203
|
+
mockHeaders['retry-after'] = String(secondsUntilReset)
|
|
204
|
+
} else {
|
|
205
|
+
delete mockHeaders['retry-after']
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Update the representative claim based on exceeded limits
|
|
210
|
+
function updateRepresentativeClaim(): void {
|
|
211
|
+
if (exceededLimits.length === 0) {
|
|
212
|
+
delete mockHeaders['anthropic-ratelimit-unified-representative-claim']
|
|
213
|
+
delete mockHeaders['anthropic-ratelimit-unified-reset']
|
|
214
|
+
delete mockHeaders['retry-after']
|
|
215
|
+
return
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Find the limit with the furthest reset time
|
|
219
|
+
const furthest = exceededLimits.reduce((prev, curr) =>
|
|
220
|
+
curr.resetsAt > prev.resetsAt ? curr : prev,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
// Set the representative claim (appears for both warning and rejected)
|
|
224
|
+
mockHeaders['anthropic-ratelimit-unified-representative-claim'] =
|
|
225
|
+
furthest.type
|
|
226
|
+
mockHeaders['anthropic-ratelimit-unified-reset'] = String(furthest.resetsAt)
|
|
227
|
+
|
|
228
|
+
// Add retry-after if rejected and no overage available
|
|
229
|
+
if (mockHeaders['anthropic-ratelimit-unified-status'] === 'rejected') {
|
|
230
|
+
const overageStatus =
|
|
231
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status']
|
|
232
|
+
if (!overageStatus || overageStatus === 'rejected') {
|
|
233
|
+
// Calculate seconds until reset
|
|
234
|
+
const secondsUntilReset = Math.max(
|
|
235
|
+
0,
|
|
236
|
+
furthest.resetsAt - Math.floor(Date.now() / 1000),
|
|
237
|
+
)
|
|
238
|
+
mockHeaders['retry-after'] = String(secondsUntilReset)
|
|
239
|
+
} else {
|
|
240
|
+
// Overage is available, no retry-after
|
|
241
|
+
delete mockHeaders['retry-after']
|
|
242
|
+
}
|
|
243
|
+
} else {
|
|
244
|
+
delete mockHeaders['retry-after']
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Add function to add exceeded limit with custom reset time
|
|
249
|
+
export function addExceededLimit(
|
|
250
|
+
type: 'five_hour' | 'seven_day' | 'seven_day_opus' | 'seven_day_sonnet',
|
|
251
|
+
hoursFromNow: number,
|
|
252
|
+
): void {
|
|
253
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
254
|
+
return
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
mockEnabled = true
|
|
258
|
+
const resetsAt = Math.floor(Date.now() / 1000) + hoursFromNow * 3600
|
|
259
|
+
|
|
260
|
+
// Remove existing limit of same type
|
|
261
|
+
exceededLimits = exceededLimits.filter(l => l.type !== type)
|
|
262
|
+
exceededLimits.push({ type, resetsAt })
|
|
263
|
+
|
|
264
|
+
// Update status to rejected if we have exceeded limits
|
|
265
|
+
if (exceededLimits.length > 0) {
|
|
266
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
updateRepresentativeClaim()
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Set mock early warning utilization for time-relative thresholds
|
|
273
|
+
// claimAbbrev: '5h' or '7d'
|
|
274
|
+
// utilization: 0-1 (e.g., 0.92 for 92% used)
|
|
275
|
+
// hoursFromNow: hours until reset (default: 4 for 5h, 120 for 7d)
|
|
276
|
+
export function setMockEarlyWarning(
|
|
277
|
+
claimAbbrev: '5h' | '7d' | 'overage',
|
|
278
|
+
utilization: number,
|
|
279
|
+
hoursFromNow?: number,
|
|
280
|
+
): void {
|
|
281
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
282
|
+
return
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
mockEnabled = true
|
|
286
|
+
|
|
287
|
+
// Clear ALL early warning headers first (5h is checked before 7d, so we need
|
|
288
|
+
// to clear 5h headers when testing 7d to avoid 5h taking priority)
|
|
289
|
+
clearMockEarlyWarning()
|
|
290
|
+
|
|
291
|
+
// Default hours based on claim type (early in window to trigger warning)
|
|
292
|
+
const defaultHours = claimAbbrev === '5h' ? 4 : 5 * 24
|
|
293
|
+
const hours = hoursFromNow ?? defaultHours
|
|
294
|
+
const resetsAt = Math.floor(Date.now() / 1000) + hours * 3600
|
|
295
|
+
|
|
296
|
+
mockHeaders[`anthropic-ratelimit-unified-${claimAbbrev}-utilization`] =
|
|
297
|
+
String(utilization)
|
|
298
|
+
mockHeaders[`anthropic-ratelimit-unified-${claimAbbrev}-reset`] =
|
|
299
|
+
String(resetsAt)
|
|
300
|
+
// Set the surpassed-threshold header to trigger early warning
|
|
301
|
+
mockHeaders[
|
|
302
|
+
`anthropic-ratelimit-unified-${claimAbbrev}-surpassed-threshold`
|
|
303
|
+
] = String(utilization)
|
|
304
|
+
|
|
305
|
+
// Set status to allowed so early warning logic can upgrade it
|
|
306
|
+
if (!mockHeaders['anthropic-ratelimit-unified-status']) {
|
|
307
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'allowed'
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Clear mock early warning headers
|
|
312
|
+
export function clearMockEarlyWarning(): void {
|
|
313
|
+
delete mockHeaders['anthropic-ratelimit-unified-5h-utilization']
|
|
314
|
+
delete mockHeaders['anthropic-ratelimit-unified-5h-reset']
|
|
315
|
+
delete mockHeaders['anthropic-ratelimit-unified-5h-surpassed-threshold']
|
|
316
|
+
delete mockHeaders['anthropic-ratelimit-unified-7d-utilization']
|
|
317
|
+
delete mockHeaders['anthropic-ratelimit-unified-7d-reset']
|
|
318
|
+
delete mockHeaders['anthropic-ratelimit-unified-7d-surpassed-threshold']
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export function setMockRateLimitScenario(scenario: MockScenario): void {
|
|
322
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
323
|
+
return
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (scenario === 'clear') {
|
|
327
|
+
mockHeaders = {}
|
|
328
|
+
mockHeaderless429Message = null
|
|
329
|
+
mockEnabled = false
|
|
330
|
+
return
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
mockEnabled = true
|
|
334
|
+
|
|
335
|
+
// Set reset times for demos
|
|
336
|
+
const fiveHoursFromNow = Math.floor(Date.now() / 1000) + 5 * 3600
|
|
337
|
+
const sevenDaysFromNow = Math.floor(Date.now() / 1000) + 7 * 24 * 3600
|
|
338
|
+
|
|
339
|
+
// Clear existing headers
|
|
340
|
+
mockHeaders = {}
|
|
341
|
+
mockHeaderless429Message = null
|
|
342
|
+
|
|
343
|
+
// Only clear exceeded limits for scenarios that explicitly set them
|
|
344
|
+
// Overage scenarios should preserve existing exceeded limits
|
|
345
|
+
const preserveExceededLimits = [
|
|
346
|
+
'overage-active',
|
|
347
|
+
'overage-warning',
|
|
348
|
+
'overage-exhausted',
|
|
349
|
+
].includes(scenario)
|
|
350
|
+
if (!preserveExceededLimits) {
|
|
351
|
+
exceededLimits = []
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
switch (scenario) {
|
|
355
|
+
case 'normal':
|
|
356
|
+
mockHeaders = {
|
|
357
|
+
'anthropic-ratelimit-unified-status': 'allowed',
|
|
358
|
+
'anthropic-ratelimit-unified-reset': String(fiveHoursFromNow),
|
|
359
|
+
}
|
|
360
|
+
break
|
|
361
|
+
|
|
362
|
+
case 'session-limit-reached':
|
|
363
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
364
|
+
updateRepresentativeClaim()
|
|
365
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
366
|
+
break
|
|
367
|
+
|
|
368
|
+
case 'approaching-weekly-limit':
|
|
369
|
+
mockHeaders = {
|
|
370
|
+
'anthropic-ratelimit-unified-status': 'allowed_warning',
|
|
371
|
+
'anthropic-ratelimit-unified-reset': String(sevenDaysFromNow),
|
|
372
|
+
'anthropic-ratelimit-unified-representative-claim': 'seven_day',
|
|
373
|
+
}
|
|
374
|
+
break
|
|
375
|
+
|
|
376
|
+
case 'weekly-limit-reached':
|
|
377
|
+
exceededLimits = [{ type: 'seven_day', resetsAt: sevenDaysFromNow }]
|
|
378
|
+
updateRepresentativeClaim()
|
|
379
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
380
|
+
break
|
|
381
|
+
|
|
382
|
+
case 'overage-active': {
|
|
383
|
+
// If no limits have been exceeded yet, default to 5-hour
|
|
384
|
+
if (exceededLimits.length === 0) {
|
|
385
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
386
|
+
}
|
|
387
|
+
updateRepresentativeClaim()
|
|
388
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
389
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'allowed'
|
|
390
|
+
// Set overage reset time (monthly)
|
|
391
|
+
const endOfMonthActive = new Date()
|
|
392
|
+
endOfMonthActive.setMonth(endOfMonthActive.getMonth() + 1, 1)
|
|
393
|
+
endOfMonthActive.setHours(0, 0, 0, 0)
|
|
394
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
395
|
+
Math.floor(endOfMonthActive.getTime() / 1000),
|
|
396
|
+
)
|
|
397
|
+
break
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
case 'overage-warning': {
|
|
401
|
+
// If no limits have been exceeded yet, default to 5-hour
|
|
402
|
+
if (exceededLimits.length === 0) {
|
|
403
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
404
|
+
}
|
|
405
|
+
updateRepresentativeClaim()
|
|
406
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
407
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] =
|
|
408
|
+
'allowed_warning'
|
|
409
|
+
// Overage typically resets monthly, but for demo let's say end of month
|
|
410
|
+
const endOfMonth = new Date()
|
|
411
|
+
endOfMonth.setMonth(endOfMonth.getMonth() + 1, 1)
|
|
412
|
+
endOfMonth.setHours(0, 0, 0, 0)
|
|
413
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
414
|
+
Math.floor(endOfMonth.getTime() / 1000),
|
|
415
|
+
)
|
|
416
|
+
break
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
case 'overage-exhausted': {
|
|
420
|
+
// If no limits have been exceeded yet, default to 5-hour
|
|
421
|
+
if (exceededLimits.length === 0) {
|
|
422
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
423
|
+
}
|
|
424
|
+
updateRepresentativeClaim()
|
|
425
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
426
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'rejected'
|
|
427
|
+
// Both subscription and overage are exhausted
|
|
428
|
+
// Subscription resets based on the exceeded limit, overage resets monthly
|
|
429
|
+
const endOfMonthExhausted = new Date()
|
|
430
|
+
endOfMonthExhausted.setMonth(endOfMonthExhausted.getMonth() + 1, 1)
|
|
431
|
+
endOfMonthExhausted.setHours(0, 0, 0, 0)
|
|
432
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
433
|
+
Math.floor(endOfMonthExhausted.getTime() / 1000),
|
|
434
|
+
)
|
|
435
|
+
break
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
case 'out-of-credits': {
|
|
439
|
+
// Out of credits - subscription limit hit, overage rejected due to insufficient credits
|
|
440
|
+
// (wallet is empty)
|
|
441
|
+
if (exceededLimits.length === 0) {
|
|
442
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
443
|
+
}
|
|
444
|
+
updateRepresentativeClaim()
|
|
445
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
446
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'rejected'
|
|
447
|
+
mockHeaders['anthropic-ratelimit-unified-overage-disabled-reason'] =
|
|
448
|
+
'out_of_credits'
|
|
449
|
+
const endOfMonth = new Date()
|
|
450
|
+
endOfMonth.setMonth(endOfMonth.getMonth() + 1, 1)
|
|
451
|
+
endOfMonth.setHours(0, 0, 0, 0)
|
|
452
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
453
|
+
Math.floor(endOfMonth.getTime() / 1000),
|
|
454
|
+
)
|
|
455
|
+
break
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
case 'org-zero-credit-limit': {
|
|
459
|
+
// Org service has zero credit limit - admin set org-level spend cap to $0
|
|
460
|
+
// Non-admin Team/Enterprise users should not see "Request extra usage" option
|
|
461
|
+
if (exceededLimits.length === 0) {
|
|
462
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
463
|
+
}
|
|
464
|
+
updateRepresentativeClaim()
|
|
465
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
466
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'rejected'
|
|
467
|
+
mockHeaders['anthropic-ratelimit-unified-overage-disabled-reason'] =
|
|
468
|
+
'org_service_zero_credit_limit'
|
|
469
|
+
const endOfMonthZero = new Date()
|
|
470
|
+
endOfMonthZero.setMonth(endOfMonthZero.getMonth() + 1, 1)
|
|
471
|
+
endOfMonthZero.setHours(0, 0, 0, 0)
|
|
472
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
473
|
+
Math.floor(endOfMonthZero.getTime() / 1000),
|
|
474
|
+
)
|
|
475
|
+
break
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
case 'org-spend-cap-hit': {
|
|
479
|
+
// Org spend cap hit for the month - org overages temporarily disabled
|
|
480
|
+
// Non-admin Team/Enterprise users should not see "Request extra usage" option
|
|
481
|
+
if (exceededLimits.length === 0) {
|
|
482
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
483
|
+
}
|
|
484
|
+
updateRepresentativeClaim()
|
|
485
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
486
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'rejected'
|
|
487
|
+
mockHeaders['anthropic-ratelimit-unified-overage-disabled-reason'] =
|
|
488
|
+
'org_level_disabled_until'
|
|
489
|
+
const endOfMonthHit = new Date()
|
|
490
|
+
endOfMonthHit.setMonth(endOfMonthHit.getMonth() + 1, 1)
|
|
491
|
+
endOfMonthHit.setHours(0, 0, 0, 0)
|
|
492
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
493
|
+
Math.floor(endOfMonthHit.getTime() / 1000),
|
|
494
|
+
)
|
|
495
|
+
break
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
case 'member-zero-credit-limit': {
|
|
499
|
+
// Member has zero credit limit - admin set this user's individual limit to $0
|
|
500
|
+
// Non-admin Team/Enterprise users SHOULD see "Request extra usage" (admin can allocate more)
|
|
501
|
+
if (exceededLimits.length === 0) {
|
|
502
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
503
|
+
}
|
|
504
|
+
updateRepresentativeClaim()
|
|
505
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
506
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'rejected'
|
|
507
|
+
mockHeaders['anthropic-ratelimit-unified-overage-disabled-reason'] =
|
|
508
|
+
'member_zero_credit_limit'
|
|
509
|
+
const endOfMonthMember = new Date()
|
|
510
|
+
endOfMonthMember.setMonth(endOfMonthMember.getMonth() + 1, 1)
|
|
511
|
+
endOfMonthMember.setHours(0, 0, 0, 0)
|
|
512
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
513
|
+
Math.floor(endOfMonthMember.getTime() / 1000),
|
|
514
|
+
)
|
|
515
|
+
break
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
case 'seat-tier-zero-credit-limit': {
|
|
519
|
+
// Seat tier has zero credit limit - admin set this seat tier's limit to $0
|
|
520
|
+
// Non-admin Team/Enterprise users SHOULD see "Request extra usage" (admin can allocate more)
|
|
521
|
+
if (exceededLimits.length === 0) {
|
|
522
|
+
exceededLimits = [{ type: 'five_hour', resetsAt: fiveHoursFromNow }]
|
|
523
|
+
}
|
|
524
|
+
updateRepresentativeClaim()
|
|
525
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
526
|
+
mockHeaders['anthropic-ratelimit-unified-overage-status'] = 'rejected'
|
|
527
|
+
mockHeaders['anthropic-ratelimit-unified-overage-disabled-reason'] =
|
|
528
|
+
'seat_tier_zero_credit_limit'
|
|
529
|
+
const endOfMonthSeatTier = new Date()
|
|
530
|
+
endOfMonthSeatTier.setMonth(endOfMonthSeatTier.getMonth() + 1, 1)
|
|
531
|
+
endOfMonthSeatTier.setHours(0, 0, 0, 0)
|
|
532
|
+
mockHeaders['anthropic-ratelimit-unified-overage-reset'] = String(
|
|
533
|
+
Math.floor(endOfMonthSeatTier.getTime() / 1000),
|
|
534
|
+
)
|
|
535
|
+
break
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
case 'opus-limit': {
|
|
539
|
+
exceededLimits = [{ type: 'seven_day_opus', resetsAt: sevenDaysFromNow }]
|
|
540
|
+
updateRepresentativeClaim()
|
|
541
|
+
// Always send 429 rejected status - the error handler will decide whether
|
|
542
|
+
// to show an error or return NO_RESPONSE_REQUESTED based on fallback eligibility
|
|
543
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
544
|
+
break
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
case 'opus-warning': {
|
|
548
|
+
mockHeaders = {
|
|
549
|
+
'anthropic-ratelimit-unified-status': 'allowed_warning',
|
|
550
|
+
'anthropic-ratelimit-unified-reset': String(sevenDaysFromNow),
|
|
551
|
+
'anthropic-ratelimit-unified-representative-claim': 'seven_day_opus',
|
|
552
|
+
}
|
|
553
|
+
break
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
case 'sonnet-limit': {
|
|
557
|
+
exceededLimits = [
|
|
558
|
+
{ type: 'seven_day_sonnet', resetsAt: sevenDaysFromNow },
|
|
559
|
+
]
|
|
560
|
+
updateRepresentativeClaim()
|
|
561
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
562
|
+
break
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
case 'sonnet-warning': {
|
|
566
|
+
mockHeaders = {
|
|
567
|
+
'anthropic-ratelimit-unified-status': 'allowed_warning',
|
|
568
|
+
'anthropic-ratelimit-unified-reset': String(sevenDaysFromNow),
|
|
569
|
+
'anthropic-ratelimit-unified-representative-claim': 'seven_day_sonnet',
|
|
570
|
+
}
|
|
571
|
+
break
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
case 'fast-mode-limit': {
|
|
575
|
+
updateRepresentativeClaim()
|
|
576
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
577
|
+
// Duration in ms (> 20s threshold to trigger cooldown)
|
|
578
|
+
mockFastModeRateLimitDurationMs = 10 * 60 * 1000
|
|
579
|
+
break
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
case 'fast-mode-short-limit': {
|
|
583
|
+
updateRepresentativeClaim()
|
|
584
|
+
mockHeaders['anthropic-ratelimit-unified-status'] = 'rejected'
|
|
585
|
+
// Duration in ms (< 20s threshold, won't trigger cooldown)
|
|
586
|
+
mockFastModeRateLimitDurationMs = 10 * 1000
|
|
587
|
+
break
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
case 'extra-usage-required': {
|
|
591
|
+
// Headerless 429 — exercises the entitlement-rejection path in errors.ts
|
|
592
|
+
mockHeaderless429Message =
|
|
593
|
+
'Extra usage is required for long context requests.'
|
|
594
|
+
break
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
default:
|
|
598
|
+
break
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
export function getMockHeaderless429Message(): string | null {
|
|
603
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
604
|
+
return null
|
|
605
|
+
}
|
|
606
|
+
// Env var path for -p / SDK testing where slash commands aren't available
|
|
607
|
+
if (process.env.CLAUDE_MOCK_HEADERLESS_429) {
|
|
608
|
+
return process.env.CLAUDE_MOCK_HEADERLESS_429
|
|
609
|
+
}
|
|
610
|
+
if (!mockEnabled) {
|
|
611
|
+
return null
|
|
612
|
+
}
|
|
613
|
+
return mockHeaderless429Message
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
export function getMockHeaders(): MockHeaders | null {
|
|
617
|
+
if (
|
|
618
|
+
!mockEnabled ||
|
|
619
|
+
process.env.USER_TYPE !== 'ant' ||
|
|
620
|
+
Object.keys(mockHeaders).length === 0
|
|
621
|
+
) {
|
|
622
|
+
return null
|
|
623
|
+
}
|
|
624
|
+
return mockHeaders
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
export function getMockStatus(): string {
|
|
628
|
+
if (
|
|
629
|
+
!mockEnabled ||
|
|
630
|
+
(Object.keys(mockHeaders).length === 0 && !mockSubscriptionType)
|
|
631
|
+
) {
|
|
632
|
+
return 'No mock headers active (using real limits)'
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
const lines: string[] = []
|
|
636
|
+
lines.push('Active mock headers:')
|
|
637
|
+
|
|
638
|
+
// Show subscription type - either explicitly set or default
|
|
639
|
+
const effectiveSubscription =
|
|
640
|
+
mockSubscriptionType || DEFAULT_MOCK_SUBSCRIPTION
|
|
641
|
+
if (mockSubscriptionType) {
|
|
642
|
+
lines.push(` Subscription Type: ${mockSubscriptionType} (explicitly set)`)
|
|
643
|
+
} else {
|
|
644
|
+
lines.push(` Subscription Type: ${effectiveSubscription} (default)`)
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
Object.entries(mockHeaders).forEach(([key, value]) => {
|
|
648
|
+
if (value !== undefined) {
|
|
649
|
+
// Format the header name nicely
|
|
650
|
+
const formattedKey = key
|
|
651
|
+
.replace('anthropic-ratelimit-unified-', '')
|
|
652
|
+
.replace(/-/g, ' ')
|
|
653
|
+
.replace(/\b\w/g, c => c.toUpperCase())
|
|
654
|
+
|
|
655
|
+
// Format timestamps as human-readable
|
|
656
|
+
if (key.includes('reset') && value) {
|
|
657
|
+
const timestamp = Number(value)
|
|
658
|
+
const date = new Date(timestamp * 1000)
|
|
659
|
+
lines.push(` ${formattedKey}: ${value} (${date.toLocaleString()})`)
|
|
660
|
+
} else {
|
|
661
|
+
lines.push(` ${formattedKey}: ${value}`)
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
})
|
|
665
|
+
|
|
666
|
+
// Show exceeded limits if any
|
|
667
|
+
if (exceededLimits.length > 0) {
|
|
668
|
+
lines.push('\nExceeded limits (contributing to representative claim):')
|
|
669
|
+
exceededLimits.forEach(limit => {
|
|
670
|
+
const date = new Date(limit.resetsAt * 1000)
|
|
671
|
+
lines.push(` ${limit.type}: resets at ${date.toLocaleString()}`)
|
|
672
|
+
})
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
return lines.join('\n')
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
export function clearMockHeaders(): void {
|
|
679
|
+
mockHeaders = {}
|
|
680
|
+
exceededLimits = []
|
|
681
|
+
mockSubscriptionType = null
|
|
682
|
+
mockFastModeRateLimitDurationMs = null
|
|
683
|
+
mockFastModeRateLimitExpiresAt = null
|
|
684
|
+
mockHeaderless429Message = null
|
|
685
|
+
setMockBillingAccessOverride(null)
|
|
686
|
+
mockEnabled = false
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
export function applyMockHeaders(
|
|
690
|
+
headers: globalThis.Headers,
|
|
691
|
+
): globalThis.Headers {
|
|
692
|
+
const mock = getMockHeaders()
|
|
693
|
+
if (!mock) {
|
|
694
|
+
return headers
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
// Create a new Headers object with original headers
|
|
698
|
+
// eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
|
|
699
|
+
const newHeaders = new globalThis.Headers(headers)
|
|
700
|
+
|
|
701
|
+
// Apply mock headers (overwriting originals)
|
|
702
|
+
Object.entries(mock).forEach(([key, value]) => {
|
|
703
|
+
if (value !== undefined) {
|
|
704
|
+
newHeaders.set(key, value)
|
|
705
|
+
}
|
|
706
|
+
})
|
|
707
|
+
|
|
708
|
+
return newHeaders
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// Check if we should process rate limits even without subscription
|
|
712
|
+
// This is for Ant employees testing with mocks
|
|
713
|
+
export function shouldProcessMockLimits(): boolean {
|
|
714
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
715
|
+
return false
|
|
716
|
+
}
|
|
717
|
+
return mockEnabled || Boolean(process.env.CLAUDE_MOCK_HEADERLESS_429)
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
export function getCurrentMockScenario(): MockScenario | null {
|
|
721
|
+
if (!mockEnabled) {
|
|
722
|
+
return null
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// Reverse lookup the scenario from current headers
|
|
726
|
+
if (!mockHeaders) return null
|
|
727
|
+
|
|
728
|
+
const status = mockHeaders['anthropic-ratelimit-unified-status']
|
|
729
|
+
const overage = mockHeaders['anthropic-ratelimit-unified-overage-status']
|
|
730
|
+
const claim = mockHeaders['anthropic-ratelimit-unified-representative-claim']
|
|
731
|
+
|
|
732
|
+
if (claim === 'seven_day_opus') {
|
|
733
|
+
return status === 'rejected' ? 'opus-limit' : 'opus-warning'
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
if (claim === 'seven_day_sonnet') {
|
|
737
|
+
return status === 'rejected' ? 'sonnet-limit' : 'sonnet-warning'
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
if (overage === 'rejected') return 'overage-exhausted'
|
|
741
|
+
if (overage === 'allowed_warning') return 'overage-warning'
|
|
742
|
+
if (overage === 'allowed') return 'overage-active'
|
|
743
|
+
|
|
744
|
+
if (status === 'rejected') {
|
|
745
|
+
if (claim === 'five_hour') return 'session-limit-reached'
|
|
746
|
+
if (claim === 'seven_day') return 'weekly-limit-reached'
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
if (status === 'allowed_warning') {
|
|
750
|
+
if (claim === 'seven_day') return 'approaching-weekly-limit'
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
if (status === 'allowed') return 'normal'
|
|
754
|
+
|
|
755
|
+
return null
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
export function getScenarioDescription(scenario: MockScenario): string {
|
|
759
|
+
switch (scenario) {
|
|
760
|
+
case 'normal':
|
|
761
|
+
return 'Normal usage, no limits'
|
|
762
|
+
case 'session-limit-reached':
|
|
763
|
+
return 'Session rate limit exceeded'
|
|
764
|
+
case 'approaching-weekly-limit':
|
|
765
|
+
return 'Approaching weekly aggregate limit'
|
|
766
|
+
case 'weekly-limit-reached':
|
|
767
|
+
return 'Weekly aggregate limit exceeded'
|
|
768
|
+
case 'overage-active':
|
|
769
|
+
return 'Using extra usage (overage active)'
|
|
770
|
+
case 'overage-warning':
|
|
771
|
+
return 'Approaching extra usage limit'
|
|
772
|
+
case 'overage-exhausted':
|
|
773
|
+
return 'Both subscription and extra usage limits exhausted'
|
|
774
|
+
case 'out-of-credits':
|
|
775
|
+
return 'Out of extra usage credits (wallet empty)'
|
|
776
|
+
case 'org-zero-credit-limit':
|
|
777
|
+
return 'Org spend cap is zero (no extra usage budget)'
|
|
778
|
+
case 'org-spend-cap-hit':
|
|
779
|
+
return 'Org spend cap hit for the month'
|
|
780
|
+
case 'member-zero-credit-limit':
|
|
781
|
+
return 'Member limit is zero (admin can allocate more)'
|
|
782
|
+
case 'seat-tier-zero-credit-limit':
|
|
783
|
+
return 'Seat tier limit is zero (admin can allocate more)'
|
|
784
|
+
case 'opus-limit':
|
|
785
|
+
return 'Opus limit reached'
|
|
786
|
+
case 'opus-warning':
|
|
787
|
+
return 'Approaching Opus limit'
|
|
788
|
+
case 'sonnet-limit':
|
|
789
|
+
return 'Sonnet limit reached'
|
|
790
|
+
case 'sonnet-warning':
|
|
791
|
+
return 'Approaching Sonnet limit'
|
|
792
|
+
case 'fast-mode-limit':
|
|
793
|
+
return 'Fast mode rate limit'
|
|
794
|
+
case 'fast-mode-short-limit':
|
|
795
|
+
return 'Fast mode rate limit (short)'
|
|
796
|
+
case 'extra-usage-required':
|
|
797
|
+
return 'Headerless 429: Extra usage required for 1M context'
|
|
798
|
+
case 'clear':
|
|
799
|
+
return 'Clear mock headers (use real limits)'
|
|
800
|
+
default:
|
|
801
|
+
return 'Unknown scenario'
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// Mock subscription type management
|
|
806
|
+
export function setMockSubscriptionType(
|
|
807
|
+
subscriptionType: SubscriptionType | null,
|
|
808
|
+
): void {
|
|
809
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
810
|
+
return
|
|
811
|
+
}
|
|
812
|
+
mockEnabled = true
|
|
813
|
+
mockSubscriptionType = subscriptionType
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
export function getMockSubscriptionType(): SubscriptionType | null {
|
|
817
|
+
if (!mockEnabled || process.env.USER_TYPE !== 'ant') {
|
|
818
|
+
return null
|
|
819
|
+
}
|
|
820
|
+
// Return the explicitly set subscription type, or default to 'max'
|
|
821
|
+
return mockSubscriptionType || DEFAULT_MOCK_SUBSCRIPTION
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
// Export a function that checks if we should use mock subscription
|
|
825
|
+
export function shouldUseMockSubscription(): boolean {
|
|
826
|
+
return (
|
|
827
|
+
mockEnabled &&
|
|
828
|
+
mockSubscriptionType !== null &&
|
|
829
|
+
process.env.USER_TYPE === 'ant'
|
|
830
|
+
)
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// Mock billing access (admin vs non-admin)
|
|
834
|
+
export function setMockBillingAccess(hasAccess: boolean | null): void {
|
|
835
|
+
if (process.env.USER_TYPE !== 'ant') {
|
|
836
|
+
return
|
|
837
|
+
}
|
|
838
|
+
mockEnabled = true
|
|
839
|
+
setMockBillingAccessOverride(hasAccess)
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
// Mock fast mode rate limit handling
|
|
843
|
+
export function isMockFastModeRateLimitScenario(): boolean {
|
|
844
|
+
return mockFastModeRateLimitDurationMs !== null
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
export function checkMockFastModeRateLimit(
|
|
848
|
+
isFastModeActive?: boolean,
|
|
849
|
+
): MockHeaders | null {
|
|
850
|
+
if (mockFastModeRateLimitDurationMs === null) {
|
|
851
|
+
return null
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
// Only throw when fast mode is active
|
|
855
|
+
if (!isFastModeActive) {
|
|
856
|
+
return null
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Check if the rate limit has expired
|
|
860
|
+
if (
|
|
861
|
+
mockFastModeRateLimitExpiresAt !== null &&
|
|
862
|
+
Date.now() >= mockFastModeRateLimitExpiresAt
|
|
863
|
+
) {
|
|
864
|
+
clearMockHeaders()
|
|
865
|
+
return null
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
// Set expiry on first error (not when scenario is configured)
|
|
869
|
+
if (mockFastModeRateLimitExpiresAt === null) {
|
|
870
|
+
mockFastModeRateLimitExpiresAt =
|
|
871
|
+
Date.now() + mockFastModeRateLimitDurationMs
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// Compute dynamic retry-after based on remaining time
|
|
875
|
+
const remainingMs = mockFastModeRateLimitExpiresAt - Date.now()
|
|
876
|
+
const headersToSend = { ...mockHeaders }
|
|
877
|
+
headersToSend['retry-after'] = String(
|
|
878
|
+
Math.max(1, Math.ceil(remainingMs / 1000)),
|
|
879
|
+
)
|
|
880
|
+
|
|
881
|
+
return headersToSend
|
|
882
|
+
}
|