@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,329 @@
1
+ // biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
2
+ import { isUltrathinkEnabled } from './thinking.js'
3
+ import { getInitialSettings } from './settings/settings.js'
4
+ import { isProSubscriber, isMaxSubscriber, isTeamSubscriber } from './auth.js'
5
+ import { getFeatureValue_CACHED_MAY_BE_STALE } from 'src/services/analytics/growthbook.js'
6
+ import { getAPIProvider } from './model/providers.js'
7
+ import { get3PModelCapabilityOverride } from './model/modelSupportOverrides.js'
8
+ import { isEnvTruthy } from './envUtils.js'
9
+ import type { EffortLevel } from 'src/entrypoints/sdk/runtimeTypes.js'
10
+
11
+ export type { EffortLevel }
12
+
13
+ export const EFFORT_LEVELS = [
14
+ 'low',
15
+ 'medium',
16
+ 'high',
17
+ 'max',
18
+ ] as const satisfies readonly EffortLevel[]
19
+
20
+ export type EffortValue = EffortLevel | number
21
+
22
+ // @[MODEL LAUNCH]: Add the new model to the allowlist if it supports the effort parameter.
23
+ export function modelSupportsEffort(model: string): boolean {
24
+ const m = model.toLowerCase()
25
+ if (isEnvTruthy(process.env.CLAUDE_CODE_ALWAYS_ENABLE_EFFORT)) {
26
+ return true
27
+ }
28
+ const supported3P = get3PModelCapabilityOverride(model, 'effort')
29
+ if (supported3P !== undefined) {
30
+ return supported3P
31
+ }
32
+ // Supported by a subset of Claude 4 models
33
+ if (m.includes('opus-4-6') || m.includes('sonnet-4-6')) {
34
+ return true
35
+ }
36
+ // Exclude any other known legacy models (haiku, older opus/sonnet variants)
37
+ if (m.includes('haiku') || m.includes('sonnet') || m.includes('opus')) {
38
+ return false
39
+ }
40
+
41
+ // IMPORTANT: Do not change the default effort support without notifying
42
+ // the model launch DRI and research. This is a sensitive setting that can
43
+ // greatly affect model quality and bashing.
44
+
45
+ // Default to true for unknown model strings on 1P.
46
+ // Do not default to true for 3P as they have different formats for their
47
+ // model strings (ex. anthropics/claude-code#30795)
48
+ return getAPIProvider() === 'firstParty'
49
+ }
50
+
51
+ // @[MODEL LAUNCH]: Add the new model to the allowlist if it supports 'max' effort.
52
+ // Per API docs, 'max' is Opus 4.6 only for public models — other models return an error.
53
+ export function modelSupportsMaxEffort(model: string): boolean {
54
+ const supported3P = get3PModelCapabilityOverride(model, 'max_effort')
55
+ if (supported3P !== undefined) {
56
+ return supported3P
57
+ }
58
+ if (model.toLowerCase().includes('opus-4-6')) {
59
+ return true
60
+ }
61
+ if (process.env.USER_TYPE === 'ant' && resolveAntModel(model)) {
62
+ return true
63
+ }
64
+ return false
65
+ }
66
+
67
+ export function isEffortLevel(value: string): value is EffortLevel {
68
+ return (EFFORT_LEVELS as readonly string[]).includes(value)
69
+ }
70
+
71
+ export function parseEffortValue(value: unknown): EffortValue | undefined {
72
+ if (value === undefined || value === null || value === '') {
73
+ return undefined
74
+ }
75
+ if (typeof value === 'number' && isValidNumericEffort(value)) {
76
+ return value
77
+ }
78
+ const str = String(value).toLowerCase()
79
+ if (isEffortLevel(str)) {
80
+ return str
81
+ }
82
+ const numericValue = parseInt(str, 10)
83
+ if (!isNaN(numericValue) && isValidNumericEffort(numericValue)) {
84
+ return numericValue
85
+ }
86
+ return undefined
87
+ }
88
+
89
+ /**
90
+ * Numeric values are model-default only and not persisted.
91
+ * 'max' is session-scoped for external users (ants can persist it).
92
+ * Write sites call this before saving to settings so the Zod schema
93
+ * (which only accepts string levels) never rejects a write.
94
+ */
95
+ export function toPersistableEffort(
96
+ value: EffortValue | undefined,
97
+ ): EffortLevel | undefined {
98
+ if (value === 'low' || value === 'medium' || value === 'high') {
99
+ return value
100
+ }
101
+ if (value === 'max' && process.env.USER_TYPE === 'ant') {
102
+ return value
103
+ }
104
+ return undefined
105
+ }
106
+
107
+ export function getInitialEffortSetting(): EffortLevel | undefined {
108
+ // toPersistableEffort filters 'max' for non-ants on read, so a manually
109
+ // edited settings.json doesn't leak session-scoped max into a fresh session.
110
+ return toPersistableEffort(getInitialSettings().effortLevel)
111
+ }
112
+
113
+ /**
114
+ * Decide what effort level (if any) to persist when the user selects a model
115
+ * in ModelPicker. Keeps an explicit prior /effort choice sticky even when it
116
+ * matches the picked model's default, while letting purely-default and
117
+ * session-ephemeral effort (CLI --effort, EffortCallout default) fall through
118
+ * to undefined so it follows future model-default changes.
119
+ *
120
+ * priorPersisted must come from userSettings on disk
121
+ * (getSettingsForSource('userSettings')?.effortLevel), NOT merged settings
122
+ * (project/policy layers would leak into the user's global settings.json)
123
+ * and NOT AppState.effortValue (includes session-scoped sources that
124
+ * deliberately do not write to settings.json).
125
+ */
126
+ export function resolvePickerEffortPersistence(
127
+ picked: EffortLevel | undefined,
128
+ modelDefault: EffortLevel,
129
+ priorPersisted: EffortLevel | undefined,
130
+ toggledInPicker: boolean,
131
+ ): EffortLevel | undefined {
132
+ const hadExplicit = priorPersisted !== undefined || toggledInPicker
133
+ return hadExplicit || picked !== modelDefault ? picked : undefined
134
+ }
135
+
136
+ export function getEffortEnvOverride(): EffortValue | null | undefined {
137
+ const envOverride = process.env.CLAUDE_CODE_EFFORT_LEVEL
138
+ return envOverride?.toLowerCase() === 'unset' ||
139
+ envOverride?.toLowerCase() === 'auto'
140
+ ? null
141
+ : parseEffortValue(envOverride)
142
+ }
143
+
144
+ /**
145
+ * Resolve the effort value that will actually be sent to the API for a given
146
+ * model, following the full precedence chain:
147
+ * env CLAUDE_CODE_EFFORT_LEVEL → appState.effortValue → model default
148
+ *
149
+ * Returns undefined when no effort parameter should be sent (env set to
150
+ * 'unset', or no default exists for the model).
151
+ */
152
+ export function resolveAppliedEffort(
153
+ model: string,
154
+ appStateEffortValue: EffortValue | undefined,
155
+ ): EffortValue | undefined {
156
+ const envOverride = getEffortEnvOverride()
157
+ if (envOverride === null) {
158
+ return undefined
159
+ }
160
+ const resolved =
161
+ envOverride ?? appStateEffortValue ?? getDefaultEffortForModel(model)
162
+ // API rejects 'max' on non-Opus-4.6 models — downgrade to 'high'.
163
+ if (resolved === 'max' && !modelSupportsMaxEffort(model)) {
164
+ return 'high'
165
+ }
166
+ return resolved
167
+ }
168
+
169
+ /**
170
+ * Resolve the effort level to show the user. Wraps resolveAppliedEffort
171
+ * with the 'high' fallback (what the API uses when no effort param is sent).
172
+ * Single source of truth for the status bar and /effort output (CC-1088).
173
+ */
174
+ export function getDisplayedEffortLevel(
175
+ model: string,
176
+ appStateEffort: EffortValue | undefined,
177
+ ): EffortLevel {
178
+ const resolved = resolveAppliedEffort(model, appStateEffort) ?? 'high'
179
+ return convertEffortValueToLevel(resolved)
180
+ }
181
+
182
+ /**
183
+ * Build the ` with {level} effort` suffix shown in Logo/Spinner.
184
+ * Returns empty string if the user hasn't explicitly set an effort value.
185
+ * Delegates to resolveAppliedEffort() so the displayed level matches what
186
+ * the API actually receives (including max→high clamp for non-Opus models).
187
+ */
188
+ export function getEffortSuffix(
189
+ model: string,
190
+ effortValue: EffortValue | undefined,
191
+ ): string {
192
+ if (effortValue === undefined) return ''
193
+ const resolved = resolveAppliedEffort(model, effortValue)
194
+ if (resolved === undefined) return ''
195
+ return ` with ${convertEffortValueToLevel(resolved)} effort`
196
+ }
197
+
198
+ export function isValidNumericEffort(value: number): boolean {
199
+ return Number.isInteger(value)
200
+ }
201
+
202
+ export function convertEffortValueToLevel(value: EffortValue): EffortLevel {
203
+ if (typeof value === 'string') {
204
+ // Runtime guard: value may come from remote config (GrowthBook) where
205
+ // TypeScript types can't help us. Coerce unknown strings to 'high'
206
+ // rather than passing them through unchecked.
207
+ return isEffortLevel(value) ? value : 'high'
208
+ }
209
+ if (process.env.USER_TYPE === 'ant' && typeof value === 'number') {
210
+ if (value <= 50) return 'low'
211
+ if (value <= 85) return 'medium'
212
+ if (value <= 100) return 'high'
213
+ return 'max'
214
+ }
215
+ return 'high'
216
+ }
217
+
218
+ /**
219
+ * Get user-facing description for effort levels
220
+ *
221
+ * @param level The effort level to describe
222
+ * @returns Human-readable description
223
+ */
224
+ export function getEffortLevelDescription(level: EffortLevel): string {
225
+ switch (level) {
226
+ case 'low':
227
+ return 'Quick, straightforward implementation with minimal overhead'
228
+ case 'medium':
229
+ return 'Balanced approach with standard implementation and testing'
230
+ case 'high':
231
+ return 'Comprehensive implementation with extensive testing and documentation'
232
+ case 'max':
233
+ return 'Maximum capability with deepest reasoning (Opus 4.6 only)'
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Get user-facing description for effort values (both string and numeric)
239
+ *
240
+ * @param value The effort value to describe
241
+ * @returns Human-readable description
242
+ */
243
+ export function getEffortValueDescription(value: EffortValue): string {
244
+ if (process.env.USER_TYPE === 'ant' && typeof value === 'number') {
245
+ return `[ANT-ONLY] Numeric effort value of ${value}`
246
+ }
247
+
248
+ if (typeof value === 'string') {
249
+ return getEffortLevelDescription(value)
250
+ }
251
+ return 'Balanced approach with standard implementation and testing'
252
+ }
253
+
254
+ export type OpusDefaultEffortConfig = {
255
+ enabled: boolean
256
+ dialogTitle: string
257
+ dialogDescription: string
258
+ }
259
+
260
+ const OPUS_DEFAULT_EFFORT_CONFIG_DEFAULT: OpusDefaultEffortConfig = {
261
+ enabled: true,
262
+ dialogTitle: 'We recommend medium effort for Opus',
263
+ dialogDescription:
264
+ 'Effort determines how long Claude thinks for when completing your task. We recommend medium effort for most tasks to balance speed and intelligence and maximize rate limits. Use ultrathink to trigger high effort when needed.',
265
+ }
266
+
267
+ export function getOpusDefaultEffortConfig(): OpusDefaultEffortConfig {
268
+ const config = getFeatureValue_CACHED_MAY_BE_STALE(
269
+ 'tengu_grey_step2',
270
+ OPUS_DEFAULT_EFFORT_CONFIG_DEFAULT,
271
+ )
272
+ return {
273
+ ...OPUS_DEFAULT_EFFORT_CONFIG_DEFAULT,
274
+ ...config,
275
+ }
276
+ }
277
+
278
+ // @[MODEL LAUNCH]: Update the default effort levels for new models
279
+ export function getDefaultEffortForModel(
280
+ model: string,
281
+ ): EffortValue | undefined {
282
+ if (process.env.USER_TYPE === 'ant') {
283
+ const config = getAntModelOverrideConfig()
284
+ const isDefaultModel =
285
+ config?.defaultModel !== undefined &&
286
+ model.toLowerCase() === config.defaultModel.toLowerCase()
287
+ if (isDefaultModel && config?.defaultModelEffortLevel) {
288
+ return config.defaultModelEffortLevel
289
+ }
290
+ const antModel = resolveAntModel(model)
291
+ if (antModel) {
292
+ if (antModel.defaultEffortLevel) {
293
+ return antModel.defaultEffortLevel
294
+ }
295
+ if (antModel.defaultEffortValue !== undefined) {
296
+ return antModel.defaultEffortValue
297
+ }
298
+ }
299
+ // Always default ants to undefined/high
300
+ return undefined
301
+ }
302
+
303
+ // IMPORTANT: Do not change the default effort level without notifying
304
+ // the model launch DRI and research. Default effort is a sensitive setting
305
+ // that can greatly affect model quality and bashing.
306
+
307
+ // Default effort on Opus 4.6 to medium for Pro.
308
+ // Max/Team also get medium when the tengu_grey_step2 config is enabled.
309
+ if (model.toLowerCase().includes('opus-4-6')) {
310
+ if (isProSubscriber()) {
311
+ return 'medium'
312
+ }
313
+ if (
314
+ getOpusDefaultEffortConfig().enabled &&
315
+ (isMaxSubscriber() || isTeamSubscriber())
316
+ ) {
317
+ return 'medium'
318
+ }
319
+ }
320
+
321
+ // When ultrathink feature is on, default effort to medium (ultrathink bumps to high)
322
+ if (isUltrathinkEnabled() && modelSupportsEffort(model)) {
323
+ return 'medium'
324
+ }
325
+
326
+ // Fallback to undefined, which means we don't set an effort level. This
327
+ // should resolve to high effort level in the API.
328
+ return undefined
329
+ }
@@ -0,0 +1,29 @@
1
+ import { isEnvTruthy } from './envUtils.js'
2
+
3
+ /**
4
+ * Whether this build has bfs/ugrep embedded in the bun binary (ant-native only).
5
+ *
6
+ * When true:
7
+ * - `find` and `grep` in Claude's Bash shell are shadowed by shell functions
8
+ * that invoke the bun binary with argv0='bfs' / argv0='ugrep' (same trick
9
+ * as embedded ripgrep)
10
+ * - The dedicated Glob/Grep tools are removed from the tool registry
11
+ * - Prompt guidance steering Claude away from find/grep is omitted
12
+ *
13
+ * Set as a build-time define in scripts/build-with-plugins.ts for ant-native builds.
14
+ */
15
+ export function hasEmbeddedSearchTools(): boolean {
16
+ if (!isEnvTruthy(process.env.EMBEDDED_SEARCH_TOOLS)) return false
17
+ const e = process.env.CLAUDE_CODE_ENTRYPOINT
18
+ return (
19
+ e !== 'sdk-ts' && e !== 'sdk-py' && e !== 'sdk-cli' && e !== 'local-agent'
20
+ )
21
+ }
22
+
23
+ /**
24
+ * Path to the bun binary that contains the embedded search tools.
25
+ * Only meaningful when hasEmbeddedSearchTools() is true.
26
+ */
27
+ export function embeddedSearchToolsBinaryPath(): string {
28
+ return process.execPath
29
+ }
package/utils/env.ts ADDED
@@ -0,0 +1,347 @@
1
+ import memoize from 'lodash-es/memoize.js'
2
+ import { homedir } from 'os'
3
+ import { join } from 'path'
4
+ import { fileSuffixForOauthConfig } from '../constants/oauth.js'
5
+ import { isRunningWithBun } from './bundledMode.js'
6
+ import { getClaudeConfigHomeDir, isEnvTruthy } from './envUtils.js'
7
+ import { findExecutable } from './findExecutable.js'
8
+ import { getFsImplementation } from './fsOperations.js'
9
+ import { which } from './which.js'
10
+
11
+ type Platform = 'win32' | 'darwin' | 'linux'
12
+
13
+ // Config and data paths
14
+ export const getGlobalClaudeFile = memoize((): string => {
15
+ // Legacy fallback for backwards compatibility
16
+ if (
17
+ getFsImplementation().existsSync(
18
+ join(getClaudeConfigHomeDir(), '.config.json'),
19
+ )
20
+ ) {
21
+ return join(getClaudeConfigHomeDir(), '.config.json')
22
+ }
23
+
24
+ const filename = `.claude${fileSuffixForOauthConfig()}.json`
25
+ return join(process.env.CLAUDE_CONFIG_DIR || homedir(), filename)
26
+ })
27
+
28
+ const hasInternetAccess = memoize(async (): Promise<boolean> => {
29
+ try {
30
+ const { default: axiosClient } = await import('src/utils/axios.js')
31
+ await axiosClient.head('http://1.1.1.1', {
32
+ signal: AbortSignal.timeout(1000),
33
+ })
34
+ return true
35
+ } catch {
36
+ return false
37
+ }
38
+ })
39
+
40
+ async function isCommandAvailable(command: string): Promise<boolean> {
41
+ try {
42
+ // which does not execute the file.
43
+ return !!(await which(command))
44
+ } catch {
45
+ return false
46
+ }
47
+ }
48
+
49
+ const detectPackageManagers = memoize(async (): Promise<string[]> => {
50
+ const packageManagers = []
51
+
52
+ if (await isCommandAvailable('npm')) packageManagers.push('npm')
53
+ if (await isCommandAvailable('yarn')) packageManagers.push('yarn')
54
+ if (await isCommandAvailable('pnpm')) packageManagers.push('pnpm')
55
+
56
+ return packageManagers
57
+ })
58
+
59
+ const detectRuntimes = memoize(async (): Promise<string[]> => {
60
+ const runtimes = []
61
+
62
+ if (await isCommandAvailable('bun')) runtimes.push('bun')
63
+ if (await isCommandAvailable('deno')) runtimes.push('deno')
64
+ if (await isCommandAvailable('node')) runtimes.push('node')
65
+
66
+ return runtimes
67
+ })
68
+
69
+ /**
70
+ * Checks if we're running in a WSL environment
71
+ * @returns true if running in WSL, false otherwise
72
+ */
73
+ const isWslEnvironment = memoize((): boolean => {
74
+ try {
75
+ // Check for WSLInterop file which is a reliable indicator of WSL
76
+ return getFsImplementation().existsSync(
77
+ '/proc/sys/fs/binfmt_misc/WSLInterop',
78
+ )
79
+ } catch (_error) {
80
+ // If there's an error checking, assume not WSL
81
+ return false
82
+ }
83
+ })
84
+
85
+ /**
86
+ * Checks if the npm executable is located in the Windows filesystem within WSL
87
+ * @returns true if npm is from Windows (starts with /mnt/c/), false otherwise
88
+ */
89
+ const isNpmFromWindowsPath = memoize((): boolean => {
90
+ try {
91
+ // Only relevant in WSL environment
92
+ if (!isWslEnvironment()) {
93
+ return false
94
+ }
95
+
96
+ // Find the actual npm executable path
97
+ const { cmd } = findExecutable('npm', [])
98
+
99
+ // If npm is in Windows path, it will start with /mnt/c/
100
+ return cmd.startsWith('/mnt/c/')
101
+ } catch (_error) {
102
+ // If there's an error, assume it's not from Windows
103
+ return false
104
+ }
105
+ })
106
+
107
+ /**
108
+ * Checks if we're running via Conductor
109
+ * @returns true if running via Conductor, false otherwise
110
+ */
111
+ function isConductor(): boolean {
112
+ return process.env.__CFBundleIdentifier === 'com.conductor.app'
113
+ }
114
+
115
+ export const JETBRAINS_IDES = [
116
+ 'pycharm',
117
+ 'intellij',
118
+ 'webstorm',
119
+ 'phpstorm',
120
+ 'rubymine',
121
+ 'clion',
122
+ 'goland',
123
+ 'rider',
124
+ 'datagrip',
125
+ 'appcode',
126
+ 'dataspell',
127
+ 'aqua',
128
+ 'gateway',
129
+ 'fleet',
130
+ 'jetbrains',
131
+ 'androidstudio',
132
+ ]
133
+
134
+ // Detect terminal type with fallbacks for all platforms
135
+ function detectTerminal(): string | null {
136
+ if (process.env.CURSOR_TRACE_ID) return 'cursor'
137
+ // Cursor and Windsurf under WSL have TERM_PROGRAM=vscode
138
+ if (process.env.VSCODE_GIT_ASKPASS_MAIN?.includes('cursor')) {
139
+ return 'cursor'
140
+ }
141
+ if (process.env.VSCODE_GIT_ASKPASS_MAIN?.includes('windsurf')) {
142
+ return 'windsurf'
143
+ }
144
+ if (process.env.VSCODE_GIT_ASKPASS_MAIN?.includes('antigravity')) {
145
+ return 'antigravity'
146
+ }
147
+ const bundleId = process.env.__CFBundleIdentifier?.toLowerCase()
148
+ if (bundleId?.includes('vscodium')) return 'codium'
149
+ if (bundleId?.includes('windsurf')) return 'windsurf'
150
+ if (bundleId?.includes('com.google.android.studio')) return 'androidstudio'
151
+ // Check for JetBrains IDEs in bundle ID
152
+ if (bundleId) {
153
+ for (const ide of JETBRAINS_IDES) {
154
+ if (bundleId.includes(ide)) return ide
155
+ }
156
+ }
157
+
158
+ if (process.env.VisualStudioVersion) {
159
+ // This is desktop Visual Studio, not VS Code
160
+ return 'visualstudio'
161
+ }
162
+
163
+ // Check for JetBrains terminal on Linux/Windows
164
+ if (process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm') {
165
+ // For macOS, bundle ID detection above already handles JetBrains IDEs
166
+ if (process.platform === 'darwin') return 'pycharm'
167
+
168
+ // For finegrained detection on Linux/Windows use envDynamic.getTerminalWithJetBrainsDetection()
169
+ return 'pycharm'
170
+ }
171
+
172
+ // Check for specific terminals by TERM before TERM_PROGRAM
173
+ // This handles cases where TERM and TERM_PROGRAM might be inconsistent
174
+ if (process.env.TERM === 'xterm-ghostty') {
175
+ return 'ghostty'
176
+ }
177
+ if (process.env.TERM?.includes('kitty')) {
178
+ return 'kitty'
179
+ }
180
+
181
+ if (process.env.TERM_PROGRAM) {
182
+ return process.env.TERM_PROGRAM
183
+ }
184
+
185
+ if (process.env.TMUX) return 'tmux'
186
+ if (process.env.STY) return 'screen'
187
+
188
+ // Check for terminal-specific environment variables (common on Linux)
189
+ if (process.env.KONSOLE_VERSION) return 'konsole'
190
+ if (process.env.GNOME_TERMINAL_SERVICE) return 'gnome-terminal'
191
+ if (process.env.XTERM_VERSION) return 'xterm'
192
+ if (process.env.VTE_VERSION) return 'vte-based'
193
+ if (process.env.TERMINATOR_UUID) return 'terminator'
194
+ if (process.env.KITTY_WINDOW_ID) {
195
+ return 'kitty'
196
+ }
197
+ if (process.env.ALACRITTY_LOG) return 'alacritty'
198
+ if (process.env.TILIX_ID) return 'tilix'
199
+
200
+ // Windows-specific detection
201
+ if (process.env.WT_SESSION) return 'windows-terminal'
202
+ if (process.env.SESSIONNAME && process.env.TERM === 'cygwin') return 'cygwin'
203
+ if (process.env.MSYSTEM) return process.env.MSYSTEM.toLowerCase() // MINGW64, MSYS2, etc.
204
+ if (
205
+ process.env.ConEmuANSI ||
206
+ process.env.ConEmuPID ||
207
+ process.env.ConEmuTask
208
+ ) {
209
+ return 'conemu'
210
+ }
211
+
212
+ // WSL detection
213
+ if (process.env.WSL_DISTRO_NAME) return `wsl-${process.env.WSL_DISTRO_NAME}`
214
+
215
+ // SSH session detection
216
+ if (isSSHSession()) {
217
+ return 'ssh-session'
218
+ }
219
+
220
+ // Fall back to TERM which is more universally available
221
+ // Special case for common terminal identifiers in TERM
222
+ if (process.env.TERM) {
223
+ const term = process.env.TERM
224
+ if (term.includes('alacritty')) return 'alacritty'
225
+ if (term.includes('rxvt')) return 'rxvt'
226
+ if (term.includes('termite')) return 'termite'
227
+ return process.env.TERM
228
+ }
229
+
230
+ // Detect non-interactive environment
231
+ if (!process.stdout.isTTY) return 'non-interactive'
232
+
233
+ return null
234
+ }
235
+
236
+ /**
237
+ * Detects the deployment environment/platform based on environment variables
238
+ * @returns The deployment platform name, or 'unknown' if not detected
239
+ */
240
+ export const detectDeploymentEnvironment = memoize((): string => {
241
+ // Cloud development environments
242
+ if (isEnvTruthy(process.env.CODESPACES)) return 'codespaces'
243
+ if (process.env.GITPOD_WORKSPACE_ID) return 'gitpod'
244
+ if (process.env.REPL_ID || process.env.REPL_SLUG) return 'replit'
245
+ if (process.env.PROJECT_DOMAIN) return 'glitch'
246
+
247
+ // Cloud platforms
248
+ if (isEnvTruthy(process.env.VERCEL)) return 'vercel'
249
+ if (
250
+ process.env.RAILWAY_ENVIRONMENT_NAME ||
251
+ process.env.RAILWAY_SERVICE_NAME
252
+ ) {
253
+ return 'railway'
254
+ }
255
+ if (isEnvTruthy(process.env.RENDER)) return 'render'
256
+ if (isEnvTruthy(process.env.NETLIFY)) return 'netlify'
257
+ if (process.env.DYNO) return 'heroku'
258
+ if (process.env.FLY_APP_NAME || process.env.FLY_MACHINE_ID) return 'fly.io'
259
+ if (isEnvTruthy(process.env.CF_PAGES)) return 'cloudflare-pages'
260
+ if (process.env.DENO_DEPLOYMENT_ID) return 'deno-deploy'
261
+ if (process.env.AWS_LAMBDA_FUNCTION_NAME) return 'aws-lambda'
262
+ if (process.env.AWS_EXECUTION_ENV === 'AWS_ECS_FARGATE') return 'aws-fargate'
263
+ if (process.env.AWS_EXECUTION_ENV === 'AWS_ECS_EC2') return 'aws-ecs'
264
+ // Check for EC2 via hypervisor UUID
265
+ try {
266
+ const uuid = getFsImplementation()
267
+ .readFileSync('/sys/hypervisor/uuid', { encoding: 'utf8' })
268
+ .trim()
269
+ .toLowerCase()
270
+ if (uuid.startsWith('ec2')) return 'aws-ec2'
271
+ } catch {
272
+ // Ignore errors reading hypervisor UUID (ENOENT on non-EC2, etc.)
273
+ }
274
+ if (process.env.K_SERVICE) return 'gcp-cloud-run'
275
+ if (process.env.GOOGLE_CLOUD_PROJECT) return 'gcp'
276
+ if (process.env.WEBSITE_SITE_NAME || process.env.WEBSITE_SKU)
277
+ return 'azure-app-service'
278
+ if (process.env.AZURE_FUNCTIONS_ENVIRONMENT) return 'azure-functions'
279
+ if (process.env.APP_URL?.includes('ondigitalocean.app')) {
280
+ return 'digitalocean-app-platform'
281
+ }
282
+ if (process.env.SPACE_CREATOR_USER_ID) return 'huggingface-spaces'
283
+
284
+ // CI/CD platforms
285
+ if (isEnvTruthy(process.env.GITHUB_ACTIONS)) return 'github-actions'
286
+ if (isEnvTruthy(process.env.GITLAB_CI)) return 'gitlab-ci'
287
+ if (process.env.CIRCLECI) return 'circleci'
288
+ if (process.env.BUILDKITE) return 'buildkite'
289
+ if (isEnvTruthy(process.env.CI)) return 'ci'
290
+
291
+ // Container orchestration
292
+ if (process.env.KUBERNETES_SERVICE_HOST) return 'kubernetes'
293
+ try {
294
+ if (getFsImplementation().existsSync('/.dockerenv')) return 'docker'
295
+ } catch {
296
+ // Ignore errors checking for Docker
297
+ }
298
+
299
+ // Platform-specific fallback for undetected environments
300
+ if (env.platform === 'darwin') return 'unknown-darwin'
301
+ if (env.platform === 'linux') return 'unknown-linux'
302
+ if (env.platform === 'win32') return 'unknown-win32'
303
+
304
+ return 'unknown'
305
+ })
306
+
307
+ // all of these should be immutable
308
+ function isSSHSession(): boolean {
309
+ return !!(
310
+ process.env.SSH_CONNECTION ||
311
+ process.env.SSH_CLIENT ||
312
+ process.env.SSH_TTY
313
+ )
314
+ }
315
+
316
+ export const env = {
317
+ hasInternetAccess,
318
+ isCI: isEnvTruthy(process.env.CI),
319
+ platform: (['win32', 'darwin'].includes(process.platform)
320
+ ? process.platform
321
+ : 'linux') as Platform,
322
+ arch: process.arch,
323
+ nodeVersion: process.version,
324
+ terminal: detectTerminal(),
325
+ isSSH: isSSHSession,
326
+ getPackageManagers: detectPackageManagers,
327
+ getRuntimes: detectRuntimes,
328
+ isRunningWithBun: memoize(isRunningWithBun),
329
+ isWslEnvironment,
330
+ isNpmFromWindowsPath,
331
+ isConductor,
332
+ detectDeploymentEnvironment,
333
+ }
334
+
335
+ /**
336
+ * Returns the host platform for analytics reporting.
337
+ * If CLAUDE_CODE_HOST_PLATFORM is set to a valid platform value, that overrides
338
+ * the detected platform. This is useful for container/remote environments where
339
+ * process.platform reports the container OS but the actual host platform differs.
340
+ */
341
+ export function getHostPlatformForAnalytics(): Platform {
342
+ const override = process.env.CLAUDE_CODE_HOST_PLATFORM
343
+ if (override === 'win32' || override === 'darwin' || override === 'linux') {
344
+ return override
345
+ }
346
+ return env.platform
347
+ }