@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,406 @@
1
+ import Anthropic, { type ClientOptions } from '@anthropic-ai/sdk'
2
+ import { GeminiAnthropicClient } from './geminiClient.js'
3
+ import { OpenRouterAnthropicClient } from './openRouterClient.js'
4
+ import { randomUUID } from 'crypto'
5
+ import type { GoogleAuth } from 'google-auth-library'
6
+ import {
7
+ checkAndRefreshOAuthTokenIfNeeded,
8
+ getAnthropicApiKey,
9
+ getApiKeyFromApiKeyHelper,
10
+ getClaudeAIOAuthTokens,
11
+ isClaudeAISubscriber,
12
+ refreshAndGetAwsCredentials,
13
+ refreshGcpCredentialsIfNeeded,
14
+ } from 'src/utils/auth.js'
15
+ import { getUserAgent } from 'src/utils/http.js'
16
+ import { getSmallFastModel } from 'src/utils/model/model.js'
17
+ import {
18
+ getAPIProvider,
19
+ isFirstPartyAnthropicBaseUrl,
20
+ } from 'src/utils/model/providers.js'
21
+ import { getProxyFetchOptions } from 'src/utils/proxy.js'
22
+ import {
23
+ getIsNonInteractiveSession,
24
+ getSessionId,
25
+ } from '../../bootstrap/state.js'
26
+ import { getOauthConfig } from '../../constants/oauth.js'
27
+ import { isDebugToStdErr, logForDebugging } from '../../utils/debug.js'
28
+ import {
29
+ getAWSRegion,
30
+ getVertexRegionForModel,
31
+ isEnvTruthy,
32
+ } from '../../utils/envUtils.js'
33
+
34
+ /**
35
+ * Environment variables for different client types:
36
+ *
37
+ * Direct API:
38
+ * - ANTHROPIC_API_KEY: Required for direct API access
39
+ *
40
+ * AWS Bedrock:
41
+ * - AWS credentials configured via aws-sdk defaults
42
+ * - AWS_REGION or AWS_DEFAULT_REGION: Sets the AWS region for all models (default: us-east-1)
43
+ * - ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION: Optional. Override AWS region specifically for the small fast model (Haiku)
44
+ *
45
+ * Foundry (Azure):
46
+ * - ANTHROPIC_FOUNDRY_RESOURCE: Your Azure resource name (e.g., 'my-resource')
47
+ * For the full endpoint: https://{resource}.services.ai.azure.com/anthropic/v1/messages
48
+ * - ANTHROPIC_FOUNDRY_BASE_URL: Optional. Alternative to resource - provide full base URL directly
49
+ * (e.g., 'https://my-resource.services.ai.azure.com')
50
+ *
51
+ * Authentication (one of the following):
52
+ * - ANTHROPIC_FOUNDRY_API_KEY: Your Microsoft Foundry API key (if using API key auth)
53
+ * - Azure AD authentication: If no API key is provided, uses DefaultAzureCredential
54
+ * which supports multiple auth methods (environment variables, managed identity,
55
+ * Azure CLI, etc.). See: https://docs.microsoft.com/en-us/javascript/api/@azure/identity
56
+ *
57
+ * Vertex AI:
58
+ * - Model-specific region variables (highest priority):
59
+ * - VERTEX_REGION_CLAUDE_3_5_HAIKU: Region for Claude 3.5 Haiku model
60
+ * - VERTEX_REGION_CLAUDE_HAIKU_4_5: Region for Claude Haiku 4.5 model
61
+ * - VERTEX_REGION_CLAUDE_3_5_SONNET: Region for Claude 3.5 Sonnet model
62
+ * - VERTEX_REGION_CLAUDE_3_7_SONNET: Region for Claude 3.7 Sonnet model
63
+ * - CLOUD_ML_REGION: Optional. The default GCP region to use for all models
64
+ * If specific model region not specified above
65
+ * - ANTHROPIC_VERTEX_PROJECT_ID: Required. Your GCP project ID
66
+ * - Standard GCP credentials configured via google-auth-library
67
+ *
68
+ * Priority for determining region:
69
+ * 1. Hardcoded model-specific environment variables
70
+ * 2. Global CLOUD_ML_REGION variable
71
+ * 3. Default region from config
72
+ * 4. Fallback region (us-east5)
73
+ */
74
+
75
+ function createStderrLogger(): ClientOptions['logger'] {
76
+ return {
77
+ error: (msg, ...args) =>
78
+ // biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
79
+ console.error('[Anthropic SDK ERROR]', msg, ...args),
80
+ // biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
81
+ warn: (msg, ...args) => console.error('[Anthropic SDK WARN]', msg, ...args),
82
+ // biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
83
+ info: (msg, ...args) => console.error('[Anthropic SDK INFO]', msg, ...args),
84
+ debug: (msg, ...args) =>
85
+ // biome-ignore lint/suspicious/noConsole:: intentional console output -- SDK logger must use console
86
+ console.error('[Anthropic SDK DEBUG]', msg, ...args),
87
+ }
88
+ }
89
+
90
+ export async function getAnthropicClient({
91
+ apiKey,
92
+ maxRetries,
93
+ model,
94
+ fetchOverride,
95
+ source,
96
+ }: {
97
+ apiKey?: string
98
+ maxRetries: number
99
+ model?: string
100
+ fetchOverride?: ClientOptions['fetch']
101
+ source?: string
102
+ }): Promise<Anthropic> {
103
+ const containerId = process.env.CLAUDE_CODE_CONTAINER_ID
104
+ const remoteSessionId = process.env.CLAUDE_CODE_REMOTE_SESSION_ID
105
+ const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP
106
+ const customHeaders = getCustomHeaders()
107
+ const defaultHeaders: { [key: string]: string } = {
108
+ 'x-app': 'cli',
109
+ 'User-Agent': getUserAgent(),
110
+ 'X-Claude-Code-Session-Id': getSessionId(),
111
+ ...customHeaders,
112
+ ...(containerId ? { 'x-claude-remote-container-id': containerId } : {}),
113
+ ...(remoteSessionId
114
+ ? { 'x-claude-remote-session-id': remoteSessionId }
115
+ : {}),
116
+ // SDK consumers can identify their app/library for backend analytics
117
+ ...(clientApp ? { 'x-client-app': clientApp } : {}),
118
+ }
119
+
120
+ // Log API client configuration for HFI debugging
121
+ logForDebugging(
122
+ `[API:request] Creating client, ANTHROPIC_CUSTOM_HEADERS present: ${!!process.env.ANTHROPIC_CUSTOM_HEADERS}, has Authorization header: ${!!customHeaders['Authorization']}`,
123
+ )
124
+
125
+ // Add additional protection header if enabled via env var
126
+ const additionalProtectionEnabled = isEnvTruthy(
127
+ process.env.CLAUDE_CODE_ADDITIONAL_PROTECTION,
128
+ )
129
+ if (additionalProtectionEnabled) {
130
+ defaultHeaders['x-anthropic-additional-protection'] = 'true'
131
+ }
132
+
133
+ logForDebugging('[API:auth] OAuth token check starting')
134
+ await checkAndRefreshOAuthTokenIfNeeded()
135
+ logForDebugging('[API:auth] OAuth token check complete')
136
+
137
+ if (!isClaudeAISubscriber()) {
138
+ await configureApiKeyHeaders(defaultHeaders, getIsNonInteractiveSession())
139
+ }
140
+
141
+ const resolvedFetch = buildFetch(fetchOverride, source)
142
+
143
+ const ARGS = {
144
+ defaultHeaders,
145
+ maxRetries,
146
+ timeout: parseInt(process.env.API_TIMEOUT_MS || String(600 * 1000), 10),
147
+ dangerouslyAllowBrowser: true,
148
+ fetchOptions: getProxyFetchOptions({
149
+ forAnthropicAPI: true,
150
+ }) as ClientOptions['fetchOptions'],
151
+ ...(resolvedFetch && {
152
+ fetch: resolvedFetch,
153
+ }),
154
+ }
155
+ if (isEnvTruthy(process.env.CLAUDE_CODE_USE_BEDROCK)) {
156
+ const { AnthropicBedrock } = await import('@anthropic-ai/bedrock-sdk')
157
+ // Use region override for small fast model if specified
158
+ const awsRegion =
159
+ model === getSmallFastModel() &&
160
+ process.env.ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION
161
+ ? process.env.ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION
162
+ : getAWSRegion()
163
+
164
+ const bedrockArgs: ConstructorParameters<typeof AnthropicBedrock>[0] = {
165
+ ...ARGS,
166
+ awsRegion,
167
+ ...(isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH) && {
168
+ skipAuth: true,
169
+ }),
170
+ ...(isDebugToStdErr() && { logger: createStderrLogger() }),
171
+ }
172
+
173
+ // Add API key authentication if available
174
+ if (process.env.AWS_BEARER_TOKEN_BEDROCK) {
175
+ bedrockArgs.skipAuth = true
176
+ // Add the Bearer token for Bedrock API key authentication
177
+ bedrockArgs.defaultHeaders = {
178
+ ...bedrockArgs.defaultHeaders,
179
+ Authorization: `Bearer ${process.env.AWS_BEARER_TOKEN_BEDROCK}`,
180
+ }
181
+ } else if (!isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH)) {
182
+ // Refresh auth and get credentials with cache clearing
183
+ const cachedCredentials = await refreshAndGetAwsCredentials()
184
+ if (cachedCredentials) {
185
+ bedrockArgs.awsAccessKey = cachedCredentials.accessKeyId
186
+ bedrockArgs.awsSecretKey = cachedCredentials.secretAccessKey
187
+ bedrockArgs.awsSessionToken = cachedCredentials.sessionToken
188
+ }
189
+ }
190
+ // we have always been lying about the return type - this doesn't support batching or models
191
+ return new AnthropicBedrock(bedrockArgs) as unknown as Anthropic
192
+ }
193
+ if (isEnvTruthy(process.env.CLAUDE_CODE_USE_FOUNDRY)) {
194
+ const { AnthropicFoundry } = await import('@anthropic-ai/foundry-sdk')
195
+ // Determine Azure AD token provider based on configuration
196
+ // SDK reads ANTHROPIC_FOUNDRY_API_KEY by default
197
+ let azureADTokenProvider: (() => Promise<string>) | undefined
198
+ if (!process.env.ANTHROPIC_FOUNDRY_API_KEY) {
199
+ if (isEnvTruthy(process.env.CLAUDE_CODE_SKIP_FOUNDRY_AUTH)) {
200
+ // Mock token provider for testing/proxy scenarios (similar to Vertex mock GoogleAuth)
201
+ azureADTokenProvider = () => Promise.resolve('')
202
+ } else {
203
+ // Use real Azure AD authentication with DefaultAzureCredential
204
+ const {
205
+ DefaultAzureCredential: AzureCredential,
206
+ getBearerTokenProvider,
207
+ } = await import('@azure/identity')
208
+ azureADTokenProvider = getBearerTokenProvider(
209
+ new AzureCredential(),
210
+ 'https://cognitiveservices.azure.com/.default',
211
+ )
212
+ }
213
+ }
214
+
215
+ const foundryArgs: ConstructorParameters<typeof AnthropicFoundry>[0] = {
216
+ ...ARGS,
217
+ ...(azureADTokenProvider && { azureADTokenProvider }),
218
+ ...(isDebugToStdErr() && { logger: createStderrLogger() }),
219
+ }
220
+ // we have always been lying about the return type - this doesn't support batching or models
221
+ return new AnthropicFoundry(foundryArgs) as unknown as Anthropic
222
+ }
223
+ if (isEnvTruthy(process.env.CLAUDE_CODE_USE_VERTEX)) {
224
+ // Refresh GCP credentials if gcpAuthRefresh is configured and credentials are expired
225
+ // This is similar to how we handle AWS credential refresh for Bedrock
226
+ if (!isEnvTruthy(process.env.CLAUDE_CODE_SKIP_VERTEX_AUTH)) {
227
+ await refreshGcpCredentialsIfNeeded()
228
+ }
229
+
230
+ const [{ AnthropicVertex }, { GoogleAuth }] = await Promise.all([
231
+ import('@anthropic-ai/vertex-sdk'),
232
+ import('google-auth-library'),
233
+ ])
234
+ // TODO: Cache either GoogleAuth instance or AuthClient to improve performance
235
+ // Currently we create a new GoogleAuth instance for every getAnthropicClient() call
236
+ // This could cause repeated authentication flows and metadata server checks
237
+ // However, caching needs careful handling of:
238
+ // - Credential refresh/expiration
239
+ // - Environment variable changes (GOOGLE_APPLICATION_CREDENTIALS, project vars)
240
+ // - Cross-request auth state management
241
+ // See: https://github.com/googleapis/google-auth-library-nodejs/issues/390 for caching challenges
242
+
243
+ // Prevent metadata server timeout by providing projectId as fallback
244
+ // google-auth-library checks project ID in this order:
245
+ // 1. Environment variables (GCLOUD_PROJECT, GOOGLE_CLOUD_PROJECT, etc.)
246
+ // 2. Credential files (service account JSON, ADC file)
247
+ // 3. gcloud config
248
+ // 4. GCE metadata server (causes 12s timeout outside GCP)
249
+ //
250
+ // We only set projectId if user hasn't configured other discovery methods
251
+ // to avoid interfering with their existing auth setup
252
+
253
+ // Check project environment variables in same order as google-auth-library
254
+ // See: https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts
255
+ const hasProjectEnvVar =
256
+ process.env['GCLOUD_PROJECT'] ||
257
+ process.env['GOOGLE_CLOUD_PROJECT'] ||
258
+ process.env['gcloud_project'] ||
259
+ process.env['google_cloud_project']
260
+
261
+ // Check for credential file paths (service account or ADC)
262
+ // Note: We're checking both standard and lowercase variants to be safe,
263
+ // though we should verify what google-auth-library actually checks
264
+ const hasKeyFile =
265
+ process.env['GOOGLE_APPLICATION_CREDENTIALS'] ||
266
+ process.env['google_application_credentials']
267
+
268
+ const googleAuth = isEnvTruthy(process.env.CLAUDE_CODE_SKIP_VERTEX_AUTH)
269
+ ? ({
270
+ // Mock GoogleAuth for testing/proxy scenarios
271
+ getClient: () => ({
272
+ getRequestHeaders: () => ({}),
273
+ }),
274
+ } as unknown as GoogleAuth)
275
+ : new GoogleAuth({
276
+ scopes: ['https://www.googleapis.com/auth/cloud-platform'],
277
+ // Only use ANTHROPIC_VERTEX_PROJECT_ID as last resort fallback
278
+ // This prevents the 12-second metadata server timeout when:
279
+ // - No project env vars are set AND
280
+ // - No credential keyfile is specified AND
281
+ // - ADC file exists but lacks project_id field
282
+ //
283
+ // Risk: If auth project != API target project, this could cause billing/audit issues
284
+ // Mitigation: Users can set GOOGLE_CLOUD_PROJECT to override
285
+ ...(hasProjectEnvVar || hasKeyFile
286
+ ? {}
287
+ : {
288
+ projectId: process.env.ANTHROPIC_VERTEX_PROJECT_ID,
289
+ }),
290
+ })
291
+
292
+ const vertexArgs: ConstructorParameters<typeof AnthropicVertex>[0] = {
293
+ ...ARGS,
294
+ region: getVertexRegionForModel(model),
295
+ googleAuth,
296
+ ...(isDebugToStdErr() && { logger: createStderrLogger() }),
297
+ }
298
+ // we have always been lying about the return type - this doesn't support batching or models
299
+ return new AnthropicVertex(vertexArgs) as unknown as Anthropic
300
+ }
301
+
302
+ // Check if we should use OpenRouter
303
+ const openRouterApiKey = process.env.OPENROUTER_API_KEY
304
+ if (openRouterApiKey || isEnvTruthy(process.env.CLAUDE_CODE_USE_OPENROUTER)) {
305
+ const apiKey = openRouterApiKey || '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'
306
+ logForDebugging('[API:auth] Using OpenRouter API')
307
+ return new OpenRouterAnthropicClient(apiKey) as unknown as Anthropic
308
+ }
309
+
310
+ // Check if we should use Gemini instead of Anthropic
311
+ const geminiApiKey = process.env.GEMINI_API_KEY
312
+ if (geminiApiKey) {
313
+ logForDebugging('[API:auth] Using Gemini API instead of Anthropic')
314
+ return new GeminiAnthropicClient({ apiKey: geminiApiKey }) as unknown as Anthropic
315
+ }
316
+
317
+ // Determine authentication method based on available tokens
318
+ const clientConfig: ConstructorParameters<typeof Anthropic>[0] = {
319
+ apiKey: isClaudeAISubscriber() ? null : apiKey || getAnthropicApiKey(),
320
+ authToken: isClaudeAISubscriber()
321
+ ? getClaudeAIOAuthTokens()?.accessToken
322
+ : undefined,
323
+ // Set baseURL from OAuth config when using staging OAuth
324
+ ...(process.env.USER_TYPE === 'ant' &&
325
+ isEnvTruthy(process.env.USE_STAGING_OAUTH)
326
+ ? { baseURL: getOauthConfig().BASE_API_URL }
327
+ : {}),
328
+ ...ARGS,
329
+ ...(isDebugToStdErr() && { logger: createStderrLogger() }),
330
+ }
331
+
332
+ return new Anthropic(clientConfig)
333
+ }
334
+
335
+ async function configureApiKeyHeaders(
336
+ headers: Record<string, string>,
337
+ isNonInteractiveSession: boolean,
338
+ ): Promise<void> {
339
+ const token =
340
+ process.env.ANTHROPIC_AUTH_TOKEN ||
341
+ (await getApiKeyFromApiKeyHelper(isNonInteractiveSession))
342
+ if (token) {
343
+ headers['Authorization'] = `Bearer ${token}`
344
+ }
345
+ }
346
+
347
+ function getCustomHeaders(): Record<string, string> {
348
+ const customHeaders: Record<string, string> = {}
349
+ const customHeadersEnv = process.env.ANTHROPIC_CUSTOM_HEADERS
350
+
351
+ if (!customHeadersEnv) return customHeaders
352
+
353
+ // Split by newlines to support multiple headers
354
+ const headerStrings = customHeadersEnv.split(/\n|\r\n/)
355
+
356
+ for (const headerString of headerStrings) {
357
+ if (!headerString.trim()) continue
358
+
359
+ // Parse header in format "Name: Value" (curl style). Split on first `:`
360
+ // then trim — avoids regex backtracking on malformed long header lines.
361
+ const colonIdx = headerString.indexOf(':')
362
+ if (colonIdx === -1) continue
363
+ const name = headerString.slice(0, colonIdx).trim()
364
+ const value = headerString.slice(colonIdx + 1).trim()
365
+ if (name) {
366
+ customHeaders[name] = value
367
+ }
368
+ }
369
+
370
+ return customHeaders
371
+ }
372
+
373
+ export const CLIENT_REQUEST_ID_HEADER = 'x-client-request-id'
374
+
375
+ function buildFetch(
376
+ fetchOverride: ClientOptions['fetch'],
377
+ source: string | undefined,
378
+ ): ClientOptions['fetch'] {
379
+ // eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
380
+ const inner = fetchOverride ?? globalThis.fetch
381
+ // Only send to the first-party API — Bedrock/Vertex/Foundry don't log it
382
+ // and unknown headers risk rejection by strict proxies (inc-4029 class).
383
+ const injectClientRequestId =
384
+ getAPIProvider() === 'firstParty' && isFirstPartyAnthropicBaseUrl()
385
+ return (input, init) => {
386
+ // eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
387
+ const headers = new Headers(init?.headers)
388
+ // Generate a client-side request ID so timeouts (which return no server
389
+ // request ID) can still be correlated with server logs by the API team.
390
+ // Callers that want to track the ID themselves can pre-set the header.
391
+ if (injectClientRequestId && !headers.has(CLIENT_REQUEST_ID_HEADER)) {
392
+ headers.set(CLIENT_REQUEST_ID_HEADER, randomUUID())
393
+ }
394
+ try {
395
+ // eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
396
+ const url = input instanceof Request ? input.url : String(input)
397
+ const id = headers.get(CLIENT_REQUEST_ID_HEADER)
398
+ logForDebugging(
399
+ `[API REQUEST] ${new URL(url).pathname}${id ? ` ${CLIENT_REQUEST_ID_HEADER}=${id}` : ''} source=${source ?? 'unknown'}`,
400
+ )
401
+ } catch {
402
+ // never let logging crash the fetch
403
+ }
404
+ return inner(input, { ...init, headers })
405
+ }
406
+ }
@@ -0,0 +1,226 @@
1
+ import type { ClientOptions } from '@anthropic-ai/sdk'
2
+ import { createHash } from 'crypto'
3
+ import { promises as fs } from 'fs'
4
+ import { dirname, join } from 'path'
5
+ import { getSessionId } from 'src/bootstrap/state.js'
6
+ import { getClaudeConfigHomeDir } from '../../utils/envUtils.js'
7
+ import { jsonParse, jsonStringify } from '../../utils/slowOperations.js'
8
+
9
+ function hashString(str: string): string {
10
+ return createHash('sha256').update(str).digest('hex')
11
+ }
12
+
13
+ // Cache last few API requests for ant users (e.g., for /issue command)
14
+ const MAX_CACHED_REQUESTS = 5
15
+ const cachedApiRequests: Array<{ timestamp: string; request: unknown }> = []
16
+
17
+ type DumpState = {
18
+ initialized: boolean
19
+ messageCountSeen: number
20
+ lastInitDataHash: string
21
+ // Cheap proxy for change detection — skips the expensive stringify+hash
22
+ // when model/tools/system are structurally identical to the last call.
23
+ lastInitFingerprint: string
24
+ }
25
+
26
+ // Track state per session to avoid duplicating data
27
+ const dumpState = new Map<string, DumpState>()
28
+
29
+ export function getLastApiRequests(): Array<{
30
+ timestamp: string
31
+ request: unknown
32
+ }> {
33
+ return [...cachedApiRequests]
34
+ }
35
+
36
+ export function clearApiRequestCache(): void {
37
+ cachedApiRequests.length = 0
38
+ }
39
+
40
+ export function clearDumpState(agentIdOrSessionId: string): void {
41
+ dumpState.delete(agentIdOrSessionId)
42
+ }
43
+
44
+ export function clearAllDumpState(): void {
45
+ dumpState.clear()
46
+ }
47
+
48
+ export function addApiRequestToCache(requestData: unknown): void {
49
+ if (process.env.USER_TYPE !== 'ant') return
50
+ cachedApiRequests.push({
51
+ timestamp: new Date().toISOString(),
52
+ request: requestData,
53
+ })
54
+ if (cachedApiRequests.length > MAX_CACHED_REQUESTS) {
55
+ cachedApiRequests.shift()
56
+ }
57
+ }
58
+
59
+ export function getDumpPromptsPath(agentIdOrSessionId?: string): string {
60
+ return join(
61
+ getClaudeConfigHomeDir(),
62
+ 'dump-prompts',
63
+ `${agentIdOrSessionId ?? getSessionId()}.jsonl`,
64
+ )
65
+ }
66
+
67
+ function appendToFile(filePath: string, entries: string[]): void {
68
+ if (entries.length === 0) return
69
+ fs.mkdir(dirname(filePath), { recursive: true })
70
+ .then(() => fs.appendFile(filePath, entries.join('\n') + '\n'))
71
+ .catch(() => {})
72
+ }
73
+
74
+ function initFingerprint(req: Record<string, unknown>): string {
75
+ const tools = req.tools as Array<{ name?: string }> | undefined
76
+ const system = req.system as unknown[] | string | undefined
77
+ const sysLen =
78
+ typeof system === 'string'
79
+ ? system.length
80
+ : Array.isArray(system)
81
+ ? system.reduce(
82
+ (n: number, b) => n + ((b as { text?: string }).text?.length ?? 0),
83
+ 0,
84
+ )
85
+ : 0
86
+ const toolNames = tools?.map(t => t.name ?? '').join(',') ?? ''
87
+ return `${req.model}|${toolNames}|${sysLen}`
88
+ }
89
+
90
+ function dumpRequest(
91
+ body: string,
92
+ ts: string,
93
+ state: DumpState,
94
+ filePath: string,
95
+ ): void {
96
+ try {
97
+ const req = jsonParse(body) as Record<string, unknown>
98
+ addApiRequestToCache(req)
99
+
100
+ if (process.env.USER_TYPE !== 'ant') return
101
+ const entries: string[] = []
102
+ const messages = (req.messages ?? []) as Array<{ role?: string }>
103
+
104
+ // Write init data (system, tools, metadata) on first request,
105
+ // and a system_update entry whenever it changes.
106
+ // Cheap fingerprint first: system+tools don't change between turns,
107
+ // so skip the 300ms stringify when the shape is unchanged.
108
+ const fingerprint = initFingerprint(req)
109
+ if (!state.initialized || fingerprint !== state.lastInitFingerprint) {
110
+ const { messages: _, ...initData } = req
111
+ const initDataStr = jsonStringify(initData)
112
+ const initDataHash = hashString(initDataStr)
113
+ state.lastInitFingerprint = fingerprint
114
+ if (!state.initialized) {
115
+ state.initialized = true
116
+ state.lastInitDataHash = initDataHash
117
+ // Reuse initDataStr rather than re-serializing initData inside a wrapper.
118
+ // timestamp from toISOString() contains no chars needing JSON escaping.
119
+ entries.push(
120
+ `{"type":"init","timestamp":"${ts}","data":${initDataStr}}`,
121
+ )
122
+ } else if (initDataHash !== state.lastInitDataHash) {
123
+ state.lastInitDataHash = initDataHash
124
+ entries.push(
125
+ `{"type":"system_update","timestamp":"${ts}","data":${initDataStr}}`,
126
+ )
127
+ }
128
+ }
129
+
130
+ // Write only new user messages (assistant messages captured in response)
131
+ for (const msg of messages.slice(state.messageCountSeen)) {
132
+ if (msg.role === 'user') {
133
+ entries.push(
134
+ jsonStringify({ type: 'message', timestamp: ts, data: msg }),
135
+ )
136
+ }
137
+ }
138
+ state.messageCountSeen = messages.length
139
+
140
+ appendToFile(filePath, entries)
141
+ } catch {
142
+ // Ignore parsing errors
143
+ }
144
+ }
145
+
146
+ export function createDumpPromptsFetch(
147
+ agentIdOrSessionId: string,
148
+ ): ClientOptions['fetch'] {
149
+ const filePath = getDumpPromptsPath(agentIdOrSessionId)
150
+
151
+ return async (input: RequestInfo | URL, init?: RequestInit) => {
152
+ const state = dumpState.get(agentIdOrSessionId) ?? {
153
+ initialized: false,
154
+ messageCountSeen: 0,
155
+ lastInitDataHash: '',
156
+ lastInitFingerprint: '',
157
+ }
158
+ dumpState.set(agentIdOrSessionId, state)
159
+
160
+ let timestamp: string | undefined
161
+
162
+ if (init?.method === 'POST' && init.body) {
163
+ timestamp = new Date().toISOString()
164
+ // Parsing + stringifying the request (system prompt + tool schemas = MBs)
165
+ // takes hundreds of ms. Defer so it doesn't block the actual API call —
166
+ // this is debug tooling for /issue, not on the critical path.
167
+ setImmediate(dumpRequest, init.body as string, timestamp, state, filePath)
168
+ }
169
+
170
+ // eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins
171
+ const response = await globalThis.fetch(input, init)
172
+
173
+ // Save response async
174
+ if (timestamp && response.ok && process.env.USER_TYPE === 'ant') {
175
+ const cloned = response.clone()
176
+ void (async () => {
177
+ try {
178
+ const isStreaming = cloned.headers
179
+ .get('content-type')
180
+ ?.includes('text/event-stream')
181
+
182
+ let data: unknown
183
+ if (isStreaming && cloned.body) {
184
+ // Parse SSE stream into chunks
185
+ const reader = cloned.body.getReader()
186
+ const decoder = new TextDecoder()
187
+ let buffer = ''
188
+ try {
189
+ while (true) {
190
+ const { done, value } = await reader.read()
191
+ if (done) break
192
+ buffer += decoder.decode(value, { stream: true })
193
+ }
194
+ } finally {
195
+ reader.releaseLock()
196
+ }
197
+ const chunks: unknown[] = []
198
+ for (const event of buffer.split('\n\n')) {
199
+ for (const line of event.split('\n')) {
200
+ if (line.startsWith('data: ') && line !== 'data: [DONE]') {
201
+ try {
202
+ chunks.push(jsonParse(line.slice(6)))
203
+ } catch {
204
+ // Ignore parse errors
205
+ }
206
+ }
207
+ }
208
+ }
209
+ data = { stream: true, chunks }
210
+ } else {
211
+ data = await cloned.json()
212
+ }
213
+
214
+ await fs.appendFile(
215
+ filePath,
216
+ jsonStringify({ type: 'response', timestamp, data }) + '\n',
217
+ )
218
+ } catch {
219
+ // Best effort
220
+ }
221
+ })()
222
+ }
223
+
224
+ return response
225
+ }
226
+ }
@@ -0,0 +1,22 @@
1
+ import type { NonNullableUsage } from '../../entrypoints/sdk/sdkUtilityTypes.js'
2
+
3
+ /**
4
+ * Zero-initialized usage object. Extracted from logging.ts so that
5
+ * bridge/replBridge.ts can import it without transitively pulling in
6
+ * api/errors.ts → utils/messages.ts → BashTool.tsx → the world.
7
+ */
8
+ export const EMPTY_USAGE: Readonly<NonNullableUsage> = {
9
+ input_tokens: 0,
10
+ cache_creation_input_tokens: 0,
11
+ cache_read_input_tokens: 0,
12
+ output_tokens: 0,
13
+ server_tool_use: { web_search_requests: 0, web_fetch_requests: 0 },
14
+ service_tier: 'standard',
15
+ cache_creation: {
16
+ ephemeral_1h_input_tokens: 0,
17
+ ephemeral_5m_input_tokens: 0,
18
+ },
19
+ inference_geo: '',
20
+ iterations: [],
21
+ speed: 'standard',
22
+ }