@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.
Files changed (934) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/bin/xcode +127 -0
  4. package/bin/xcode-test +84 -0
  5. package/bin/xcode.cmd +31 -0
  6. package/constants/apiLimits.ts +94 -0
  7. package/constants/betas.ts +52 -0
  8. package/constants/common.ts +33 -0
  9. package/constants/cyberRiskInstruction.ts +24 -0
  10. package/constants/errorIds.ts +15 -0
  11. package/constants/figures.ts +45 -0
  12. package/constants/files.ts +156 -0
  13. package/constants/github-app.ts +144 -0
  14. package/constants/keys.ts +11 -0
  15. package/constants/messages.ts +1 -0
  16. package/constants/oauth.ts +234 -0
  17. package/constants/outputStyles.ts +216 -0
  18. package/constants/product.ts +76 -0
  19. package/constants/prompts.ts +939 -0
  20. package/constants/spinnerVerbs.ts +204 -0
  21. package/constants/system.ts +95 -0
  22. package/constants/systemPromptSections.ts +68 -0
  23. package/constants/toolLimits.ts +56 -0
  24. package/constants/tools.ts +112 -0
  25. package/constants/turnCompletionVerbs.ts +12 -0
  26. package/constants/xml.ts +86 -0
  27. package/entrypoints/agentSdkTypes.ts +443 -0
  28. package/entrypoints/cli.tsx +307 -0
  29. package/entrypoints/init.ts +340 -0
  30. package/entrypoints/mcp.ts +196 -0
  31. package/entrypoints/sandboxTypes.ts +156 -0
  32. package/entrypoints/sdk/controlSchemas.ts +663 -0
  33. package/entrypoints/sdk/coreSchemas.ts +1889 -0
  34. package/entrypoints/sdk/coreTypes.generated.ts +2 -0
  35. package/entrypoints/sdk/coreTypes.ts +62 -0
  36. package/entrypoints/sdk/runtimeTypes.ts +140 -0
  37. package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
  38. package/entrypoints/sdk/toolTypes.ts +90 -0
  39. package/main.tsx +4686 -0
  40. package/package.json +120 -0
  41. package/services/AgentSummary/agentSummary.ts +179 -0
  42. package/services/MagicDocs/magicDocs.ts +254 -0
  43. package/services/MagicDocs/prompts.ts +127 -0
  44. package/services/PromptSuggestion/promptSuggestion.ts +523 -0
  45. package/services/PromptSuggestion/speculation.ts +991 -0
  46. package/services/SessionMemory/prompts.ts +324 -0
  47. package/services/SessionMemory/sessionMemory.ts +495 -0
  48. package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  49. package/services/analytics/config.ts +38 -0
  50. package/services/analytics/datadog.ts +307 -0
  51. package/services/analytics/firstPartyEventLogger.ts +449 -0
  52. package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  53. package/services/analytics/growthbook.ts +1155 -0
  54. package/services/analytics/index.ts +173 -0
  55. package/services/analytics/metadata.ts +973 -0
  56. package/services/analytics/sink.ts +114 -0
  57. package/services/analytics/sinkKillswitch.ts +25 -0
  58. package/services/api/adminRequests.ts +119 -0
  59. package/services/api/bootstrap.ts +141 -0
  60. package/services/api/claude.ts +3422 -0
  61. package/services/api/client.ts +406 -0
  62. package/services/api/dumpPrompts.ts +226 -0
  63. package/services/api/emptyUsage.ts +22 -0
  64. package/services/api/errorUtils.ts +260 -0
  65. package/services/api/errors.ts +1207 -0
  66. package/services/api/filesApi.ts +748 -0
  67. package/services/api/firstTokenDate.ts +60 -0
  68. package/services/api/gemini.ts +359 -0
  69. package/services/api/geminiAdapter.ts +123 -0
  70. package/services/api/geminiClient.ts +291 -0
  71. package/services/api/grove.ts +357 -0
  72. package/services/api/logging.ts +788 -0
  73. package/services/api/metricsOptOut.ts +159 -0
  74. package/services/api/openRouterClient.ts +453 -0
  75. package/services/api/overageCreditGrant.ts +137 -0
  76. package/services/api/promptCacheBreakDetection.ts +727 -0
  77. package/services/api/referral.ts +281 -0
  78. package/services/api/sessionIngress.ts +514 -0
  79. package/services/api/ultrareviewQuota.ts +38 -0
  80. package/services/api/usage.ts +63 -0
  81. package/services/api/withRetry.ts +822 -0
  82. package/services/autoDream/autoDream.ts +324 -0
  83. package/services/autoDream/config.ts +21 -0
  84. package/services/autoDream/consolidationLock.ts +140 -0
  85. package/services/autoDream/consolidationPrompt.ts +65 -0
  86. package/services/awaySummary.ts +74 -0
  87. package/services/claudeAiLimits.ts +515 -0
  88. package/services/claudeAiLimitsHook.ts +23 -0
  89. package/services/compact/apiMicrocompact.ts +153 -0
  90. package/services/compact/autoCompact.ts +351 -0
  91. package/services/compact/compact.ts +1705 -0
  92. package/services/compact/compactWarningHook.ts +16 -0
  93. package/services/compact/compactWarningState.ts +18 -0
  94. package/services/compact/grouping.ts +63 -0
  95. package/services/compact/microCompact.ts +530 -0
  96. package/services/compact/postCompactCleanup.ts +77 -0
  97. package/services/compact/prompt.ts +374 -0
  98. package/services/compact/sessionMemoryCompact.ts +630 -0
  99. package/services/compact/timeBasedMCConfig.ts +43 -0
  100. package/services/diagnosticTracking.ts +397 -0
  101. package/services/extractMemories/extractMemories.ts +517 -0
  102. package/services/extractMemories/prompts.ts +154 -0
  103. package/services/internalLogging.ts +90 -0
  104. package/services/lsp/LSPClient.ts +447 -0
  105. package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  106. package/services/lsp/LSPServerInstance.ts +511 -0
  107. package/services/lsp/LSPServerManager.ts +420 -0
  108. package/services/lsp/config.ts +79 -0
  109. package/services/lsp/manager.ts +289 -0
  110. package/services/lsp/passiveFeedback.ts +328 -0
  111. package/services/mcp/InProcessTransport.ts +63 -0
  112. package/services/mcp/MCPConnectionManager.tsx +73 -0
  113. package/services/mcp/SdkControlTransport.ts +136 -0
  114. package/services/mcp/auth.ts +2465 -0
  115. package/services/mcp/channelAllowlist.ts +76 -0
  116. package/services/mcp/channelNotification.ts +316 -0
  117. package/services/mcp/channelPermissions.ts +240 -0
  118. package/services/mcp/claudeai.ts +164 -0
  119. package/services/mcp/client.ts +3348 -0
  120. package/services/mcp/config.ts +1578 -0
  121. package/services/mcp/elicitationHandler.ts +313 -0
  122. package/services/mcp/envExpansion.ts +38 -0
  123. package/services/mcp/headersHelper.ts +138 -0
  124. package/services/mcp/mcpStringUtils.ts +106 -0
  125. package/services/mcp/normalization.ts +23 -0
  126. package/services/mcp/oauthPort.ts +78 -0
  127. package/services/mcp/officialRegistry.ts +72 -0
  128. package/services/mcp/types.ts +258 -0
  129. package/services/mcp/useManageMCPConnections.ts +1141 -0
  130. package/services/mcp/utils.ts +575 -0
  131. package/services/mcp/vscodeSdkMcp.ts +112 -0
  132. package/services/mcp/xaa.ts +511 -0
  133. package/services/mcp/xaaIdpLogin.ts +487 -0
  134. package/services/mcpServerApproval.tsx +41 -0
  135. package/services/mockRateLimits.ts +882 -0
  136. package/services/notifier.ts +156 -0
  137. package/services/oauth/auth-code-listener.ts +211 -0
  138. package/services/oauth/client.ts +566 -0
  139. package/services/oauth/crypto.ts +23 -0
  140. package/services/oauth/getOauthProfile.ts +53 -0
  141. package/services/oauth/index.ts +198 -0
  142. package/services/plugins/PluginInstallationManager.ts +184 -0
  143. package/services/plugins/pluginCliCommands.ts +344 -0
  144. package/services/plugins/pluginOperations.ts +1088 -0
  145. package/services/policyLimits/index.ts +663 -0
  146. package/services/policyLimits/types.ts +27 -0
  147. package/services/preventSleep.ts +165 -0
  148. package/services/rateLimitMessages.ts +344 -0
  149. package/services/rateLimitMocking.ts +144 -0
  150. package/services/remoteManagedSettings/index.ts +638 -0
  151. package/services/remoteManagedSettings/securityCheck.tsx +74 -0
  152. package/services/remoteManagedSettings/syncCache.ts +112 -0
  153. package/services/remoteManagedSettings/syncCacheState.ts +96 -0
  154. package/services/remoteManagedSettings/types.ts +31 -0
  155. package/services/settingsSync/index.ts +581 -0
  156. package/services/settingsSync/types.ts +67 -0
  157. package/services/teamMemorySync/index.ts +1256 -0
  158. package/services/teamMemorySync/secretScanner.ts +324 -0
  159. package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  160. package/services/teamMemorySync/types.ts +156 -0
  161. package/services/teamMemorySync/watcher.ts +387 -0
  162. package/services/tips/tipHistory.ts +17 -0
  163. package/services/tips/tipRegistry.ts +686 -0
  164. package/services/tips/tipScheduler.ts +58 -0
  165. package/services/tokenEstimation.ts +495 -0
  166. package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  167. package/services/tools/StreamingToolExecutor.ts +530 -0
  168. package/services/tools/toolExecution.ts +1745 -0
  169. package/services/tools/toolHooks.ts +650 -0
  170. package/services/tools/toolOrchestration.ts +188 -0
  171. package/services/vcr.ts +406 -0
  172. package/services/voice.ts +525 -0
  173. package/services/voiceKeyterms.ts +106 -0
  174. package/services/voiceStreamSTT.ts +544 -0
  175. package/tools/AgentTool/AgentTool.tsx +1398 -0
  176. package/tools/AgentTool/UI.tsx +872 -0
  177. package/tools/AgentTool/agentColorManager.ts +66 -0
  178. package/tools/AgentTool/agentDisplay.ts +104 -0
  179. package/tools/AgentTool/agentMemory.ts +177 -0
  180. package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  181. package/tools/AgentTool/agentToolUtils.ts +686 -0
  182. package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  183. package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  184. package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  185. package/tools/AgentTool/built-in/planAgent.ts +92 -0
  186. package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  187. package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  188. package/tools/AgentTool/builtInAgents.ts +72 -0
  189. package/tools/AgentTool/constants.ts +12 -0
  190. package/tools/AgentTool/forkSubagent.ts +210 -0
  191. package/tools/AgentTool/loadAgentsDir.ts +755 -0
  192. package/tools/AgentTool/prompt.ts +287 -0
  193. package/tools/AgentTool/resumeAgent.ts +265 -0
  194. package/tools/AgentTool/runAgent.ts +973 -0
  195. package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  196. package/tools/AskUserQuestionTool/prompt.ts +44 -0
  197. package/tools/BashTool/BashTool.tsx +1144 -0
  198. package/tools/BashTool/BashToolResultMessage.tsx +191 -0
  199. package/tools/BashTool/UI.tsx +185 -0
  200. package/tools/BashTool/bashCommandHelpers.ts +265 -0
  201. package/tools/BashTool/bashPermissions.ts +2621 -0
  202. package/tools/BashTool/bashSecurity.ts +2592 -0
  203. package/tools/BashTool/commandSemantics.ts +140 -0
  204. package/tools/BashTool/commentLabel.ts +13 -0
  205. package/tools/BashTool/destructiveCommandWarning.ts +102 -0
  206. package/tools/BashTool/modeValidation.ts +115 -0
  207. package/tools/BashTool/pathValidation.ts +1303 -0
  208. package/tools/BashTool/prompt.ts +369 -0
  209. package/tools/BashTool/readOnlyValidation.ts +1990 -0
  210. package/tools/BashTool/sedEditParser.ts +322 -0
  211. package/tools/BashTool/sedValidation.ts +684 -0
  212. package/tools/BashTool/shouldUseSandbox.ts +153 -0
  213. package/tools/BashTool/toolName.ts +2 -0
  214. package/tools/BashTool/utils.ts +223 -0
  215. package/tools/BriefTool/BriefTool.ts +204 -0
  216. package/tools/BriefTool/UI.tsx +101 -0
  217. package/tools/BriefTool/attachments.ts +110 -0
  218. package/tools/BriefTool/prompt.ts +22 -0
  219. package/tools/BriefTool/upload.ts +174 -0
  220. package/tools/ConfigTool/ConfigTool.ts +467 -0
  221. package/tools/ConfigTool/UI.tsx +38 -0
  222. package/tools/ConfigTool/constants.ts +1 -0
  223. package/tools/ConfigTool/prompt.ts +93 -0
  224. package/tools/ConfigTool/supportedSettings.ts +211 -0
  225. package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  226. package/tools/EnterPlanModeTool/UI.tsx +33 -0
  227. package/tools/EnterPlanModeTool/constants.ts +1 -0
  228. package/tools/EnterPlanModeTool/prompt.ts +170 -0
  229. package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  230. package/tools/EnterWorktreeTool/UI.tsx +20 -0
  231. package/tools/EnterWorktreeTool/constants.ts +1 -0
  232. package/tools/EnterWorktreeTool/prompt.ts +30 -0
  233. package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  234. package/tools/ExitPlanModeTool/UI.tsx +82 -0
  235. package/tools/ExitPlanModeTool/constants.ts +2 -0
  236. package/tools/ExitPlanModeTool/prompt.ts +29 -0
  237. package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  238. package/tools/ExitWorktreeTool/UI.tsx +25 -0
  239. package/tools/ExitWorktreeTool/constants.ts +1 -0
  240. package/tools/ExitWorktreeTool/prompt.ts +32 -0
  241. package/tools/FileEditTool/FileEditTool.ts +625 -0
  242. package/tools/FileEditTool/UI.tsx +289 -0
  243. package/tools/FileEditTool/constants.ts +11 -0
  244. package/tools/FileEditTool/prompt.ts +28 -0
  245. package/tools/FileEditTool/types.ts +85 -0
  246. package/tools/FileEditTool/utils.ts +775 -0
  247. package/tools/FileReadTool/FileReadTool.ts +1183 -0
  248. package/tools/FileReadTool/UI.tsx +185 -0
  249. package/tools/FileReadTool/imageProcessor.ts +94 -0
  250. package/tools/FileReadTool/limits.ts +92 -0
  251. package/tools/FileReadTool/prompt.ts +49 -0
  252. package/tools/FileWriteTool/FileWriteTool.ts +434 -0
  253. package/tools/FileWriteTool/UI.tsx +405 -0
  254. package/tools/FileWriteTool/prompt.ts +18 -0
  255. package/tools/GlobTool/GlobTool.ts +198 -0
  256. package/tools/GlobTool/UI.tsx +63 -0
  257. package/tools/GlobTool/prompt.ts +7 -0
  258. package/tools/GrepTool/GrepTool.ts +577 -0
  259. package/tools/GrepTool/UI.tsx +201 -0
  260. package/tools/GrepTool/prompt.ts +18 -0
  261. package/tools/LSPTool/LSPTool.ts +860 -0
  262. package/tools/LSPTool/UI.tsx +228 -0
  263. package/tools/LSPTool/formatters.ts +592 -0
  264. package/tools/LSPTool/prompt.ts +21 -0
  265. package/tools/LSPTool/schemas.ts +215 -0
  266. package/tools/LSPTool/symbolContext.ts +90 -0
  267. package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  268. package/tools/ListMcpResourcesTool/UI.tsx +29 -0
  269. package/tools/ListMcpResourcesTool/prompt.ts +20 -0
  270. package/tools/MCPTool/MCPTool.ts +77 -0
  271. package/tools/MCPTool/UI.tsx +403 -0
  272. package/tools/MCPTool/classifyForCollapse.ts +604 -0
  273. package/tools/MCPTool/prompt.ts +3 -0
  274. package/tools/McpAuthTool/McpAuthTool.ts +215 -0
  275. package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  276. package/tools/NotebookEditTool/UI.tsx +93 -0
  277. package/tools/NotebookEditTool/constants.ts +2 -0
  278. package/tools/NotebookEditTool/prompt.ts +3 -0
  279. package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  280. package/tools/PowerShellTool/UI.tsx +131 -0
  281. package/tools/PowerShellTool/clmTypes.ts +211 -0
  282. package/tools/PowerShellTool/commandSemantics.ts +142 -0
  283. package/tools/PowerShellTool/commonParameters.ts +30 -0
  284. package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  285. package/tools/PowerShellTool/gitSafety.ts +176 -0
  286. package/tools/PowerShellTool/modeValidation.ts +404 -0
  287. package/tools/PowerShellTool/pathValidation.ts +2049 -0
  288. package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  289. package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  290. package/tools/PowerShellTool/prompt.ts +145 -0
  291. package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  292. package/tools/PowerShellTool/toolName.ts +2 -0
  293. package/tools/REPLTool/constants.ts +46 -0
  294. package/tools/REPLTool/primitiveTools.ts +39 -0
  295. package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  296. package/tools/ReadMcpResourceTool/UI.tsx +37 -0
  297. package/tools/ReadMcpResourceTool/prompt.ts +16 -0
  298. package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  299. package/tools/RemoteTriggerTool/UI.tsx +17 -0
  300. package/tools/RemoteTriggerTool/prompt.ts +15 -0
  301. package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  302. package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  303. package/tools/ScheduleCronTool/CronListTool.ts +97 -0
  304. package/tools/ScheduleCronTool/UI.tsx +60 -0
  305. package/tools/ScheduleCronTool/prompt.ts +135 -0
  306. package/tools/SendMessageTool/SendMessageTool.ts +917 -0
  307. package/tools/SendMessageTool/UI.tsx +31 -0
  308. package/tools/SendMessageTool/constants.ts +1 -0
  309. package/tools/SendMessageTool/prompt.ts +49 -0
  310. package/tools/SkillTool/SkillTool.ts +1108 -0
  311. package/tools/SkillTool/UI.tsx +128 -0
  312. package/tools/SkillTool/constants.ts +1 -0
  313. package/tools/SkillTool/prompt.ts +241 -0
  314. package/tools/SleepTool/prompt.ts +17 -0
  315. package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  316. package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  317. package/tools/TaskCreateTool/constants.ts +1 -0
  318. package/tools/TaskCreateTool/prompt.ts +56 -0
  319. package/tools/TaskGetTool/TaskGetTool.ts +128 -0
  320. package/tools/TaskGetTool/constants.ts +1 -0
  321. package/tools/TaskGetTool/prompt.ts +24 -0
  322. package/tools/TaskListTool/TaskListTool.ts +116 -0
  323. package/tools/TaskListTool/constants.ts +1 -0
  324. package/tools/TaskListTool/prompt.ts +49 -0
  325. package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  326. package/tools/TaskOutputTool/constants.ts +1 -0
  327. package/tools/TaskStopTool/TaskStopTool.ts +131 -0
  328. package/tools/TaskStopTool/UI.tsx +41 -0
  329. package/tools/TaskStopTool/prompt.ts +8 -0
  330. package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  331. package/tools/TaskUpdateTool/constants.ts +1 -0
  332. package/tools/TaskUpdateTool/prompt.ts +77 -0
  333. package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  334. package/tools/TeamCreateTool/UI.tsx +6 -0
  335. package/tools/TeamCreateTool/constants.ts +1 -0
  336. package/tools/TeamCreateTool/prompt.ts +113 -0
  337. package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  338. package/tools/TeamDeleteTool/UI.tsx +20 -0
  339. package/tools/TeamDeleteTool/constants.ts +1 -0
  340. package/tools/TeamDeleteTool/prompt.ts +16 -0
  341. package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  342. package/tools/TodoWriteTool/constants.ts +1 -0
  343. package/tools/TodoWriteTool/prompt.ts +184 -0
  344. package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  345. package/tools/ToolSearchTool/constants.ts +1 -0
  346. package/tools/ToolSearchTool/prompt.ts +121 -0
  347. package/tools/TungstenTool/TungstenTool.ts +4 -0
  348. package/tools/WebFetchTool/UI.tsx +72 -0
  349. package/tools/WebFetchTool/WebFetchTool.ts +318 -0
  350. package/tools/WebFetchTool/preapproved.ts +166 -0
  351. package/tools/WebFetchTool/prompt.ts +46 -0
  352. package/tools/WebFetchTool/utils.ts +530 -0
  353. package/tools/WebSearchTool/UI.tsx +101 -0
  354. package/tools/WebSearchTool/WebSearchTool.ts +435 -0
  355. package/tools/WebSearchTool/prompt.ts +34 -0
  356. package/tools/WorkflowTool/constants.ts +2 -0
  357. package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
  358. package/tools/XMemIngestTool/prompt.ts +13 -0
  359. package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
  360. package/tools/XMemRetrieveTool/prompt.ts +16 -0
  361. package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
  362. package/tools/XMemSearchTool/prompt.ts +11 -0
  363. package/tools/shared/gitOperationTracking.ts +277 -0
  364. package/tools/shared/spawnMultiAgent.ts +1093 -0
  365. package/tools/testing/TestingPermissionTool.tsx +74 -0
  366. package/tools/utils.ts +40 -0
  367. package/utils/CircularBuffer.ts +84 -0
  368. package/utils/Cursor.ts +1530 -0
  369. package/utils/QueryGuard.ts +121 -0
  370. package/utils/Shell.ts +474 -0
  371. package/utils/ShellCommand.ts +465 -0
  372. package/utils/abortController.ts +99 -0
  373. package/utils/activityManager.ts +164 -0
  374. package/utils/advisor.ts +145 -0
  375. package/utils/agentContext.ts +178 -0
  376. package/utils/agentId.ts +99 -0
  377. package/utils/agentSwarmsEnabled.ts +44 -0
  378. package/utils/agenticSessionSearch.ts +307 -0
  379. package/utils/analyzeContext.ts +1382 -0
  380. package/utils/ansiToPng.ts +334 -0
  381. package/utils/ansiToSvg.ts +272 -0
  382. package/utils/api.ts +718 -0
  383. package/utils/apiPreconnect.ts +71 -0
  384. package/utils/appleTerminalBackup.ts +124 -0
  385. package/utils/argumentSubstitution.ts +145 -0
  386. package/utils/array.ts +13 -0
  387. package/utils/asciicast.ts +239 -0
  388. package/utils/attachments.ts +4091 -0
  389. package/utils/attribution.ts +393 -0
  390. package/utils/auth.ts +2002 -0
  391. package/utils/authFileDescriptor.ts +196 -0
  392. package/utils/authPortable.ts +19 -0
  393. package/utils/autoModeDenials.ts +26 -0
  394. package/utils/autoRunIssue.tsx +122 -0
  395. package/utils/autoUpdater.ts +561 -0
  396. package/utils/aws.ts +74 -0
  397. package/utils/awsAuthStatusManager.ts +81 -0
  398. package/utils/axios.ts +8 -0
  399. package/utils/background/remote/preconditions.ts +235 -0
  400. package/utils/background/remote/remoteSession.ts +98 -0
  401. package/utils/backgroundHousekeeping.ts +94 -0
  402. package/utils/bash/ParsedCommand.ts +318 -0
  403. package/utils/bash/ShellSnapshot.ts +582 -0
  404. package/utils/bash/ast.ts +2679 -0
  405. package/utils/bash/bashParser.ts +4436 -0
  406. package/utils/bash/bashPipeCommand.ts +294 -0
  407. package/utils/bash/commands.ts +1339 -0
  408. package/utils/bash/heredoc.ts +733 -0
  409. package/utils/bash/parser.ts +230 -0
  410. package/utils/bash/prefix.ts +204 -0
  411. package/utils/bash/registry.ts +53 -0
  412. package/utils/bash/shellCompletion.ts +259 -0
  413. package/utils/bash/shellPrefix.ts +28 -0
  414. package/utils/bash/shellQuote.ts +304 -0
  415. package/utils/bash/shellQuoting.ts +128 -0
  416. package/utils/bash/specs/alias.ts +14 -0
  417. package/utils/bash/specs/index.ts +18 -0
  418. package/utils/bash/specs/nohup.ts +13 -0
  419. package/utils/bash/specs/pyright.ts +91 -0
  420. package/utils/bash/specs/sleep.ts +13 -0
  421. package/utils/bash/specs/srun.ts +31 -0
  422. package/utils/bash/specs/time.ts +13 -0
  423. package/utils/bash/specs/timeout.ts +20 -0
  424. package/utils/bash/treeSitterAnalysis.ts +506 -0
  425. package/utils/betas.ts +434 -0
  426. package/utils/billing.ts +78 -0
  427. package/utils/binaryCheck.ts +53 -0
  428. package/utils/browser.ts +68 -0
  429. package/utils/bufferedWriter.ts +100 -0
  430. package/utils/bundledMode.ts +22 -0
  431. package/utils/caCerts.ts +115 -0
  432. package/utils/caCertsConfig.ts +88 -0
  433. package/utils/cachePaths.ts +38 -0
  434. package/utils/classifierApprovals.ts +88 -0
  435. package/utils/classifierApprovalsHook.ts +17 -0
  436. package/utils/claudeCodeHints.ts +193 -0
  437. package/utils/claudeDesktop.ts +152 -0
  438. package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  439. package/utils/claudeInChrome/common.ts +540 -0
  440. package/utils/claudeInChrome/mcpServer.ts +292 -0
  441. package/utils/claudeInChrome/prompt.ts +83 -0
  442. package/utils/claudeInChrome/setup.ts +400 -0
  443. package/utils/claudeInChrome/setupPortable.ts +233 -0
  444. package/utils/claudeInChrome/toolRendering.tsx +262 -0
  445. package/utils/claudemd.ts +1479 -0
  446. package/utils/cleanup.ts +602 -0
  447. package/utils/cleanupRegistry.ts +25 -0
  448. package/utils/cliArgs.ts +60 -0
  449. package/utils/cliHighlight.ts +54 -0
  450. package/utils/codeIndexing.ts +206 -0
  451. package/utils/collapseBackgroundBashNotifications.ts +84 -0
  452. package/utils/collapseHookSummaries.ts +59 -0
  453. package/utils/collapseReadSearch.ts +1109 -0
  454. package/utils/collapseTeammateShutdowns.ts +55 -0
  455. package/utils/color-diff-mock.ts +27 -0
  456. package/utils/combinedAbortSignal.ts +47 -0
  457. package/utils/commandLifecycle.ts +21 -0
  458. package/utils/commitAttribution.ts +961 -0
  459. package/utils/completionCache.ts +166 -0
  460. package/utils/computerUse/appNames.ts +196 -0
  461. package/utils/computerUse/cleanup.ts +86 -0
  462. package/utils/computerUse/common.ts +61 -0
  463. package/utils/computerUse/computerUseLock.ts +215 -0
  464. package/utils/computerUse/drainRunLoop.ts +79 -0
  465. package/utils/computerUse/escHotkey.ts +54 -0
  466. package/utils/computerUse/executor.ts +658 -0
  467. package/utils/computerUse/gates.ts +72 -0
  468. package/utils/computerUse/hostAdapter.ts +69 -0
  469. package/utils/computerUse/inputLoader.ts +30 -0
  470. package/utils/computerUse/mcpServer.ts +106 -0
  471. package/utils/computerUse/setup.ts +53 -0
  472. package/utils/computerUse/swiftLoader.ts +23 -0
  473. package/utils/computerUse/toolRendering.tsx +125 -0
  474. package/utils/computerUse/wrapper.tsx +336 -0
  475. package/utils/concurrentSessions.ts +204 -0
  476. package/utils/config.ts +1817 -0
  477. package/utils/configConstants.ts +21 -0
  478. package/utils/contentArray.ts +51 -0
  479. package/utils/context.ts +221 -0
  480. package/utils/contextAnalysis.ts +272 -0
  481. package/utils/contextSuggestions.ts +235 -0
  482. package/utils/controlMessageCompat.ts +32 -0
  483. package/utils/conversationRecovery.ts +597 -0
  484. package/utils/cron.ts +308 -0
  485. package/utils/cronJitterConfig.ts +75 -0
  486. package/utils/cronScheduler.ts +565 -0
  487. package/utils/cronTasks.ts +458 -0
  488. package/utils/cronTasksLock.ts +195 -0
  489. package/utils/crossProjectResume.ts +75 -0
  490. package/utils/crypto.ts +13 -0
  491. package/utils/cwd.ts +32 -0
  492. package/utils/debug.ts +268 -0
  493. package/utils/debugFilter.ts +157 -0
  494. package/utils/deepLink/banner.ts +123 -0
  495. package/utils/deepLink/parseDeepLink.ts +170 -0
  496. package/utils/deepLink/protocolHandler.ts +136 -0
  497. package/utils/deepLink/registerProtocol.ts +348 -0
  498. package/utils/deepLink/terminalLauncher.ts +557 -0
  499. package/utils/deepLink/terminalPreference.ts +54 -0
  500. package/utils/desktopDeepLink.ts +236 -0
  501. package/utils/detectRepository.ts +178 -0
  502. package/utils/diagLogs.ts +94 -0
  503. package/utils/diff.ts +177 -0
  504. package/utils/directMemberMessage.ts +69 -0
  505. package/utils/displayTags.ts +51 -0
  506. package/utils/doctorContextWarnings.ts +265 -0
  507. package/utils/doctorDiagnostic.ts +625 -0
  508. package/utils/dxt/helpers.ts +88 -0
  509. package/utils/dxt/zip.ts +226 -0
  510. package/utils/earlyInput.ts +191 -0
  511. package/utils/editor.ts +183 -0
  512. package/utils/effort.ts +329 -0
  513. package/utils/embeddedTools.ts +29 -0
  514. package/utils/env.ts +347 -0
  515. package/utils/envDynamic.ts +151 -0
  516. package/utils/envUtils.ts +183 -0
  517. package/utils/envValidation.ts +38 -0
  518. package/utils/errorLogSink.ts +235 -0
  519. package/utils/errors.ts +238 -0
  520. package/utils/exampleCommands.ts +184 -0
  521. package/utils/execFileNoThrow.ts +150 -0
  522. package/utils/execFileNoThrowPortable.ts +89 -0
  523. package/utils/execSyncWrapper.ts +38 -0
  524. package/utils/exportRenderer.tsx +98 -0
  525. package/utils/extraUsage.ts +23 -0
  526. package/utils/fastMode.ts +532 -0
  527. package/utils/file.ts +584 -0
  528. package/utils/fileHistory.ts +1115 -0
  529. package/utils/fileOperationAnalytics.ts +71 -0
  530. package/utils/filePersistence/filePersistence.ts +287 -0
  531. package/utils/filePersistence/outputsScanner.ts +126 -0
  532. package/utils/fileRead.ts +102 -0
  533. package/utils/fileReadCache.ts +96 -0
  534. package/utils/fileStateCache.ts +142 -0
  535. package/utils/findExecutable.ts +17 -0
  536. package/utils/fingerprint.ts +76 -0
  537. package/utils/forkedAgent.ts +689 -0
  538. package/utils/format.ts +308 -0
  539. package/utils/formatBriefTimestamp.ts +81 -0
  540. package/utils/fpsTracker.ts +47 -0
  541. package/utils/frontmatterParser.ts +370 -0
  542. package/utils/fsOperations.ts +770 -0
  543. package/utils/fullscreen.ts +202 -0
  544. package/utils/generatedFiles.ts +136 -0
  545. package/utils/generators.ts +88 -0
  546. package/utils/genericProcessUtils.ts +184 -0
  547. package/utils/getWorktreePaths.ts +70 -0
  548. package/utils/getWorktreePathsPortable.ts +27 -0
  549. package/utils/ghPrStatus.ts +106 -0
  550. package/utils/git/gitConfigParser.ts +277 -0
  551. package/utils/git/gitFilesystem.ts +699 -0
  552. package/utils/git/gitignore.ts +99 -0
  553. package/utils/git.ts +926 -0
  554. package/utils/gitDiff.ts +532 -0
  555. package/utils/gitSettings.ts +18 -0
  556. package/utils/github/ghAuthStatus.ts +29 -0
  557. package/utils/githubRepoPathMapping.ts +162 -0
  558. package/utils/glob.ts +130 -0
  559. package/utils/gracefulShutdown.ts +529 -0
  560. package/utils/groupToolUses.ts +182 -0
  561. package/utils/handlePromptSubmit.ts +610 -0
  562. package/utils/hash.ts +46 -0
  563. package/utils/headlessProfiler.ts +178 -0
  564. package/utils/heapDumpService.ts +303 -0
  565. package/utils/heatmap.ts +198 -0
  566. package/utils/highlightMatch.tsx +28 -0
  567. package/utils/hooks/AsyncHookRegistry.ts +309 -0
  568. package/utils/hooks/apiQueryHookHelper.ts +141 -0
  569. package/utils/hooks/execAgentHook.ts +339 -0
  570. package/utils/hooks/execHttpHook.ts +242 -0
  571. package/utils/hooks/execPromptHook.ts +211 -0
  572. package/utils/hooks/fileChangedWatcher.ts +191 -0
  573. package/utils/hooks/hookEvents.ts +192 -0
  574. package/utils/hooks/hookHelpers.ts +83 -0
  575. package/utils/hooks/hooksConfigManager.ts +400 -0
  576. package/utils/hooks/hooksConfigSnapshot.ts +133 -0
  577. package/utils/hooks/hooksSettings.ts +271 -0
  578. package/utils/hooks/postSamplingHooks.ts +70 -0
  579. package/utils/hooks/registerFrontmatterHooks.ts +67 -0
  580. package/utils/hooks/registerSkillHooks.ts +64 -0
  581. package/utils/hooks/sessionHooks.ts +447 -0
  582. package/utils/hooks/skillImprovement.ts +267 -0
  583. package/utils/hooks/ssrfGuard.ts +294 -0
  584. package/utils/hooks.ts +5022 -0
  585. package/utils/horizontalScroll.ts +137 -0
  586. package/utils/http.ts +136 -0
  587. package/utils/hyperlink.ts +39 -0
  588. package/utils/iTermBackup.ts +73 -0
  589. package/utils/ide.ts +1494 -0
  590. package/utils/idePathConversion.ts +90 -0
  591. package/utils/idleTimeout.ts +53 -0
  592. package/utils/imagePaste.ts +416 -0
  593. package/utils/imageResizer.ts +880 -0
  594. package/utils/imageStore.ts +167 -0
  595. package/utils/imageValidation.ts +104 -0
  596. package/utils/immediateCommand.ts +15 -0
  597. package/utils/inProcessTeammateHelpers.ts +102 -0
  598. package/utils/ink.ts +26 -0
  599. package/utils/intl.ts +94 -0
  600. package/utils/jetbrains.ts +191 -0
  601. package/utils/json.ts +277 -0
  602. package/utils/jsonRead.ts +16 -0
  603. package/utils/keyboardShortcuts.ts +14 -0
  604. package/utils/lazySchema.ts +8 -0
  605. package/utils/listSessionsImpl.ts +454 -0
  606. package/utils/localInstaller.ts +162 -0
  607. package/utils/lockfile.ts +43 -0
  608. package/utils/log.ts +362 -0
  609. package/utils/logoV2Utils.ts +347 -0
  610. package/utils/mailbox.ts +73 -0
  611. package/utils/managedEnv.ts +199 -0
  612. package/utils/managedEnvConstants.ts +191 -0
  613. package/utils/markdown.ts +381 -0
  614. package/utils/markdownConfigLoader.ts +600 -0
  615. package/utils/mcp/dateTimeParser.ts +121 -0
  616. package/utils/mcp/elicitationValidation.ts +336 -0
  617. package/utils/mcpInstructionsDelta.ts +130 -0
  618. package/utils/mcpOutputStorage.ts +189 -0
  619. package/utils/mcpValidation.ts +208 -0
  620. package/utils/mcpWebSocketTransport.ts +200 -0
  621. package/utils/memoize.ts +269 -0
  622. package/utils/memory/types.ts +12 -0
  623. package/utils/memory/versions.ts +8 -0
  624. package/utils/memoryFileDetection.ts +289 -0
  625. package/utils/messagePredicates.ts +8 -0
  626. package/utils/messageQueueManager.ts +547 -0
  627. package/utils/messages/mappers.ts +290 -0
  628. package/utils/messages/systemInit.ts +96 -0
  629. package/utils/messages.ts +5520 -0
  630. package/utils/model/agent.ts +157 -0
  631. package/utils/model/aliases.ts +35 -0
  632. package/utils/model/antModels.ts +64 -0
  633. package/utils/model/bedrock.ts +265 -0
  634. package/utils/model/check1mAccess.ts +72 -0
  635. package/utils/model/configs.ts +158 -0
  636. package/utils/model/contextWindowUpgradeCheck.ts +47 -0
  637. package/utils/model/deprecation.ts +101 -0
  638. package/utils/model/model.ts +654 -0
  639. package/utils/model/modelAllowlist.ts +170 -0
  640. package/utils/model/modelCapabilities.ts +118 -0
  641. package/utils/model/modelOptions.ts +589 -0
  642. package/utils/model/modelStrings.ts +170 -0
  643. package/utils/model/modelSupportOverrides.ts +50 -0
  644. package/utils/model/providers.ts +42 -0
  645. package/utils/model/validateModel.ts +159 -0
  646. package/utils/modelCost.ts +231 -0
  647. package/utils/modifiers.ts +36 -0
  648. package/utils/mtls.ts +179 -0
  649. package/utils/nativeInstaller/download.ts +523 -0
  650. package/utils/nativeInstaller/index.ts +18 -0
  651. package/utils/nativeInstaller/installer.ts +1708 -0
  652. package/utils/nativeInstaller/packageManagers.ts +336 -0
  653. package/utils/nativeInstaller/pidLock.ts +433 -0
  654. package/utils/notebook.ts +224 -0
  655. package/utils/objectGroupBy.ts +18 -0
  656. package/utils/pasteStore.ts +104 -0
  657. package/utils/path.ts +155 -0
  658. package/utils/pdf.ts +300 -0
  659. package/utils/pdfUtils.ts +70 -0
  660. package/utils/peerAddress.ts +21 -0
  661. package/utils/permissions/PermissionMode.ts +141 -0
  662. package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  663. package/utils/permissions/PermissionResult.ts +35 -0
  664. package/utils/permissions/PermissionRule.ts +40 -0
  665. package/utils/permissions/PermissionUpdate.ts +389 -0
  666. package/utils/permissions/PermissionUpdateSchema.ts +78 -0
  667. package/utils/permissions/autoModeState.ts +39 -0
  668. package/utils/permissions/bashClassifier.ts +61 -0
  669. package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  670. package/utils/permissions/classifierDecision.ts +98 -0
  671. package/utils/permissions/classifierShared.ts +39 -0
  672. package/utils/permissions/dangerousPatterns.ts +80 -0
  673. package/utils/permissions/denialTracking.ts +45 -0
  674. package/utils/permissions/filesystem.ts +1777 -0
  675. package/utils/permissions/getNextPermissionMode.ts +101 -0
  676. package/utils/permissions/pathValidation.ts +485 -0
  677. package/utils/permissions/permissionExplainer.ts +250 -0
  678. package/utils/permissions/permissionRuleParser.ts +198 -0
  679. package/utils/permissions/permissionSetup.ts +1532 -0
  680. package/utils/permissions/permissions.ts +1486 -0
  681. package/utils/permissions/permissionsLoader.ts +296 -0
  682. package/utils/permissions/shadowedRuleDetection.ts +234 -0
  683. package/utils/permissions/shellRuleMatching.ts +228 -0
  684. package/utils/permissions/yoloClassifier.ts +1495 -0
  685. package/utils/planModeV2.ts +95 -0
  686. package/utils/plans.ts +397 -0
  687. package/utils/platform.ts +150 -0
  688. package/utils/plugins/addDirPluginSettings.ts +71 -0
  689. package/utils/plugins/cacheUtils.ts +196 -0
  690. package/utils/plugins/dependencyResolver.ts +305 -0
  691. package/utils/plugins/fetchTelemetry.ts +135 -0
  692. package/utils/plugins/gitAvailability.ts +69 -0
  693. package/utils/plugins/headlessPluginInstall.ts +174 -0
  694. package/utils/plugins/hintRecommendation.ts +164 -0
  695. package/utils/plugins/installCounts.ts +292 -0
  696. package/utils/plugins/installedPluginsManager.ts +1268 -0
  697. package/utils/plugins/loadPluginAgents.ts +348 -0
  698. package/utils/plugins/loadPluginCommands.ts +946 -0
  699. package/utils/plugins/loadPluginHooks.ts +287 -0
  700. package/utils/plugins/loadPluginOutputStyles.ts +178 -0
  701. package/utils/plugins/lspPluginIntegration.ts +387 -0
  702. package/utils/plugins/lspRecommendation.ts +374 -0
  703. package/utils/plugins/managedPlugins.ts +27 -0
  704. package/utils/plugins/marketplaceHelpers.ts +592 -0
  705. package/utils/plugins/marketplaceManager.ts +2643 -0
  706. package/utils/plugins/mcpPluginIntegration.ts +634 -0
  707. package/utils/plugins/mcpbHandler.ts +968 -0
  708. package/utils/plugins/officialMarketplace.ts +25 -0
  709. package/utils/plugins/officialMarketplaceGcs.ts +216 -0
  710. package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  711. package/utils/plugins/orphanedPluginFilter.ts +114 -0
  712. package/utils/plugins/parseMarketplaceInput.ts +162 -0
  713. package/utils/plugins/performStartupChecks.tsx +70 -0
  714. package/utils/plugins/pluginAutoupdate.ts +284 -0
  715. package/utils/plugins/pluginBlocklist.ts +127 -0
  716. package/utils/plugins/pluginDirectories.ts +178 -0
  717. package/utils/plugins/pluginFlagging.ts +208 -0
  718. package/utils/plugins/pluginIdentifier.ts +123 -0
  719. package/utils/plugins/pluginInstallationHelpers.ts +595 -0
  720. package/utils/plugins/pluginLoader.ts +3302 -0
  721. package/utils/plugins/pluginOptionsStorage.ts +400 -0
  722. package/utils/plugins/pluginPolicy.ts +20 -0
  723. package/utils/plugins/pluginStartupCheck.ts +341 -0
  724. package/utils/plugins/pluginVersioning.ts +157 -0
  725. package/utils/plugins/reconciler.ts +265 -0
  726. package/utils/plugins/refresh.ts +215 -0
  727. package/utils/plugins/schemas.ts +1681 -0
  728. package/utils/plugins/validatePlugin.ts +903 -0
  729. package/utils/plugins/walkPluginMarkdown.ts +69 -0
  730. package/utils/plugins/zipCache.ts +406 -0
  731. package/utils/plugins/zipCacheAdapters.ts +164 -0
  732. package/utils/powershell/dangerousCmdlets.ts +185 -0
  733. package/utils/powershell/parser.ts +1804 -0
  734. package/utils/powershell/staticPrefix.ts +316 -0
  735. package/utils/preflightChecks.tsx +151 -0
  736. package/utils/privacyLevel.ts +55 -0
  737. package/utils/process.ts +68 -0
  738. package/utils/processUserInput/processBashCommand.tsx +140 -0
  739. package/utils/processUserInput/processSlashCommand.tsx +922 -0
  740. package/utils/processUserInput/processTextPrompt.ts +100 -0
  741. package/utils/processUserInput/processUserInput.ts +605 -0
  742. package/utils/profilerBase.ts +46 -0
  743. package/utils/promptCategory.ts +49 -0
  744. package/utils/promptEditor.ts +188 -0
  745. package/utils/promptShellExecution.ts +183 -0
  746. package/utils/proxy.ts +426 -0
  747. package/utils/queryContext.ts +179 -0
  748. package/utils/queryHelpers.ts +552 -0
  749. package/utils/queryProfiler.ts +301 -0
  750. package/utils/queueProcessor.ts +95 -0
  751. package/utils/readEditContext.ts +227 -0
  752. package/utils/readFileInRange.ts +383 -0
  753. package/utils/releaseNotes.ts +360 -0
  754. package/utils/renderOptions.ts +113 -0
  755. package/utils/ripgrep.ts +679 -0
  756. package/utils/sandbox/sandbox-adapter.ts +985 -0
  757. package/utils/sandbox/sandbox-ui-utils.ts +12 -0
  758. package/utils/sanitization.ts +91 -0
  759. package/utils/screenshotClipboard.ts +121 -0
  760. package/utils/sdkEventQueue.ts +134 -0
  761. package/utils/secureStorage/fallbackStorage.ts +70 -0
  762. package/utils/secureStorage/index.ts +17 -0
  763. package/utils/secureStorage/keychainPrefetch.ts +116 -0
  764. package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  765. package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  766. package/utils/secureStorage/plainTextStorage.ts +84 -0
  767. package/utils/semanticBoolean.ts +29 -0
  768. package/utils/semanticNumber.ts +36 -0
  769. package/utils/semver.ts +59 -0
  770. package/utils/sequential.ts +56 -0
  771. package/utils/sessionActivity.ts +133 -0
  772. package/utils/sessionEnvVars.ts +22 -0
  773. package/utils/sessionEnvironment.ts +166 -0
  774. package/utils/sessionFileAccessHooks.ts +250 -0
  775. package/utils/sessionIngressAuth.ts +140 -0
  776. package/utils/sessionRestore.ts +551 -0
  777. package/utils/sessionStart.ts +232 -0
  778. package/utils/sessionState.ts +150 -0
  779. package/utils/sessionStorage.ts +5105 -0
  780. package/utils/sessionStoragePortable.ts +793 -0
  781. package/utils/sessionTitle.ts +129 -0
  782. package/utils/sessionUrl.ts +64 -0
  783. package/utils/set.ts +53 -0
  784. package/utils/settings/allErrors.ts +32 -0
  785. package/utils/settings/applySettingsChange.ts +92 -0
  786. package/utils/settings/changeDetector.ts +488 -0
  787. package/utils/settings/constants.ts +202 -0
  788. package/utils/settings/internalWrites.ts +37 -0
  789. package/utils/settings/managedPath.ts +34 -0
  790. package/utils/settings/mdm/constants.ts +81 -0
  791. package/utils/settings/mdm/rawRead.ts +130 -0
  792. package/utils/settings/mdm/settings.ts +316 -0
  793. package/utils/settings/permissionValidation.ts +262 -0
  794. package/utils/settings/pluginOnlyPolicy.ts +60 -0
  795. package/utils/settings/schemaOutput.ts +8 -0
  796. package/utils/settings/settings.ts +1015 -0
  797. package/utils/settings/settingsCache.ts +80 -0
  798. package/utils/settings/toolValidationConfig.ts +103 -0
  799. package/utils/settings/types.ts +1149 -0
  800. package/utils/settings/validateEditTool.ts +45 -0
  801. package/utils/settings/validation.ts +265 -0
  802. package/utils/settings/validationTips.ts +164 -0
  803. package/utils/shell/bashProvider.ts +255 -0
  804. package/utils/shell/outputLimits.ts +14 -0
  805. package/utils/shell/powershellDetection.ts +107 -0
  806. package/utils/shell/powershellProvider.ts +123 -0
  807. package/utils/shell/prefix.ts +367 -0
  808. package/utils/shell/readOnlyCommandValidation.ts +1893 -0
  809. package/utils/shell/resolveDefaultShell.ts +14 -0
  810. package/utils/shell/shellProvider.ts +33 -0
  811. package/utils/shell/shellToolUtils.ts +22 -0
  812. package/utils/shell/specPrefix.ts +241 -0
  813. package/utils/shellConfig.ts +167 -0
  814. package/utils/sideQuery.ts +222 -0
  815. package/utils/sideQuestion.ts +155 -0
  816. package/utils/signal.ts +43 -0
  817. package/utils/sinks.ts +16 -0
  818. package/utils/skills/skillChangeDetector.ts +311 -0
  819. package/utils/slashCommandParsing.ts +60 -0
  820. package/utils/sleep.ts +84 -0
  821. package/utils/sliceAnsi.ts +91 -0
  822. package/utils/slowOperations.ts +286 -0
  823. package/utils/standaloneAgent.ts +23 -0
  824. package/utils/startupProfiler.ts +194 -0
  825. package/utils/staticRender.tsx +116 -0
  826. package/utils/stats.ts +1061 -0
  827. package/utils/statsCache.ts +434 -0
  828. package/utils/status.tsx +362 -0
  829. package/utils/statusNoticeDefinitions.tsx +198 -0
  830. package/utils/statusNoticeHelpers.ts +20 -0
  831. package/utils/stream.ts +76 -0
  832. package/utils/streamJsonStdoutGuard.ts +123 -0
  833. package/utils/streamlinedTransform.ts +201 -0
  834. package/utils/stringUtils.ts +235 -0
  835. package/utils/subprocessEnv.ts +99 -0
  836. package/utils/suggestions/commandSuggestions.ts +567 -0
  837. package/utils/suggestions/directoryCompletion.ts +263 -0
  838. package/utils/suggestions/shellHistoryCompletion.ts +119 -0
  839. package/utils/suggestions/skillUsageTracking.ts +55 -0
  840. package/utils/suggestions/slackChannelSuggestions.ts +209 -0
  841. package/utils/swarm/It2SetupPrompt.tsx +380 -0
  842. package/utils/swarm/backends/ITermBackend.ts +370 -0
  843. package/utils/swarm/backends/InProcessBackend.ts +339 -0
  844. package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  845. package/utils/swarm/backends/TmuxBackend.ts +764 -0
  846. package/utils/swarm/backends/detection.ts +128 -0
  847. package/utils/swarm/backends/it2Setup.ts +245 -0
  848. package/utils/swarm/backends/registry.ts +464 -0
  849. package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  850. package/utils/swarm/backends/types.ts +311 -0
  851. package/utils/swarm/constants.ts +33 -0
  852. package/utils/swarm/inProcessRunner.ts +1552 -0
  853. package/utils/swarm/leaderPermissionBridge.ts +54 -0
  854. package/utils/swarm/permissionSync.ts +928 -0
  855. package/utils/swarm/reconnection.ts +119 -0
  856. package/utils/swarm/spawnInProcess.ts +328 -0
  857. package/utils/swarm/spawnUtils.ts +146 -0
  858. package/utils/swarm/teamHelpers.ts +683 -0
  859. package/utils/swarm/teammateInit.ts +129 -0
  860. package/utils/swarm/teammateLayoutManager.ts +107 -0
  861. package/utils/swarm/teammateModel.ts +10 -0
  862. package/utils/swarm/teammatePromptAddendum.ts +18 -0
  863. package/utils/systemDirectories.ts +74 -0
  864. package/utils/systemPrompt.ts +123 -0
  865. package/utils/systemPromptType.ts +14 -0
  866. package/utils/systemTheme.ts +119 -0
  867. package/utils/taggedId.ts +54 -0
  868. package/utils/task/TaskOutput.ts +390 -0
  869. package/utils/task/diskOutput.ts +451 -0
  870. package/utils/task/framework.ts +308 -0
  871. package/utils/task/outputFormatting.ts +38 -0
  872. package/utils/task/sdkProgress.ts +36 -0
  873. package/utils/tasks.ts +862 -0
  874. package/utils/teamDiscovery.ts +81 -0
  875. package/utils/teamMemoryOps.ts +88 -0
  876. package/utils/teammate.ts +292 -0
  877. package/utils/teammateContext.ts +96 -0
  878. package/utils/teammateMailbox.ts +1183 -0
  879. package/utils/telemetry/betaSessionTracing.ts +491 -0
  880. package/utils/telemetry/bigqueryExporter.ts +252 -0
  881. package/utils/telemetry/events.ts +75 -0
  882. package/utils/telemetry/instrumentation.ts +825 -0
  883. package/utils/telemetry/logger.ts +26 -0
  884. package/utils/telemetry/perfettoTracing.ts +1120 -0
  885. package/utils/telemetry/pluginTelemetry.ts +289 -0
  886. package/utils/telemetry/sessionTracing.ts +927 -0
  887. package/utils/telemetry/skillLoadedEvent.ts +39 -0
  888. package/utils/telemetryAttributes.ts +71 -0
  889. package/utils/teleport/api.ts +466 -0
  890. package/utils/teleport/environmentSelection.ts +77 -0
  891. package/utils/teleport/environments.ts +120 -0
  892. package/utils/teleport/gitBundle.ts +292 -0
  893. package/utils/teleport.tsx +1226 -0
  894. package/utils/tempfile.ts +31 -0
  895. package/utils/terminal.ts +131 -0
  896. package/utils/terminalPanel.ts +191 -0
  897. package/utils/textHighlighting.ts +166 -0
  898. package/utils/theme.ts +639 -0
  899. package/utils/thinking.ts +162 -0
  900. package/utils/timeouts.ts +39 -0
  901. package/utils/tmuxSocket.ts +427 -0
  902. package/utils/todo/types.ts +18 -0
  903. package/utils/tokenBudget.ts +73 -0
  904. package/utils/tokens.ts +261 -0
  905. package/utils/toolErrors.ts +132 -0
  906. package/utils/toolPool.ts +79 -0
  907. package/utils/toolResultStorage.ts +1040 -0
  908. package/utils/toolSchemaCache.ts +26 -0
  909. package/utils/toolSearch.ts +756 -0
  910. package/utils/transcriptSearch.ts +202 -0
  911. package/utils/treeify.ts +170 -0
  912. package/utils/truncate.ts +179 -0
  913. package/utils/ultraplan/ccrSession.ts +349 -0
  914. package/utils/ultraplan/keyword.ts +127 -0
  915. package/utils/ultraplan/prompt.txt +1 -0
  916. package/utils/unaryLogging.ts +39 -0
  917. package/utils/undercover.ts +89 -0
  918. package/utils/user.ts +194 -0
  919. package/utils/userAgent.ts +10 -0
  920. package/utils/userPromptKeywords.ts +27 -0
  921. package/utils/uuid.ts +27 -0
  922. package/utils/warningHandler.ts +121 -0
  923. package/utils/which.ts +82 -0
  924. package/utils/windowsPaths.ts +173 -0
  925. package/utils/withResolvers.ts +13 -0
  926. package/utils/words.ts +800 -0
  927. package/utils/workloadContext.ts +57 -0
  928. package/utils/worktree.ts +1519 -0
  929. package/utils/worktreeModeEnabled.ts +11 -0
  930. package/utils/xdg.ts +65 -0
  931. package/utils/xmem.ts +6 -0
  932. package/utils/xml.ts +16 -0
  933. package/utils/yaml.ts +15 -0
  934. 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
+ }