@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,575 @@
1
+ import { createHash } from 'crypto'
2
+ import { join } from 'path'
3
+ import { getIsNonInteractiveSession } from '../../bootstrap/state.js'
4
+ import type { Command } from '../../commands.js'
5
+ import type { AgentMcpServerInfo } from '../../components/mcp/types.js'
6
+ import type { Tool } from '../../Tool.js'
7
+ import type { AgentDefinition } from '../../tools/AgentTool/loadAgentsDir.js'
8
+ import { getCwd } from '../../utils/cwd.js'
9
+ import { getGlobalClaudeFile } from '../../utils/env.js'
10
+ import { isSettingSourceEnabled } from '../../utils/settings/constants.js'
11
+ import {
12
+ getSettings_DEPRECATED,
13
+ hasSkipDangerousModePermissionPrompt,
14
+ } from '../../utils/settings/settings.js'
15
+ import { jsonStringify } from '../../utils/slowOperations.js'
16
+ import { getEnterpriseMcpFilePath, getMcpConfigByName } from './config.js'
17
+ import { mcpInfoFromString } from './mcpStringUtils.js'
18
+ import { normalizeNameForMCP } from './normalization.js'
19
+ import {
20
+ type ConfigScope,
21
+ ConfigScopeSchema,
22
+ type MCPServerConnection,
23
+ type McpHTTPServerConfig,
24
+ type McpServerConfig,
25
+ type McpSSEServerConfig,
26
+ type McpStdioServerConfig,
27
+ type McpWebSocketServerConfig,
28
+ type ScopedMcpServerConfig,
29
+ type ServerResource,
30
+ } from './types.js'
31
+
32
+ /**
33
+ * Filters tools by MCP server name
34
+ *
35
+ * @param tools Array of tools to filter
36
+ * @param serverName Name of the MCP server
37
+ * @returns Tools belonging to the specified server
38
+ */
39
+ export function filterToolsByServer(tools: Tool[], serverName: string): Tool[] {
40
+ const prefix = `mcp__${normalizeNameForMCP(serverName)}__`
41
+ return tools.filter(tool => tool.name?.startsWith(prefix))
42
+ }
43
+
44
+ /**
45
+ * True when a command belongs to the given MCP server.
46
+ *
47
+ * MCP **prompts** are named `mcp__<server>__<prompt>` (wire-format constraint);
48
+ * MCP **skills** are named `<server>:<skill>` (matching plugin/nested-dir skill
49
+ * naming). Both live in `mcp.commands`, so cleanup and filtering must match
50
+ * either shape.
51
+ */
52
+ export function commandBelongsToServer(
53
+ command: Command,
54
+ serverName: string,
55
+ ): boolean {
56
+ const normalized = normalizeNameForMCP(serverName)
57
+ const name = command.name
58
+ if (!name) return false
59
+ return (
60
+ name.startsWith(`mcp__${normalized}__`) || name.startsWith(`${normalized}:`)
61
+ )
62
+ }
63
+
64
+ /**
65
+ * Filters commands by MCP server name
66
+ * @param commands Array of commands to filter
67
+ * @param serverName Name of the MCP server
68
+ * @returns Commands belonging to the specified server
69
+ */
70
+ export function filterCommandsByServer(
71
+ commands: Command[],
72
+ serverName: string,
73
+ ): Command[] {
74
+ return commands.filter(c => commandBelongsToServer(c, serverName))
75
+ }
76
+
77
+ /**
78
+ * Filters MCP **prompts** (not skills) by server. Used by the `/mcp` menu
79
+ * capabilities display — skills are a separate feature shown in `/skills`,
80
+ * so they mustn't inflate the "prompts" capability badge.
81
+ *
82
+ * The distinguisher is `loadedFrom === 'mcp'`: MCP skills set it, MCP
83
+ * prompts don't (they use `isMcp: true` instead).
84
+ */
85
+ export function filterMcpPromptsByServer(
86
+ commands: Command[],
87
+ serverName: string,
88
+ ): Command[] {
89
+ return commands.filter(
90
+ c =>
91
+ commandBelongsToServer(c, serverName) &&
92
+ !(c.type === 'prompt' && c.loadedFrom === 'mcp'),
93
+ )
94
+ }
95
+
96
+ /**
97
+ * Filters resources by MCP server name
98
+ * @param resources Array of resources to filter
99
+ * @param serverName Name of the MCP server
100
+ * @returns Resources belonging to the specified server
101
+ */
102
+ export function filterResourcesByServer(
103
+ resources: ServerResource[],
104
+ serverName: string,
105
+ ): ServerResource[] {
106
+ return resources.filter(resource => resource.server === serverName)
107
+ }
108
+
109
+ /**
110
+ * Removes tools belonging to a specific MCP server
111
+ * @param tools Array of tools
112
+ * @param serverName Name of the MCP server to exclude
113
+ * @returns Tools not belonging to the specified server
114
+ */
115
+ export function excludeToolsByServer(
116
+ tools: Tool[],
117
+ serverName: string,
118
+ ): Tool[] {
119
+ const prefix = `mcp__${normalizeNameForMCP(serverName)}__`
120
+ return tools.filter(tool => !tool.name?.startsWith(prefix))
121
+ }
122
+
123
+ /**
124
+ * Removes commands belonging to a specific MCP server
125
+ * @param commands Array of commands
126
+ * @param serverName Name of the MCP server to exclude
127
+ * @returns Commands not belonging to the specified server
128
+ */
129
+ export function excludeCommandsByServer(
130
+ commands: Command[],
131
+ serverName: string,
132
+ ): Command[] {
133
+ return commands.filter(c => !commandBelongsToServer(c, serverName))
134
+ }
135
+
136
+ /**
137
+ * Removes resources belonging to a specific MCP server
138
+ * @param resources Map of server resources
139
+ * @param serverName Name of the MCP server to exclude
140
+ * @returns Resources map without the specified server
141
+ */
142
+ export function excludeResourcesByServer(
143
+ resources: Record<string, ServerResource[]>,
144
+ serverName: string,
145
+ ): Record<string, ServerResource[]> {
146
+ const result = { ...resources }
147
+ delete result[serverName]
148
+ return result
149
+ }
150
+
151
+ /**
152
+ * Stable hash of an MCP server config for change detection on /reload-plugins.
153
+ * Excludes `scope` (provenance, not content — moving a server from .mcp.json
154
+ * to settings.json shouldn't reconnect it). Keys sorted so `{a:1,b:2}` and
155
+ * `{b:2,a:1}` hash the same.
156
+ */
157
+ export function hashMcpConfig(config: ScopedMcpServerConfig): string {
158
+ const { scope: _scope, ...rest } = config
159
+ const stable = jsonStringify(rest, (_k, v: unknown) => {
160
+ if (v && typeof v === 'object' && !Array.isArray(v)) {
161
+ const obj = v as Record<string, unknown>
162
+ const sorted: Record<string, unknown> = {}
163
+ for (const k of Object.keys(obj).sort()) sorted[k] = obj[k]
164
+ return sorted
165
+ }
166
+ return v
167
+ })
168
+ return createHash('sha256').update(stable).digest('hex').slice(0, 16)
169
+ }
170
+
171
+ /**
172
+ * Remove stale MCP clients and their tools/commands/resources. A client is
173
+ * stale if:
174
+ * - scope 'dynamic' and name no longer in configs (plugin disabled), or
175
+ * - config hash changed (args/url/env edited in .mcp.json) — any scope
176
+ *
177
+ * The removal case is scoped to 'dynamic' so /reload-plugins can't
178
+ * accidentally disconnect a user-configured server that's just temporarily
179
+ * absent from the in-memory config (e.g. during a partial reload). The
180
+ * config-changed case applies to all scopes — if the config actually changed
181
+ * on disk, reconnecting is what you want.
182
+ *
183
+ * Returns the stale clients so the caller can disconnect them (clearServerCache).
184
+ */
185
+ export function excludeStalePluginClients(
186
+ mcp: {
187
+ clients: MCPServerConnection[]
188
+ tools: Tool[]
189
+ commands: Command[]
190
+ resources: Record<string, ServerResource[]>
191
+ },
192
+ configs: Record<string, ScopedMcpServerConfig>,
193
+ ): {
194
+ clients: MCPServerConnection[]
195
+ tools: Tool[]
196
+ commands: Command[]
197
+ resources: Record<string, ServerResource[]>
198
+ stale: MCPServerConnection[]
199
+ } {
200
+ const stale = mcp.clients.filter(c => {
201
+ const fresh = configs[c.name]
202
+ if (!fresh) return c.config.scope === 'dynamic'
203
+ return hashMcpConfig(c.config) !== hashMcpConfig(fresh)
204
+ })
205
+ if (stale.length === 0) {
206
+ return { ...mcp, stale: [] }
207
+ }
208
+
209
+ let { tools, commands, resources } = mcp
210
+ for (const s of stale) {
211
+ tools = excludeToolsByServer(tools, s.name)
212
+ commands = excludeCommandsByServer(commands, s.name)
213
+ resources = excludeResourcesByServer(resources, s.name)
214
+ }
215
+ const staleNames = new Set(stale.map(c => c.name))
216
+
217
+ return {
218
+ clients: mcp.clients.filter(c => !staleNames.has(c.name)),
219
+ tools,
220
+ commands,
221
+ resources,
222
+ stale,
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Checks if a tool name belongs to a specific MCP server
228
+ * @param toolName The tool name to check
229
+ * @param serverName The server name to match against
230
+ * @returns True if the tool belongs to the specified server
231
+ */
232
+ export function isToolFromMcpServer(
233
+ toolName: string,
234
+ serverName: string,
235
+ ): boolean {
236
+ const info = mcpInfoFromString(toolName)
237
+ return info?.serverName === serverName
238
+ }
239
+
240
+ /**
241
+ * Checks if a tool belongs to any MCP server
242
+ * @param tool The tool to check
243
+ * @returns True if the tool is from an MCP server
244
+ */
245
+ export function isMcpTool(tool: Tool): boolean {
246
+ return tool.name?.startsWith('mcp__') || tool.isMcp === true
247
+ }
248
+
249
+ /**
250
+ * Checks if a command belongs to any MCP server
251
+ * @param command The command to check
252
+ * @returns True if the command is from an MCP server
253
+ */
254
+ export function isMcpCommand(command: Command): boolean {
255
+ return command.name?.startsWith('mcp__') || command.isMcp === true
256
+ }
257
+
258
+ /**
259
+ * Describe the file path for a given MCP config scope.
260
+ * @param scope The config scope ('user', 'project', 'local', or 'dynamic')
261
+ * @returns A description of where the config is stored
262
+ */
263
+ export function describeMcpConfigFilePath(scope: ConfigScope): string {
264
+ switch (scope) {
265
+ case 'user':
266
+ return getGlobalClaudeFile()
267
+ case 'project':
268
+ return join(getCwd(), '.mcp.json')
269
+ case 'local':
270
+ return `${getGlobalClaudeFile()} [project: ${getCwd()}]`
271
+ case 'dynamic':
272
+ return 'Dynamically configured'
273
+ case 'enterprise':
274
+ return getEnterpriseMcpFilePath()
275
+ case 'claudeai':
276
+ return 'claude.ai'
277
+ default:
278
+ return scope
279
+ }
280
+ }
281
+
282
+ export function getScopeLabel(scope: ConfigScope): string {
283
+ switch (scope) {
284
+ case 'local':
285
+ return 'Local config (private to you in this project)'
286
+ case 'project':
287
+ return 'Project config (shared via .mcp.json)'
288
+ case 'user':
289
+ return 'User config (available in all your projects)'
290
+ case 'dynamic':
291
+ return 'Dynamic config (from command line)'
292
+ case 'enterprise':
293
+ return 'Enterprise config (managed by your organization)'
294
+ case 'claudeai':
295
+ return 'claude.ai config'
296
+ default:
297
+ return scope
298
+ }
299
+ }
300
+
301
+ export function ensureConfigScope(scope?: string): ConfigScope {
302
+ if (!scope) return 'local'
303
+
304
+ if (!ConfigScopeSchema().options.includes(scope as ConfigScope)) {
305
+ throw new Error(
306
+ `Invalid scope: ${scope}. Must be one of: ${ConfigScopeSchema().options.join(', ')}`,
307
+ )
308
+ }
309
+
310
+ return scope as ConfigScope
311
+ }
312
+
313
+ export function ensureTransport(type?: string): 'stdio' | 'sse' | 'http' {
314
+ if (!type) return 'stdio'
315
+
316
+ if (type !== 'stdio' && type !== 'sse' && type !== 'http') {
317
+ throw new Error(
318
+ `Invalid transport type: ${type}. Must be one of: stdio, sse, http`,
319
+ )
320
+ }
321
+
322
+ return type as 'stdio' | 'sse' | 'http'
323
+ }
324
+
325
+ export function parseHeaders(headerArray: string[]): Record<string, string> {
326
+ const headers: Record<string, string> = {}
327
+
328
+ for (const header of headerArray) {
329
+ const colonIndex = header.indexOf(':')
330
+ if (colonIndex === -1) {
331
+ throw new Error(
332
+ `Invalid header format: "${header}". Expected format: "Header-Name: value"`,
333
+ )
334
+ }
335
+
336
+ const key = header.substring(0, colonIndex).trim()
337
+ const value = header.substring(colonIndex + 1).trim()
338
+
339
+ if (!key) {
340
+ throw new Error(
341
+ `Invalid header: "${header}". Header name cannot be empty.`,
342
+ )
343
+ }
344
+
345
+ headers[key] = value
346
+ }
347
+
348
+ return headers
349
+ }
350
+
351
+ export function getProjectMcpServerStatus(
352
+ serverName: string,
353
+ ): 'approved' | 'rejected' | 'pending' {
354
+ const settings = getSettings_DEPRECATED()
355
+ const normalizedName = normalizeNameForMCP(serverName)
356
+
357
+ // TODO: This fails an e2e test if the ?. is not present. This is likely a bug in the e2e test.
358
+ // Will fix this in a follow-up PR.
359
+ if (
360
+ settings?.disabledMcpjsonServers?.some(
361
+ name => normalizeNameForMCP(name) === normalizedName,
362
+ )
363
+ ) {
364
+ return 'rejected'
365
+ }
366
+
367
+ if (
368
+ settings?.enabledMcpjsonServers?.some(
369
+ name => normalizeNameForMCP(name) === normalizedName,
370
+ ) ||
371
+ settings?.enableAllProjectMcpServers
372
+ ) {
373
+ return 'approved'
374
+ }
375
+
376
+ // In bypass permissions mode (--dangerously-skip-permissions), there's no way
377
+ // to show an approval popup. Auto-approve if projectSettings is enabled since
378
+ // the user has explicitly chosen to bypass all permission checks.
379
+ // SECURITY: We intentionally only check skipDangerousModePermissionPrompt via
380
+ // hasSkipDangerousModePermissionPrompt(), which reads from userSettings/localSettings/
381
+ // flagSettings/policySettings but NOT projectSettings (repo-level .claude/settings.json).
382
+ // This is intentional: a repo should not be able to accept the bypass dialog on behalf of
383
+ // users. We also do NOT check getSessionBypassPermissionsMode() here because
384
+ // sessionBypassPermissionsMode can be set from project settings before the dialog is shown,
385
+ // which would allow RCE attacks via malicious project settings.
386
+ if (
387
+ hasSkipDangerousModePermissionPrompt() &&
388
+ isSettingSourceEnabled('projectSettings')
389
+ ) {
390
+ return 'approved'
391
+ }
392
+
393
+ // In non-interactive mode (SDK, claude -p, piped input), there's no way to
394
+ // show an approval popup. Auto-approve if projectSettings is enabled since:
395
+ // 1. The user/developer explicitly chose to run in this mode
396
+ // 2. For SDK, projectSettings is off by default - they must explicitly enable it
397
+ // 3. For -p mode, the help text warns to only use in trusted directories
398
+ if (
399
+ getIsNonInteractiveSession() &&
400
+ isSettingSourceEnabled('projectSettings')
401
+ ) {
402
+ return 'approved'
403
+ }
404
+
405
+ return 'pending'
406
+ }
407
+
408
+ /**
409
+ * Get the scope/settings source for an MCP server from a tool name
410
+ * @param toolName MCP tool name (format: mcp__serverName__toolName)
411
+ * @returns ConfigScope or null if not an MCP tool or server not found
412
+ */
413
+ export function getMcpServerScopeFromToolName(
414
+ toolName: string,
415
+ ): ConfigScope | null {
416
+ if (!isMcpTool({ name: toolName } as Tool)) {
417
+ return null
418
+ }
419
+
420
+ // Extract server name from tool name (format: mcp__serverName__toolName)
421
+ const mcpInfo = mcpInfoFromString(toolName)
422
+ if (!mcpInfo) {
423
+ return null
424
+ }
425
+
426
+ // Look up server config
427
+ const serverConfig = getMcpConfigByName(mcpInfo.serverName)
428
+
429
+ // Fallback: claude.ai servers have normalized names starting with "claude_ai_"
430
+ // but aren't in getMcpConfigByName (they're fetched async separately)
431
+ if (!serverConfig && mcpInfo.serverName.startsWith('claude_ai_')) {
432
+ return 'claudeai'
433
+ }
434
+
435
+ return serverConfig?.scope ?? null
436
+ }
437
+
438
+ // Type guards for MCP server config types
439
+ function isStdioConfig(
440
+ config: McpServerConfig,
441
+ ): config is McpStdioServerConfig {
442
+ return config.type === 'stdio' || config.type === undefined
443
+ }
444
+
445
+ function isSSEConfig(config: McpServerConfig): config is McpSSEServerConfig {
446
+ return config.type === 'sse'
447
+ }
448
+
449
+ function isHTTPConfig(config: McpServerConfig): config is McpHTTPServerConfig {
450
+ return config.type === 'http'
451
+ }
452
+
453
+ function isWebSocketConfig(
454
+ config: McpServerConfig,
455
+ ): config is McpWebSocketServerConfig {
456
+ return config.type === 'ws'
457
+ }
458
+
459
+ /**
460
+ * Extracts MCP server definitions from agent frontmatter and groups them by server name.
461
+ * This is used to show agent-specific MCP servers in the /mcp command.
462
+ *
463
+ * @param agents Array of agent definitions
464
+ * @returns Array of AgentMcpServerInfo, grouped by server name with list of source agents
465
+ */
466
+ export function extractAgentMcpServers(
467
+ agents: AgentDefinition[],
468
+ ): AgentMcpServerInfo[] {
469
+ // Map: server name -> { config, sourceAgents }
470
+ const serverMap = new Map<
471
+ string,
472
+ {
473
+ config: McpServerConfig & { name: string }
474
+ sourceAgents: string[]
475
+ }
476
+ >()
477
+
478
+ for (const agent of agents) {
479
+ if (!agent.mcpServers?.length) continue
480
+
481
+ for (const spec of agent.mcpServers) {
482
+ // Skip string references - these refer to servers already in global config
483
+ if (typeof spec === 'string') continue
484
+
485
+ // Inline definition as { [name]: config }
486
+ const entries = Object.entries(spec)
487
+ if (entries.length !== 1) continue
488
+
489
+ const [serverName, serverConfig] = entries[0]!
490
+ const existing = serverMap.get(serverName)
491
+
492
+ if (existing) {
493
+ // Add this agent as another source
494
+ if (!existing.sourceAgents.includes(agent.agentType)) {
495
+ existing.sourceAgents.push(agent.agentType)
496
+ }
497
+ } else {
498
+ // New server
499
+ serverMap.set(serverName, {
500
+ config: { ...serverConfig, name: serverName } as McpServerConfig & {
501
+ name: string
502
+ },
503
+ sourceAgents: [agent.agentType],
504
+ })
505
+ }
506
+ }
507
+ }
508
+
509
+ // Convert map to array of AgentMcpServerInfo
510
+ // Only include transport types supported by AgentMcpServerInfo
511
+ const result: AgentMcpServerInfo[] = []
512
+ for (const [name, { config, sourceAgents }] of serverMap) {
513
+ // Use type guards to properly narrow the discriminated union type
514
+ // Only include transport types that are supported by AgentMcpServerInfo
515
+ if (isStdioConfig(config)) {
516
+ result.push({
517
+ name,
518
+ sourceAgents,
519
+ transport: 'stdio',
520
+ command: config.command,
521
+ needsAuth: false,
522
+ })
523
+ } else if (isSSEConfig(config)) {
524
+ result.push({
525
+ name,
526
+ sourceAgents,
527
+ transport: 'sse',
528
+ url: config.url,
529
+ needsAuth: true,
530
+ })
531
+ } else if (isHTTPConfig(config)) {
532
+ result.push({
533
+ name,
534
+ sourceAgents,
535
+ transport: 'http',
536
+ url: config.url,
537
+ needsAuth: true,
538
+ })
539
+ } else if (isWebSocketConfig(config)) {
540
+ result.push({
541
+ name,
542
+ sourceAgents,
543
+ transport: 'ws',
544
+ url: config.url,
545
+ needsAuth: false,
546
+ })
547
+ }
548
+ // Skip unsupported transport types (sdk, claudeai-proxy, sse-ide, ws-ide)
549
+ // These are internal types not meant for agent MCP server display
550
+ }
551
+
552
+ return result.sort((a, b) => a.name.localeCompare(b.name))
553
+ }
554
+
555
+ /**
556
+ * Extracts the MCP server base URL (without query string) for analytics logging.
557
+ * Query strings are stripped because they can contain access tokens.
558
+ * Trailing slashes are also removed for normalization.
559
+ * Returns undefined for stdio/sdk servers or if URL parsing fails.
560
+ */
561
+ export function getLoggingSafeMcpBaseUrl(
562
+ config: McpServerConfig,
563
+ ): string | undefined {
564
+ if (!('url' in config) || typeof config.url !== 'string') {
565
+ return undefined
566
+ }
567
+
568
+ try {
569
+ const url = new URL(config.url)
570
+ url.search = ''
571
+ return url.toString().replace(/\/$/, '')
572
+ } catch {
573
+ return undefined
574
+ }
575
+ }
@@ -0,0 +1,112 @@
1
+ import { logForDebugging } from 'src/utils/debug.js'
2
+ import { z } from 'zod/v4'
3
+ import { lazySchema } from '../../utils/lazySchema.js'
4
+ import {
5
+ checkStatsigFeatureGate_CACHED_MAY_BE_STALE,
6
+ getFeatureValue_CACHED_MAY_BE_STALE,
7
+ } from '../analytics/growthbook.js'
8
+ import { logEvent } from '../analytics/index.js'
9
+ import type { ConnectedMCPServer, MCPServerConnection } from './types.js'
10
+
11
+ // Mirror of AutoModeEnabledState in permissionSetup.ts — inlined because that
12
+ // file pulls in too many deps for this thin IPC module.
13
+ type AutoModeEnabledState = 'enabled' | 'disabled' | 'opt-in'
14
+ function readAutoModeEnabledState(): AutoModeEnabledState | undefined {
15
+ const v = getFeatureValue_CACHED_MAY_BE_STALE<{ enabled?: string }>(
16
+ 'tengu_auto_mode_config',
17
+ {},
18
+ )?.enabled
19
+ return v === 'enabled' || v === 'disabled' || v === 'opt-in' ? v : undefined
20
+ }
21
+
22
+ export const LogEventNotificationSchema = lazySchema(() =>
23
+ z.object({
24
+ method: z.literal('log_event'),
25
+ params: z.object({
26
+ eventName: z.string(),
27
+ eventData: z.object({}).passthrough(),
28
+ }),
29
+ }),
30
+ )
31
+
32
+ // Store the VSCode MCP client reference for sending notifications
33
+ let vscodeMcpClient: ConnectedMCPServer | null = null
34
+
35
+ /**
36
+ * Sends a file_updated notification to the VSCode MCP server. This is used to
37
+ * notify VSCode when files are edited or written by Claude.
38
+ */
39
+ export function notifyVscodeFileUpdated(
40
+ filePath: string,
41
+ oldContent: string | null,
42
+ newContent: string | null,
43
+ ): void {
44
+ if (process.env.USER_TYPE !== 'ant' || !vscodeMcpClient) {
45
+ return
46
+ }
47
+
48
+ void vscodeMcpClient.client
49
+ .notification({
50
+ method: 'file_updated',
51
+ params: { filePath, oldContent, newContent },
52
+ })
53
+ .catch((error: Error) => {
54
+ // Do not throw if the notification failed
55
+ logForDebugging(
56
+ `[VSCode] Failed to send file_updated notification: ${error.message}`,
57
+ )
58
+ })
59
+ }
60
+
61
+ /**
62
+ * Sets up the speicial internal VSCode MCP for bidirectional communication using notifications.
63
+ */
64
+ export function setupVscodeSdkMcp(sdkClients: MCPServerConnection[]): void {
65
+ const client = sdkClients.find(client => client.name === 'claude-vscode')
66
+
67
+ if (client && client.type === 'connected') {
68
+ // Store the client reference for later use
69
+ vscodeMcpClient = client
70
+
71
+ client.client.setNotificationHandler(
72
+ LogEventNotificationSchema(),
73
+ async notification => {
74
+ const { eventName, eventData } = notification.params
75
+ logEvent(
76
+ `tengu_vscode_${eventName}`,
77
+ eventData as { [key: string]: boolean | number | undefined },
78
+ )
79
+ },
80
+ )
81
+
82
+ // Send necessary experiment gates to VSCode immediately.
83
+ const gates: Record<string, boolean | string> = {
84
+ tengu_vscode_review_upsell: checkStatsigFeatureGate_CACHED_MAY_BE_STALE(
85
+ 'tengu_vscode_review_upsell',
86
+ ),
87
+ tengu_vscode_onboarding: checkStatsigFeatureGate_CACHED_MAY_BE_STALE(
88
+ 'tengu_vscode_onboarding',
89
+ ),
90
+ // Browser support.
91
+ tengu_quiet_fern: getFeatureValue_CACHED_MAY_BE_STALE(
92
+ 'tengu_quiet_fern',
93
+ false,
94
+ ),
95
+ // In-band OAuth via claude_authenticate (vs. extension-native PKCE).
96
+ tengu_vscode_cc_auth: getFeatureValue_CACHED_MAY_BE_STALE(
97
+ 'tengu_vscode_cc_auth',
98
+ false,
99
+ ),
100
+ }
101
+ // Tri-state: 'enabled' | 'disabled' | 'opt-in'. Omit if unknown so VSCode
102
+ // fails closed (treats absent as 'disabled').
103
+ const autoModeState = readAutoModeEnabledState()
104
+ if (autoModeState !== undefined) {
105
+ gates.tengu_auto_mode_state = autoModeState
106
+ }
107
+ void client.client.notification({
108
+ method: 'experiment_gates',
109
+ params: { gates },
110
+ })
111
+ }
112
+ }