@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,170 @@
1
+ import {
2
+ getModelStrings as getModelStringsState,
3
+ setModelStrings as setModelStringsState,
4
+ } from 'src/bootstrap/state.js'
5
+ import { logError } from '../log.js'
6
+ import { sequential } from '../sequential.js'
7
+ import { getInitialSettings } from '../settings/settings.js'
8
+ import { findFirstMatch, getBedrockInferenceProfiles } from './bedrock.js'
9
+ import {
10
+ ALL_MODEL_CONFIGS,
11
+ CANONICAL_ID_TO_KEY,
12
+ type CanonicalModelId,
13
+ type ModelKey,
14
+ } from './configs.js'
15
+ import { type APIProvider, getAPIProvider } from './providers.js'
16
+
17
+ /**
18
+ * Maps each model version to its provider-specific model ID string.
19
+ * Derived from ALL_MODEL_CONFIGS — adding a model there extends this type.
20
+ */
21
+ export type ModelStrings = Record<ModelKey, string>
22
+
23
+ const MODEL_KEYS = Object.keys(ALL_MODEL_CONFIGS) as ModelKey[]
24
+
25
+ function getBuiltinModelStrings(provider: APIProvider): ModelStrings {
26
+ const out = {} as ModelStrings
27
+ for (const key of MODEL_KEYS) {
28
+ const config = ALL_MODEL_CONFIGS[key]
29
+ // Handle all providers - use type assertion to access provider-specific keys
30
+ const providerKey = provider as keyof typeof config
31
+ const value = config[providerKey]
32
+ out[key] = (value as string | undefined) || config.firstParty
33
+ }
34
+ return out
35
+ }
36
+
37
+ async function getBedrockModelStrings(): Promise<ModelStrings> {
38
+ const fallback = getBuiltinModelStrings('bedrock')
39
+ let profiles: string[] | undefined
40
+ try {
41
+ profiles = await getBedrockInferenceProfiles()
42
+ } catch (error) {
43
+ logError(error as Error)
44
+ return fallback
45
+ }
46
+ if (!profiles?.length) {
47
+ return fallback
48
+ }
49
+ // Each config's firstParty ID is the canonical substring we search for in the
50
+ // user's inference profile list (e.g. "claude-opus-4-6" matches
51
+ // "eu.anthropic.claude-opus-4-6-v1"). Fall back to the hardcoded bedrock ID
52
+ // when no matching profile is found.
53
+ const out = {} as ModelStrings
54
+ for (const key of MODEL_KEYS) {
55
+ const needle = ALL_MODEL_CONFIGS[key].firstParty
56
+ out[key] = findFirstMatch(profiles, needle) || fallback[key]
57
+ }
58
+ return out
59
+ }
60
+
61
+ /**
62
+ * Layer user-configured modelOverrides (from settings.json) on top of the
63
+ * provider-derived model strings. Overrides are keyed by canonical first-party
64
+ * model ID (e.g. "claude-opus-4-6") and map to arbitrary provider-specific
65
+ * strings — typically Bedrock inference profile ARNs.
66
+ */
67
+ function applyModelOverrides(ms: ModelStrings): ModelStrings {
68
+ const overrides = getInitialSettings().modelOverrides
69
+ if (!overrides) {
70
+ return ms
71
+ }
72
+ const out = { ...ms }
73
+ for (const [canonicalId, override] of Object.entries(overrides)) {
74
+ const key = CANONICAL_ID_TO_KEY[canonicalId as CanonicalModelId]
75
+ if (key && override) {
76
+ out[key] = override
77
+ }
78
+ }
79
+ return out
80
+ }
81
+
82
+ /**
83
+ * Resolve an overridden model ID (e.g. a Bedrock ARN) back to its canonical
84
+ * first-party model ID. If the input doesn't match any current override value,
85
+ * it is returned unchanged. Safe to call during module init (no-ops if settings
86
+ * aren't loaded yet).
87
+ */
88
+ export function resolveOverriddenModel(modelId: string): string {
89
+ let overrides: Record<string, string> | undefined
90
+ try {
91
+ overrides = getInitialSettings().modelOverrides
92
+ } catch {
93
+ return modelId
94
+ }
95
+ if (!overrides) {
96
+ return modelId
97
+ }
98
+ for (const [canonicalId, override] of Object.entries(overrides)) {
99
+ if (override === modelId) {
100
+ return canonicalId
101
+ }
102
+ }
103
+ return modelId
104
+ }
105
+
106
+ const updateBedrockModelStrings = sequential(async () => {
107
+ if (getModelStringsState() !== null) {
108
+ // Already initialized. Doing the check here, combined with
109
+ // `sequential`, allows the test suite to reset the state
110
+ // between tests while still preventing multiple API calls
111
+ // in production.
112
+ return
113
+ }
114
+ try {
115
+ const ms = await getBedrockModelStrings()
116
+ setModelStringsState(ms)
117
+ } catch (error) {
118
+ logError(error as Error)
119
+ }
120
+ })
121
+
122
+ function initModelStrings(): void {
123
+ const ms = getModelStringsState()
124
+ if (ms !== null) {
125
+ // Already initialized
126
+ return
127
+ }
128
+ // Initial with default values for non-Bedrock providers
129
+ if (getAPIProvider() !== 'bedrock') {
130
+ setModelStringsState(getBuiltinModelStrings(getAPIProvider()))
131
+ return
132
+ }
133
+ // On Bedrock, update model strings in the background without blocking.
134
+ // Don't set the state in this case so that we can use `sequential` on
135
+ // `updateBedrockModelStrings` and check for existing state on multiple
136
+ // calls.
137
+ void updateBedrockModelStrings()
138
+ }
139
+
140
+ export function getModelStrings(): ModelStrings {
141
+ const ms = getModelStringsState()
142
+ if (ms === null) {
143
+ initModelStrings()
144
+ // Bedrock path falls through here while the profile fetch runs in the
145
+ // background — still honor overrides on the interim defaults.
146
+ return applyModelOverrides(getBuiltinModelStrings(getAPIProvider()))
147
+ }
148
+ return applyModelOverrides(ms)
149
+ }
150
+
151
+ /**
152
+ * Ensure model strings are fully initialized.
153
+ * For Bedrock users, this waits for the profile fetch to complete.
154
+ * Call this before generating model options to ensure correct region strings.
155
+ */
156
+ export async function ensureModelStringsInitialized(): Promise<void> {
157
+ const ms = getModelStringsState()
158
+ if (ms !== null) {
159
+ return
160
+ }
161
+
162
+ // For non-Bedrock, initialize synchronously
163
+ if (getAPIProvider() !== 'bedrock') {
164
+ setModelStringsState(getBuiltinModelStrings(getAPIProvider()))
165
+ return
166
+ }
167
+
168
+ // For Bedrock, wait for the profile fetch
169
+ await updateBedrockModelStrings()
170
+ }
@@ -0,0 +1,50 @@
1
+ import memoize from 'lodash-es/memoize.js'
2
+ import { getAPIProvider } from './providers.js'
3
+
4
+ export type ModelCapabilityOverride =
5
+ | 'effort'
6
+ | 'max_effort'
7
+ | 'thinking'
8
+ | 'adaptive_thinking'
9
+ | 'interleaved_thinking'
10
+
11
+ const TIERS = [
12
+ {
13
+ modelEnvVar: 'ANTHROPIC_DEFAULT_OPUS_MODEL',
14
+ capabilitiesEnvVar: 'ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES',
15
+ },
16
+ {
17
+ modelEnvVar: 'ANTHROPIC_DEFAULT_SONNET_MODEL',
18
+ capabilitiesEnvVar: 'ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES',
19
+ },
20
+ {
21
+ modelEnvVar: 'ANTHROPIC_DEFAULT_HAIKU_MODEL',
22
+ capabilitiesEnvVar: 'ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES',
23
+ },
24
+ ] as const
25
+
26
+ /**
27
+ * Check whether a 3p model capability override is set for a model that matches one of
28
+ * the pinned ANTHROPIC_DEFAULT_*_MODEL env vars.
29
+ */
30
+ export const get3PModelCapabilityOverride = memoize(
31
+ (model: string, capability: ModelCapabilityOverride): boolean | undefined => {
32
+ if (getAPIProvider() === 'firstParty') {
33
+ return undefined
34
+ }
35
+ const m = model.toLowerCase()
36
+ for (const tier of TIERS) {
37
+ const pinned = process.env[tier.modelEnvVar]
38
+ const capabilities = process.env[tier.capabilitiesEnvVar]
39
+ if (!pinned || capabilities === undefined) continue
40
+ if (m !== pinned.toLowerCase()) continue
41
+ return capabilities
42
+ .toLowerCase()
43
+ .split(',')
44
+ .map(s => s.trim())
45
+ .includes(capability)
46
+ }
47
+ return undefined
48
+ },
49
+ (model, capability) => `${model.toLowerCase()}:${capability}`,
50
+ )
@@ -0,0 +1,42 @@
1
+ import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/index.js'
2
+ import { isEnvTruthy } from '../envUtils.js'
3
+
4
+ export type APIProvider = 'firstParty' | 'bedrock' | 'vertex' | 'foundry' | 'openrouter'
5
+
6
+ export function getAPIProvider(): APIProvider {
7
+ return isEnvTruthy(process.env.CLAUDE_CODE_USE_OPENROUTER)
8
+ ? 'openrouter'
9
+ : isEnvTruthy(process.env.CLAUDE_CODE_USE_BEDROCK)
10
+ ? 'bedrock'
11
+ : isEnvTruthy(process.env.CLAUDE_CODE_USE_VERTEX)
12
+ ? 'vertex'
13
+ : isEnvTruthy(process.env.CLAUDE_CODE_USE_FOUNDRY)
14
+ ? 'foundry'
15
+ : 'firstParty'
16
+ }
17
+
18
+ export function getAPIProviderForStatsig(): AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS {
19
+ return getAPIProvider() as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
20
+ }
21
+
22
+ /**
23
+ * Check if ANTHROPIC_BASE_URL is a first-party Anthropic API URL.
24
+ * Returns true if not set (default API) or points to api.anthropic.com
25
+ * (or api-staging.anthropic.com for ant users).
26
+ */
27
+ export function isFirstPartyAnthropicBaseUrl(): boolean {
28
+ const baseUrl = process.env.ANTHROPIC_BASE_URL
29
+ if (!baseUrl) {
30
+ return true
31
+ }
32
+ try {
33
+ const host = new URL(baseUrl).host
34
+ const allowedHosts = ['api.anthropic.com']
35
+ if (process.env.USER_TYPE === 'ant') {
36
+ allowedHosts.push('api-staging.anthropic.com')
37
+ }
38
+ return allowedHosts.includes(host)
39
+ } catch {
40
+ return false
41
+ }
42
+ }
@@ -0,0 +1,159 @@
1
+ // biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
2
+ import { MODEL_ALIASES } from './aliases.js'
3
+ import { isModelAllowed } from './modelAllowlist.js'
4
+ import { getAPIProvider } from './providers.js'
5
+ import { sideQuery } from '../sideQuery.js'
6
+ import {
7
+ NotFoundError,
8
+ APIError,
9
+ APIConnectionError,
10
+ AuthenticationError,
11
+ } from '@anthropic-ai/sdk'
12
+ import { getModelStrings } from './modelStrings.js'
13
+
14
+ // Cache valid models to avoid repeated API calls
15
+ const validModelCache = new Map<string, boolean>()
16
+
17
+ /**
18
+ * Validates a model by attempting an actual API call.
19
+ */
20
+ export async function validateModel(
21
+ model: string,
22
+ ): Promise<{ valid: boolean; error?: string }> {
23
+ const normalizedModel = model.trim()
24
+
25
+ // Empty model is invalid
26
+ if (!normalizedModel) {
27
+ return { valid: false, error: 'Model name cannot be empty' }
28
+ }
29
+
30
+ // Check against availableModels allowlist before any API call
31
+ if (!isModelAllowed(normalizedModel)) {
32
+ return {
33
+ valid: false,
34
+ error: `Model '${normalizedModel}' is not in the list of available models`,
35
+ }
36
+ }
37
+
38
+ // Check if it's a known alias (these are always valid)
39
+ const lowerModel = normalizedModel.toLowerCase()
40
+ if ((MODEL_ALIASES as readonly string[]).includes(lowerModel)) {
41
+ return { valid: true }
42
+ }
43
+
44
+ // Check if it matches ANTHROPIC_CUSTOM_MODEL_OPTION (pre-validated by the user)
45
+ if (normalizedModel === process.env.ANTHROPIC_CUSTOM_MODEL_OPTION) {
46
+ return { valid: true }
47
+ }
48
+
49
+ // Check cache first
50
+ if (validModelCache.has(normalizedModel)) {
51
+ return { valid: true }
52
+ }
53
+
54
+
55
+ // Try to make an actual API call with minimal parameters
56
+ try {
57
+ await sideQuery({
58
+ model: normalizedModel,
59
+ max_tokens: 1,
60
+ maxRetries: 0,
61
+ querySource: 'model_validation',
62
+ messages: [
63
+ {
64
+ role: 'user',
65
+ content: [
66
+ {
67
+ type: 'text',
68
+ text: 'Hi',
69
+ cache_control: { type: 'ephemeral' },
70
+ },
71
+ ],
72
+ },
73
+ ],
74
+ })
75
+
76
+ // If we got here, the model is valid
77
+ validModelCache.set(normalizedModel, true)
78
+ return { valid: true }
79
+ } catch (error) {
80
+ return handleValidationError(error, normalizedModel)
81
+ }
82
+ }
83
+
84
+ function handleValidationError(
85
+ error: unknown,
86
+ modelName: string,
87
+ ): { valid: boolean; error: string } {
88
+ // NotFoundError (404) means the model doesn't exist
89
+ if (error instanceof NotFoundError) {
90
+ const fallback = get3PFallbackSuggestion(modelName)
91
+ const suggestion = fallback ? `. Try '${fallback}' instead` : ''
92
+ return {
93
+ valid: false,
94
+ error: `Model '${modelName}' not found${suggestion}`,
95
+ }
96
+ }
97
+
98
+ // For other API errors, provide context-specific messages
99
+ if (error instanceof APIError) {
100
+ if (error instanceof AuthenticationError) {
101
+ return {
102
+ valid: false,
103
+ error: 'Authentication failed. Please check your API credentials.',
104
+ }
105
+ }
106
+
107
+ if (error instanceof APIConnectionError) {
108
+ return {
109
+ valid: false,
110
+ error: 'Network error. Please check your internet connection.',
111
+ }
112
+ }
113
+
114
+ // Check error body for model-specific errors
115
+ const errorBody = error.error as unknown
116
+ if (
117
+ errorBody &&
118
+ typeof errorBody === 'object' &&
119
+ 'type' in errorBody &&
120
+ errorBody.type === 'not_found_error' &&
121
+ 'message' in errorBody &&
122
+ typeof errorBody.message === 'string' &&
123
+ errorBody.message.includes('model:')
124
+ ) {
125
+ return { valid: false, error: `Model '${modelName}' not found` }
126
+ }
127
+
128
+ // Generic API error
129
+ return { valid: false, error: `API error: ${error.message}` }
130
+ }
131
+
132
+ // For unknown errors, be safe and reject
133
+ const errorMessage = error instanceof Error ? error.message : String(error)
134
+ return {
135
+ valid: false,
136
+ error: `Unable to validate model: ${errorMessage}`,
137
+ }
138
+ }
139
+
140
+ // @[MODEL LAUNCH]: Add a fallback suggestion chain for the new model → previous version
141
+ /**
142
+ * Suggest a fallback model for 3P users when the selected model is unavailable.
143
+ */
144
+ function get3PFallbackSuggestion(model: string): string | undefined {
145
+ if (getAPIProvider() === 'firstParty') {
146
+ return undefined
147
+ }
148
+ const lowerModel = model.toLowerCase()
149
+ if (lowerModel.includes('opus-4-6') || lowerModel.includes('opus_4_6')) {
150
+ return getModelStrings().opus41
151
+ }
152
+ if (lowerModel.includes('sonnet-4-6') || lowerModel.includes('sonnet_4_6')) {
153
+ return getModelStrings().sonnet45
154
+ }
155
+ if (lowerModel.includes('sonnet-4-5') || lowerModel.includes('sonnet_4_5')) {
156
+ return getModelStrings().sonnet40
157
+ }
158
+ return undefined
159
+ }
@@ -0,0 +1,231 @@
1
+ import type { BetaUsage as Usage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'
2
+ import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from 'src/services/analytics/index.js'
3
+ import { logEvent } from 'src/services/analytics/index.js'
4
+ import { setHasUnknownModelCost } from '../bootstrap/state.js'
5
+ import { isFastModeEnabled } from './fastMode.js'
6
+ import {
7
+ CLAUDE_3_5_HAIKU_CONFIG,
8
+ CLAUDE_3_5_V2_SONNET_CONFIG,
9
+ CLAUDE_3_7_SONNET_CONFIG,
10
+ CLAUDE_HAIKU_4_5_CONFIG,
11
+ CLAUDE_OPUS_4_1_CONFIG,
12
+ CLAUDE_OPUS_4_5_CONFIG,
13
+ CLAUDE_OPUS_4_6_CONFIG,
14
+ CLAUDE_OPUS_4_CONFIG,
15
+ CLAUDE_SONNET_4_5_CONFIG,
16
+ CLAUDE_SONNET_4_6_CONFIG,
17
+ CLAUDE_SONNET_4_CONFIG,
18
+ } from './model/configs.js'
19
+ import {
20
+ firstPartyNameToCanonical,
21
+ getCanonicalName,
22
+ getDefaultMainLoopModelSetting,
23
+ type ModelShortName,
24
+ } from './model/model.js'
25
+
26
+ // @see https://platform.claude.com/docs/en/about-claude/pricing
27
+ export type ModelCosts = {
28
+ inputTokens: number
29
+ outputTokens: number
30
+ promptCacheWriteTokens: number
31
+ promptCacheReadTokens: number
32
+ webSearchRequests: number
33
+ }
34
+
35
+ // Standard pricing tier for Sonnet models: $3 input / $15 output per Mtok
36
+ export const COST_TIER_3_15 = {
37
+ inputTokens: 3,
38
+ outputTokens: 15,
39
+ promptCacheWriteTokens: 3.75,
40
+ promptCacheReadTokens: 0.3,
41
+ webSearchRequests: 0.01,
42
+ } as const satisfies ModelCosts
43
+
44
+ // Pricing tier for Opus 4/4.1: $15 input / $75 output per Mtok
45
+ export const COST_TIER_15_75 = {
46
+ inputTokens: 15,
47
+ outputTokens: 75,
48
+ promptCacheWriteTokens: 18.75,
49
+ promptCacheReadTokens: 1.5,
50
+ webSearchRequests: 0.01,
51
+ } as const satisfies ModelCosts
52
+
53
+ // Pricing tier for Opus 4.5: $5 input / $25 output per Mtok
54
+ export const COST_TIER_5_25 = {
55
+ inputTokens: 5,
56
+ outputTokens: 25,
57
+ promptCacheWriteTokens: 6.25,
58
+ promptCacheReadTokens: 0.5,
59
+ webSearchRequests: 0.01,
60
+ } as const satisfies ModelCosts
61
+
62
+ // Fast mode pricing for Opus 4.6: $30 input / $150 output per Mtok
63
+ export const COST_TIER_30_150 = {
64
+ inputTokens: 30,
65
+ outputTokens: 150,
66
+ promptCacheWriteTokens: 37.5,
67
+ promptCacheReadTokens: 3,
68
+ webSearchRequests: 0.01,
69
+ } as const satisfies ModelCosts
70
+
71
+ // Pricing for Haiku 3.5: $0.80 input / $4 output per Mtok
72
+ export const COST_HAIKU_35 = {
73
+ inputTokens: 0.8,
74
+ outputTokens: 4,
75
+ promptCacheWriteTokens: 1,
76
+ promptCacheReadTokens: 0.08,
77
+ webSearchRequests: 0.01,
78
+ } as const satisfies ModelCosts
79
+
80
+ // Pricing for Haiku 4.5: $1 input / $5 output per Mtok
81
+ export const COST_HAIKU_45 = {
82
+ inputTokens: 1,
83
+ outputTokens: 5,
84
+ promptCacheWriteTokens: 1.25,
85
+ promptCacheReadTokens: 0.1,
86
+ webSearchRequests: 0.01,
87
+ } as const satisfies ModelCosts
88
+
89
+ const DEFAULT_UNKNOWN_MODEL_COST = COST_TIER_5_25
90
+
91
+ /**
92
+ * Get the cost tier for Opus 4.6 based on fast mode.
93
+ */
94
+ export function getOpus46CostTier(fastMode: boolean): ModelCosts {
95
+ if (isFastModeEnabled() && fastMode) {
96
+ return COST_TIER_30_150
97
+ }
98
+ return COST_TIER_5_25
99
+ }
100
+
101
+ // @[MODEL LAUNCH]: Add a pricing entry for the new model below.
102
+ // Costs from https://platform.claude.com/docs/en/about-claude/pricing
103
+ // Web search cost: $10 per 1000 requests = $0.01 per request
104
+ export const MODEL_COSTS: Record<ModelShortName, ModelCosts> = {
105
+ [firstPartyNameToCanonical(CLAUDE_3_5_HAIKU_CONFIG.firstParty)]:
106
+ COST_HAIKU_35,
107
+ [firstPartyNameToCanonical(CLAUDE_HAIKU_4_5_CONFIG.firstParty)]:
108
+ COST_HAIKU_45,
109
+ [firstPartyNameToCanonical(CLAUDE_3_5_V2_SONNET_CONFIG.firstParty)]:
110
+ COST_TIER_3_15,
111
+ [firstPartyNameToCanonical(CLAUDE_3_7_SONNET_CONFIG.firstParty)]:
112
+ COST_TIER_3_15,
113
+ [firstPartyNameToCanonical(CLAUDE_SONNET_4_CONFIG.firstParty)]:
114
+ COST_TIER_3_15,
115
+ [firstPartyNameToCanonical(CLAUDE_SONNET_4_5_CONFIG.firstParty)]:
116
+ COST_TIER_3_15,
117
+ [firstPartyNameToCanonical(CLAUDE_SONNET_4_6_CONFIG.firstParty)]:
118
+ COST_TIER_3_15,
119
+ [firstPartyNameToCanonical(CLAUDE_OPUS_4_CONFIG.firstParty)]: COST_TIER_15_75,
120
+ [firstPartyNameToCanonical(CLAUDE_OPUS_4_1_CONFIG.firstParty)]:
121
+ COST_TIER_15_75,
122
+ [firstPartyNameToCanonical(CLAUDE_OPUS_4_5_CONFIG.firstParty)]:
123
+ COST_TIER_5_25,
124
+ [firstPartyNameToCanonical(CLAUDE_OPUS_4_6_CONFIG.firstParty)]:
125
+ COST_TIER_5_25,
126
+ }
127
+
128
+ /**
129
+ * Calculates the USD cost based on token usage and model cost configuration
130
+ */
131
+ function tokensToUSDCost(modelCosts: ModelCosts, usage: Usage): number {
132
+ return (
133
+ (usage.input_tokens / 1_000_000) * modelCosts.inputTokens +
134
+ (usage.output_tokens / 1_000_000) * modelCosts.outputTokens +
135
+ ((usage.cache_read_input_tokens ?? 0) / 1_000_000) *
136
+ modelCosts.promptCacheReadTokens +
137
+ ((usage.cache_creation_input_tokens ?? 0) / 1_000_000) *
138
+ modelCosts.promptCacheWriteTokens +
139
+ (usage.server_tool_use?.web_search_requests ?? 0) *
140
+ modelCosts.webSearchRequests
141
+ )
142
+ }
143
+
144
+ export function getModelCosts(model: string, usage: Usage): ModelCosts {
145
+ const shortName = getCanonicalName(model)
146
+
147
+ // Check if this is an Opus 4.6 model with fast mode active.
148
+ if (
149
+ shortName === firstPartyNameToCanonical(CLAUDE_OPUS_4_6_CONFIG.firstParty)
150
+ ) {
151
+ const isFastMode = usage.speed === 'fast'
152
+ return getOpus46CostTier(isFastMode)
153
+ }
154
+
155
+ const costs = MODEL_COSTS[shortName]
156
+ if (!costs) {
157
+ trackUnknownModelCost(model, shortName)
158
+ return (
159
+ MODEL_COSTS[getCanonicalName(getDefaultMainLoopModelSetting())] ??
160
+ DEFAULT_UNKNOWN_MODEL_COST
161
+ )
162
+ }
163
+ return costs
164
+ }
165
+
166
+ function trackUnknownModelCost(model: string, shortName: ModelShortName): void {
167
+ logEvent('tengu_unknown_model_cost', {
168
+ model: model as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
169
+ shortName:
170
+ shortName as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
171
+ })
172
+ setHasUnknownModelCost()
173
+ }
174
+
175
+ // Calculate the cost of a query in US dollars.
176
+ // If the model's costs are not found, use the default model's costs.
177
+ export function calculateUSDCost(resolvedModel: string, usage: Usage): number {
178
+ const modelCosts = getModelCosts(resolvedModel, usage)
179
+ return tokensToUSDCost(modelCosts, usage)
180
+ }
181
+
182
+ /**
183
+ * Calculate cost from raw token counts without requiring a full BetaUsage object.
184
+ * Useful for side queries (e.g. classifier) that track token counts independently.
185
+ */
186
+ export function calculateCostFromTokens(
187
+ model: string,
188
+ tokens: {
189
+ inputTokens: number
190
+ outputTokens: number
191
+ cacheReadInputTokens: number
192
+ cacheCreationInputTokens: number
193
+ },
194
+ ): number {
195
+ const usage: Usage = {
196
+ input_tokens: tokens.inputTokens,
197
+ output_tokens: tokens.outputTokens,
198
+ cache_read_input_tokens: tokens.cacheReadInputTokens,
199
+ cache_creation_input_tokens: tokens.cacheCreationInputTokens,
200
+ } as Usage
201
+ return calculateUSDCost(model, usage)
202
+ }
203
+
204
+ function formatPrice(price: number): string {
205
+ // Format price: integers without decimals, others with 2 decimal places
206
+ // e.g., 3 -> "$3", 0.8 -> "$0.80", 22.5 -> "$22.50"
207
+ if (Number.isInteger(price)) {
208
+ return `$${price}`
209
+ }
210
+ return `$${price.toFixed(2)}`
211
+ }
212
+
213
+ /**
214
+ * Format model costs as a pricing string for display
215
+ * e.g., "$3/$15 per Mtok"
216
+ */
217
+ export function formatModelPricing(costs: ModelCosts): string {
218
+ return `${formatPrice(costs.inputTokens)}/${formatPrice(costs.outputTokens)} per Mtok`
219
+ }
220
+
221
+ /**
222
+ * Get formatted pricing string for a model
223
+ * Accepts either a short name or full model name
224
+ * Returns undefined if model is not found
225
+ */
226
+ export function getModelPricingString(model: string): string | undefined {
227
+ const shortName = getCanonicalName(model)
228
+ const costs = MODEL_COSTS[shortName]
229
+ if (!costs) return undefined
230
+ return formatModelPricing(costs)
231
+ }
@@ -0,0 +1,36 @@
1
+ export type ModifierKey = 'shift' | 'command' | 'control' | 'option'
2
+
3
+ let prewarmed = false
4
+
5
+ /**
6
+ * Pre-warm the native module by loading it in advance.
7
+ * Call this early to avoid delay on first use.
8
+ */
9
+ export function prewarmModifiers(): void {
10
+ if (prewarmed || process.platform !== 'darwin') {
11
+ return
12
+ }
13
+ prewarmed = true
14
+ // Load module in background
15
+ try {
16
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
17
+ const { prewarm } = require('modifiers-napi') as { prewarm: () => void }
18
+ prewarm()
19
+ } catch {
20
+ // Ignore errors during prewarm
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Check if a specific modifier key is currently pressed (synchronous).
26
+ */
27
+ export function isModifierPressed(modifier: ModifierKey): boolean {
28
+ if (process.platform !== 'darwin') {
29
+ return false
30
+ }
31
+ // Dynamic import to avoid loading native module at top level
32
+ const { isModifierPressed: nativeIsModifierPressed } =
33
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
34
+ require('modifiers-napi') as { isModifierPressed: (m: string) => boolean }
35
+ return nativeIsModifierPressed(modifier)
36
+ }