@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,654 @@
1
+ // biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
2
+ /**
3
+ * Ensure that any model codenames introduced here are also added to
4
+ * scripts/excluded-strings.txt to avoid leaking them. Wrap any codename string
5
+ * literals with process.env.USER_TYPE === 'ant' for Bun to remove the codenames
6
+ * during dead code elimination
7
+ */
8
+ import { getMainLoopModelOverride } from '../../bootstrap/state.js'
9
+ import {
10
+ getSubscriptionType,
11
+ isClaudeAISubscriber,
12
+ isMaxSubscriber,
13
+ isProSubscriber,
14
+ isTeamPremiumSubscriber,
15
+ } from '../auth.js'
16
+ import {
17
+ has1mContext,
18
+ is1mContextDisabled,
19
+ modelSupports1M,
20
+ } from '../context.js'
21
+ import { isEnvTruthy } from '../envUtils.js'
22
+ import { getModelStrings, resolveOverriddenModel } from './modelStrings.js'
23
+ import { formatModelPricing, getOpus46CostTier } from '../modelCost.js'
24
+ import { getSettings_DEPRECATED } from '../settings/settings.js'
25
+ import type { PermissionMode } from '../permissions/PermissionMode.js'
26
+ import { getAPIProvider } from './providers.js'
27
+ import { LIGHTNING_BOLT } from '../../constants/figures.js'
28
+ import { isModelAllowed } from './modelAllowlist.js'
29
+ import { type ModelAlias, isModelAlias } from './aliases.js'
30
+ import { capitalize } from '../stringUtils.js'
31
+
32
+ export type ModelShortName = string
33
+ export type ModelName = string
34
+ export type ModelSetting = ModelName | ModelAlias | null
35
+
36
+ export function getSmallFastModel(): ModelName {
37
+ return process.env.ANTHROPIC_SMALL_FAST_MODEL || getDefaultHaikuModel()
38
+ }
39
+
40
+ export function isNonCustomOpusModel(model: ModelName): boolean {
41
+ return (
42
+ model === getModelStrings().opus40 ||
43
+ model === getModelStrings().opus41 ||
44
+ model === getModelStrings().opus45 ||
45
+ model === getModelStrings().opus46
46
+ )
47
+ }
48
+
49
+ /**
50
+ * Helper to get the model from /model (including via /config), the --model flag, environment variable,
51
+ * or the saved settings. The returned value can be a model alias if that's what the user specified.
52
+ * Undefined if the user didn't configure anything, in which case we fall back to
53
+ * the default (null).
54
+ *
55
+ * Priority order within this function:
56
+ * 1. Model override during session (from /model command) - highest priority
57
+ * 2. Model override at startup (from --model flag)
58
+ * 3. ANTHROPIC_MODEL environment variable
59
+ * 4. Settings (from user's saved settings)
60
+ */
61
+ export function getUserSpecifiedModelSetting(): ModelSetting | undefined {
62
+ let specifiedModel: ModelSetting | undefined
63
+
64
+ const modelOverride = getMainLoopModelOverride()
65
+ if (modelOverride !== undefined) {
66
+ specifiedModel = modelOverride
67
+ } else {
68
+ const settings = getSettings_DEPRECATED() || {}
69
+ specifiedModel = process.env.ANTHROPIC_MODEL || settings.model || undefined
70
+ }
71
+
72
+ // Ignore the user-specified model if it's not in the availableModels allowlist.
73
+ if (specifiedModel && !isModelAllowed(specifiedModel)) {
74
+ return undefined
75
+ }
76
+
77
+ return specifiedModel
78
+ }
79
+
80
+ /**
81
+ * Get the main loop model to use for the current session.
82
+ *
83
+ * Model Selection Priority Order:
84
+ * 1. Model override during session (from /model command) - highest priority
85
+ * 2. Model override at startup (from --model flag)
86
+ * 3. ANTHROPIC_MODEL environment variable
87
+ * 4. Settings (from user's saved settings)
88
+ * 5. Built-in default
89
+ *
90
+ * @returns The resolved model name to use
91
+ */
92
+ export function getMainLoopModel(): ModelName {
93
+ const model = getUserSpecifiedModelSetting()
94
+ if (model !== undefined && model !== null) {
95
+ return parseUserSpecifiedModel(model)
96
+ }
97
+ return getDefaultMainLoopModel()
98
+ }
99
+
100
+ export function getBestModel(): ModelName {
101
+ return getDefaultOpusModel()
102
+ }
103
+
104
+ // @[MODEL LAUNCH]: Update the default Opus model (3P providers may lag so keep defaults unchanged).
105
+ export function getDefaultOpusModel(): ModelName {
106
+ if (process.env.ANTHROPIC_DEFAULT_OPUS_MODEL) {
107
+ return process.env.ANTHROPIC_DEFAULT_OPUS_MODEL
108
+ }
109
+ // 3P providers (Bedrock, Vertex, Foundry) — kept as a separate branch
110
+ // even when values match, since 3P availability lags firstParty and
111
+ // these will diverge again at the next model launch.
112
+ if (getAPIProvider() !== 'firstParty') {
113
+ return getModelStrings().opus46
114
+ }
115
+ return getModelStrings().opus46
116
+ }
117
+
118
+ // @[MODEL LAUNCH]: Update the default Sonnet model (3P providers may lag so keep defaults unchanged).
119
+ export function getDefaultSonnetModel(): ModelName {
120
+ if (process.env.ANTHROPIC_DEFAULT_SONNET_MODEL) {
121
+ return process.env.ANTHROPIC_DEFAULT_SONNET_MODEL
122
+ }
123
+ // Default to Sonnet 4.5 for 3P since they may not have 4.6 yet
124
+ if (getAPIProvider() !== 'firstParty') {
125
+ return getModelStrings().sonnet45
126
+ }
127
+ return getModelStrings().sonnet46
128
+ }
129
+
130
+ // @[MODEL LAUNCH]: Update the default Haiku model (3P providers may lag so keep defaults unchanged).
131
+ export function getDefaultHaikuModel(): ModelName {
132
+ if (process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL) {
133
+ return process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL
134
+ }
135
+
136
+ // Haiku 4.5 is available on all platforms (first-party, Foundry, Bedrock, Vertex)
137
+ return getModelStrings().haiku45
138
+ }
139
+
140
+ /**
141
+ * Get the model to use for runtime, depending on the runtime context.
142
+ * @param params Subset of the runtime context to determine the model to use.
143
+ * @returns The model to use
144
+ */
145
+ export function getRuntimeMainLoopModel(params: {
146
+ permissionMode: PermissionMode
147
+ mainLoopModel: string
148
+ exceeds200kTokens?: boolean
149
+ }): ModelName {
150
+ const { permissionMode, mainLoopModel, exceeds200kTokens = false } = params
151
+
152
+ // opusplan uses Opus in plan mode without [1m] suffix.
153
+ if (
154
+ getUserSpecifiedModelSetting() === 'opusplan' &&
155
+ permissionMode === 'plan' &&
156
+ !exceeds200kTokens
157
+ ) {
158
+ return getDefaultOpusModel()
159
+ }
160
+
161
+ // sonnetplan by default
162
+ if (getUserSpecifiedModelSetting() === 'haiku' && permissionMode === 'plan') {
163
+ return getDefaultSonnetModel()
164
+ }
165
+
166
+ return mainLoopModel
167
+ }
168
+
169
+ /**
170
+ * Get the default main loop model setting.
171
+ *
172
+ * This handles the built-in default:
173
+ * - Opus for Max and Team Premium users
174
+ * - Sonnet 4.6 for all other users (including Team Standard, Pro, Enterprise)
175
+ *
176
+ * @returns The default model setting to use
177
+ */
178
+ export function getDefaultMainLoopModelSetting(): ModelName | ModelAlias {
179
+ // Ants default to defaultModel from flag config, or Opus 1M if not configured
180
+ if (process.env.USER_TYPE === 'ant') {
181
+ return (
182
+ getAntModelOverrideConfig()?.defaultModel ??
183
+ getDefaultOpusModel() + '[1m]'
184
+ )
185
+ }
186
+
187
+ // Max users get Opus as default
188
+ if (isMaxSubscriber()) {
189
+ return getDefaultOpusModel() + (isOpus1mMergeEnabled() ? '[1m]' : '')
190
+ }
191
+
192
+ // Team Premium gets Opus (same as Max)
193
+ if (isTeamPremiumSubscriber()) {
194
+ return getDefaultOpusModel() + (isOpus1mMergeEnabled() ? '[1m]' : '')
195
+ }
196
+
197
+ // PAYG (1P and 3P), Enterprise, Team Standard, and Pro get Sonnet as default
198
+ // Note that PAYG (3P) may default to an older Sonnet model
199
+ return getDefaultSonnetModel()
200
+ }
201
+
202
+ /**
203
+ * Synchronous operation to get the default main loop model to use
204
+ * (bypassing any user-specified values).
205
+ */
206
+ export function getDefaultMainLoopModel(): ModelName {
207
+ return parseUserSpecifiedModel(getDefaultMainLoopModelSetting())
208
+ }
209
+
210
+ // @[MODEL LAUNCH]: Add a canonical name mapping for the new model below.
211
+ /**
212
+ * Pure string-match that strips date/provider suffixes from a first-party model
213
+ * name. Input must already be a 1P-format ID (e.g. 'claude-3-7-sonnet-20250219',
214
+ * 'us.anthropic.claude-opus-4-6-v1:0'). Does not touch settings, so safe at
215
+ * module top-level (see MODEL_COSTS in modelCost.ts).
216
+ */
217
+ export function firstPartyNameToCanonical(name: ModelName): ModelShortName {
218
+ name = name.toLowerCase()
219
+ // Special cases for Claude 4+ models to differentiate versions
220
+ // Order matters: check more specific versions first (4-5 before 4)
221
+ if (name.includes('claude-opus-4-6')) {
222
+ return 'claude-opus-4-6'
223
+ }
224
+ if (name.includes('claude-opus-4-5')) {
225
+ return 'claude-opus-4-5'
226
+ }
227
+ if (name.includes('claude-opus-4-1')) {
228
+ return 'claude-opus-4-1'
229
+ }
230
+ if (name.includes('claude-opus-4')) {
231
+ return 'claude-opus-4'
232
+ }
233
+ if (name.includes('claude-sonnet-4-6')) {
234
+ return 'claude-sonnet-4-6'
235
+ }
236
+ if (name.includes('claude-sonnet-4-5')) {
237
+ return 'claude-sonnet-4-5'
238
+ }
239
+ if (name.includes('claude-sonnet-4')) {
240
+ return 'claude-sonnet-4'
241
+ }
242
+ if (name.includes('claude-haiku-4-5')) {
243
+ return 'claude-haiku-4-5'
244
+ }
245
+
246
+ // OpenRouter models
247
+ if (name.includes('kimi-k2.5') || name.includes('kimi-k2-5') || name.includes('moonshotai/kimi-k2-5')) {
248
+ return 'kimi-k2.5'
249
+ }
250
+ if (name.includes('deepseek-v3.2') || name.includes('deepseek-v3-2') || name.includes('deepseek/deepseek-v3.2')) {
251
+ return 'deepseek-v3.2'
252
+ }
253
+ if (name.includes('gemini-2.5-pro') || name.includes('gemini-2-5-pro') || name.includes('google/gemini-2.5-pro-preview')) {
254
+ return 'gemini-2.5-pro'
255
+ }
256
+
257
+ // Claude 3.x models use a different naming scheme (claude-3-{family})
258
+ if (name.includes('claude-3-7-sonnet')) {
259
+ return 'claude-3-7-sonnet'
260
+ }
261
+ if (name.includes('claude-3-5-sonnet')) {
262
+ return 'claude-3-5-sonnet'
263
+ }
264
+ if (name.includes('claude-3-5-haiku')) {
265
+ return 'claude-3-5-haiku'
266
+ }
267
+ if (name.includes('claude-3-opus')) {
268
+ return 'claude-3-opus'
269
+ }
270
+ if (name.includes('claude-3-sonnet')) {
271
+ return 'claude-3-sonnet'
272
+ }
273
+ if (name.includes('claude-3-haiku')) {
274
+ return 'claude-3-haiku'
275
+ }
276
+ const match = name.match(/(claude-(\d+-\d+-)?\w+)/)
277
+ if (match && match[1]) {
278
+ return match[1]
279
+ }
280
+ // Fall back to the original name if no pattern matches
281
+ return name
282
+ }
283
+
284
+ /**
285
+ * Maps a full model string to a shorter canonical version that's unified across 1P and 3P providers.
286
+ * For example, 'claude-3-5-haiku-20241022' and 'us.anthropic.claude-3-5-haiku-20241022-v1:0'
287
+ * would both be mapped to 'claude-3-5-haiku'.
288
+ * @param fullModelName The full model name (e.g., 'claude-3-5-haiku-20241022')
289
+ * @returns The short name (e.g., 'claude-3-5-haiku') if found, or the original name if no mapping exists
290
+ */
291
+ export function getCanonicalName(fullModelName: ModelName): ModelShortName {
292
+ // Resolve overridden model IDs (e.g. Bedrock ARNs) back to canonical names.
293
+ // resolved is always a 1P-format ID, so firstPartyNameToCanonical can handle it.
294
+ return firstPartyNameToCanonical(resolveOverriddenModel(fullModelName))
295
+ }
296
+
297
+ // @[MODEL LAUNCH]: Update the default model description strings shown to users.
298
+ export function getClaudeAiUserDefaultModelDescription(
299
+ fastMode = false,
300
+ ): string {
301
+ if (isMaxSubscriber() || isTeamPremiumSubscriber()) {
302
+ if (isOpus1mMergeEnabled()) {
303
+ return `Opus 4.6 with 1M context · Most capable for complex work${fastMode ? getOpus46PricingSuffix(true) : ''}`
304
+ }
305
+ return `Opus 4.6 · Most capable for complex work${fastMode ? getOpus46PricingSuffix(true) : ''}`
306
+ }
307
+ return 'Sonnet 4.6 · Best for everyday tasks'
308
+ }
309
+
310
+ export function renderDefaultModelSetting(
311
+ setting: ModelName | ModelAlias,
312
+ ): string {
313
+ if (setting === 'opusplan') {
314
+ return 'Opus 4.6 in plan mode, else Sonnet 4.6'
315
+ }
316
+ return renderModelName(parseUserSpecifiedModel(setting))
317
+ }
318
+
319
+ export function getOpus46PricingSuffix(fastMode: boolean): string {
320
+ if (getAPIProvider() !== 'firstParty') return ''
321
+ const pricing = formatModelPricing(getOpus46CostTier(fastMode))
322
+ const fastModeIndicator = fastMode ? ` (${LIGHTNING_BOLT})` : ''
323
+ return ` ·${fastModeIndicator} ${pricing}`
324
+ }
325
+
326
+ export function isOpus1mMergeEnabled(): boolean {
327
+ if (
328
+ is1mContextDisabled() ||
329
+ isProSubscriber() ||
330
+ getAPIProvider() !== 'firstParty'
331
+ ) {
332
+ return false
333
+ }
334
+ // Fail closed when a subscriber's subscription type is unknown. The VS Code
335
+ // config-loading subprocess can have OAuth tokens with valid scopes but no
336
+ // subscriptionType field (stale or partial refresh). Without this guard,
337
+ // isProSubscriber() returns false for such users and the merge leaks
338
+ // opus[1m] into the model dropdown — the API then rejects it with a
339
+ // misleading "rate limit reached" error.
340
+ if (isClaudeAISubscriber() && getSubscriptionType() === null) {
341
+ return false
342
+ }
343
+ return true
344
+ }
345
+
346
+ export function renderModelSetting(setting: ModelName | ModelAlias): string {
347
+ if (setting === 'opusplan') {
348
+ return 'Opus Plan'
349
+ }
350
+ if (isModelAlias(setting)) {
351
+ return capitalize(setting)
352
+ }
353
+ return renderModelName(setting)
354
+ }
355
+
356
+ // @[MODEL LAUNCH]: Add display name cases for the new model (base + [1m] variant if applicable).
357
+ /**
358
+ * Returns a human-readable display name for known public models, or null
359
+ * if the model is not recognized as a public model.
360
+ */
361
+ export function getPublicModelDisplayName(model: ModelName): string | null {
362
+ switch (model) {
363
+ case getModelStrings().opus46:
364
+ return 'Opus 4.6'
365
+ case getModelStrings().opus46 + '[1m]':
366
+ return 'Opus 4.6 (1M context)'
367
+ case getModelStrings().opus45:
368
+ return 'Opus 4.5'
369
+ case getModelStrings().opus41:
370
+ return 'Opus 4.1'
371
+ case getModelStrings().opus40:
372
+ return 'Opus 4'
373
+ case getModelStrings().sonnet46 + '[1m]':
374
+ return 'Sonnet 4.6 (1M context)'
375
+ case getModelStrings().sonnet46:
376
+ return 'Sonnet 4.6'
377
+ case getModelStrings().sonnet45 + '[1m]':
378
+ return 'Sonnet 4.5 (1M context)'
379
+ case getModelStrings().sonnet45:
380
+ return 'Sonnet 4.5'
381
+ case getModelStrings().sonnet40:
382
+ return 'Sonnet 4'
383
+ case getModelStrings().sonnet40 + '[1m]':
384
+ return 'Sonnet 4 (1M context)'
385
+ case getModelStrings().sonnet37:
386
+ return 'Sonnet 3.7'
387
+ case getModelStrings().sonnet35:
388
+ return 'Sonnet 3.5'
389
+ case getModelStrings().haiku45:
390
+ return 'gemini-2.5-pro'
391
+ case getModelStrings().haiku35:
392
+ return 'Haiku 3.5'
393
+ default:
394
+ return null
395
+ }
396
+ }
397
+
398
+ function maskModelCodename(baseName: string): string {
399
+ // Mask only the first dash-separated segment (the codename), preserve the rest
400
+ // e.g. capybara-v2-fast → cap*****-v2-fast
401
+ const [codename = '', ...rest] = baseName.split('-')
402
+ const masked =
403
+ codename.slice(0, 3) + '*'.repeat(Math.max(0, codename.length - 3))
404
+ return [masked, ...rest].join('-')
405
+ }
406
+
407
+ export function renderModelName(model: ModelName): string {
408
+ const publicName = getPublicModelDisplayName(model)
409
+ if (publicName) {
410
+ return publicName
411
+ }
412
+ if (process.env.USER_TYPE === 'ant') {
413
+ const resolved = parseUserSpecifiedModel(model)
414
+ const antModel = resolveAntModel(model)
415
+ if (antModel) {
416
+ const baseName = antModel.model.replace(/\[1m\]$/i, '')
417
+ const masked = maskModelCodename(baseName)
418
+ const suffix = has1mContext(resolved) ? '[1m]' : ''
419
+ return masked + suffix
420
+ }
421
+ if (resolved !== model) {
422
+ return `${model} (${resolved})`
423
+ }
424
+ return resolved
425
+ }
426
+ return model
427
+ }
428
+
429
+ /**
430
+ * Returns a safe author name for public display (e.g., in git commit trailers).
431
+ * Returns "Claude {ModelName}" for publicly known models, or "Claude ({model})"
432
+ * for unknown/internal models so the exact model name is preserved.
433
+ *
434
+ * @param model The full model name
435
+ * @returns "Claude {ModelName}" for public models, or "Claude ({model})" for non-public models
436
+ */
437
+ export function getPublicModelName(model: ModelName): string {
438
+ const publicName = getPublicModelDisplayName(model)
439
+ if (publicName) {
440
+ return `Claude ${publicName}`
441
+ }
442
+ return `Claude (${model})`
443
+ }
444
+
445
+ /**
446
+ * Returns a full model name for use in this session, possibly after resolving
447
+ * a model alias.
448
+ *
449
+ * This function intentionally does not support version numbers to align with
450
+ * the model switcher.
451
+ *
452
+ * Supports [1m] suffix on any model alias (e.g., haiku[1m], sonnet[1m]) to enable
453
+ * 1M context window without requiring each variant to be in MODEL_ALIASES.
454
+ *
455
+ * @param modelInput The model alias or name provided by the user.
456
+ */
457
+ export function parseUserSpecifiedModel(
458
+ modelInput: ModelName | ModelAlias,
459
+ ): ModelName {
460
+ const modelInputTrimmed = modelInput.trim()
461
+ const normalizedModel = modelInputTrimmed.toLowerCase()
462
+
463
+ const has1mTag = has1mContext(normalizedModel)
464
+ const modelString = has1mTag
465
+ ? normalizedModel.replace(/\[1m]$/i, '').trim()
466
+ : normalizedModel
467
+
468
+ if (isModelAlias(modelString)) {
469
+ switch (modelString) {
470
+ case 'opusplan':
471
+ return getDefaultSonnetModel() + (has1mTag ? '[1m]' : '') // Sonnet is default, Opus in plan mode
472
+ case 'sonnet':
473
+ return getDefaultSonnetModel() + (has1mTag ? '[1m]' : '')
474
+ case 'haiku':
475
+ return getDefaultHaikuModel() + (has1mTag ? '[1m]' : '')
476
+ case 'opus':
477
+ return getDefaultOpusModel() + (has1mTag ? '[1m]' : '')
478
+ case 'best':
479
+ return getBestModel()
480
+ // OpenRouter models
481
+ case 'kimi':
482
+ case 'kimi2.5':
483
+ case 'kimi-k2.5':
484
+ return 'kimi-k2.5'
485
+ case 'deepseek':
486
+ case 'deepseek-v3.2':
487
+ return 'deepseek-v3.2'
488
+ case 'gemini':
489
+ case 'gemini-pro':
490
+ case 'gemini-2.5':
491
+ case 'gemini-2.5-pro':
492
+ return 'gemini-2.5-pro'
493
+ default:
494
+ }
495
+ }
496
+
497
+ // Opus 4/4.1 are no longer available on the first-party API (same as
498
+ // Claude.ai) — silently remap to the current Opus default. The 'opus'
499
+ // alias already resolves to 4.6, so the only users on these explicit
500
+ // strings pinned them in settings/env/--model/SDK before 4.5 launched.
501
+ // 3P providers may not yet have 4.6 capacity, so pass through unchanged.
502
+ if (
503
+ getAPIProvider() === 'firstParty' &&
504
+ isLegacyOpusFirstParty(modelString) &&
505
+ isLegacyModelRemapEnabled()
506
+ ) {
507
+ return getDefaultOpusModel() + (has1mTag ? '[1m]' : '')
508
+ }
509
+
510
+ if (process.env.USER_TYPE === 'ant') {
511
+ const has1mAntTag = has1mContext(normalizedModel)
512
+ const baseAntModel = normalizedModel.replace(/\[1m]$/i, '').trim()
513
+
514
+ const antModel = resolveAntModel(baseAntModel)
515
+ if (antModel) {
516
+ const suffix = has1mAntTag ? '[1m]' : ''
517
+ return antModel.model + suffix
518
+ }
519
+
520
+ // Fall through to the alias string if we cannot load the config. The API calls
521
+ // will fail with this string, but we should hear about it through feedback and
522
+ // can tell the user to restart/wait for flag cache refresh to get the latest values.
523
+ }
524
+
525
+ // Preserve original case for custom model names (e.g., Azure Foundry deployment IDs)
526
+ // Only strip [1m] suffix if present, maintaining case of the base model
527
+ if (has1mTag) {
528
+ return modelInputTrimmed.replace(/\[1m\]$/i, '').trim() + '[1m]'
529
+ }
530
+ return modelInputTrimmed
531
+ }
532
+
533
+ /**
534
+ * Resolves a skill's `model:` frontmatter against the current model, carrying
535
+ * the `[1m]` suffix over when the target family supports it.
536
+ *
537
+ * A skill author writing `model: opus` means "use opus-class reasoning" — not
538
+ * "downgrade to 200K". If the user is on opus[1m] at 230K tokens and invokes a
539
+ * skill with `model: opus`, passing the bare alias through drops the effective
540
+ * context window from 1M to 200K, which trips autocompact at 23% apparent usage
541
+ * and surfaces "Context limit reached" even though nothing overflowed.
542
+ *
543
+ * We only carry [1m] when the target actually supports it (sonnet/opus). A skill
544
+ * with `model: haiku` on a 1M session still downgrades — haiku has no 1M variant,
545
+ * so the autocompact that follows is correct. Skills that already specify [1m]
546
+ * are left untouched.
547
+ */
548
+ export function resolveSkillModelOverride(
549
+ skillModel: string,
550
+ currentModel: string,
551
+ ): string {
552
+ if (has1mContext(skillModel) || !has1mContext(currentModel)) {
553
+ return skillModel
554
+ }
555
+ // modelSupports1M matches on canonical IDs ('claude-opus-4-6', 'claude-sonnet-4');
556
+ // a bare 'opus' alias falls through getCanonicalName unmatched. Resolve first.
557
+ if (modelSupports1M(parseUserSpecifiedModel(skillModel))) {
558
+ return skillModel + '[1m]'
559
+ }
560
+ return skillModel
561
+ }
562
+
563
+ const LEGACY_OPUS_FIRSTPARTY = [
564
+ 'claude-opus-4-20250514',
565
+ 'claude-opus-4-1-20250805',
566
+ 'claude-opus-4-0',
567
+ 'claude-opus-4-1',
568
+ ]
569
+
570
+ function isLegacyOpusFirstParty(model: string): boolean {
571
+ return LEGACY_OPUS_FIRSTPARTY.includes(model)
572
+ }
573
+
574
+ /**
575
+ * Opt-out for the legacy Opus 4.0/4.1 → current Opus remap.
576
+ */
577
+ export function isLegacyModelRemapEnabled(): boolean {
578
+ return !isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP)
579
+ }
580
+
581
+ export function modelDisplayString(model: ModelSetting): string {
582
+ if (model === null) {
583
+ if (process.env.USER_TYPE === 'ant') {
584
+ return `Default for Ants (${renderDefaultModelSetting(getDefaultMainLoopModelSetting())})`
585
+ } else if (isClaudeAISubscriber()) {
586
+ return `Default (${getClaudeAiUserDefaultModelDescription()})`
587
+ }
588
+ return `Default (${getDefaultMainLoopModel()})`
589
+ }
590
+ const resolvedModel = parseUserSpecifiedModel(model)
591
+ return model === resolvedModel ? resolvedModel : `${model} (${resolvedModel})`
592
+ }
593
+
594
+ // @[MODEL LAUNCH]: Add a marketing name mapping for the new model below.
595
+ export function getMarketingNameForModel(modelId: string): string | undefined {
596
+ if (getAPIProvider() === 'foundry') {
597
+ // deployment ID is user-defined in Foundry, so it may have no relation to the actual model
598
+ return undefined
599
+ }
600
+
601
+ const has1m = modelId.toLowerCase().includes('[1m]')
602
+ const canonical = getCanonicalName(modelId)
603
+
604
+ if (canonical.includes('claude-opus-4-6')) {
605
+ return has1m ? 'Opus 4.6 (with 1M context)' : 'Opus 4.6'
606
+ }
607
+ if (canonical.includes('claude-opus-4-5')) {
608
+ return 'Opus 4.5'
609
+ }
610
+ if (canonical.includes('claude-opus-4-1')) {
611
+ return 'Opus 4.1'
612
+ }
613
+ if (canonical.includes('claude-opus-4')) {
614
+ return 'Opus 4'
615
+ }
616
+ if (canonical.includes('claude-sonnet-4-6')) {
617
+ return has1m ? 'Sonnet 4.6 (with 1M context)' : 'Sonnet 4.6'
618
+ }
619
+ if (canonical.includes('claude-sonnet-4-5')) {
620
+ return has1m ? 'Sonnet 4.5 (with 1M context)' : 'Sonnet 4.5'
621
+ }
622
+ if (canonical.includes('claude-sonnet-4')) {
623
+ return has1m ? 'Sonnet 4 (with 1M context)' : 'Sonnet 4'
624
+ }
625
+ if (canonical.includes('claude-3-7-sonnet')) {
626
+ return 'Claude 3.7 Sonnet'
627
+ }
628
+ if (canonical.includes('claude-3-5-sonnet')) {
629
+ return 'Claude 3.5 Sonnet'
630
+ }
631
+ if (canonical.includes('claude-haiku-4-5')) {
632
+ return 'Haiku 4.5'
633
+ }
634
+ if (canonical.includes('claude-3-5-haiku')) {
635
+ return 'Claude 3.5 Haiku'
636
+ }
637
+
638
+ // OpenRouter models
639
+ if (canonical.includes('kimi-k2.5') || canonical.includes('kimi-k2-5')) {
640
+ return 'Kimi K2.5'
641
+ }
642
+ if (canonical.includes('deepseek-v3.2') || canonical.includes('deepseek-v3-2')) {
643
+ return 'DeepSeek V3.2'
644
+ }
645
+ if (canonical.includes('gemini-2.5-pro') || canonical.includes('gemini-2-5-pro')) {
646
+ return 'Gemini 2.5 Pro'
647
+ }
648
+
649
+ return undefined
650
+ }
651
+
652
+ export function normalizeModelStringForAPI(model: string): string {
653
+ return model.replace(/\[(1|2)m\]/gi, '')
654
+ }