@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,625 @@
1
+ import { execa } from 'execa'
2
+ import { readFile, realpath } from 'fs/promises'
3
+ import { homedir } from 'os'
4
+ import { delimiter, join, posix, win32 } from 'path'
5
+ import { checkGlobalInstallPermissions } from './autoUpdater.js'
6
+ import { isInBundledMode } from './bundledMode.js'
7
+ import {
8
+ formatAutoUpdaterDisabledReason,
9
+ getAutoUpdaterDisabledReason,
10
+ getGlobalConfig,
11
+ type InstallMethod,
12
+ } from './config.js'
13
+ import { getCwd } from './cwd.js'
14
+ import { isEnvTruthy } from './envUtils.js'
15
+ import { execFileNoThrow } from './execFileNoThrow.js'
16
+ import { getFsImplementation } from './fsOperations.js'
17
+ import {
18
+ getShellType,
19
+ isRunningFromLocalInstallation,
20
+ localInstallationExists,
21
+ } from './localInstaller.js'
22
+ import {
23
+ detectApk,
24
+ detectAsdf,
25
+ detectDeb,
26
+ detectHomebrew,
27
+ detectMise,
28
+ detectPacman,
29
+ detectRpm,
30
+ detectWinget,
31
+ getPackageManager,
32
+ } from './nativeInstaller/packageManagers.js'
33
+ import { getPlatform } from './platform.js'
34
+ import { getRipgrepStatus } from './ripgrep.js'
35
+ import { SandboxManager } from './sandbox/sandbox-adapter.js'
36
+ import { getManagedFilePath } from './settings/managedPath.js'
37
+ import { CUSTOMIZATION_SURFACES } from './settings/types.js'
38
+ import {
39
+ findClaudeAlias,
40
+ findValidClaudeAlias,
41
+ getShellConfigPaths,
42
+ } from './shellConfig.js'
43
+ import { jsonParse } from './slowOperations.js'
44
+ import { which } from './which.js'
45
+
46
+ export type InstallationType =
47
+ | 'npm-global'
48
+ | 'npm-local'
49
+ | 'native'
50
+ | 'package-manager'
51
+ | 'development'
52
+ | 'unknown'
53
+
54
+ export type DiagnosticInfo = {
55
+ installationType: InstallationType
56
+ version: string
57
+ installationPath: string
58
+ invokedBinary: string
59
+ configInstallMethod: InstallMethod | 'not set'
60
+ autoUpdates: string
61
+ hasUpdatePermissions: boolean | null
62
+ multipleInstallations: Array<{ type: string; path: string }>
63
+ warnings: Array<{ issue: string; fix: string }>
64
+ recommendation?: string
65
+ packageManager?: string
66
+ ripgrepStatus: {
67
+ working: boolean
68
+ mode: 'system' | 'builtin' | 'embedded'
69
+ systemPath: string | null
70
+ }
71
+ }
72
+
73
+ function getNormalizedPaths(): [invokedPath: string, execPath: string] {
74
+ let invokedPath = process.argv[1] || ''
75
+ let execPath = process.execPath || process.argv[0] || ''
76
+
77
+ // On Windows, convert backslashes to forward slashes for consistent path matching
78
+ if (getPlatform() === 'windows') {
79
+ invokedPath = invokedPath.split(win32.sep).join(posix.sep)
80
+ execPath = execPath.split(win32.sep).join(posix.sep)
81
+ }
82
+
83
+ return [invokedPath, execPath]
84
+ }
85
+
86
+ export async function getCurrentInstallationType(): Promise<InstallationType> {
87
+ if (process.env.NODE_ENV === 'development') {
88
+ return 'development'
89
+ }
90
+
91
+ const [invokedPath] = getNormalizedPaths()
92
+
93
+ // Check if running in bundled mode first
94
+ if (isInBundledMode()) {
95
+ // Check if this bundled instance was installed by a package manager
96
+ if (
97
+ detectHomebrew() ||
98
+ detectWinget() ||
99
+ detectMise() ||
100
+ detectAsdf() ||
101
+ (await detectPacman()) ||
102
+ (await detectDeb()) ||
103
+ (await detectRpm()) ||
104
+ (await detectApk())
105
+ ) {
106
+ return 'package-manager'
107
+ }
108
+ return 'native'
109
+ }
110
+
111
+ // Check if running from local npm installation
112
+ if (isRunningFromLocalInstallation()) {
113
+ return 'npm-local'
114
+ }
115
+
116
+ // Check if we're in a typical npm global location
117
+ const npmGlobalPaths = [
118
+ '/usr/local/lib/node_modules',
119
+ '/usr/lib/node_modules',
120
+ '/opt/homebrew/lib/node_modules',
121
+ '/opt/homebrew/bin',
122
+ '/usr/local/bin',
123
+ '/.nvm/versions/node/', // nvm installations
124
+ ]
125
+
126
+ if (npmGlobalPaths.some(path => invokedPath.includes(path))) {
127
+ return 'npm-global'
128
+ }
129
+
130
+ // Also check for npm/nvm in the path even if not in standard locations
131
+ if (invokedPath.includes('/npm/') || invokedPath.includes('/nvm/')) {
132
+ return 'npm-global'
133
+ }
134
+
135
+ const npmConfigResult = await execa('npm config get prefix', {
136
+ shell: true,
137
+ reject: false,
138
+ })
139
+ const globalPrefix =
140
+ npmConfigResult.exitCode === 0 ? npmConfigResult.stdout.trim() : null
141
+
142
+ if (globalPrefix && invokedPath.startsWith(globalPrefix)) {
143
+ return 'npm-global'
144
+ }
145
+
146
+ // If we can't determine, return unknown
147
+ return 'unknown'
148
+ }
149
+
150
+ async function getInstallationPath(): Promise<string> {
151
+ if (process.env.NODE_ENV === 'development') {
152
+ return getCwd()
153
+ }
154
+
155
+ // For bundled/native builds, show the binary location
156
+ if (isInBundledMode()) {
157
+ // Try to find the actual binary that was invoked
158
+ try {
159
+ return await realpath(process.execPath)
160
+ } catch {
161
+ // This function doesn't expect errors
162
+ }
163
+
164
+ try {
165
+ const path = await which('claude')
166
+ if (path) {
167
+ return path
168
+ }
169
+ } catch {
170
+ // This function doesn't expect errors
171
+ }
172
+
173
+ // If we can't find it, check common locations
174
+ try {
175
+ await getFsImplementation().stat(join(homedir(), '.local/bin/claude'))
176
+ return join(homedir(), '.local/bin/claude')
177
+ } catch {
178
+ // Not found
179
+ }
180
+ return 'native'
181
+ }
182
+
183
+ // For npm installations, use the path of the executable
184
+ try {
185
+ return process.argv[0] || 'unknown'
186
+ } catch {
187
+ return 'unknown'
188
+ }
189
+ }
190
+
191
+ export function getInvokedBinary(): string {
192
+ try {
193
+ // For bundled/compiled executables, show the actual binary path
194
+ if (isInBundledMode()) {
195
+ return process.execPath || 'unknown'
196
+ }
197
+
198
+ // For npm/development, show the script path
199
+ return process.argv[1] || 'unknown'
200
+ } catch {
201
+ return 'unknown'
202
+ }
203
+ }
204
+
205
+ async function detectMultipleInstallations(): Promise<
206
+ Array<{ type: string; path: string }>
207
+ > {
208
+ const fs = getFsImplementation()
209
+ const installations: Array<{ type: string; path: string }> = []
210
+
211
+ // Check for local installation
212
+ const localPath = join(homedir(), '.claude', 'local')
213
+ if (await localInstallationExists()) {
214
+ installations.push({ type: 'npm-local', path: localPath })
215
+ }
216
+
217
+ // Check for global npm installation
218
+ const packagesToCheck = ['@anthropic-ai/claude-code']
219
+ if (MACRO.PACKAGE_URL && MACRO.PACKAGE_URL !== '@anthropic-ai/claude-code') {
220
+ packagesToCheck.push(MACRO.PACKAGE_URL)
221
+ }
222
+ const npmResult = await execFileNoThrow('npm', [
223
+ '-g',
224
+ 'config',
225
+ 'get',
226
+ 'prefix',
227
+ ])
228
+ if (npmResult.code === 0 && npmResult.stdout) {
229
+ const npmPrefix = npmResult.stdout.trim()
230
+ const isWindows = getPlatform() === 'windows'
231
+
232
+ // First check for active installations via bin/claude
233
+ // Linux / macOS have prefix/bin/claude and prefix/lib/node_modules
234
+ // Windows has prefix/claude and prefix/node_modules
235
+ const globalBinPath = isWindows
236
+ ? join(npmPrefix, 'claude')
237
+ : join(npmPrefix, 'bin', 'claude')
238
+
239
+ let globalBinExists = false
240
+ try {
241
+ await fs.stat(globalBinPath)
242
+ globalBinExists = true
243
+ } catch {
244
+ // Not found
245
+ }
246
+
247
+ if (globalBinExists) {
248
+ // Check if this is actually a Homebrew cask installation, not npm-global
249
+ // When npm is installed via Homebrew, both can exist at /opt/homebrew/bin/claude
250
+ // We need to resolve the symlink to see where it actually points
251
+ let isCurrentHomebrewInstallation = false
252
+
253
+ try {
254
+ // Resolve the symlink to get the actual target
255
+ const realPath = await realpath(globalBinPath)
256
+
257
+ // If the symlink points to a Caskroom directory, it's a Homebrew cask
258
+ // Only skip it if it's the same Homebrew installation we're currently running from
259
+ if (realPath.includes('/Caskroom/')) {
260
+ isCurrentHomebrewInstallation = detectHomebrew()
261
+ }
262
+ } catch {
263
+ // If we can't resolve the symlink, include it anyway
264
+ }
265
+
266
+ if (!isCurrentHomebrewInstallation) {
267
+ installations.push({ type: 'npm-global', path: globalBinPath })
268
+ }
269
+ } else {
270
+ // If no bin/claude exists, check for orphaned packages (no bin/claude symlink)
271
+ for (const packageName of packagesToCheck) {
272
+ const globalPackagePath = isWindows
273
+ ? join(npmPrefix, 'node_modules', packageName)
274
+ : join(npmPrefix, 'lib', 'node_modules', packageName)
275
+
276
+ try {
277
+ await fs.stat(globalPackagePath)
278
+ installations.push({
279
+ type: 'npm-global-orphan',
280
+ path: globalPackagePath,
281
+ })
282
+ } catch {
283
+ // Package not found
284
+ }
285
+ }
286
+ }
287
+ }
288
+
289
+ // Check for native installation
290
+
291
+ // Check common native installation paths
292
+ const nativeBinPath = join(homedir(), '.local', 'bin', 'claude')
293
+ try {
294
+ await fs.stat(nativeBinPath)
295
+ installations.push({ type: 'native', path: nativeBinPath })
296
+ } catch {
297
+ // Not found
298
+ }
299
+
300
+ // Also check if config indicates native installation
301
+ const config = getGlobalConfig()
302
+ if (config.installMethod === 'native') {
303
+ const nativeDataPath = join(homedir(), '.local', 'share', 'claude')
304
+ try {
305
+ await fs.stat(nativeDataPath)
306
+ if (!installations.some(i => i.type === 'native')) {
307
+ installations.push({ type: 'native', path: nativeDataPath })
308
+ }
309
+ } catch {
310
+ // Not found
311
+ }
312
+ }
313
+
314
+ return installations
315
+ }
316
+
317
+ async function detectConfigurationIssues(
318
+ type: InstallationType,
319
+ ): Promise<Array<{ issue: string; fix: string }>> {
320
+ const warnings: Array<{ issue: string; fix: string }> = []
321
+
322
+ // Managed-settings forwards-compat: the schema preprocess silently drops
323
+ // unknown strictPluginOnlyCustomization surface names so one future enum
324
+ // value doesn't null out the entire policy file (settings.ts:101). But
325
+ // admins should KNOW — read the raw file and diff. Runs before the
326
+ // development-mode early return: this is config correctness, not an
327
+ // install-path check, and it's useful to see during dev testing.
328
+ try {
329
+ const raw = await readFile(
330
+ join(getManagedFilePath(), 'managed-settings.json'),
331
+ 'utf-8',
332
+ )
333
+ const parsed: unknown = jsonParse(raw)
334
+ const field =
335
+ parsed && typeof parsed === 'object'
336
+ ? (parsed as Record<string, unknown>).strictPluginOnlyCustomization
337
+ : undefined
338
+ if (field !== undefined && typeof field !== 'boolean') {
339
+ if (!Array.isArray(field)) {
340
+ // .catch(undefined) in the schema silently drops this, so the rest
341
+ // of managed settings survive — but the admin typed something
342
+ // wrong (an object, a string, etc.).
343
+ warnings.push({
344
+ issue: `managed-settings.json: strictPluginOnlyCustomization has an invalid value (expected true or an array, got ${typeof field})`,
345
+ fix: `The field is silently ignored (schema .catch rescues it). Set it to true, or an array of: ${CUSTOMIZATION_SURFACES.join(', ')}.`,
346
+ })
347
+ } else {
348
+ const unknown = field.filter(
349
+ x =>
350
+ typeof x === 'string' &&
351
+ !(CUSTOMIZATION_SURFACES as readonly string[]).includes(x),
352
+ )
353
+ if (unknown.length > 0) {
354
+ warnings.push({
355
+ issue: `managed-settings.json: strictPluginOnlyCustomization has ${unknown.length} value(s) this client doesn't recognize: ${unknown.map(String).join(', ')}`,
356
+ fix: `These are silently ignored (forwards-compat). Known surfaces for this version: ${CUSTOMIZATION_SURFACES.join(', ')}. Either remove them, or this client is older than the managed-settings intended.`,
357
+ })
358
+ }
359
+ }
360
+ }
361
+ } catch {
362
+ // ENOENT (no managed settings) / parse error — not this check's concern.
363
+ // Parse errors are surfaced by the settings loader itself.
364
+ }
365
+
366
+ const config = getGlobalConfig()
367
+
368
+ // Skip most warnings for development mode
369
+ if (type === 'development') {
370
+ return warnings
371
+ }
372
+
373
+ // Check if ~/.local/bin is in PATH for native installations
374
+ if (type === 'native') {
375
+ const path = process.env.PATH || ''
376
+ const pathDirectories = path.split(delimiter)
377
+ const homeDir = homedir()
378
+ const localBinPath = join(homeDir, '.local', 'bin')
379
+
380
+ // On Windows, convert backslashes to forward slashes for consistent path matching
381
+ let normalizedLocalBinPath = localBinPath
382
+ if (getPlatform() === 'windows') {
383
+ normalizedLocalBinPath = localBinPath.split(win32.sep).join(posix.sep)
384
+ }
385
+
386
+ // Check if ~/.local/bin is in PATH (handle both expanded and unexpanded forms)
387
+ // Also handle trailing slashes that users may have in their PATH
388
+ const localBinInPath = pathDirectories.some(dir => {
389
+ let normalizedDir = dir
390
+ if (getPlatform() === 'windows') {
391
+ normalizedDir = dir.split(win32.sep).join(posix.sep)
392
+ }
393
+ // Remove trailing slashes for comparison (handles paths like /home/user/.local/bin/)
394
+ const trimmedDir = normalizedDir.replace(/\/+$/, '')
395
+ const trimmedRawDir = dir.replace(/[/\\]+$/, '')
396
+ return (
397
+ trimmedDir === normalizedLocalBinPath ||
398
+ trimmedRawDir === '~/.local/bin' ||
399
+ trimmedRawDir === '$HOME/.local/bin'
400
+ )
401
+ })
402
+
403
+ if (!localBinInPath) {
404
+ const isWindows = getPlatform() === 'windows'
405
+ if (isWindows) {
406
+ // Windows-specific PATH instructions
407
+ const windowsLocalBinPath = localBinPath
408
+ .split(posix.sep)
409
+ .join(win32.sep)
410
+ warnings.push({
411
+ issue: `Native installation exists but ${windowsLocalBinPath} is not in your PATH`,
412
+ fix: `Add it by opening: System Properties → Environment Variables → Edit User PATH → New → Add the path above. Then restart your terminal.`,
413
+ })
414
+ } else {
415
+ // Unix-style PATH instructions
416
+ const shellType = getShellType()
417
+ const configPaths = getShellConfigPaths()
418
+ const configFile = configPaths[shellType as keyof typeof configPaths]
419
+ const displayPath = configFile
420
+ ? configFile.replace(homedir(), '~')
421
+ : 'your shell config file'
422
+
423
+ warnings.push({
424
+ issue:
425
+ 'Native installation exists but ~/.local/bin is not in your PATH',
426
+ fix: `Run: echo 'export PATH="$HOME/.local/bin:$PATH"' >> ${displayPath} then open a new terminal or run: source ${displayPath}`,
427
+ })
428
+ }
429
+ }
430
+ }
431
+
432
+ // Check for configuration mismatches
433
+ // Skip these checks if DISABLE_INSTALLATION_CHECKS is set (e.g., in HFI)
434
+ if (!isEnvTruthy(process.env.DISABLE_INSTALLATION_CHECKS)) {
435
+ if (type === 'npm-local' && config.installMethod !== 'local') {
436
+ warnings.push({
437
+ issue: `Running from local installation but config install method is '${config.installMethod}'`,
438
+ fix: 'Consider using native installation: claude install',
439
+ })
440
+ }
441
+
442
+ if (type === 'native' && config.installMethod !== 'native') {
443
+ warnings.push({
444
+ issue: `Running native installation but config install method is '${config.installMethod}'`,
445
+ fix: 'Run claude install to update configuration',
446
+ })
447
+ }
448
+ }
449
+
450
+ if (type === 'npm-global' && (await localInstallationExists())) {
451
+ warnings.push({
452
+ issue: 'Local installation exists but not being used',
453
+ fix: 'Consider using native installation: claude install',
454
+ })
455
+ }
456
+
457
+ const existingAlias = await findClaudeAlias()
458
+ const validAlias = await findValidClaudeAlias()
459
+
460
+ // Check if running local installation but it's not in PATH
461
+ if (type === 'npm-local') {
462
+ // Check if claude is already accessible via PATH
463
+ const whichResult = await which('claude')
464
+ const claudeInPath = !!whichResult
465
+
466
+ // Only show warning if claude is NOT in PATH AND no valid alias exists
467
+ if (!claudeInPath && !validAlias) {
468
+ if (existingAlias) {
469
+ // Alias exists but points to invalid target
470
+ warnings.push({
471
+ issue: 'Local installation not accessible',
472
+ fix: `Alias exists but points to invalid target: ${existingAlias}. Update alias: alias claude="~/.claude/local/claude"`,
473
+ })
474
+ } else {
475
+ // No alias exists and not in PATH
476
+ warnings.push({
477
+ issue: 'Local installation not accessible',
478
+ fix: 'Create alias: alias claude="~/.claude/local/claude"',
479
+ })
480
+ }
481
+ }
482
+ }
483
+
484
+ return warnings
485
+ }
486
+
487
+ export function detectLinuxGlobPatternWarnings(): Array<{
488
+ issue: string
489
+ fix: string
490
+ }> {
491
+ if (getPlatform() !== 'linux') {
492
+ return []
493
+ }
494
+
495
+ const warnings: Array<{ issue: string; fix: string }> = []
496
+ const globPatterns = SandboxManager.getLinuxGlobPatternWarnings()
497
+
498
+ if (globPatterns.length > 0) {
499
+ // Show first 3 patterns, then indicate if there are more
500
+ const displayPatterns = globPatterns.slice(0, 3).join(', ')
501
+ const remaining = globPatterns.length - 3
502
+ const patternList =
503
+ remaining > 0 ? `${displayPatterns} (${remaining} more)` : displayPatterns
504
+
505
+ warnings.push({
506
+ issue: `Glob patterns in sandbox permission rules are not fully supported on Linux`,
507
+ fix: `Found ${globPatterns.length} pattern(s): ${patternList}. On Linux, glob patterns in Edit/Read rules will be ignored.`,
508
+ })
509
+ }
510
+
511
+ return warnings
512
+ }
513
+
514
+ export async function getDoctorDiagnostic(): Promise<DiagnosticInfo> {
515
+ const installationType = await getCurrentInstallationType()
516
+ const version =
517
+ typeof MACRO !== 'undefined' && MACRO.VERSION ? MACRO.VERSION : 'unknown'
518
+ const installationPath = await getInstallationPath()
519
+ const invokedBinary = getInvokedBinary()
520
+ const multipleInstallations = await detectMultipleInstallations()
521
+ const warnings = await detectConfigurationIssues(installationType)
522
+
523
+ // Add glob pattern warnings for Linux sandboxing
524
+ warnings.push(...detectLinuxGlobPatternWarnings())
525
+
526
+ // Add warnings for leftover npm installations when running native
527
+ if (installationType === 'native') {
528
+ const npmInstalls = multipleInstallations.filter(
529
+ i =>
530
+ i.type === 'npm-global' ||
531
+ i.type === 'npm-global-orphan' ||
532
+ i.type === 'npm-local',
533
+ )
534
+
535
+ const isWindows = getPlatform() === 'windows'
536
+
537
+ for (const install of npmInstalls) {
538
+ if (install.type === 'npm-global') {
539
+ let uninstallCmd = 'npm -g uninstall @anthropic-ai/claude-code'
540
+ if (
541
+ MACRO.PACKAGE_URL &&
542
+ MACRO.PACKAGE_URL !== '@anthropic-ai/claude-code'
543
+ ) {
544
+ uninstallCmd += ` && npm -g uninstall ${MACRO.PACKAGE_URL}`
545
+ }
546
+ warnings.push({
547
+ issue: `Leftover npm global installation at ${install.path}`,
548
+ fix: `Run: ${uninstallCmd}`,
549
+ })
550
+ } else if (install.type === 'npm-global-orphan') {
551
+ warnings.push({
552
+ issue: `Orphaned npm global package at ${install.path}`,
553
+ fix: isWindows
554
+ ? `Run: rmdir /s /q "${install.path}"`
555
+ : `Run: rm -rf ${install.path}`,
556
+ })
557
+ } else if (install.type === 'npm-local') {
558
+ warnings.push({
559
+ issue: `Leftover npm local installation at ${install.path}`,
560
+ fix: isWindows
561
+ ? `Run: rmdir /s /q "${install.path}"`
562
+ : `Run: rm -rf ${install.path}`,
563
+ })
564
+ }
565
+ }
566
+ }
567
+
568
+ const config = getGlobalConfig()
569
+
570
+ // Get config values for display
571
+ const configInstallMethod = config.installMethod || 'not set'
572
+
573
+ // Check permissions for global installations
574
+ let hasUpdatePermissions: boolean | null = null
575
+ if (installationType === 'npm-global') {
576
+ const permCheck = await checkGlobalInstallPermissions()
577
+ hasUpdatePermissions = permCheck.hasPermissions
578
+
579
+ // Add warning if no permissions
580
+ if (!hasUpdatePermissions && !getAutoUpdaterDisabledReason()) {
581
+ warnings.push({
582
+ issue: 'Insufficient permissions for auto-updates',
583
+ fix: 'Do one of: (1) Re-install node without sudo, or (2) Use `claude install` for native installation',
584
+ })
585
+ }
586
+ }
587
+
588
+ // Get ripgrep status and configuration
589
+ const ripgrepStatusRaw = getRipgrepStatus()
590
+
591
+ // Provide simple ripgrep status info
592
+ const ripgrepStatus = {
593
+ working: ripgrepStatusRaw.working ?? true, // Assume working if not yet tested
594
+ mode: ripgrepStatusRaw.mode,
595
+ systemPath:
596
+ ripgrepStatusRaw.mode === 'system' ? ripgrepStatusRaw.path : null,
597
+ }
598
+
599
+ // Get package manager info if running from package manager
600
+ const packageManager =
601
+ installationType === 'package-manager'
602
+ ? await getPackageManager()
603
+ : undefined
604
+
605
+ const diagnostic: DiagnosticInfo = {
606
+ installationType,
607
+ version,
608
+ installationPath,
609
+ invokedBinary,
610
+ configInstallMethod,
611
+ autoUpdates: (() => {
612
+ const reason = getAutoUpdaterDisabledReason()
613
+ return reason
614
+ ? `disabled (${formatAutoUpdaterDisabledReason(reason)})`
615
+ : 'enabled'
616
+ })(),
617
+ hasUpdatePermissions,
618
+ multipleInstallations,
619
+ warnings,
620
+ packageManager,
621
+ ripgrepStatus,
622
+ }
623
+
624
+ return diagnostic
625
+ }
@@ -0,0 +1,88 @@
1
+ import type { McpbManifest } from '@anthropic-ai/mcpb'
2
+ import { errorMessage } from '../errors.js'
3
+ import { jsonParse } from '../slowOperations.js'
4
+
5
+ /**
6
+ * Parses and validates a DXT manifest from a JSON object.
7
+ *
8
+ * Lazy-imports @anthropic-ai/mcpb: that package uses zod v3 which eagerly
9
+ * creates 24 .bind(this) closures per schema instance (~300 instances between
10
+ * schemas.js and schemas-loose.js). Deferring the import keeps ~700KB of bound
11
+ * closures out of the startup heap for sessions that never touch .dxt/.mcpb.
12
+ */
13
+ export async function validateManifest(
14
+ manifestJson: unknown,
15
+ ): Promise<McpbManifest> {
16
+ const { McpbManifestSchema } = await import('@anthropic-ai/mcpb')
17
+ const parseResult = McpbManifestSchema.safeParse(manifestJson)
18
+
19
+ if (!parseResult.success) {
20
+ const errors = parseResult.error.flatten()
21
+ const errorMessages = [
22
+ ...Object.entries(errors.fieldErrors).map(
23
+ ([field, errs]) => `${field}: ${errs?.join(', ')}`,
24
+ ),
25
+ ...(errors.formErrors || []),
26
+ ]
27
+ .filter(Boolean)
28
+ .join('; ')
29
+
30
+ throw new Error(`Invalid manifest: ${errorMessages}`)
31
+ }
32
+
33
+ return parseResult.data
34
+ }
35
+
36
+ /**
37
+ * Parses and validates a DXT manifest from raw text data.
38
+ */
39
+ export async function parseAndValidateManifestFromText(
40
+ manifestText: string,
41
+ ): Promise<McpbManifest> {
42
+ let manifestJson: unknown
43
+
44
+ try {
45
+ manifestJson = jsonParse(manifestText)
46
+ } catch (error) {
47
+ throw new Error(`Invalid JSON in manifest.json: ${errorMessage(error)}`)
48
+ }
49
+
50
+ return validateManifest(manifestJson)
51
+ }
52
+
53
+ /**
54
+ * Parses and validates a DXT manifest from raw binary data.
55
+ */
56
+ export async function parseAndValidateManifestFromBytes(
57
+ manifestData: Uint8Array,
58
+ ): Promise<McpbManifest> {
59
+ const manifestText = new TextDecoder().decode(manifestData)
60
+ return parseAndValidateManifestFromText(manifestText)
61
+ }
62
+
63
+ /**
64
+ * Generates an extension ID from author name and extension name.
65
+ * Uses the same algorithm as the directory backend for consistency.
66
+ */
67
+ export function generateExtensionId(
68
+ manifest: McpbManifest,
69
+ prefix?: 'local.unpacked' | 'local.dxt',
70
+ ): string {
71
+ const sanitize = (str: string) =>
72
+ str
73
+ .toLowerCase()
74
+ .replace(/\s+/g, '-')
75
+ .replace(/[^a-z0-9-_.]/g, '')
76
+ .replace(/-+/g, '-')
77
+ .replace(/^-+|-+$/g, '')
78
+
79
+ const authorName = manifest.author.name
80
+ const extensionName = manifest.name
81
+
82
+ const sanitizedAuthor = sanitize(authorName)
83
+ const sanitizedName = sanitize(extensionName)
84
+
85
+ return prefix
86
+ ? `${prefix}.${sanitizedAuthor}.${sanitizedName}`
87
+ : `${sanitizedAuthor}.${sanitizedName}`
88
+ }