@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,313 @@
1
+ import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
2
+ import {
3
+ ElicitationCompleteNotificationSchema,
4
+ type ElicitRequestParams,
5
+ ElicitRequestSchema,
6
+ type ElicitResult,
7
+ } from '@modelcontextprotocol/sdk/types.js'
8
+ import type { AppState } from '../../state/AppState.js'
9
+ import {
10
+ executeElicitationHooks,
11
+ executeElicitationResultHooks,
12
+ executeNotificationHooks,
13
+ } from '../../utils/hooks.js'
14
+ import { logMCPDebug, logMCPError } from '../../utils/log.js'
15
+ import { jsonStringify } from '../../utils/slowOperations.js'
16
+ import {
17
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
18
+ logEvent,
19
+ } from '../analytics/index.js'
20
+
21
+ /** Configuration for the waiting state shown after the user opens a URL. */
22
+ export type ElicitationWaitingState = {
23
+ /** Button label, e.g. "Retry now" or "Skip confirmation" */
24
+ actionLabel: string
25
+ /** Whether to show a visible Cancel button (e.g. for error-based retry flow) */
26
+ showCancel?: boolean
27
+ }
28
+
29
+ export type ElicitationRequestEvent = {
30
+ serverName: string
31
+ /** The JSON-RPC request ID, unique per server connection. */
32
+ requestId: string | number
33
+ params: ElicitRequestParams
34
+ signal: AbortSignal
35
+ /**
36
+ * Resolves the elicitation. For explicit elicitations, all actions are
37
+ * meaningful. For error-based retry (-32042), 'accept' is a no-op —
38
+ * the retry is driven by onWaitingDismiss instead.
39
+ */
40
+ respond: (response: ElicitResult) => void
41
+ /** For URL elicitations: shown after user opens the browser. */
42
+ waitingState?: ElicitationWaitingState
43
+ /** Called when phase 2 (waiting) is dismissed by user action or completion. */
44
+ onWaitingDismiss?: (action: 'dismiss' | 'retry' | 'cancel') => void
45
+ /** Set to true by the completion notification handler when the server confirms completion. */
46
+ completed?: boolean
47
+ }
48
+
49
+ function getElicitationMode(params: ElicitRequestParams): 'form' | 'url' {
50
+ return params.mode === 'url' ? 'url' : 'form'
51
+ }
52
+
53
+ /** Find a queued elicitation event by server name and elicitationId. */
54
+ function findElicitationInQueue(
55
+ queue: ElicitationRequestEvent[],
56
+ serverName: string,
57
+ elicitationId: string,
58
+ ): number {
59
+ return queue.findIndex(
60
+ e =>
61
+ e.serverName === serverName &&
62
+ e.params.mode === 'url' &&
63
+ 'elicitationId' in e.params &&
64
+ e.params.elicitationId === elicitationId,
65
+ )
66
+ }
67
+
68
+ export function registerElicitationHandler(
69
+ client: Client,
70
+ serverName: string,
71
+ setAppState: (f: (prevState: AppState) => AppState) => void,
72
+ ): void {
73
+ // Register the elicitation request handler.
74
+ // Wrapped in try/catch because setRequestHandler throws if the client wasn't
75
+ // created with elicitation capability declared.
76
+ try {
77
+ client.setRequestHandler(ElicitRequestSchema, async (request, extra) => {
78
+ logMCPDebug(
79
+ serverName,
80
+ `Received elicitation request: ${jsonStringify(request)}`,
81
+ )
82
+
83
+ const mode = getElicitationMode(request.params)
84
+
85
+ logEvent('tengu_mcp_elicitation_shown', {
86
+ mode: mode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
87
+ })
88
+
89
+ try {
90
+ // Run elicitation hooks first - they can provide a response programmatically
91
+ const hookResponse = await runElicitationHooks(
92
+ serverName,
93
+ request.params,
94
+ extra.signal,
95
+ )
96
+ if (hookResponse) {
97
+ logMCPDebug(
98
+ serverName,
99
+ `Elicitation resolved by hook: ${jsonStringify(hookResponse)}`,
100
+ )
101
+ logEvent('tengu_mcp_elicitation_response', {
102
+ mode: mode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
103
+ action:
104
+ hookResponse.action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
105
+ })
106
+ return hookResponse
107
+ }
108
+
109
+ const elicitationId =
110
+ mode === 'url' && 'elicitationId' in request.params
111
+ ? (request.params.elicitationId as string | undefined)
112
+ : undefined
113
+
114
+ const response = new Promise<ElicitResult>(resolve => {
115
+ const onAbort = () => {
116
+ resolve({ action: 'cancel' })
117
+ }
118
+
119
+ if (extra.signal.aborted) {
120
+ onAbort()
121
+ return
122
+ }
123
+
124
+ const waitingState: ElicitationWaitingState | undefined =
125
+ elicitationId ? { actionLabel: 'Skip confirmation' } : undefined
126
+
127
+ setAppState(prev => ({
128
+ ...prev,
129
+ elicitation: {
130
+ queue: [
131
+ ...prev.elicitation.queue,
132
+ {
133
+ serverName,
134
+ requestId: extra.requestId,
135
+ params: request.params,
136
+ signal: extra.signal,
137
+ waitingState,
138
+ respond: (result: ElicitResult) => {
139
+ extra.signal.removeEventListener('abort', onAbort)
140
+ logEvent('tengu_mcp_elicitation_response', {
141
+ mode: mode as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
142
+ action:
143
+ result.action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
144
+ })
145
+ resolve(result)
146
+ },
147
+ },
148
+ ],
149
+ },
150
+ }))
151
+
152
+ extra.signal.addEventListener('abort', onAbort, { once: true })
153
+ })
154
+ const rawResult = await response
155
+ logMCPDebug(
156
+ serverName,
157
+ `Elicitation response: ${jsonStringify(rawResult)}`,
158
+ )
159
+ const result = await runElicitationResultHooks(
160
+ serverName,
161
+ rawResult,
162
+ extra.signal,
163
+ mode,
164
+ elicitationId,
165
+ )
166
+ return result
167
+ } catch (error) {
168
+ logMCPError(serverName, `Elicitation error: ${error}`)
169
+ return { action: 'cancel' as const }
170
+ }
171
+ })
172
+
173
+ // Register handler for elicitation completion notifications (URL mode).
174
+ // Sets `completed: true` on the matching queue event; the dialog reacts to this flag.
175
+ client.setNotificationHandler(
176
+ ElicitationCompleteNotificationSchema,
177
+ notification => {
178
+ const { elicitationId } = notification.params
179
+ logMCPDebug(
180
+ serverName,
181
+ `Received elicitation completion notification: ${elicitationId}`,
182
+ )
183
+ void executeNotificationHooks({
184
+ message: `MCP server "${serverName}" confirmed elicitation ${elicitationId} complete`,
185
+ notificationType: 'elicitation_complete',
186
+ })
187
+ let found = false
188
+ setAppState(prev => {
189
+ const idx = findElicitationInQueue(
190
+ prev.elicitation.queue,
191
+ serverName,
192
+ elicitationId,
193
+ )
194
+ if (idx === -1) return prev
195
+ found = true
196
+ const queue = [...prev.elicitation.queue]
197
+ queue[idx] = { ...queue[idx]!, completed: true }
198
+ return { ...prev, elicitation: { queue } }
199
+ })
200
+ if (!found) {
201
+ logMCPDebug(
202
+ serverName,
203
+ `Ignoring completion notification for unknown elicitation: ${elicitationId}`,
204
+ )
205
+ }
206
+ },
207
+ )
208
+ } catch {
209
+ // Client wasn't created with elicitation capability - nothing to register
210
+ return
211
+ }
212
+ }
213
+
214
+ export async function runElicitationHooks(
215
+ serverName: string,
216
+ params: ElicitRequestParams,
217
+ signal: AbortSignal,
218
+ ): Promise<ElicitResult | undefined> {
219
+ try {
220
+ const mode = params.mode === 'url' ? 'url' : 'form'
221
+ const url = 'url' in params ? (params.url as string) : undefined
222
+ const elicitationId =
223
+ 'elicitationId' in params
224
+ ? (params.elicitationId as string | undefined)
225
+ : undefined
226
+
227
+ const { elicitationResponse, blockingError } =
228
+ await executeElicitationHooks({
229
+ serverName,
230
+ message: params.message,
231
+ requestedSchema:
232
+ 'requestedSchema' in params
233
+ ? (params.requestedSchema as Record<string, unknown>)
234
+ : undefined,
235
+ signal,
236
+ mode,
237
+ url,
238
+ elicitationId,
239
+ })
240
+
241
+ if (blockingError) {
242
+ return { action: 'decline' }
243
+ }
244
+
245
+ if (elicitationResponse) {
246
+ return {
247
+ action: elicitationResponse.action,
248
+ content: elicitationResponse.content,
249
+ }
250
+ }
251
+
252
+ return undefined
253
+ } catch (error) {
254
+ logMCPError(serverName, `Elicitation hook error: ${error}`)
255
+ return undefined
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Run ElicitationResult hooks after the user has responded, then fire a
261
+ * `elicitation_response` notification. Returns a (potentially modified)
262
+ * ElicitResult — hooks may override the action/content or block the response.
263
+ */
264
+ export async function runElicitationResultHooks(
265
+ serverName: string,
266
+ result: ElicitResult,
267
+ signal: AbortSignal,
268
+ mode?: 'form' | 'url',
269
+ elicitationId?: string,
270
+ ): Promise<ElicitResult> {
271
+ try {
272
+ const { elicitationResultResponse, blockingError } =
273
+ await executeElicitationResultHooks({
274
+ serverName,
275
+ action: result.action,
276
+ content: result.content as Record<string, unknown> | undefined,
277
+ signal,
278
+ mode,
279
+ elicitationId,
280
+ })
281
+
282
+ if (blockingError) {
283
+ void executeNotificationHooks({
284
+ message: `Elicitation response for server "${serverName}": decline`,
285
+ notificationType: 'elicitation_response',
286
+ })
287
+ return { action: 'decline' }
288
+ }
289
+
290
+ const finalResult = elicitationResultResponse
291
+ ? {
292
+ action: elicitationResultResponse.action,
293
+ content: elicitationResultResponse.content ?? result.content,
294
+ }
295
+ : result
296
+
297
+ // Fire a notification for observability
298
+ void executeNotificationHooks({
299
+ message: `Elicitation response for server "${serverName}": ${finalResult.action}`,
300
+ notificationType: 'elicitation_response',
301
+ })
302
+
303
+ return finalResult
304
+ } catch (error) {
305
+ logMCPError(serverName, `ElicitationResult hook error: ${error}`)
306
+ // Fire notification even on error
307
+ void executeNotificationHooks({
308
+ message: `Elicitation response for server "${serverName}": ${result.action}`,
309
+ notificationType: 'elicitation_response',
310
+ })
311
+ return result
312
+ }
313
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared utilities for expanding environment variables in MCP server configurations
3
+ */
4
+
5
+ /**
6
+ * Expand environment variables in a string value
7
+ * Handles ${VAR} and ${VAR:-default} syntax
8
+ * @returns Object with expanded string and list of missing variables
9
+ */
10
+ export function expandEnvVarsInString(value: string): {
11
+ expanded: string
12
+ missingVars: string[]
13
+ } {
14
+ const missingVars: string[] = []
15
+
16
+ const expanded = value.replace(/\$\{([^}]+)\}/g, (match, varContent) => {
17
+ // Split on :- to support default values (limit to 2 parts to preserve :- in defaults)
18
+ const [varName, defaultValue] = varContent.split(':-', 2)
19
+ const envValue = process.env[varName]
20
+
21
+ if (envValue !== undefined) {
22
+ return envValue
23
+ }
24
+ if (defaultValue !== undefined) {
25
+ return defaultValue
26
+ }
27
+
28
+ // Track missing variable for error reporting
29
+ missingVars.push(varName)
30
+ // Return original if not found (allows debugging but will be reported as error)
31
+ return match
32
+ })
33
+
34
+ return {
35
+ expanded,
36
+ missingVars,
37
+ }
38
+ }
@@ -0,0 +1,138 @@
1
+ import { getIsNonInteractiveSession } from '../../bootstrap/state.js'
2
+ import { checkHasTrustDialogAccepted } from '../../utils/config.js'
3
+ import { logAntError } from '../../utils/debug.js'
4
+ import { errorMessage } from '../../utils/errors.js'
5
+ import { execFileNoThrowWithCwd } from '../../utils/execFileNoThrow.js'
6
+ import { logError, logMCPDebug, logMCPError } from '../../utils/log.js'
7
+ import { jsonParse } from '../../utils/slowOperations.js'
8
+ import { logEvent } from '../analytics/index.js'
9
+ import type {
10
+ McpHTTPServerConfig,
11
+ McpSSEServerConfig,
12
+ McpWebSocketServerConfig,
13
+ ScopedMcpServerConfig,
14
+ } from './types.js'
15
+
16
+ /**
17
+ * Check if the MCP server config comes from project settings (projectSettings or localSettings)
18
+ * This is important for security checks
19
+ */
20
+ function isMcpServerFromProjectOrLocalSettings(
21
+ config: ScopedMcpServerConfig,
22
+ ): boolean {
23
+ return config.scope === 'project' || config.scope === 'local'
24
+ }
25
+
26
+ /**
27
+ * Get dynamic headers for an MCP server using the headersHelper script
28
+ * @param serverName The name of the MCP server
29
+ * @param config The MCP server configuration
30
+ * @returns Headers object or null if not configured or failed
31
+ */
32
+ export async function getMcpHeadersFromHelper(
33
+ serverName: string,
34
+ config: McpSSEServerConfig | McpHTTPServerConfig | McpWebSocketServerConfig,
35
+ ): Promise<Record<string, string> | null> {
36
+ if (!config.headersHelper) {
37
+ return null
38
+ }
39
+
40
+ // Security check for project/local settings
41
+ // Skip trust check in non-interactive mode (e.g., CI/CD, automation)
42
+ if (
43
+ 'scope' in config &&
44
+ isMcpServerFromProjectOrLocalSettings(config as ScopedMcpServerConfig) &&
45
+ !getIsNonInteractiveSession()
46
+ ) {
47
+ // Check if trust has been established for this project
48
+ const hasTrust = checkHasTrustDialogAccepted()
49
+ if (!hasTrust) {
50
+ const error = new Error(
51
+ `Security: headersHelper for MCP server '${serverName}' executed before workspace trust is confirmed. If you see this message, post in ${MACRO.FEEDBACK_CHANNEL}.`,
52
+ )
53
+ logAntError('MCP headersHelper invoked before trust check', error)
54
+ logEvent('tengu_mcp_headersHelper_missing_trust', {})
55
+ return null
56
+ }
57
+ }
58
+
59
+ try {
60
+ logMCPDebug(serverName, 'Executing headersHelper to get dynamic headers')
61
+ const execResult = await execFileNoThrowWithCwd(config.headersHelper, [], {
62
+ shell: true,
63
+ timeout: 10000,
64
+ // Pass server context so one helper script can serve multiple MCP servers
65
+ // (git credential-helper style). See deshaw/anthropic-issues#28.
66
+ env: {
67
+ ...process.env,
68
+ CLAUDE_CODE_MCP_SERVER_NAME: serverName,
69
+ CLAUDE_CODE_MCP_SERVER_URL: config.url,
70
+ },
71
+ })
72
+ if (execResult.code !== 0 || !execResult.stdout) {
73
+ throw new Error(
74
+ `headersHelper for MCP server '${serverName}' did not return a valid value`,
75
+ )
76
+ }
77
+ const result = execResult.stdout.trim()
78
+
79
+ const headers = jsonParse(result)
80
+ if (
81
+ typeof headers !== 'object' ||
82
+ headers === null ||
83
+ Array.isArray(headers)
84
+ ) {
85
+ throw new Error(
86
+ `headersHelper for MCP server '${serverName}' must return a JSON object with string key-value pairs`,
87
+ )
88
+ }
89
+
90
+ // Validate all values are strings
91
+ for (const [key, value] of Object.entries(headers)) {
92
+ if (typeof value !== 'string') {
93
+ throw new Error(
94
+ `headersHelper for MCP server '${serverName}' returned non-string value for key "${key}": ${typeof value}`,
95
+ )
96
+ }
97
+ }
98
+
99
+ logMCPDebug(
100
+ serverName,
101
+ `Successfully retrieved ${Object.keys(headers).length} headers from headersHelper`,
102
+ )
103
+ return headers as Record<string, string>
104
+ } catch (error) {
105
+ logMCPError(
106
+ serverName,
107
+ `Error getting headers from headersHelper: ${errorMessage(error)}`,
108
+ )
109
+ logError(
110
+ new Error(
111
+ `Error getting MCP headers from headersHelper for server '${serverName}': ${errorMessage(error)}`,
112
+ ),
113
+ )
114
+ // Return null instead of throwing to avoid blocking the connection
115
+ return null
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Get combined headers for an MCP server (static + dynamic)
121
+ * @param serverName The name of the MCP server
122
+ * @param config The MCP server configuration
123
+ * @returns Combined headers object
124
+ */
125
+ export async function getMcpServerHeaders(
126
+ serverName: string,
127
+ config: McpSSEServerConfig | McpHTTPServerConfig | McpWebSocketServerConfig,
128
+ ): Promise<Record<string, string>> {
129
+ const staticHeaders = config.headers || {}
130
+ const dynamicHeaders =
131
+ (await getMcpHeadersFromHelper(serverName, config)) || {}
132
+
133
+ // Dynamic headers override static headers if both are present
134
+ return {
135
+ ...staticHeaders,
136
+ ...dynamicHeaders,
137
+ }
138
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Pure string utility functions for MCP tool/server name parsing.
3
+ * This file has no heavy dependencies to keep it lightweight for
4
+ * consumers that only need string parsing (e.g., permissionValidation).
5
+ */
6
+
7
+ import { normalizeNameForMCP } from './normalization.js'
8
+
9
+ /*
10
+ * Extracts MCP server information from a tool name string
11
+ * @param toolString The string to parse. Expected format: "mcp__serverName__toolName"
12
+ * @returns An object containing server name and optional tool name, or null if not a valid MCP rule
13
+ *
14
+ * Known limitation: If a server name contains "__", parsing will be incorrect.
15
+ * For example, "mcp__my__server__tool" would parse as server="my" and tool="server__tool"
16
+ * instead of server="my__server" and tool="tool". This is rare in practice since server
17
+ * names typically don't contain double underscores.
18
+ */
19
+ export function mcpInfoFromString(toolString: string): {
20
+ serverName: string
21
+ toolName: string | undefined
22
+ } | null {
23
+ const parts = toolString.split('__')
24
+ const [mcpPart, serverName, ...toolNameParts] = parts
25
+ if (mcpPart !== 'mcp' || !serverName) {
26
+ return null
27
+ }
28
+ // Join all parts after server name to preserve double underscores in tool names
29
+ const toolName =
30
+ toolNameParts.length > 0 ? toolNameParts.join('__') : undefined
31
+ return { serverName, toolName }
32
+ }
33
+
34
+ /**
35
+ * Generates the MCP tool/command name prefix for a given server
36
+ * @param serverName Name of the MCP server
37
+ * @returns The prefix string
38
+ */
39
+ export function getMcpPrefix(serverName: string): string {
40
+ return `mcp__${normalizeNameForMCP(serverName)}__`
41
+ }
42
+
43
+ /**
44
+ * Builds a fully qualified MCP tool name from server and tool names.
45
+ * Inverse of mcpInfoFromString().
46
+ * @param serverName Name of the MCP server (unnormalized)
47
+ * @param toolName Name of the tool (unnormalized)
48
+ * @returns The fully qualified name, e.g., "mcp__server__tool"
49
+ */
50
+ export function buildMcpToolName(serverName: string, toolName: string): string {
51
+ return `${getMcpPrefix(serverName)}${normalizeNameForMCP(toolName)}`
52
+ }
53
+
54
+ /**
55
+ * Returns the name to use for permission rule matching.
56
+ * For MCP tools, uses the fully qualified mcp__server__tool name so that
57
+ * deny rules targeting builtins (e.g., "Write") don't match unprefixed MCP
58
+ * replacements that share the same display name. Falls back to `tool.name`.
59
+ */
60
+ export function getToolNameForPermissionCheck(tool: {
61
+ name: string
62
+ mcpInfo?: { serverName: string; toolName: string }
63
+ }): string {
64
+ return tool.mcpInfo
65
+ ? buildMcpToolName(tool.mcpInfo.serverName, tool.mcpInfo.toolName)
66
+ : tool.name
67
+ }
68
+
69
+ /*
70
+ * Extracts the display name from an MCP tool/command name
71
+ * @param fullName The full MCP tool/command name (e.g., "mcp__server_name__tool_name")
72
+ * @param serverName The server name to remove from the prefix
73
+ * @returns The display name without the MCP prefix
74
+ */
75
+ export function getMcpDisplayName(
76
+ fullName: string,
77
+ serverName: string,
78
+ ): string {
79
+ const prefix = `mcp__${normalizeNameForMCP(serverName)}__`
80
+ return fullName.replace(prefix, '')
81
+ }
82
+
83
+ /**
84
+ * Extracts just the tool/command display name from a userFacingName
85
+ * @param userFacingName The full user-facing name (e.g., "github - Add comment to issue (MCP)")
86
+ * @returns The display name without server prefix and (MCP) suffix
87
+ */
88
+ export function extractMcpToolDisplayName(userFacingName: string): string {
89
+ // This is really ugly but our current Tool type doesn't make it easy to have different display names for different purposes.
90
+
91
+ // First, remove the (MCP) suffix if present
92
+ let withoutSuffix = userFacingName.replace(/\s*\(MCP\)\s*$/, '')
93
+
94
+ // Trim the result
95
+ withoutSuffix = withoutSuffix.trim()
96
+
97
+ // Then, remove the server prefix (everything before " - ")
98
+ const dashIndex = withoutSuffix.indexOf(' - ')
99
+ if (dashIndex !== -1) {
100
+ const displayName = withoutSuffix.substring(dashIndex + 3).trim()
101
+ return displayName
102
+ }
103
+
104
+ // If no dash found, return the string without (MCP)
105
+ return withoutSuffix
106
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Pure utility functions for MCP name normalization.
3
+ * This file has no dependencies to avoid circular imports.
4
+ */
5
+
6
+ // Claude.ai server names are prefixed with this string
7
+ const CLAUDEAI_SERVER_PREFIX = 'claude.ai '
8
+
9
+ /**
10
+ * Normalize server names to be compatible with the API pattern ^[a-zA-Z0-9_-]{1,64}$
11
+ * Replaces any invalid characters (including dots and spaces) with underscores.
12
+ *
13
+ * For claude.ai servers (names starting with "claude.ai "), also collapses
14
+ * consecutive underscores and strips leading/trailing underscores to prevent
15
+ * interference with the __ delimiter used in MCP tool names.
16
+ */
17
+ export function normalizeNameForMCP(name: string): string {
18
+ let normalized = name.replace(/[^a-zA-Z0-9_-]/g, '_')
19
+ if (name.startsWith(CLAUDEAI_SERVER_PREFIX)) {
20
+ normalized = normalized.replace(/_+/g, '_').replace(/^_|_$/g, '')
21
+ }
22
+ return normalized
23
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * OAuth redirect port helpers — extracted from auth.ts to break the
3
+ * auth.ts ↔ xaaIdpLogin.ts circular dependency.
4
+ */
5
+ import { createServer } from 'http'
6
+ import { getPlatform } from '../../utils/platform.js'
7
+
8
+ // Windows dynamic port range 49152-65535 is reserved
9
+ const REDIRECT_PORT_RANGE =
10
+ getPlatform() === 'windows'
11
+ ? { min: 39152, max: 49151 }
12
+ : { min: 49152, max: 65535 }
13
+ const REDIRECT_PORT_FALLBACK = 3118
14
+
15
+ /**
16
+ * Builds a redirect URI on localhost with the given port and a fixed `/callback` path.
17
+ *
18
+ * RFC 8252 Section 7.3 (OAuth for Native Apps): loopback redirect URIs match any
19
+ * port as long as the path matches.
20
+ */
21
+ export function buildRedirectUri(
22
+ port: number = REDIRECT_PORT_FALLBACK,
23
+ ): string {
24
+ return `http://localhost:${port}/callback`
25
+ }
26
+
27
+ function getMcpOAuthCallbackPort(): number | undefined {
28
+ const port = parseInt(process.env.MCP_OAUTH_CALLBACK_PORT || '', 10)
29
+ return port > 0 ? port : undefined
30
+ }
31
+
32
+ /**
33
+ * Finds an available port in the specified range for OAuth redirect
34
+ * Uses random selection for better security
35
+ */
36
+ export async function findAvailablePort(): Promise<number> {
37
+ // First, try the configured port if specified
38
+ const configuredPort = getMcpOAuthCallbackPort()
39
+ if (configuredPort) {
40
+ return configuredPort
41
+ }
42
+
43
+ const { min, max } = REDIRECT_PORT_RANGE
44
+ const range = max - min + 1
45
+ const maxAttempts = Math.min(range, 100) // Don't try forever
46
+
47
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
48
+ const port = min + Math.floor(Math.random() * range)
49
+
50
+ try {
51
+ await new Promise<void>((resolve, reject) => {
52
+ const testServer = createServer()
53
+ testServer.once('error', reject)
54
+ testServer.listen(port, () => {
55
+ testServer.close(() => resolve())
56
+ })
57
+ })
58
+ return port
59
+ } catch {
60
+ // Port in use, try another random port
61
+ continue
62
+ }
63
+ }
64
+
65
+ // If random selection failed, try the fallback port
66
+ try {
67
+ await new Promise<void>((resolve, reject) => {
68
+ const testServer = createServer()
69
+ testServer.once('error', reject)
70
+ testServer.listen(REDIRECT_PORT_FALLBACK, () => {
71
+ testServer.close(() => resolve())
72
+ })
73
+ })
74
+ return REDIRECT_PORT_FALLBACK
75
+ } catch {
76
+ throw new Error(`No available ports for OAuth redirect`)
77
+ }
78
+ }