@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,515 @@
1
+ import { APIError } from '@anthropic-ai/sdk'
2
+ import type { MessageParam } from '@anthropic-ai/sdk/resources/index.mjs'
3
+ import isEqual from 'lodash-es/isEqual.js'
4
+ import { getIsNonInteractiveSession } from '../bootstrap/state.js'
5
+ import { isClaudeAISubscriber } from '../utils/auth.js'
6
+ import { getModelBetas } from '../utils/betas.js'
7
+ import { getGlobalConfig, saveGlobalConfig } from '../utils/config.js'
8
+ import { logError } from '../utils/log.js'
9
+ import { getSmallFastModel } from '../utils/model/model.js'
10
+ import { isEssentialTrafficOnly } from '../utils/privacyLevel.js'
11
+ import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from './analytics/index.js'
12
+ import { logEvent } from './analytics/index.js'
13
+ import { getAPIMetadata } from './api/claude.js'
14
+ import { getAnthropicClient } from './api/client.js'
15
+ import {
16
+ processRateLimitHeaders,
17
+ shouldProcessRateLimits,
18
+ } from './rateLimitMocking.js'
19
+
20
+ // Re-export message functions from centralized location
21
+ export {
22
+ getRateLimitErrorMessage,
23
+ getRateLimitWarning,
24
+ getUsingOverageText,
25
+ } from './rateLimitMessages.js'
26
+
27
+ type QuotaStatus = 'allowed' | 'allowed_warning' | 'rejected'
28
+
29
+ type RateLimitType =
30
+ | 'five_hour'
31
+ | 'seven_day'
32
+ | 'seven_day_opus'
33
+ | 'seven_day_sonnet'
34
+ | 'overage'
35
+
36
+ export type { RateLimitType }
37
+
38
+ type EarlyWarningThreshold = {
39
+ utilization: number // 0-1 scale: trigger warning when usage >= this
40
+ timePct: number // 0-1 scale: trigger warning when time elapsed <= this
41
+ }
42
+
43
+ type EarlyWarningConfig = {
44
+ rateLimitType: RateLimitType
45
+ claimAbbrev: '5h' | '7d'
46
+ windowSeconds: number
47
+ thresholds: EarlyWarningThreshold[]
48
+ }
49
+
50
+ // Early warning configurations in priority order (checked first to last)
51
+ // Used as fallback when server doesn't send surpassed-threshold header
52
+ // Warns users when they're consuming quota faster than the time window allows
53
+ const EARLY_WARNING_CONFIGS: EarlyWarningConfig[] = [
54
+ {
55
+ rateLimitType: 'five_hour',
56
+ claimAbbrev: '5h',
57
+ windowSeconds: 5 * 60 * 60,
58
+ thresholds: [{ utilization: 0.9, timePct: 0.72 }],
59
+ },
60
+ {
61
+ rateLimitType: 'seven_day',
62
+ claimAbbrev: '7d',
63
+ windowSeconds: 7 * 24 * 60 * 60,
64
+ thresholds: [
65
+ { utilization: 0.75, timePct: 0.6 },
66
+ { utilization: 0.5, timePct: 0.35 },
67
+ { utilization: 0.25, timePct: 0.15 },
68
+ ],
69
+ },
70
+ ]
71
+
72
+ // Maps claim abbreviations to rate limit types for header-based detection
73
+ const EARLY_WARNING_CLAIM_MAP: Record<string, RateLimitType> = {
74
+ '5h': 'five_hour',
75
+ '7d': 'seven_day',
76
+ overage: 'overage',
77
+ }
78
+
79
+ const RATE_LIMIT_DISPLAY_NAMES: Record<RateLimitType, string> = {
80
+ five_hour: 'session limit',
81
+ seven_day: 'weekly limit',
82
+ seven_day_opus: 'Opus limit',
83
+ seven_day_sonnet: 'Sonnet limit',
84
+ overage: 'extra usage limit',
85
+ }
86
+
87
+ export function getRateLimitDisplayName(type: RateLimitType): string {
88
+ return RATE_LIMIT_DISPLAY_NAMES[type] || type
89
+ }
90
+
91
+ /**
92
+ * Calculate what fraction of a time window has elapsed.
93
+ * Used for time-relative early warning fallback.
94
+ * @param resetsAt - Unix epoch timestamp in seconds when the limit resets
95
+ * @param windowSeconds - Duration of the window in seconds
96
+ * @returns fraction (0-1) of the window that has elapsed
97
+ */
98
+ function computeTimeProgress(resetsAt: number, windowSeconds: number): number {
99
+ const nowSeconds = Date.now() / 1000
100
+ const windowStart = resetsAt - windowSeconds
101
+ const elapsed = nowSeconds - windowStart
102
+ return Math.max(0, Math.min(1, elapsed / windowSeconds))
103
+ }
104
+
105
+ // Reason why overage is disabled/rejected
106
+ // These values come from the API's unified limiter
107
+ export type OverageDisabledReason =
108
+ | 'overage_not_provisioned' // Overage is not provisioned for this org or seat tier
109
+ | 'org_level_disabled' // Organization doesn't have overage enabled
110
+ | 'org_level_disabled_until' // Organization overage temporarily disabled
111
+ | 'out_of_credits' // Organization has insufficient credits
112
+ | 'seat_tier_level_disabled' // Seat tier doesn't have overage enabled
113
+ | 'member_level_disabled' // Account specifically has overage disabled
114
+ | 'seat_tier_zero_credit_limit' // Seat tier has a zero credit limit
115
+ | 'group_zero_credit_limit' // Resolved group limit has a zero credit limit
116
+ | 'member_zero_credit_limit' // Account has a zero credit limit
117
+ | 'org_service_level_disabled' // Org service specifically has overage disabled
118
+ | 'org_service_zero_credit_limit' // Org service has a zero credit limit
119
+ | 'no_limits_configured' // No overage limits configured for account
120
+ | 'unknown' // Unknown reason, should not happen
121
+
122
+ export type ClaudeAILimits = {
123
+ status: QuotaStatus
124
+ // unifiedRateLimitFallbackAvailable is currently used to warn users that set
125
+ // their model to Opus whenever they are about to run out of quota. It does
126
+ // not change the actual model that is used.
127
+ unifiedRateLimitFallbackAvailable: boolean
128
+ resetsAt?: number
129
+ rateLimitType?: RateLimitType
130
+ utilization?: number
131
+ overageStatus?: QuotaStatus
132
+ overageResetsAt?: number
133
+ overageDisabledReason?: OverageDisabledReason
134
+ isUsingOverage?: boolean
135
+ surpassedThreshold?: number
136
+ }
137
+
138
+ // Exported for testing only
139
+ export let currentLimits: ClaudeAILimits = {
140
+ status: 'allowed',
141
+ unifiedRateLimitFallbackAvailable: false,
142
+ isUsingOverage: false,
143
+ }
144
+
145
+ /**
146
+ * Raw per-window utilization from response headers, tracked on every API
147
+ * response (unlike currentLimits.utilization which is only set when a warning
148
+ * threshold fires). Exposed to statusline scripts via getRawUtilization().
149
+ */
150
+ type RawWindowUtilization = {
151
+ utilization: number // 0-1 fraction
152
+ resets_at: number // unix epoch seconds
153
+ }
154
+ type RawUtilization = {
155
+ five_hour?: RawWindowUtilization
156
+ seven_day?: RawWindowUtilization
157
+ }
158
+ let rawUtilization: RawUtilization = {}
159
+
160
+ export function getRawUtilization(): RawUtilization {
161
+ return rawUtilization
162
+ }
163
+
164
+ function extractRawUtilization(headers: globalThis.Headers): RawUtilization {
165
+ const result: RawUtilization = {}
166
+ for (const [key, abbrev] of [
167
+ ['five_hour', '5h'],
168
+ ['seven_day', '7d'],
169
+ ] as const) {
170
+ const util = headers.get(
171
+ `anthropic-ratelimit-unified-${abbrev}-utilization`,
172
+ )
173
+ const reset = headers.get(`anthropic-ratelimit-unified-${abbrev}-reset`)
174
+ if (util !== null && reset !== null) {
175
+ result[key] = { utilization: Number(util), resets_at: Number(reset) }
176
+ }
177
+ }
178
+ return result
179
+ }
180
+
181
+ type StatusChangeListener = (limits: ClaudeAILimits) => void
182
+ export const statusListeners: Set<StatusChangeListener> = new Set()
183
+
184
+ export function emitStatusChange(limits: ClaudeAILimits) {
185
+ currentLimits = limits
186
+ statusListeners.forEach(listener => listener(limits))
187
+ const hoursTillReset = Math.round(
188
+ (limits.resetsAt ? limits.resetsAt - Date.now() / 1000 : 0) / (60 * 60),
189
+ )
190
+
191
+ logEvent('tengu_claudeai_limits_status_changed', {
192
+ status:
193
+ limits.status as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
194
+ unifiedRateLimitFallbackAvailable: limits.unifiedRateLimitFallbackAvailable,
195
+ hoursTillReset,
196
+ })
197
+ }
198
+
199
+ async function makeTestQuery() {
200
+ const model = getSmallFastModel()
201
+ const anthropic = await getAnthropicClient({
202
+ maxRetries: 0,
203
+ model,
204
+ source: 'quota_check',
205
+ })
206
+ const messages: MessageParam[] = [{ role: 'user', content: 'quota' }]
207
+ const betas = getModelBetas(model)
208
+ // biome-ignore lint/plugin: quota check needs raw response access via asResponse()
209
+ return anthropic.beta.messages
210
+ .create({
211
+ model,
212
+ max_tokens: 1,
213
+ messages,
214
+ metadata: getAPIMetadata(),
215
+ ...(betas.length > 0 ? { betas } : {}),
216
+ })
217
+ .asResponse()
218
+ }
219
+
220
+ export async function checkQuotaStatus(): Promise<void> {
221
+ // Skip network requests if nonessential traffic is disabled
222
+ if (isEssentialTrafficOnly()) {
223
+ return
224
+ }
225
+
226
+ // Check if we should process rate limits (real subscriber or mock testing)
227
+ if (!shouldProcessRateLimits(isClaudeAISubscriber())) {
228
+ return
229
+ }
230
+
231
+ // In non-interactive mode (-p), the real query follows immediately and
232
+ // extractQuotaStatusFromHeaders() will update limits from its response
233
+ // headers (claude.ts), so skip this pre-check API call.
234
+ if (getIsNonInteractiveSession()) {
235
+ return
236
+ }
237
+
238
+ try {
239
+ // Make a minimal request to check quota
240
+ const raw = await makeTestQuery()
241
+
242
+ // Update limits based on the response
243
+ extractQuotaStatusFromHeaders(raw.headers)
244
+ } catch (error) {
245
+ if (error instanceof APIError) {
246
+ extractQuotaStatusFromError(error)
247
+ }
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Check if early warning should be triggered based on surpassed-threshold header.
253
+ * Returns ClaudeAILimits if a threshold was surpassed, null otherwise.
254
+ */
255
+ function getHeaderBasedEarlyWarning(
256
+ headers: globalThis.Headers,
257
+ unifiedRateLimitFallbackAvailable: boolean,
258
+ ): ClaudeAILimits | null {
259
+ // Check each claim type for surpassed threshold header
260
+ for (const [claimAbbrev, rateLimitType] of Object.entries(
261
+ EARLY_WARNING_CLAIM_MAP,
262
+ )) {
263
+ const surpassedThreshold = headers.get(
264
+ `anthropic-ratelimit-unified-${claimAbbrev}-surpassed-threshold`,
265
+ )
266
+
267
+ // If threshold header is present, user has crossed a warning threshold
268
+ if (surpassedThreshold !== null) {
269
+ const utilizationHeader = headers.get(
270
+ `anthropic-ratelimit-unified-${claimAbbrev}-utilization`,
271
+ )
272
+ const resetHeader = headers.get(
273
+ `anthropic-ratelimit-unified-${claimAbbrev}-reset`,
274
+ )
275
+
276
+ const utilization = utilizationHeader
277
+ ? Number(utilizationHeader)
278
+ : undefined
279
+ const resetsAt = resetHeader ? Number(resetHeader) : undefined
280
+
281
+ return {
282
+ status: 'allowed_warning',
283
+ resetsAt,
284
+ rateLimitType: rateLimitType as RateLimitType,
285
+ utilization,
286
+ unifiedRateLimitFallbackAvailable,
287
+ isUsingOverage: false,
288
+ surpassedThreshold: Number(surpassedThreshold),
289
+ }
290
+ }
291
+ }
292
+
293
+ return null
294
+ }
295
+
296
+ /**
297
+ * Check if time-relative early warning should be triggered for a rate limit type.
298
+ * Fallback when server doesn't send surpassed-threshold header.
299
+ * Returns ClaudeAILimits if thresholds are exceeded, null otherwise.
300
+ */
301
+ function getTimeRelativeEarlyWarning(
302
+ headers: globalThis.Headers,
303
+ config: EarlyWarningConfig,
304
+ unifiedRateLimitFallbackAvailable: boolean,
305
+ ): ClaudeAILimits | null {
306
+ const { rateLimitType, claimAbbrev, windowSeconds, thresholds } = config
307
+
308
+ const utilizationHeader = headers.get(
309
+ `anthropic-ratelimit-unified-${claimAbbrev}-utilization`,
310
+ )
311
+ const resetHeader = headers.get(
312
+ `anthropic-ratelimit-unified-${claimAbbrev}-reset`,
313
+ )
314
+
315
+ if (utilizationHeader === null || resetHeader === null) {
316
+ return null
317
+ }
318
+
319
+ const utilization = Number(utilizationHeader)
320
+ const resetsAt = Number(resetHeader)
321
+ const timeProgress = computeTimeProgress(resetsAt, windowSeconds)
322
+
323
+ // Check if any threshold is exceeded: high usage early in the window
324
+ const shouldWarn = thresholds.some(
325
+ t => utilization >= t.utilization && timeProgress <= t.timePct,
326
+ )
327
+
328
+ if (!shouldWarn) {
329
+ return null
330
+ }
331
+
332
+ return {
333
+ status: 'allowed_warning',
334
+ resetsAt,
335
+ rateLimitType,
336
+ utilization,
337
+ unifiedRateLimitFallbackAvailable,
338
+ isUsingOverage: false,
339
+ }
340
+ }
341
+
342
+ /**
343
+ * Get early warning limits using header-based detection with time-relative fallback.
344
+ * 1. First checks for surpassed-threshold header (new server-side approach)
345
+ * 2. Falls back to time-relative thresholds (client-side calculation)
346
+ */
347
+ function getEarlyWarningFromHeaders(
348
+ headers: globalThis.Headers,
349
+ unifiedRateLimitFallbackAvailable: boolean,
350
+ ): ClaudeAILimits | null {
351
+ // Try header-based detection first (preferred when API sends the header)
352
+ const headerBasedWarning = getHeaderBasedEarlyWarning(
353
+ headers,
354
+ unifiedRateLimitFallbackAvailable,
355
+ )
356
+ if (headerBasedWarning) {
357
+ return headerBasedWarning
358
+ }
359
+
360
+ // Fallback: Use time-relative thresholds (client-side calculation)
361
+ // This catches users burning quota faster than sustainable
362
+ for (const config of EARLY_WARNING_CONFIGS) {
363
+ const timeRelativeWarning = getTimeRelativeEarlyWarning(
364
+ headers,
365
+ config,
366
+ unifiedRateLimitFallbackAvailable,
367
+ )
368
+ if (timeRelativeWarning) {
369
+ return timeRelativeWarning
370
+ }
371
+ }
372
+
373
+ return null
374
+ }
375
+
376
+ function computeNewLimitsFromHeaders(
377
+ headers: globalThis.Headers,
378
+ ): ClaudeAILimits {
379
+ const status =
380
+ (headers.get('anthropic-ratelimit-unified-status') as QuotaStatus) ||
381
+ 'allowed'
382
+ const resetsAtHeader = headers.get('anthropic-ratelimit-unified-reset')
383
+ const resetsAt = resetsAtHeader ? Number(resetsAtHeader) : undefined
384
+ const unifiedRateLimitFallbackAvailable =
385
+ headers.get('anthropic-ratelimit-unified-fallback') === 'available'
386
+
387
+ // Headers for rate limit type and overage support
388
+ const rateLimitType = headers.get(
389
+ 'anthropic-ratelimit-unified-representative-claim',
390
+ ) as RateLimitType | null
391
+ const overageStatus = headers.get(
392
+ 'anthropic-ratelimit-unified-overage-status',
393
+ ) as QuotaStatus | null
394
+ const overageResetsAtHeader = headers.get(
395
+ 'anthropic-ratelimit-unified-overage-reset',
396
+ )
397
+ const overageResetsAt = overageResetsAtHeader
398
+ ? Number(overageResetsAtHeader)
399
+ : undefined
400
+
401
+ // Reason why overage is disabled (spending cap or wallet empty)
402
+ const overageDisabledReason = headers.get(
403
+ 'anthropic-ratelimit-unified-overage-disabled-reason',
404
+ ) as OverageDisabledReason | null
405
+
406
+ // Determine if we're using overage (standard limits rejected but overage allowed)
407
+ const isUsingOverage =
408
+ status === 'rejected' &&
409
+ (overageStatus === 'allowed' || overageStatus === 'allowed_warning')
410
+
411
+ // Check for early warning based on surpassed-threshold header
412
+ // If status is allowed/allowed_warning and we find a surpassed threshold, show warning
413
+ let finalStatus: QuotaStatus = status
414
+ if (status === 'allowed' || status === 'allowed_warning') {
415
+ const earlyWarning = getEarlyWarningFromHeaders(
416
+ headers,
417
+ unifiedRateLimitFallbackAvailable,
418
+ )
419
+ if (earlyWarning) {
420
+ return earlyWarning
421
+ }
422
+ // No early warning threshold surpassed
423
+ finalStatus = 'allowed'
424
+ }
425
+
426
+ return {
427
+ status: finalStatus,
428
+ resetsAt,
429
+ unifiedRateLimitFallbackAvailable,
430
+ ...(rateLimitType && { rateLimitType }),
431
+ ...(overageStatus && { overageStatus }),
432
+ ...(overageResetsAt && { overageResetsAt }),
433
+ ...(overageDisabledReason && { overageDisabledReason }),
434
+ isUsingOverage,
435
+ }
436
+ }
437
+
438
+ /**
439
+ * Cache the extra usage disabled reason from API headers.
440
+ */
441
+ function cacheExtraUsageDisabledReason(headers: globalThis.Headers): void {
442
+ // A null reason means extra usage is enabled (no disabled reason header)
443
+ const reason =
444
+ headers.get('anthropic-ratelimit-unified-overage-disabled-reason') ?? null
445
+ const cached = getGlobalConfig().cachedExtraUsageDisabledReason
446
+ if (cached !== reason) {
447
+ saveGlobalConfig(current => ({
448
+ ...current,
449
+ cachedExtraUsageDisabledReason: reason,
450
+ }))
451
+ }
452
+ }
453
+
454
+ export function extractQuotaStatusFromHeaders(
455
+ headers: globalThis.Headers,
456
+ ): void {
457
+ // Check if we need to process rate limits
458
+ const isSubscriber = isClaudeAISubscriber()
459
+
460
+ if (!shouldProcessRateLimits(isSubscriber)) {
461
+ // If we have any rate limit state, clear it
462
+ rawUtilization = {}
463
+ if (currentLimits.status !== 'allowed' || currentLimits.resetsAt) {
464
+ const defaultLimits: ClaudeAILimits = {
465
+ status: 'allowed',
466
+ unifiedRateLimitFallbackAvailable: false,
467
+ isUsingOverage: false,
468
+ }
469
+ emitStatusChange(defaultLimits)
470
+ }
471
+ return
472
+ }
473
+
474
+ // Process headers (applies mocks from /mock-limits command if active)
475
+ const headersToUse = processRateLimitHeaders(headers)
476
+ rawUtilization = extractRawUtilization(headersToUse)
477
+ const newLimits = computeNewLimitsFromHeaders(headersToUse)
478
+
479
+ // Cache extra usage status (persists across sessions)
480
+ cacheExtraUsageDisabledReason(headersToUse)
481
+
482
+ if (!isEqual(currentLimits, newLimits)) {
483
+ emitStatusChange(newLimits)
484
+ }
485
+ }
486
+
487
+ export function extractQuotaStatusFromError(error: APIError): void {
488
+ if (
489
+ !shouldProcessRateLimits(isClaudeAISubscriber()) ||
490
+ error.status !== 429
491
+ ) {
492
+ return
493
+ }
494
+
495
+ try {
496
+ let newLimits = { ...currentLimits }
497
+ if (error.headers) {
498
+ // Process headers (applies mocks from /mock-limits command if active)
499
+ const headersToUse = processRateLimitHeaders(error.headers)
500
+ rawUtilization = extractRawUtilization(headersToUse)
501
+ newLimits = computeNewLimitsFromHeaders(headersToUse)
502
+
503
+ // Cache extra usage status (persists across sessions)
504
+ cacheExtraUsageDisabledReason(headersToUse)
505
+ }
506
+ // For errors, always set status to rejected even if headers are not present.
507
+ newLimits.status = 'rejected'
508
+
509
+ if (!isEqual(currentLimits, newLimits)) {
510
+ emitStatusChange(newLimits)
511
+ }
512
+ } catch (e) {
513
+ logError(e as Error)
514
+ }
515
+ }
@@ -0,0 +1,23 @@
1
+ import { useEffect, useState } from 'react'
2
+ import {
3
+ type ClaudeAILimits,
4
+ currentLimits,
5
+ statusListeners,
6
+ } from './claudeAiLimits.js'
7
+
8
+ export function useClaudeAiLimits(): ClaudeAILimits {
9
+ const [limits, setLimits] = useState<ClaudeAILimits>({ ...currentLimits })
10
+
11
+ useEffect(() => {
12
+ const listener = (newLimits: ClaudeAILimits) => {
13
+ setLimits({ ...newLimits })
14
+ }
15
+ statusListeners.add(listener)
16
+
17
+ return () => {
18
+ statusListeners.delete(listener)
19
+ }
20
+ }, [])
21
+
22
+ return limits
23
+ }
@@ -0,0 +1,153 @@
1
+ import { FILE_EDIT_TOOL_NAME } from 'src/tools/FileEditTool/constants.js'
2
+ import { FILE_READ_TOOL_NAME } from 'src/tools/FileReadTool/prompt.js'
3
+ import { FILE_WRITE_TOOL_NAME } from 'src/tools/FileWriteTool/prompt.js'
4
+ import { GLOB_TOOL_NAME } from 'src/tools/GlobTool/prompt.js'
5
+ import { GREP_TOOL_NAME } from 'src/tools/GrepTool/prompt.js'
6
+ import { NOTEBOOK_EDIT_TOOL_NAME } from 'src/tools/NotebookEditTool/constants.js'
7
+ import { WEB_FETCH_TOOL_NAME } from 'src/tools/WebFetchTool/prompt.js'
8
+ import { WEB_SEARCH_TOOL_NAME } from 'src/tools/WebSearchTool/prompt.js'
9
+ import { SHELL_TOOL_NAMES } from 'src/utils/shell/shellToolUtils.js'
10
+ import { isEnvTruthy } from '../../utils/envUtils.js'
11
+
12
+ // docs: https://docs.google.com/document/d/1oCT4evvWTh3P6z-kcfNQwWTCxAhkoFndSaNS9Gm40uw/edit?tab=t.0
13
+
14
+ // Default values for context management strategies
15
+ // Match client-side microcompact token values
16
+ const DEFAULT_MAX_INPUT_TOKENS = 180_000 // Typical warning threshold
17
+ const DEFAULT_TARGET_INPUT_TOKENS = 40_000 // Keep last 40k tokens like client-side
18
+
19
+ const TOOLS_CLEARABLE_RESULTS = [
20
+ ...SHELL_TOOL_NAMES,
21
+ GLOB_TOOL_NAME,
22
+ GREP_TOOL_NAME,
23
+ FILE_READ_TOOL_NAME,
24
+ WEB_FETCH_TOOL_NAME,
25
+ WEB_SEARCH_TOOL_NAME,
26
+ ]
27
+
28
+ const TOOLS_CLEARABLE_USES = [
29
+ FILE_EDIT_TOOL_NAME,
30
+ FILE_WRITE_TOOL_NAME,
31
+ NOTEBOOK_EDIT_TOOL_NAME,
32
+ ]
33
+
34
+ // Context management strategy types matching API documentation
35
+ export type ContextEditStrategy =
36
+ | {
37
+ type: 'clear_tool_uses_20250919'
38
+ trigger?: {
39
+ type: 'input_tokens'
40
+ value: number
41
+ }
42
+ keep?: {
43
+ type: 'tool_uses'
44
+ value: number
45
+ }
46
+ clear_tool_inputs?: boolean | string[]
47
+ exclude_tools?: string[]
48
+ clear_at_least?: {
49
+ type: 'input_tokens'
50
+ value: number
51
+ }
52
+ }
53
+ | {
54
+ type: 'clear_thinking_20251015'
55
+ keep: { type: 'thinking_turns'; value: number } | 'all'
56
+ }
57
+
58
+ // Context management configuration wrapper
59
+ export type ContextManagementConfig = {
60
+ edits: ContextEditStrategy[]
61
+ }
62
+
63
+ // API-based microcompact implementation that uses native context management
64
+ export function getAPIContextManagement(options?: {
65
+ hasThinking?: boolean
66
+ isRedactThinkingActive?: boolean
67
+ clearAllThinking?: boolean
68
+ }): ContextManagementConfig | undefined {
69
+ const {
70
+ hasThinking = false,
71
+ isRedactThinkingActive = false,
72
+ clearAllThinking = false,
73
+ } = options ?? {}
74
+
75
+ const strategies: ContextEditStrategy[] = []
76
+
77
+ // Preserve thinking blocks in previous assistant turns. Skip when
78
+ // redact-thinking is active — redacted blocks have no model-visible content.
79
+ // When clearAllThinking is set (>1h idle = cache miss), keep only the last
80
+ // thinking turn — the API schema requires value >= 1, and omitting the edit
81
+ // falls back to the model-policy default (often "all"), which wouldn't clear.
82
+ if (hasThinking && !isRedactThinkingActive) {
83
+ strategies.push({
84
+ type: 'clear_thinking_20251015',
85
+ keep: clearAllThinking ? { type: 'thinking_turns', value: 1 } : 'all',
86
+ })
87
+ }
88
+
89
+ // Tool clearing strategies are ant-only
90
+ if (process.env.USER_TYPE !== 'ant') {
91
+ return strategies.length > 0 ? { edits: strategies } : undefined
92
+ }
93
+
94
+ const useClearToolResults = isEnvTruthy(
95
+ process.env.USE_API_CLEAR_TOOL_RESULTS,
96
+ )
97
+ const useClearToolUses = isEnvTruthy(process.env.USE_API_CLEAR_TOOL_USES)
98
+
99
+ // If no tool clearing strategy is enabled, return early
100
+ if (!useClearToolResults && !useClearToolUses) {
101
+ return strategies.length > 0 ? { edits: strategies } : undefined
102
+ }
103
+
104
+ if (useClearToolResults) {
105
+ const triggerThreshold = process.env.API_MAX_INPUT_TOKENS
106
+ ? parseInt(process.env.API_MAX_INPUT_TOKENS)
107
+ : DEFAULT_MAX_INPUT_TOKENS
108
+ const keepTarget = process.env.API_TARGET_INPUT_TOKENS
109
+ ? parseInt(process.env.API_TARGET_INPUT_TOKENS)
110
+ : DEFAULT_TARGET_INPUT_TOKENS
111
+
112
+ const strategy: ContextEditStrategy = {
113
+ type: 'clear_tool_uses_20250919',
114
+ trigger: {
115
+ type: 'input_tokens',
116
+ value: triggerThreshold,
117
+ },
118
+ clear_at_least: {
119
+ type: 'input_tokens',
120
+ value: triggerThreshold - keepTarget,
121
+ },
122
+ clear_tool_inputs: TOOLS_CLEARABLE_RESULTS,
123
+ }
124
+
125
+ strategies.push(strategy)
126
+ }
127
+
128
+ if (useClearToolUses) {
129
+ const triggerThreshold = process.env.API_MAX_INPUT_TOKENS
130
+ ? parseInt(process.env.API_MAX_INPUT_TOKENS)
131
+ : DEFAULT_MAX_INPUT_TOKENS
132
+ const keepTarget = process.env.API_TARGET_INPUT_TOKENS
133
+ ? parseInt(process.env.API_TARGET_INPUT_TOKENS)
134
+ : DEFAULT_TARGET_INPUT_TOKENS
135
+
136
+ const strategy: ContextEditStrategy = {
137
+ type: 'clear_tool_uses_20250919',
138
+ trigger: {
139
+ type: 'input_tokens',
140
+ value: triggerThreshold,
141
+ },
142
+ clear_at_least: {
143
+ type: 'input_tokens',
144
+ value: triggerThreshold - keepTarget,
145
+ },
146
+ exclude_tools: TOOLS_CLEARABLE_USES,
147
+ }
148
+
149
+ strategies.push(strategy)
150
+ }
151
+
152
+ return strategies.length > 0 ? { edits: strategies } : undefined
153
+ }