@xelauvas/xela-cli 0.1.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 (1920) hide show
  1. package/README.md +200 -0
  2. package/bin/xela +100 -0
  3. package/package.json +88 -0
  4. package/src/QueryEngine.ts +1295 -0
  5. package/src/Task.ts +125 -0
  6. package/src/Tool.ts +792 -0
  7. package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
  8. package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
  9. package/src/_shims/bun_bundle.js +9 -0
  10. package/src/_shims/cjs_stub.cjs +23 -0
  11. package/src/_shims/empty_stub.js +33 -0
  12. package/src/_shims/loader.js +352 -0
  13. package/src/_shims/openai_adapter.ts +486 -0
  14. package/src/_shims/react_compiler_runtime.js +17 -0
  15. package/src/_shims/register.js +148 -0
  16. package/src/assistant/sessionHistory.ts +87 -0
  17. package/src/bootstrap/state.ts +1759 -0
  18. package/src/bridge/bridgeApi.ts +539 -0
  19. package/src/bridge/bridgeConfig.ts +48 -0
  20. package/src/bridge/bridgeDebug.ts +135 -0
  21. package/src/bridge/bridgeEnabled.ts +202 -0
  22. package/src/bridge/bridgeMain.ts +2999 -0
  23. package/src/bridge/bridgeMessaging.ts +461 -0
  24. package/src/bridge/bridgePermissionCallbacks.ts +43 -0
  25. package/src/bridge/bridgePointer.ts +210 -0
  26. package/src/bridge/bridgeStatusUtil.ts +163 -0
  27. package/src/bridge/bridgeUI.ts +530 -0
  28. package/src/bridge/capacityWake.ts +56 -0
  29. package/src/bridge/codeSessionApi.ts +168 -0
  30. package/src/bridge/createSession.ts +384 -0
  31. package/src/bridge/debugUtils.ts +141 -0
  32. package/src/bridge/envLessBridgeConfig.ts +165 -0
  33. package/src/bridge/flushGate.ts +71 -0
  34. package/src/bridge/inboundAttachments.ts +175 -0
  35. package/src/bridge/inboundMessages.ts +80 -0
  36. package/src/bridge/initReplBridge.ts +569 -0
  37. package/src/bridge/jwtUtils.ts +256 -0
  38. package/src/bridge/pollConfig.ts +110 -0
  39. package/src/bridge/pollConfigDefaults.ts +82 -0
  40. package/src/bridge/remoteBridgeCore.ts +1008 -0
  41. package/src/bridge/replBridge.ts +2406 -0
  42. package/src/bridge/replBridgeHandle.ts +36 -0
  43. package/src/bridge/replBridgeTransport.ts +370 -0
  44. package/src/bridge/sessionIdCompat.ts +57 -0
  45. package/src/bridge/sessionRunner.ts +550 -0
  46. package/src/bridge/trustedDevice.ts +210 -0
  47. package/src/bridge/types.ts +262 -0
  48. package/src/bridge/workSecret.ts +127 -0
  49. package/src/buddy/CompanionSprite.tsx +371 -0
  50. package/src/buddy/companion.ts +133 -0
  51. package/src/buddy/prompt.ts +36 -0
  52. package/src/buddy/sprites.ts +514 -0
  53. package/src/buddy/types.ts +148 -0
  54. package/src/buddy/useBuddyNotification.tsx +98 -0
  55. package/src/cli/exit.ts +31 -0
  56. package/src/cli/handlers/agents.ts +70 -0
  57. package/src/cli/handlers/auth.ts +330 -0
  58. package/src/cli/handlers/autoMode.ts +170 -0
  59. package/src/cli/handlers/mcp.tsx +362 -0
  60. package/src/cli/handlers/plugins.ts +878 -0
  61. package/src/cli/handlers/util.tsx +110 -0
  62. package/src/cli/ndjsonSafeStringify.ts +32 -0
  63. package/src/cli/print.ts +5594 -0
  64. package/src/cli/remoteIO.ts +255 -0
  65. package/src/cli/structuredIO.ts +859 -0
  66. package/src/cli/transports/HybridTransport.ts +282 -0
  67. package/src/cli/transports/SSETransport.ts +711 -0
  68. package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
  69. package/src/cli/transports/WebSocketTransport.ts +800 -0
  70. package/src/cli/transports/WorkerStateUploader.ts +131 -0
  71. package/src/cli/transports/ccrClient.ts +998 -0
  72. package/src/cli/transports/transportUtils.ts +45 -0
  73. package/src/cli/update.ts +422 -0
  74. package/src/commands/add-dir/add-dir.tsx +126 -0
  75. package/src/commands/add-dir/index.ts +11 -0
  76. package/src/commands/add-dir/validation.ts +110 -0
  77. package/src/commands/advisor.ts +109 -0
  78. package/src/commands/agents/agents.tsx +12 -0
  79. package/src/commands/agents/index.ts +10 -0
  80. package/src/commands/ant-trace/index.js +1 -0
  81. package/src/commands/autofix-pr/index.js +1 -0
  82. package/src/commands/backfill-sessions/index.js +1 -0
  83. package/src/commands/branch/branch.ts +296 -0
  84. package/src/commands/branch/index.ts +14 -0
  85. package/src/commands/break-cache/index.js +1 -0
  86. package/src/commands/bridge/bridge.tsx +509 -0
  87. package/src/commands/bridge/index.ts +26 -0
  88. package/src/commands/bridge-kick.ts +200 -0
  89. package/src/commands/brief.ts +130 -0
  90. package/src/commands/btw/btw.tsx +243 -0
  91. package/src/commands/btw/index.ts +13 -0
  92. package/src/commands/bughunter/index.js +1 -0
  93. package/src/commands/chrome/chrome.tsx +285 -0
  94. package/src/commands/chrome/index.ts +13 -0
  95. package/src/commands/clear/caches.ts +144 -0
  96. package/src/commands/clear/clear.ts +7 -0
  97. package/src/commands/clear/conversation.ts +251 -0
  98. package/src/commands/clear/index.ts +19 -0
  99. package/src/commands/color/color.ts +93 -0
  100. package/src/commands/color/index.ts +16 -0
  101. package/src/commands/commit-push-pr.ts +158 -0
  102. package/src/commands/commit.ts +92 -0
  103. package/src/commands/compact/compact.ts +287 -0
  104. package/src/commands/compact/index.ts +15 -0
  105. package/src/commands/config/config.tsx +7 -0
  106. package/src/commands/config/index.ts +11 -0
  107. package/src/commands/context/context-noninteractive.ts +325 -0
  108. package/src/commands/context/context.tsx +64 -0
  109. package/src/commands/context/index.ts +24 -0
  110. package/src/commands/copy/copy.tsx +371 -0
  111. package/src/commands/copy/index.ts +15 -0
  112. package/src/commands/cost/cost.ts +24 -0
  113. package/src/commands/cost/index.ts +23 -0
  114. package/src/commands/createMovedToPluginCommand.ts +65 -0
  115. package/src/commands/ctx_viz/index.js +1 -0
  116. package/src/commands/debug-tool-call/index.js +1 -0
  117. package/src/commands/desktop/desktop.tsx +9 -0
  118. package/src/commands/desktop/index.ts +26 -0
  119. package/src/commands/diff/diff.tsx +9 -0
  120. package/src/commands/diff/index.ts +8 -0
  121. package/src/commands/doctor/doctor.tsx +7 -0
  122. package/src/commands/doctor/index.ts +12 -0
  123. package/src/commands/effort/effort.tsx +183 -0
  124. package/src/commands/effort/index.ts +13 -0
  125. package/src/commands/env/index.js +1 -0
  126. package/src/commands/exit/exit.tsx +33 -0
  127. package/src/commands/exit/index.ts +12 -0
  128. package/src/commands/export/export.tsx +91 -0
  129. package/src/commands/export/index.ts +11 -0
  130. package/src/commands/extra-usage/extra-usage-core.ts +118 -0
  131. package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  132. package/src/commands/extra-usage/extra-usage.tsx +17 -0
  133. package/src/commands/extra-usage/index.ts +31 -0
  134. package/src/commands/fast/fast.tsx +269 -0
  135. package/src/commands/fast/index.ts +26 -0
  136. package/src/commands/feedback/feedback.tsx +25 -0
  137. package/src/commands/feedback/index.ts +26 -0
  138. package/src/commands/files/files.ts +19 -0
  139. package/src/commands/files/index.ts +12 -0
  140. package/src/commands/good-claude/index.js +1 -0
  141. package/src/commands/heapdump/heapdump.ts +17 -0
  142. package/src/commands/heapdump/index.ts +12 -0
  143. package/src/commands/help/help.tsx +11 -0
  144. package/src/commands/help/index.ts +10 -0
  145. package/src/commands/hooks/hooks.tsx +13 -0
  146. package/src/commands/hooks/index.ts +11 -0
  147. package/src/commands/ide/ide.tsx +646 -0
  148. package/src/commands/ide/index.ts +11 -0
  149. package/src/commands/init-verifiers.ts +262 -0
  150. package/src/commands/init.ts +256 -0
  151. package/src/commands/insights.ts +3200 -0
  152. package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
  153. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  154. package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  155. package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  156. package/src/commands/install-github-app/CreatingStep.tsx +65 -0
  157. package/src/commands/install-github-app/ErrorStep.tsx +85 -0
  158. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  159. package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
  160. package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  161. package/src/commands/install-github-app/SuccessStep.tsx +96 -0
  162. package/src/commands/install-github-app/WarningsStep.tsx +73 -0
  163. package/src/commands/install-github-app/index.ts +13 -0
  164. package/src/commands/install-github-app/install-github-app.tsx +587 -0
  165. package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
  166. package/src/commands/install-slack-app/index.ts +12 -0
  167. package/src/commands/install-slack-app/install-slack-app.ts +30 -0
  168. package/src/commands/install.tsx +300 -0
  169. package/src/commands/issue/index.js +1 -0
  170. package/src/commands/keybindings/index.ts +13 -0
  171. package/src/commands/keybindings/keybindings.ts +53 -0
  172. package/src/commands/login/index.ts +14 -0
  173. package/src/commands/login/login.tsx +104 -0
  174. package/src/commands/logout/index.ts +10 -0
  175. package/src/commands/logout/logout.tsx +82 -0
  176. package/src/commands/mcp/addCommand.ts +280 -0
  177. package/src/commands/mcp/index.ts +12 -0
  178. package/src/commands/mcp/mcp.tsx +85 -0
  179. package/src/commands/mcp/xaaIdpCommand.ts +266 -0
  180. package/src/commands/memory/index.ts +10 -0
  181. package/src/commands/memory/memory.tsx +90 -0
  182. package/src/commands/mobile/index.ts +11 -0
  183. package/src/commands/mobile/mobile.tsx +274 -0
  184. package/src/commands/mock-limits/index.js +1 -0
  185. package/src/commands/model/index.ts +16 -0
  186. package/src/commands/model/model.tsx +297 -0
  187. package/src/commands/oauth-refresh/index.js +1 -0
  188. package/src/commands/onboarding/index.js +1 -0
  189. package/src/commands/output-style/index.ts +11 -0
  190. package/src/commands/output-style/output-style.tsx +7 -0
  191. package/src/commands/passes/index.ts +22 -0
  192. package/src/commands/passes/passes.tsx +24 -0
  193. package/src/commands/perf-issue/index.js +1 -0
  194. package/src/commands/permissions/index.ts +11 -0
  195. package/src/commands/permissions/permissions.tsx +10 -0
  196. package/src/commands/plan/index.ts +11 -0
  197. package/src/commands/plan/plan.tsx +122 -0
  198. package/src/commands/plugin/AddMarketplace.tsx +162 -0
  199. package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
  200. package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
  201. package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
  202. package/src/commands/plugin/ManagePlugins.tsx +2215 -0
  203. package/src/commands/plugin/PluginErrors.tsx +124 -0
  204. package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
  205. package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
  206. package/src/commands/plugin/PluginSettings.tsx +1072 -0
  207. package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
  208. package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  209. package/src/commands/plugin/ValidatePlugin.tsx +98 -0
  210. package/src/commands/plugin/index.tsx +11 -0
  211. package/src/commands/plugin/parseArgs.ts +103 -0
  212. package/src/commands/plugin/plugin.tsx +7 -0
  213. package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  214. package/src/commands/plugin/usePagination.ts +171 -0
  215. package/src/commands/pr_comments/index.ts +50 -0
  216. package/src/commands/privacy-settings/index.ts +14 -0
  217. package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
  218. package/src/commands/rate-limit-options/index.ts +19 -0
  219. package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  220. package/src/commands/release-notes/index.ts +11 -0
  221. package/src/commands/release-notes/release-notes.ts +50 -0
  222. package/src/commands/reload-plugins/index.ts +18 -0
  223. package/src/commands/reload-plugins/reload-plugins.ts +61 -0
  224. package/src/commands/remote-env/index.ts +15 -0
  225. package/src/commands/remote-env/remote-env.tsx +7 -0
  226. package/src/commands/remote-setup/api.ts +182 -0
  227. package/src/commands/remote-setup/index.ts +20 -0
  228. package/src/commands/remote-setup/remote-setup.tsx +187 -0
  229. package/src/commands/rename/generateSessionName.ts +67 -0
  230. package/src/commands/rename/index.ts +12 -0
  231. package/src/commands/rename/rename.ts +87 -0
  232. package/src/commands/reset-limits/index.js +4 -0
  233. package/src/commands/resume/index.ts +12 -0
  234. package/src/commands/resume/resume.tsx +275 -0
  235. package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
  236. package/src/commands/review/reviewRemote.ts +316 -0
  237. package/src/commands/review/ultrareviewCommand.tsx +58 -0
  238. package/src/commands/review/ultrareviewEnabled.ts +14 -0
  239. package/src/commands/review.ts +57 -0
  240. package/src/commands/rewind/index.ts +13 -0
  241. package/src/commands/rewind/rewind.ts +13 -0
  242. package/src/commands/sandbox-toggle/index.ts +50 -0
  243. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  244. package/src/commands/security-review.ts +243 -0
  245. package/src/commands/session/index.ts +16 -0
  246. package/src/commands/session/session.tsx +140 -0
  247. package/src/commands/share/index.js +1 -0
  248. package/src/commands/skills/index.ts +10 -0
  249. package/src/commands/skills/skills.tsx +8 -0
  250. package/src/commands/stats/index.ts +10 -0
  251. package/src/commands/stats/stats.tsx +7 -0
  252. package/src/commands/status/index.ts +12 -0
  253. package/src/commands/status/status.tsx +8 -0
  254. package/src/commands/statusline.tsx +24 -0
  255. package/src/commands/stickers/index.ts +11 -0
  256. package/src/commands/stickers/stickers.ts +16 -0
  257. package/src/commands/summary/index.js +1 -0
  258. package/src/commands/tag/index.ts +12 -0
  259. package/src/commands/tag/tag.tsx +215 -0
  260. package/src/commands/tasks/index.ts +11 -0
  261. package/src/commands/tasks/tasks.tsx +8 -0
  262. package/src/commands/teleport/index.js +1 -0
  263. package/src/commands/terminalSetup/index.ts +23 -0
  264. package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
  265. package/src/commands/theme/index.ts +10 -0
  266. package/src/commands/theme/theme.tsx +57 -0
  267. package/src/commands/thinkback/index.ts +13 -0
  268. package/src/commands/thinkback/thinkback.tsx +554 -0
  269. package/src/commands/thinkback-play/index.ts +17 -0
  270. package/src/commands/thinkback-play/thinkback-play.ts +43 -0
  271. package/src/commands/ultraplan.tsx +471 -0
  272. package/src/commands/upgrade/index.ts +16 -0
  273. package/src/commands/upgrade/upgrade.tsx +38 -0
  274. package/src/commands/usage/index.ts +9 -0
  275. package/src/commands/usage/usage.tsx +7 -0
  276. package/src/commands/version.ts +22 -0
  277. package/src/commands/vim/index.ts +11 -0
  278. package/src/commands/vim/vim.ts +38 -0
  279. package/src/commands/voice/index.ts +20 -0
  280. package/src/commands/voice/voice.ts +150 -0
  281. package/src/commands.ts +754 -0
  282. package/src/components/AgentProgressLine.tsx +136 -0
  283. package/src/components/App.tsx +56 -0
  284. package/src/components/ApproveApiKey.tsx +123 -0
  285. package/src/components/AutoModeOptInDialog.tsx +142 -0
  286. package/src/components/AutoUpdater.tsx +198 -0
  287. package/src/components/AutoUpdaterWrapper.tsx +91 -0
  288. package/src/components/AwsAuthStatusBox.tsx +82 -0
  289. package/src/components/BaseTextInput.tsx +136 -0
  290. package/src/components/BashModeProgress.tsx +56 -0
  291. package/src/components/BridgeDialog.tsx +401 -0
  292. package/src/components/BypassPermissionsModeDialog.tsx +87 -0
  293. package/src/components/ChannelDowngradeDialog.tsx +102 -0
  294. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  295. package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
  296. package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  297. package/src/components/ClickableImageRef.tsx +73 -0
  298. package/src/components/CompactSummary.tsx +118 -0
  299. package/src/components/ConfigurableShortcutHint.tsx +57 -0
  300. package/src/components/ConsoleOAuthFlow.tsx +631 -0
  301. package/src/components/ContextSuggestions.tsx +47 -0
  302. package/src/components/ContextVisualization.tsx +489 -0
  303. package/src/components/CoordinatorAgentStatus.tsx +273 -0
  304. package/src/components/CostThresholdDialog.tsx +50 -0
  305. package/src/components/CtrlOToExpand.tsx +51 -0
  306. package/src/components/CustomSelect/SelectMulti.tsx +213 -0
  307. package/src/components/CustomSelect/index.ts +3 -0
  308. package/src/components/CustomSelect/option-map.ts +50 -0
  309. package/src/components/CustomSelect/select-input-option.tsx +488 -0
  310. package/src/components/CustomSelect/select-option.tsx +68 -0
  311. package/src/components/CustomSelect/select.tsx +690 -0
  312. package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
  313. package/src/components/CustomSelect/use-select-input.ts +287 -0
  314. package/src/components/CustomSelect/use-select-navigation.ts +653 -0
  315. package/src/components/CustomSelect/use-select-state.ts +157 -0
  316. package/src/components/DesktopHandoff.tsx +193 -0
  317. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  318. package/src/components/DevBar.tsx +49 -0
  319. package/src/components/DevChannelsDialog.tsx +105 -0
  320. package/src/components/DiagnosticsDisplay.tsx +95 -0
  321. package/src/components/EffortCallout.tsx +265 -0
  322. package/src/components/EffortIndicator.ts +42 -0
  323. package/src/components/ExitFlow.tsx +48 -0
  324. package/src/components/ExportDialog.tsx +128 -0
  325. package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
  326. package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
  327. package/src/components/FastIcon.tsx +46 -0
  328. package/src/components/Feedback.tsx +592 -0
  329. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  330. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  331. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  332. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  333. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  334. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  335. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  336. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  337. package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  338. package/src/components/FileEditToolDiff.tsx +181 -0
  339. package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
  340. package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
  341. package/src/components/FilePathLink.tsx +43 -0
  342. package/src/components/FullscreenLayout.tsx +637 -0
  343. package/src/components/GlobalSearchDialog.tsx +343 -0
  344. package/src/components/HelpV2/Commands.tsx +82 -0
  345. package/src/components/HelpV2/General.tsx +23 -0
  346. package/src/components/HelpV2/HelpV2.tsx +184 -0
  347. package/src/components/HighlightedCode/Fallback.tsx +193 -0
  348. package/src/components/HighlightedCode.tsx +190 -0
  349. package/src/components/HistorySearchDialog.tsx +118 -0
  350. package/src/components/IdeAutoConnectDialog.tsx +154 -0
  351. package/src/components/IdeOnboardingDialog.tsx +167 -0
  352. package/src/components/IdeStatusIndicator.tsx +58 -0
  353. package/src/components/IdleReturnDialog.tsx +118 -0
  354. package/src/components/InterruptedByUser.tsx +15 -0
  355. package/src/components/InvalidConfigDialog.tsx +156 -0
  356. package/src/components/InvalidSettingsDialog.tsx +89 -0
  357. package/src/components/KeybindingWarnings.tsx +55 -0
  358. package/src/components/LanguagePicker.tsx +86 -0
  359. package/src/components/LogSelector.tsx +1575 -0
  360. package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  361. package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
  362. package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
  363. package/src/components/LogoV2/Clawd.tsx +240 -0
  364. package/src/components/LogoV2/CondensedLogo.tsx +161 -0
  365. package/src/components/LogoV2/EmergencyTip.tsx +58 -0
  366. package/src/components/LogoV2/Feed.tsx +112 -0
  367. package/src/components/LogoV2/FeedColumn.tsx +59 -0
  368. package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  369. package/src/components/LogoV2/LogoV2.tsx +543 -0
  370. package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  371. package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  372. package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
  373. package/src/components/LogoV2/WelcomeV2.tsx +433 -0
  374. package/src/components/LogoV2/feedConfigs.tsx +92 -0
  375. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  376. package/src/components/MCPServerApprovalDialog.tsx +115 -0
  377. package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
  378. package/src/components/MCPServerDialogCopy.tsx +15 -0
  379. package/src/components/MCPServerMultiselectDialog.tsx +133 -0
  380. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  381. package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  382. package/src/components/Markdown.tsx +236 -0
  383. package/src/components/MarkdownTable.tsx +322 -0
  384. package/src/components/MemoryUsageIndicator.tsx +37 -0
  385. package/src/components/Message.tsx +627 -0
  386. package/src/components/MessageModel.tsx +43 -0
  387. package/src/components/MessageResponse.tsx +78 -0
  388. package/src/components/MessageRow.tsx +383 -0
  389. package/src/components/MessageSelector.tsx +831 -0
  390. package/src/components/MessageTimestamp.tsx +63 -0
  391. package/src/components/Messages.tsx +834 -0
  392. package/src/components/ModelPicker.tsx +448 -0
  393. package/src/components/NativeAutoUpdater.tsx +193 -0
  394. package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  395. package/src/components/OffscreenFreeze.tsx +44 -0
  396. package/src/components/Onboarding.tsx +244 -0
  397. package/src/components/OutputStylePicker.tsx +112 -0
  398. package/src/components/PackageManagerAutoUpdater.tsx +104 -0
  399. package/src/components/Passes/Passes.tsx +184 -0
  400. package/src/components/PrBadge.tsx +97 -0
  401. package/src/components/PressEnterToContinue.tsx +15 -0
  402. package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
  403. package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
  404. package/src/components/PromptInput/Notifications.tsx +332 -0
  405. package/src/components/PromptInput/PromptInput.tsx +2339 -0
  406. package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
  407. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  408. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  409. package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  410. package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  411. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  412. package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  413. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  414. package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
  415. package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
  416. package/src/components/PromptInput/inputModes.ts +33 -0
  417. package/src/components/PromptInput/inputPaste.ts +90 -0
  418. package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  419. package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  420. package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
  421. package/src/components/PromptInput/useSwarmBanner.ts +155 -0
  422. package/src/components/PromptInput/utils.ts +60 -0
  423. package/src/components/QuickOpenDialog.tsx +244 -0
  424. package/src/components/RemoteCallout.tsx +76 -0
  425. package/src/components/RemoteEnvironmentDialog.tsx +340 -0
  426. package/src/components/ResumeTask.tsx +268 -0
  427. package/src/components/SandboxViolationExpandedView.tsx +99 -0
  428. package/src/components/ScrollKeybindingHandler.tsx +1012 -0
  429. package/src/components/SearchBox.tsx +72 -0
  430. package/src/components/SentryErrorBoundary.ts +28 -0
  431. package/src/components/SessionBackgroundHint.tsx +108 -0
  432. package/src/components/SessionPreview.tsx +194 -0
  433. package/src/components/Settings/Config.tsx +1822 -0
  434. package/src/components/Settings/Settings.tsx +137 -0
  435. package/src/components/Settings/Status.tsx +241 -0
  436. package/src/components/Settings/Usage.tsx +377 -0
  437. package/src/components/ShowInIDEPrompt.tsx +170 -0
  438. package/src/components/SkillImprovementSurvey.tsx +152 -0
  439. package/src/components/Spinner/FlashingChar.tsx +61 -0
  440. package/src/components/Spinner/GlimmerMessage.tsx +328 -0
  441. package/src/components/Spinner/ShimmerChar.tsx +36 -0
  442. package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  443. package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
  444. package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  445. package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  446. package/src/components/Spinner/index.ts +10 -0
  447. package/src/components/Spinner/teammateSelectHint.ts +1 -0
  448. package/src/components/Spinner/useShimmerAnimation.ts +31 -0
  449. package/src/components/Spinner/useStalledAnimation.ts +75 -0
  450. package/src/components/Spinner/utils.ts +84 -0
  451. package/src/components/Spinner.tsx +562 -0
  452. package/src/components/Stats.tsx +1228 -0
  453. package/src/components/StatusLine.tsx +324 -0
  454. package/src/components/StatusNotices.tsx +55 -0
  455. package/src/components/StructuredDiff/Fallback.tsx +487 -0
  456. package/src/components/StructuredDiff/colorDiff.ts +37 -0
  457. package/src/components/StructuredDiff.tsx +190 -0
  458. package/src/components/StructuredDiffList.tsx +30 -0
  459. package/src/components/TagTabs.tsx +139 -0
  460. package/src/components/TaskListV2.tsx +378 -0
  461. package/src/components/TeammateViewHeader.tsx +82 -0
  462. package/src/components/TeleportError.tsx +189 -0
  463. package/src/components/TeleportProgress.tsx +140 -0
  464. package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
  465. package/src/components/TeleportResumeWrapper.tsx +167 -0
  466. package/src/components/TeleportStash.tsx +116 -0
  467. package/src/components/TextInput.tsx +124 -0
  468. package/src/components/ThemePicker.tsx +333 -0
  469. package/src/components/ThinkingToggle.tsx +153 -0
  470. package/src/components/TokenWarning.tsx +179 -0
  471. package/src/components/ToolUseLoader.tsx +42 -0
  472. package/src/components/TrustDialog/TrustDialog.tsx +290 -0
  473. package/src/components/TrustDialog/utils.ts +245 -0
  474. package/src/components/ValidationErrorsList.tsx +148 -0
  475. package/src/components/VimTextInput.tsx +140 -0
  476. package/src/components/VirtualMessageList.tsx +1082 -0
  477. package/src/components/WorkflowMultiselectDialog.tsx +128 -0
  478. package/src/components/WorktreeExitDialog.tsx +231 -0
  479. package/src/components/agents/AgentDetail.tsx +220 -0
  480. package/src/components/agents/AgentEditor.tsx +178 -0
  481. package/src/components/agents/AgentNavigationFooter.tsx +26 -0
  482. package/src/components/agents/AgentsList.tsx +440 -0
  483. package/src/components/agents/AgentsMenu.tsx +800 -0
  484. package/src/components/agents/ColorPicker.tsx +112 -0
  485. package/src/components/agents/ModelSelector.tsx +68 -0
  486. package/src/components/agents/ToolSelector.tsx +562 -0
  487. package/src/components/agents/agentFileUtils.ts +272 -0
  488. package/src/components/agents/generateAgent.ts +197 -0
  489. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  490. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  491. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  492. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  493. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  494. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  495. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  496. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  497. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  498. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  499. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  500. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  501. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  502. package/src/components/agents/types.ts +27 -0
  503. package/src/components/agents/utils.ts +18 -0
  504. package/src/components/agents/validateAgent.ts +109 -0
  505. package/src/components/design-system/Byline.tsx +77 -0
  506. package/src/components/design-system/Dialog.tsx +138 -0
  507. package/src/components/design-system/Divider.tsx +149 -0
  508. package/src/components/design-system/FuzzyPicker.tsx +312 -0
  509. package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
  510. package/src/components/design-system/ListItem.tsx +244 -0
  511. package/src/components/design-system/LoadingState.tsx +94 -0
  512. package/src/components/design-system/Pane.tsx +77 -0
  513. package/src/components/design-system/ProgressBar.tsx +86 -0
  514. package/src/components/design-system/Ratchet.tsx +80 -0
  515. package/src/components/design-system/StatusIcon.tsx +95 -0
  516. package/src/components/design-system/Tabs.tsx +340 -0
  517. package/src/components/design-system/ThemeProvider.tsx +174 -0
  518. package/src/components/design-system/ThemedBox.tsx +156 -0
  519. package/src/components/design-system/ThemedText.tsx +124 -0
  520. package/src/components/design-system/color.ts +30 -0
  521. package/src/components/diff/DiffDetailView.tsx +281 -0
  522. package/src/components/diff/DiffDialog.tsx +383 -0
  523. package/src/components/diff/DiffFileList.tsx +292 -0
  524. package/src/components/grove/Grove.tsx +463 -0
  525. package/src/components/hooks/HooksConfigMenu.tsx +578 -0
  526. package/src/components/hooks/PromptDialog.tsx +90 -0
  527. package/src/components/hooks/SelectEventMode.tsx +127 -0
  528. package/src/components/hooks/SelectHookMode.tsx +112 -0
  529. package/src/components/hooks/SelectMatcherMode.tsx +144 -0
  530. package/src/components/hooks/ViewHookMode.tsx +199 -0
  531. package/src/components/mcp/CapabilitiesSection.tsx +61 -0
  532. package/src/components/mcp/ElicitationDialog.tsx +1169 -0
  533. package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
  534. package/src/components/mcp/MCPListPanel.tsx +504 -0
  535. package/src/components/mcp/MCPReconnect.tsx +167 -0
  536. package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  537. package/src/components/mcp/MCPSettings.tsx +398 -0
  538. package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
  539. package/src/components/mcp/MCPToolDetailView.tsx +212 -0
  540. package/src/components/mcp/MCPToolListView.tsx +141 -0
  541. package/src/components/mcp/McpParsingWarnings.tsx +213 -0
  542. package/src/components/mcp/index.ts +9 -0
  543. package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
  544. package/src/components/memory/MemoryFileSelector.tsx +438 -0
  545. package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
  546. package/src/components/messageActions.tsx +450 -0
  547. package/src/components/messages/AdvisorMessage.tsx +158 -0
  548. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  549. package/src/components/messages/AssistantTextMessage.tsx +270 -0
  550. package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
  551. package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
  552. package/src/components/messages/AttachmentMessage.tsx +536 -0
  553. package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
  554. package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
  555. package/src/components/messages/GroupedToolUseContent.tsx +58 -0
  556. package/src/components/messages/HighlightedThinkingText.tsx +162 -0
  557. package/src/components/messages/HookProgressMessage.tsx +116 -0
  558. package/src/components/messages/PlanApprovalMessage.tsx +222 -0
  559. package/src/components/messages/RateLimitMessage.tsx +161 -0
  560. package/src/components/messages/ShutdownMessage.tsx +132 -0
  561. package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
  562. package/src/components/messages/SystemTextMessage.tsx +827 -0
  563. package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
  564. package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
  565. package/src/components/messages/UserBashInputMessage.tsx +58 -0
  566. package/src/components/messages/UserBashOutputMessage.tsx +54 -0
  567. package/src/components/messages/UserChannelMessage.tsx +137 -0
  568. package/src/components/messages/UserCommandMessage.tsx +108 -0
  569. package/src/components/messages/UserImageMessage.tsx +59 -0
  570. package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  571. package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
  572. package/src/components/messages/UserPlanMessage.tsx +42 -0
  573. package/src/components/messages/UserPromptMessage.tsx +80 -0
  574. package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
  575. package/src/components/messages/UserTeammateMessage.tsx +206 -0
  576. package/src/components/messages/UserTextMessage.tsx +275 -0
  577. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  578. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  579. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  580. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  581. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  582. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  583. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  584. package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
  585. package/src/components/messages/nullRenderingAttachments.ts +70 -0
  586. package/src/components/messages/teamMemCollapsed.tsx +140 -0
  587. package/src/components/messages/teamMemSaved.ts +19 -0
  588. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  589. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  590. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  591. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  592. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  593. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  594. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  595. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  596. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  597. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  598. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  599. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  600. package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
  601. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  602. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  603. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  604. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  605. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  606. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  607. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  608. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  609. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  610. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  611. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  612. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  613. package/src/components/permissions/PermissionDialog.tsx +72 -0
  614. package/src/components/permissions/PermissionExplanation.tsx +272 -0
  615. package/src/components/permissions/PermissionPrompt.tsx +336 -0
  616. package/src/components/permissions/PermissionRequest.tsx +217 -0
  617. package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
  618. package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
  619. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  620. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  621. package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
  622. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  623. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  624. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  625. package/src/components/permissions/WorkerBadge.tsx +49 -0
  626. package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
  627. package/src/components/permissions/hooks.ts +209 -0
  628. package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
  629. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  630. package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  631. package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  632. package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  633. package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  634. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  635. package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
  636. package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
  637. package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
  638. package/src/components/permissions/utils.ts +25 -0
  639. package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
  640. package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  641. package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
  642. package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
  643. package/src/components/sandbox/SandboxSettings.tsx +296 -0
  644. package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
  645. package/src/components/shell/OutputLine.tsx +118 -0
  646. package/src/components/shell/ShellProgressMessage.tsx +150 -0
  647. package/src/components/shell/ShellTimeDisplay.tsx +74 -0
  648. package/src/components/skills/SkillsMenu.tsx +237 -0
  649. package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  650. package/src/components/tasks/BackgroundTask.tsx +345 -0
  651. package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
  652. package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
  653. package/src/components/tasks/DreamDetailDialog.tsx +251 -0
  654. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  655. package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  656. package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
  657. package/src/components/tasks/ShellDetailDialog.tsx +404 -0
  658. package/src/components/tasks/ShellProgress.tsx +87 -0
  659. package/src/components/tasks/renderToolActivity.tsx +33 -0
  660. package/src/components/tasks/taskStatusUtils.tsx +107 -0
  661. package/src/components/teams/TeamStatus.tsx +80 -0
  662. package/src/components/teams/TeamsDialog.tsx +715 -0
  663. package/src/components/ui/OrderedList.tsx +71 -0
  664. package/src/components/ui/OrderedListItem.tsx +45 -0
  665. package/src/components/ui/TreeSelect.tsx +397 -0
  666. package/src/components/wizard/WizardDialogLayout.tsx +65 -0
  667. package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
  668. package/src/components/wizard/WizardProvider.tsx +213 -0
  669. package/src/components/wizard/index.ts +9 -0
  670. package/src/components/wizard/useWizard.ts +13 -0
  671. package/src/constants/apiLimits.ts +94 -0
  672. package/src/constants/betas.ts +52 -0
  673. package/src/constants/common.ts +33 -0
  674. package/src/constants/cyberRiskInstruction.ts +24 -0
  675. package/src/constants/errorIds.ts +15 -0
  676. package/src/constants/figures.ts +45 -0
  677. package/src/constants/files.ts +156 -0
  678. package/src/constants/github-app.ts +144 -0
  679. package/src/constants/keys.ts +11 -0
  680. package/src/constants/messages.ts +1 -0
  681. package/src/constants/oauth.ts +234 -0
  682. package/src/constants/outputStyles.ts +216 -0
  683. package/src/constants/product.ts +76 -0
  684. package/src/constants/prompts.ts +914 -0
  685. package/src/constants/spinnerVerbs.ts +204 -0
  686. package/src/constants/system.ts +95 -0
  687. package/src/constants/systemPromptSections.ts +68 -0
  688. package/src/constants/toolLimits.ts +56 -0
  689. package/src/constants/tools.ts +112 -0
  690. package/src/constants/turnCompletionVerbs.ts +12 -0
  691. package/src/constants/xml.ts +86 -0
  692. package/src/context/QueuedMessageContext.tsx +63 -0
  693. package/src/context/fpsMetrics.tsx +30 -0
  694. package/src/context/mailbox.tsx +38 -0
  695. package/src/context/modalContext.tsx +58 -0
  696. package/src/context/notifications.tsx +240 -0
  697. package/src/context/overlayContext.tsx +151 -0
  698. package/src/context/promptOverlayContext.tsx +125 -0
  699. package/src/context/stats.tsx +220 -0
  700. package/src/context/voice.tsx +88 -0
  701. package/src/context.ts +189 -0
  702. package/src/coordinator/coordinatorMode.ts +369 -0
  703. package/src/cost-tracker.ts +323 -0
  704. package/src/costHook.ts +22 -0
  705. package/src/dialogLaunchers.tsx +133 -0
  706. package/src/entrypoints/agentSdkTypes.ts +443 -0
  707. package/src/entrypoints/cli.tsx +303 -0
  708. package/src/entrypoints/init.ts +340 -0
  709. package/src/entrypoints/mcp.ts +196 -0
  710. package/src/entrypoints/sandboxTypes.ts +156 -0
  711. package/src/entrypoints/sdk/controlSchemas.ts +663 -0
  712. package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
  713. package/src/entrypoints/sdk/coreTypes.ts +62 -0
  714. package/src/history.ts +464 -0
  715. package/src/hooks/fileSuggestions.ts +811 -0
  716. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  717. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  718. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  719. package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
  720. package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  721. package/src/hooks/notifs/useInstallMessages.tsx +26 -0
  722. package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  723. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  724. package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  725. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  726. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  727. package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  728. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  729. package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
  730. package/src/hooks/notifs/useStartupNotification.ts +41 -0
  731. package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  732. package/src/hooks/renderPlaceholder.ts +51 -0
  733. package/src/hooks/toolPermission/PermissionContext.ts +388 -0
  734. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  735. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  736. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  737. package/src/hooks/toolPermission/permissionLogging.ts +238 -0
  738. package/src/hooks/unifiedSuggestions.ts +202 -0
  739. package/src/hooks/useAfterFirstRender.ts +17 -0
  740. package/src/hooks/useApiKeyVerification.ts +84 -0
  741. package/src/hooks/useArrowKeyHistory.tsx +229 -0
  742. package/src/hooks/useAssistantHistory.ts +250 -0
  743. package/src/hooks/useAwaySummary.ts +125 -0
  744. package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
  745. package/src/hooks/useBlink.ts +34 -0
  746. package/src/hooks/useCanUseTool.tsx +204 -0
  747. package/src/hooks/useCancelRequest.ts +276 -0
  748. package/src/hooks/useChromeExtensionNotification.tsx +50 -0
  749. package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  750. package/src/hooks/useClipboardImageHint.ts +77 -0
  751. package/src/hooks/useCommandKeybindings.tsx +108 -0
  752. package/src/hooks/useCommandQueue.ts +15 -0
  753. package/src/hooks/useCopyOnSelect.ts +98 -0
  754. package/src/hooks/useDeferredHookMessages.ts +46 -0
  755. package/src/hooks/useDiffData.ts +110 -0
  756. package/src/hooks/useDiffInIDE.ts +379 -0
  757. package/src/hooks/useDirectConnect.ts +229 -0
  758. package/src/hooks/useDoublePress.ts +62 -0
  759. package/src/hooks/useDynamicConfig.ts +22 -0
  760. package/src/hooks/useElapsedTime.ts +37 -0
  761. package/src/hooks/useExitOnCtrlCD.ts +95 -0
  762. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  763. package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
  764. package/src/hooks/useGlobalKeybindings.tsx +249 -0
  765. package/src/hooks/useHistorySearch.ts +303 -0
  766. package/src/hooks/useIDEIntegration.tsx +70 -0
  767. package/src/hooks/useIdeAtMentioned.ts +76 -0
  768. package/src/hooks/useIdeConnectionStatus.ts +33 -0
  769. package/src/hooks/useIdeLogging.ts +41 -0
  770. package/src/hooks/useIdeSelection.ts +150 -0
  771. package/src/hooks/useInboxPoller.ts +969 -0
  772. package/src/hooks/useInputBuffer.ts +132 -0
  773. package/src/hooks/useIssueFlagBanner.ts +133 -0
  774. package/src/hooks/useLogMessages.ts +119 -0
  775. package/src/hooks/useLspPluginRecommendation.tsx +194 -0
  776. package/src/hooks/useMailboxBridge.ts +21 -0
  777. package/src/hooks/useMainLoopModel.ts +34 -0
  778. package/src/hooks/useManagePlugins.ts +304 -0
  779. package/src/hooks/useMemoryUsage.ts +39 -0
  780. package/src/hooks/useMergedClients.ts +23 -0
  781. package/src/hooks/useMergedCommands.ts +15 -0
  782. package/src/hooks/useMergedTools.ts +44 -0
  783. package/src/hooks/useMinDisplayTime.ts +35 -0
  784. package/src/hooks/useNotifyAfterTimeout.ts +65 -0
  785. package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  786. package/src/hooks/usePasteHandler.ts +285 -0
  787. package/src/hooks/usePluginRecommendationBase.tsx +105 -0
  788. package/src/hooks/usePrStatus.ts +106 -0
  789. package/src/hooks/usePromptSuggestion.ts +177 -0
  790. package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  791. package/src/hooks/useQueueProcessor.ts +68 -0
  792. package/src/hooks/useRemoteSession.ts +605 -0
  793. package/src/hooks/useReplBridge.tsx +723 -0
  794. package/src/hooks/useSSHSession.ts +241 -0
  795. package/src/hooks/useScheduledTasks.ts +139 -0
  796. package/src/hooks/useSearchInput.ts +364 -0
  797. package/src/hooks/useSessionBackgrounding.ts +158 -0
  798. package/src/hooks/useSettings.ts +17 -0
  799. package/src/hooks/useSettingsChange.ts +25 -0
  800. package/src/hooks/useSkillImprovementSurvey.ts +105 -0
  801. package/src/hooks/useSkillsChange.ts +62 -0
  802. package/src/hooks/useSwarmInitialization.ts +81 -0
  803. package/src/hooks/useSwarmPermissionPoller.ts +330 -0
  804. package/src/hooks/useTaskListWatcher.ts +221 -0
  805. package/src/hooks/useTasksV2.ts +250 -0
  806. package/src/hooks/useTeammateViewAutoExit.ts +63 -0
  807. package/src/hooks/useTeleportResume.tsx +85 -0
  808. package/src/hooks/useTerminalSize.ts +15 -0
  809. package/src/hooks/useTextInput.ts +529 -0
  810. package/src/hooks/useTimeout.ts +14 -0
  811. package/src/hooks/useTurnDiffs.ts +213 -0
  812. package/src/hooks/useTypeahead.tsx +1385 -0
  813. package/src/hooks/useUpdateNotification.ts +34 -0
  814. package/src/hooks/useVimInput.ts +316 -0
  815. package/src/hooks/useVirtualScroll.ts +721 -0
  816. package/src/hooks/useVoice.ts +1144 -0
  817. package/src/hooks/useVoiceEnabled.ts +25 -0
  818. package/src/hooks/useVoiceIntegration.tsx +677 -0
  819. package/src/ink/Ansi.tsx +292 -0
  820. package/src/ink/bidi.ts +139 -0
  821. package/src/ink/clearTerminal.ts +74 -0
  822. package/src/ink/colorize.ts +231 -0
  823. package/src/ink/components/AlternateScreen.tsx +80 -0
  824. package/src/ink/components/App.tsx +659 -0
  825. package/src/ink/components/AppContext.ts +21 -0
  826. package/src/ink/components/Box.tsx +214 -0
  827. package/src/ink/components/Button.tsx +192 -0
  828. package/src/ink/components/ClockContext.tsx +112 -0
  829. package/src/ink/components/CursorDeclarationContext.ts +32 -0
  830. package/src/ink/components/ErrorOverview.tsx +109 -0
  831. package/src/ink/components/Link.tsx +42 -0
  832. package/src/ink/components/Newline.tsx +39 -0
  833. package/src/ink/components/NoSelect.tsx +68 -0
  834. package/src/ink/components/RawAnsi.tsx +57 -0
  835. package/src/ink/components/ScrollBox.tsx +237 -0
  836. package/src/ink/components/Spacer.tsx +20 -0
  837. package/src/ink/components/StdinContext.ts +49 -0
  838. package/src/ink/components/TerminalFocusContext.tsx +52 -0
  839. package/src/ink/components/TerminalSizeContext.tsx +7 -0
  840. package/src/ink/components/Text.tsx +254 -0
  841. package/src/ink/constants.ts +2 -0
  842. package/src/ink/dom.ts +484 -0
  843. package/src/ink/events/click-event.ts +38 -0
  844. package/src/ink/events/dispatcher.ts +233 -0
  845. package/src/ink/events/emitter.ts +39 -0
  846. package/src/ink/events/event-handlers.ts +73 -0
  847. package/src/ink/events/event.ts +11 -0
  848. package/src/ink/events/focus-event.ts +21 -0
  849. package/src/ink/events/input-event.ts +205 -0
  850. package/src/ink/events/keyboard-event.ts +51 -0
  851. package/src/ink/events/terminal-event.ts +107 -0
  852. package/src/ink/events/terminal-focus-event.ts +19 -0
  853. package/src/ink/focus.ts +181 -0
  854. package/src/ink/frame.ts +124 -0
  855. package/src/ink/get-max-width.ts +27 -0
  856. package/src/ink/hit-test.ts +130 -0
  857. package/src/ink/hooks/use-animation-frame.ts +57 -0
  858. package/src/ink/hooks/use-app.ts +8 -0
  859. package/src/ink/hooks/use-declared-cursor.ts +73 -0
  860. package/src/ink/hooks/use-input.ts +92 -0
  861. package/src/ink/hooks/use-interval.ts +67 -0
  862. package/src/ink/hooks/use-search-highlight.ts +53 -0
  863. package/src/ink/hooks/use-selection.ts +104 -0
  864. package/src/ink/hooks/use-stdin.ts +8 -0
  865. package/src/ink/hooks/use-tab-status.ts +72 -0
  866. package/src/ink/hooks/use-terminal-focus.ts +16 -0
  867. package/src/ink/hooks/use-terminal-title.ts +31 -0
  868. package/src/ink/hooks/use-terminal-viewport.ts +96 -0
  869. package/src/ink/ink.tsx +1728 -0
  870. package/src/ink/instances.ts +10 -0
  871. package/src/ink/layout/engine.ts +6 -0
  872. package/src/ink/layout/geometry.ts +97 -0
  873. package/src/ink/layout/node.ts +152 -0
  874. package/src/ink/layout/yoga.ts +308 -0
  875. package/src/ink/line-width-cache.ts +24 -0
  876. package/src/ink/log-update.ts +773 -0
  877. package/src/ink/measure-element.ts +23 -0
  878. package/src/ink/measure-text.ts +47 -0
  879. package/src/ink/node-cache.ts +54 -0
  880. package/src/ink/optimizer.ts +93 -0
  881. package/src/ink/output.ts +797 -0
  882. package/src/ink/parse-keypress.ts +801 -0
  883. package/src/ink/reconciler.ts +512 -0
  884. package/src/ink/render-border.ts +231 -0
  885. package/src/ink/render-node-to-output.ts +1462 -0
  886. package/src/ink/render-to-screen.ts +231 -0
  887. package/src/ink/renderer.ts +178 -0
  888. package/src/ink/root.ts +184 -0
  889. package/src/ink/screen.ts +1486 -0
  890. package/src/ink/searchHighlight.ts +93 -0
  891. package/src/ink/selection.ts +917 -0
  892. package/src/ink/squash-text-nodes.ts +92 -0
  893. package/src/ink/stringWidth.ts +222 -0
  894. package/src/ink/styles.ts +771 -0
  895. package/src/ink/supports-hyperlinks.ts +57 -0
  896. package/src/ink/tabstops.ts +46 -0
  897. package/src/ink/terminal-focus-state.ts +47 -0
  898. package/src/ink/terminal-querier.ts +212 -0
  899. package/src/ink/terminal.ts +248 -0
  900. package/src/ink/termio/ansi.ts +75 -0
  901. package/src/ink/termio/csi.ts +319 -0
  902. package/src/ink/termio/dec.ts +60 -0
  903. package/src/ink/termio/esc.ts +67 -0
  904. package/src/ink/termio/osc.ts +493 -0
  905. package/src/ink/termio/parser.ts +394 -0
  906. package/src/ink/termio/sgr.ts +308 -0
  907. package/src/ink/termio/tokenize.ts +319 -0
  908. package/src/ink/termio/types.ts +236 -0
  909. package/src/ink/termio.ts +42 -0
  910. package/src/ink/useTerminalNotification.ts +126 -0
  911. package/src/ink/warn.ts +9 -0
  912. package/src/ink/widest-line.ts +19 -0
  913. package/src/ink/wrap-text.ts +74 -0
  914. package/src/ink/wrapAnsi.ts +20 -0
  915. package/src/ink.ts +85 -0
  916. package/src/interactiveHelpers.tsx +367 -0
  917. package/src/keybindings/KeybindingContext.tsx +243 -0
  918. package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
  919. package/src/keybindings/defaultBindings.ts +340 -0
  920. package/src/keybindings/loadUserBindings.ts +472 -0
  921. package/src/keybindings/match.ts +120 -0
  922. package/src/keybindings/parser.ts +203 -0
  923. package/src/keybindings/reservedShortcuts.ts +127 -0
  924. package/src/keybindings/resolver.ts +244 -0
  925. package/src/keybindings/schema.ts +236 -0
  926. package/src/keybindings/shortcutFormat.ts +63 -0
  927. package/src/keybindings/template.ts +52 -0
  928. package/src/keybindings/useKeybinding.ts +196 -0
  929. package/src/keybindings/useShortcutDisplay.ts +59 -0
  930. package/src/keybindings/validate.ts +498 -0
  931. package/src/main.tsx +4684 -0
  932. package/src/memdir/findRelevantMemories.ts +141 -0
  933. package/src/memdir/memdir.ts +507 -0
  934. package/src/memdir/memoryAge.ts +53 -0
  935. package/src/memdir/memoryScan.ts +94 -0
  936. package/src/memdir/memoryTypes.ts +271 -0
  937. package/src/memdir/paths.ts +278 -0
  938. package/src/memdir/teamMemPaths.ts +292 -0
  939. package/src/memdir/teamMemPrompts.ts +100 -0
  940. package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
  941. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
  942. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
  943. package/src/migrations/migrateFennecToOpus.ts +45 -0
  944. package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
  945. package/src/migrations/migrateOpusToOpus1m.ts +43 -0
  946. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
  947. package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
  948. package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
  949. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
  950. package/src/migrations/resetProToOpusDefault.ts +51 -0
  951. package/src/moreright/useMoreRight.tsx +26 -0
  952. package/src/native-ts/color-diff/index.ts +999 -0
  953. package/src/native-ts/file-index/index.ts +370 -0
  954. package/src/native-ts/yoga-layout/enums.ts +134 -0
  955. package/src/native-ts/yoga-layout/index.ts +2578 -0
  956. package/src/outputStyles/loadOutputStylesDir.ts +98 -0
  957. package/src/plugins/builtinPlugins.ts +159 -0
  958. package/src/plugins/bundled/index.ts +23 -0
  959. package/src/projectOnboardingState.ts +83 -0
  960. package/src/query/config.ts +46 -0
  961. package/src/query/deps.ts +40 -0
  962. package/src/query/stopHooks.ts +473 -0
  963. package/src/query/tokenBudget.ts +93 -0
  964. package/src/query.ts +1729 -0
  965. package/src/remote/RemoteSessionManager.ts +343 -0
  966. package/src/remote/SessionsWebSocket.ts +404 -0
  967. package/src/remote/remotePermissionBridge.ts +78 -0
  968. package/src/remote/sdkMessageAdapter.ts +302 -0
  969. package/src/replLauncher.tsx +23 -0
  970. package/src/schemas/hooks.ts +222 -0
  971. package/src/screens/Doctor.tsx +575 -0
  972. package/src/screens/REPL.tsx +5006 -0
  973. package/src/screens/ResumeConversation.tsx +399 -0
  974. package/src/server/createDirectConnectSession.ts +88 -0
  975. package/src/server/directConnectManager.ts +213 -0
  976. package/src/server/types.ts +57 -0
  977. package/src/services/AgentSummary/agentSummary.ts +179 -0
  978. package/src/services/MagicDocs/magicDocs.ts +254 -0
  979. package/src/services/MagicDocs/prompts.ts +127 -0
  980. package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
  981. package/src/services/PromptSuggestion/speculation.ts +991 -0
  982. package/src/services/SessionMemory/prompts.ts +324 -0
  983. package/src/services/SessionMemory/sessionMemory.ts +495 -0
  984. package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  985. package/src/services/analytics/config.ts +38 -0
  986. package/src/services/analytics/datadog.ts +307 -0
  987. package/src/services/analytics/firstPartyEventLogger.ts +449 -0
  988. package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  989. package/src/services/analytics/growthbook.ts +1157 -0
  990. package/src/services/analytics/index.ts +173 -0
  991. package/src/services/analytics/metadata.ts +973 -0
  992. package/src/services/analytics/sink.ts +114 -0
  993. package/src/services/analytics/sinkKillswitch.ts +25 -0
  994. package/src/services/api/adminRequests.ts +119 -0
  995. package/src/services/api/bootstrap.ts +142 -0
  996. package/src/services/api/claude.ts +3433 -0
  997. package/src/services/api/client.ts +395 -0
  998. package/src/services/api/dumpPrompts.ts +226 -0
  999. package/src/services/api/emptyUsage.ts +22 -0
  1000. package/src/services/api/errorUtils.ts +260 -0
  1001. package/src/services/api/errors.ts +1207 -0
  1002. package/src/services/api/filesApi.ts +748 -0
  1003. package/src/services/api/firstTokenDate.ts +60 -0
  1004. package/src/services/api/grove.ts +357 -0
  1005. package/src/services/api/logging.ts +788 -0
  1006. package/src/services/api/metricsOptOut.ts +159 -0
  1007. package/src/services/api/overageCreditGrant.ts +137 -0
  1008. package/src/services/api/promptCacheBreakDetection.ts +727 -0
  1009. package/src/services/api/referral.ts +281 -0
  1010. package/src/services/api/sessionIngress.ts +514 -0
  1011. package/src/services/api/ultrareviewQuota.ts +38 -0
  1012. package/src/services/api/usage.ts +63 -0
  1013. package/src/services/api/withRetry.ts +826 -0
  1014. package/src/services/autoDream/autoDream.ts +324 -0
  1015. package/src/services/autoDream/config.ts +21 -0
  1016. package/src/services/autoDream/consolidationLock.ts +140 -0
  1017. package/src/services/autoDream/consolidationPrompt.ts +65 -0
  1018. package/src/services/awaySummary.ts +74 -0
  1019. package/src/services/claudeAiLimits.ts +515 -0
  1020. package/src/services/claudeAiLimitsHook.ts +23 -0
  1021. package/src/services/compact/apiMicrocompact.ts +153 -0
  1022. package/src/services/compact/autoCompact.ts +351 -0
  1023. package/src/services/compact/compact.ts +1705 -0
  1024. package/src/services/compact/compactWarningHook.ts +16 -0
  1025. package/src/services/compact/compactWarningState.ts +18 -0
  1026. package/src/services/compact/grouping.ts +63 -0
  1027. package/src/services/compact/microCompact.ts +530 -0
  1028. package/src/services/compact/postCompactCleanup.ts +77 -0
  1029. package/src/services/compact/prompt.ts +374 -0
  1030. package/src/services/compact/sessionMemoryCompact.ts +630 -0
  1031. package/src/services/compact/timeBasedMCConfig.ts +43 -0
  1032. package/src/services/diagnosticTracking.ts +397 -0
  1033. package/src/services/extractMemories/extractMemories.ts +615 -0
  1034. package/src/services/extractMemories/prompts.ts +154 -0
  1035. package/src/services/internalLogging.ts +90 -0
  1036. package/src/services/lsp/LSPClient.ts +447 -0
  1037. package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  1038. package/src/services/lsp/LSPServerInstance.ts +511 -0
  1039. package/src/services/lsp/LSPServerManager.ts +420 -0
  1040. package/src/services/lsp/config.ts +79 -0
  1041. package/src/services/lsp/manager.ts +289 -0
  1042. package/src/services/lsp/passiveFeedback.ts +328 -0
  1043. package/src/services/mcp/InProcessTransport.ts +63 -0
  1044. package/src/services/mcp/MCPConnectionManager.tsx +73 -0
  1045. package/src/services/mcp/SdkControlTransport.ts +136 -0
  1046. package/src/services/mcp/auth.ts +2465 -0
  1047. package/src/services/mcp/channelAllowlist.ts +76 -0
  1048. package/src/services/mcp/channelNotification.ts +316 -0
  1049. package/src/services/mcp/channelPermissions.ts +240 -0
  1050. package/src/services/mcp/claudeai.ts +164 -0
  1051. package/src/services/mcp/client.ts +3348 -0
  1052. package/src/services/mcp/config.ts +1578 -0
  1053. package/src/services/mcp/elicitationHandler.ts +313 -0
  1054. package/src/services/mcp/envExpansion.ts +38 -0
  1055. package/src/services/mcp/headersHelper.ts +138 -0
  1056. package/src/services/mcp/mcpStringUtils.ts +106 -0
  1057. package/src/services/mcp/normalization.ts +23 -0
  1058. package/src/services/mcp/oauthPort.ts +78 -0
  1059. package/src/services/mcp/officialRegistry.ts +72 -0
  1060. package/src/services/mcp/types.ts +258 -0
  1061. package/src/services/mcp/useManageMCPConnections.ts +1141 -0
  1062. package/src/services/mcp/utils.ts +575 -0
  1063. package/src/services/mcp/vscodeSdkMcp.ts +112 -0
  1064. package/src/services/mcp/xaa.ts +511 -0
  1065. package/src/services/mcp/xaaIdpLogin.ts +487 -0
  1066. package/src/services/mcpServerApproval.tsx +41 -0
  1067. package/src/services/mockRateLimits.ts +882 -0
  1068. package/src/services/notifier.ts +156 -0
  1069. package/src/services/oauth/auth-code-listener.ts +211 -0
  1070. package/src/services/oauth/client.ts +566 -0
  1071. package/src/services/oauth/crypto.ts +23 -0
  1072. package/src/services/oauth/getOauthProfile.ts +53 -0
  1073. package/src/services/oauth/index.ts +198 -0
  1074. package/src/services/plugins/PluginInstallationManager.ts +184 -0
  1075. package/src/services/plugins/pluginCliCommands.ts +344 -0
  1076. package/src/services/plugins/pluginOperations.ts +1088 -0
  1077. package/src/services/policyLimits/index.ts +664 -0
  1078. package/src/services/policyLimits/types.ts +27 -0
  1079. package/src/services/preventSleep.ts +165 -0
  1080. package/src/services/rateLimitMessages.ts +344 -0
  1081. package/src/services/rateLimitMocking.ts +144 -0
  1082. package/src/services/remoteManagedSettings/index.ts +639 -0
  1083. package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
  1084. package/src/services/remoteManagedSettings/syncCache.ts +112 -0
  1085. package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
  1086. package/src/services/remoteManagedSettings/types.ts +31 -0
  1087. package/src/services/settingsSync/index.ts +581 -0
  1088. package/src/services/settingsSync/types.ts +67 -0
  1089. package/src/services/teamMemorySync/index.ts +1256 -0
  1090. package/src/services/teamMemorySync/secretScanner.ts +324 -0
  1091. package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  1092. package/src/services/teamMemorySync/types.ts +156 -0
  1093. package/src/services/teamMemorySync/watcher.ts +387 -0
  1094. package/src/services/tips/tipHistory.ts +17 -0
  1095. package/src/services/tips/tipRegistry.ts +686 -0
  1096. package/src/services/tips/tipScheduler.ts +58 -0
  1097. package/src/services/tokenEstimation.ts +495 -0
  1098. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1099. package/src/services/tools/StreamingToolExecutor.ts +530 -0
  1100. package/src/services/tools/toolExecution.ts +1745 -0
  1101. package/src/services/tools/toolHooks.ts +650 -0
  1102. package/src/services/tools/toolOrchestration.ts +188 -0
  1103. package/src/services/vcr.ts +406 -0
  1104. package/src/services/voice.ts +525 -0
  1105. package/src/services/voiceKeyterms.ts +106 -0
  1106. package/src/services/voiceStreamSTT.ts +544 -0
  1107. package/src/setup.ts +477 -0
  1108. package/src/skills/bundled/batch.ts +124 -0
  1109. package/src/skills/bundled/claudeApi.ts +196 -0
  1110. package/src/skills/bundled/claudeApiContent.ts +75 -0
  1111. package/src/skills/bundled/claudeInChrome.ts +34 -0
  1112. package/src/skills/bundled/debug.ts +103 -0
  1113. package/src/skills/bundled/index.ts +79 -0
  1114. package/src/skills/bundled/keybindings.ts +339 -0
  1115. package/src/skills/bundled/loop.ts +92 -0
  1116. package/src/skills/bundled/loremIpsum.ts +282 -0
  1117. package/src/skills/bundled/remember.ts +82 -0
  1118. package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
  1119. package/src/skills/bundled/simplify.ts +69 -0
  1120. package/src/skills/bundled/skillify.ts +197 -0
  1121. package/src/skills/bundled/stuck.ts +79 -0
  1122. package/src/skills/bundled/updateConfig.ts +475 -0
  1123. package/src/skills/bundled/verify.ts +30 -0
  1124. package/src/skills/bundled/verifyContent.ts +13 -0
  1125. package/src/skills/bundledSkills.ts +220 -0
  1126. package/src/skills/loadSkillsDir.ts +1086 -0
  1127. package/src/skills/mcpSkillBuilders.ts +44 -0
  1128. package/src/state/AppState.tsx +200 -0
  1129. package/src/state/AppStateStore.ts +569 -0
  1130. package/src/state/onChangeAppState.ts +171 -0
  1131. package/src/state/selectors.ts +76 -0
  1132. package/src/state/store.ts +34 -0
  1133. package/src/state/teammateViewHelpers.ts +141 -0
  1134. package/src/tasks/DreamTask/DreamTask.ts +157 -0
  1135. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
  1136. package/src/tasks/InProcessTeammateTask/types.ts +121 -0
  1137. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
  1138. package/src/tasks/LocalMainSessionTask.ts +479 -0
  1139. package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
  1140. package/src/tasks/LocalShellTask/guards.ts +41 -0
  1141. package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
  1142. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
  1143. package/src/tasks/pillLabel.ts +82 -0
  1144. package/src/tasks/stopTask.ts +100 -0
  1145. package/src/tasks/types.ts +46 -0
  1146. package/src/tasks.ts +39 -0
  1147. package/src/tools/AgentTool/AgentTool.tsx +1398 -0
  1148. package/src/tools/AgentTool/UI.tsx +872 -0
  1149. package/src/tools/AgentTool/agentColorManager.ts +66 -0
  1150. package/src/tools/AgentTool/agentDisplay.ts +104 -0
  1151. package/src/tools/AgentTool/agentMemory.ts +177 -0
  1152. package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1153. package/src/tools/AgentTool/agentToolUtils.ts +686 -0
  1154. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1155. package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1156. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1157. package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
  1158. package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1159. package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1160. package/src/tools/AgentTool/builtInAgents.ts +72 -0
  1161. package/src/tools/AgentTool/constants.ts +12 -0
  1162. package/src/tools/AgentTool/forkSubagent.ts +210 -0
  1163. package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
  1164. package/src/tools/AgentTool/prompt.ts +287 -0
  1165. package/src/tools/AgentTool/resumeAgent.ts +265 -0
  1166. package/src/tools/AgentTool/runAgent.ts +973 -0
  1167. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1168. package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
  1169. package/src/tools/BashTool/BashTool.tsx +1144 -0
  1170. package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1171. package/src/tools/BashTool/UI.tsx +185 -0
  1172. package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
  1173. package/src/tools/BashTool/bashPermissions.ts +2621 -0
  1174. package/src/tools/BashTool/bashSecurity.ts +2592 -0
  1175. package/src/tools/BashTool/commandSemantics.ts +140 -0
  1176. package/src/tools/BashTool/commentLabel.ts +13 -0
  1177. package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1178. package/src/tools/BashTool/modeValidation.ts +115 -0
  1179. package/src/tools/BashTool/pathValidation.ts +1303 -0
  1180. package/src/tools/BashTool/prompt.ts +369 -0
  1181. package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
  1182. package/src/tools/BashTool/sedEditParser.ts +322 -0
  1183. package/src/tools/BashTool/sedValidation.ts +684 -0
  1184. package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
  1185. package/src/tools/BashTool/toolName.ts +2 -0
  1186. package/src/tools/BashTool/utils.ts +223 -0
  1187. package/src/tools/BriefTool/BriefTool.ts +204 -0
  1188. package/src/tools/BriefTool/UI.tsx +101 -0
  1189. package/src/tools/BriefTool/attachments.ts +110 -0
  1190. package/src/tools/BriefTool/prompt.ts +22 -0
  1191. package/src/tools/BriefTool/upload.ts +174 -0
  1192. package/src/tools/ConfigTool/ConfigTool.ts +467 -0
  1193. package/src/tools/ConfigTool/UI.tsx +38 -0
  1194. package/src/tools/ConfigTool/constants.ts +1 -0
  1195. package/src/tools/ConfigTool/prompt.ts +93 -0
  1196. package/src/tools/ConfigTool/supportedSettings.ts +211 -0
  1197. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1198. package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
  1199. package/src/tools/EnterPlanModeTool/constants.ts +1 -0
  1200. package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
  1201. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1202. package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
  1203. package/src/tools/EnterWorktreeTool/constants.ts +1 -0
  1204. package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
  1205. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1206. package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
  1207. package/src/tools/ExitPlanModeTool/constants.ts +2 -0
  1208. package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
  1209. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1210. package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
  1211. package/src/tools/ExitWorktreeTool/constants.ts +1 -0
  1212. package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
  1213. package/src/tools/FileEditTool/FileEditTool.ts +625 -0
  1214. package/src/tools/FileEditTool/UI.tsx +289 -0
  1215. package/src/tools/FileEditTool/constants.ts +11 -0
  1216. package/src/tools/FileEditTool/prompt.ts +28 -0
  1217. package/src/tools/FileEditTool/types.ts +85 -0
  1218. package/src/tools/FileEditTool/utils.ts +775 -0
  1219. package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
  1220. package/src/tools/FileReadTool/UI.tsx +185 -0
  1221. package/src/tools/FileReadTool/imageProcessor.ts +94 -0
  1222. package/src/tools/FileReadTool/limits.ts +92 -0
  1223. package/src/tools/FileReadTool/prompt.ts +49 -0
  1224. package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1225. package/src/tools/FileWriteTool/UI.tsx +405 -0
  1226. package/src/tools/FileWriteTool/prompt.ts +18 -0
  1227. package/src/tools/GlobTool/GlobTool.ts +198 -0
  1228. package/src/tools/GlobTool/UI.tsx +63 -0
  1229. package/src/tools/GlobTool/prompt.ts +7 -0
  1230. package/src/tools/GrepTool/GrepTool.ts +577 -0
  1231. package/src/tools/GrepTool/UI.tsx +201 -0
  1232. package/src/tools/GrepTool/prompt.ts +18 -0
  1233. package/src/tools/LSPTool/LSPTool.ts +860 -0
  1234. package/src/tools/LSPTool/UI.tsx +228 -0
  1235. package/src/tools/LSPTool/formatters.ts +592 -0
  1236. package/src/tools/LSPTool/prompt.ts +21 -0
  1237. package/src/tools/LSPTool/schemas.ts +215 -0
  1238. package/src/tools/LSPTool/symbolContext.ts +90 -0
  1239. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1240. package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1241. package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1242. package/src/tools/MCPTool/MCPTool.ts +77 -0
  1243. package/src/tools/MCPTool/UI.tsx +403 -0
  1244. package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
  1245. package/src/tools/MCPTool/prompt.ts +3 -0
  1246. package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1247. package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1248. package/src/tools/NotebookEditTool/UI.tsx +93 -0
  1249. package/src/tools/NotebookEditTool/constants.ts +2 -0
  1250. package/src/tools/NotebookEditTool/prompt.ts +3 -0
  1251. package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1252. package/src/tools/PowerShellTool/UI.tsx +131 -0
  1253. package/src/tools/PowerShellTool/clmTypes.ts +211 -0
  1254. package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
  1255. package/src/tools/PowerShellTool/commonParameters.ts +30 -0
  1256. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1257. package/src/tools/PowerShellTool/gitSafety.ts +176 -0
  1258. package/src/tools/PowerShellTool/modeValidation.ts +404 -0
  1259. package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
  1260. package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1261. package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1262. package/src/tools/PowerShellTool/prompt.ts +145 -0
  1263. package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1264. package/src/tools/PowerShellTool/toolName.ts +2 -0
  1265. package/src/tools/REPLTool/constants.ts +46 -0
  1266. package/src/tools/REPLTool/primitiveTools.ts +39 -0
  1267. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1268. package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1269. package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1270. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1271. package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
  1272. package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
  1273. package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1274. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1275. package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1276. package/src/tools/ScheduleCronTool/UI.tsx +60 -0
  1277. package/src/tools/ScheduleCronTool/prompt.ts +135 -0
  1278. package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1279. package/src/tools/SendMessageTool/UI.tsx +31 -0
  1280. package/src/tools/SendMessageTool/constants.ts +1 -0
  1281. package/src/tools/SendMessageTool/prompt.ts +49 -0
  1282. package/src/tools/SkillTool/SkillTool.ts +1108 -0
  1283. package/src/tools/SkillTool/UI.tsx +128 -0
  1284. package/src/tools/SkillTool/constants.ts +1 -0
  1285. package/src/tools/SkillTool/prompt.ts +241 -0
  1286. package/src/tools/SleepTool/prompt.ts +17 -0
  1287. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1288. package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1289. package/src/tools/TaskCreateTool/constants.ts +1 -0
  1290. package/src/tools/TaskCreateTool/prompt.ts +56 -0
  1291. package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1292. package/src/tools/TaskGetTool/constants.ts +1 -0
  1293. package/src/tools/TaskGetTool/prompt.ts +24 -0
  1294. package/src/tools/TaskListTool/TaskListTool.ts +116 -0
  1295. package/src/tools/TaskListTool/constants.ts +1 -0
  1296. package/src/tools/TaskListTool/prompt.ts +49 -0
  1297. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1298. package/src/tools/TaskOutputTool/constants.ts +1 -0
  1299. package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1300. package/src/tools/TaskStopTool/UI.tsx +41 -0
  1301. package/src/tools/TaskStopTool/prompt.ts +8 -0
  1302. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1303. package/src/tools/TaskUpdateTool/constants.ts +1 -0
  1304. package/src/tools/TaskUpdateTool/prompt.ts +77 -0
  1305. package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1306. package/src/tools/TeamCreateTool/UI.tsx +6 -0
  1307. package/src/tools/TeamCreateTool/constants.ts +1 -0
  1308. package/src/tools/TeamCreateTool/prompt.ts +113 -0
  1309. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1310. package/src/tools/TeamDeleteTool/UI.tsx +20 -0
  1311. package/src/tools/TeamDeleteTool/constants.ts +1 -0
  1312. package/src/tools/TeamDeleteTool/prompt.ts +16 -0
  1313. package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1314. package/src/tools/TodoWriteTool/constants.ts +1 -0
  1315. package/src/tools/TodoWriteTool/prompt.ts +184 -0
  1316. package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1317. package/src/tools/ToolSearchTool/constants.ts +1 -0
  1318. package/src/tools/ToolSearchTool/prompt.ts +121 -0
  1319. package/src/tools/TungstenTool/TungstenTool.js +2 -0
  1320. package/src/tools/TungstenTool/TungstenTool.ts +1 -0
  1321. package/src/tools/WebFetchTool/UI.tsx +72 -0
  1322. package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1323. package/src/tools/WebFetchTool/preapproved.ts +166 -0
  1324. package/src/tools/WebFetchTool/prompt.ts +46 -0
  1325. package/src/tools/WebFetchTool/utils.ts +530 -0
  1326. package/src/tools/WebSearchTool/UI.tsx +101 -0
  1327. package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1328. package/src/tools/WebSearchTool/prompt.ts +34 -0
  1329. package/src/tools/shared/gitOperationTracking.ts +277 -0
  1330. package/src/tools/shared/spawnMultiAgent.ts +1093 -0
  1331. package/src/tools/testing/TestingPermissionTool.tsx +74 -0
  1332. package/src/tools/utils.ts +40 -0
  1333. package/src/tools.ts +389 -0
  1334. package/src/types/command.ts +216 -0
  1335. package/src/types/connectorText.js +5 -0
  1336. package/src/types/connectorText.ts +1 -0
  1337. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1338. package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
  1339. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1340. package/src/types/generated/google/protobuf/timestamp.ts +187 -0
  1341. package/src/types/hooks.ts +290 -0
  1342. package/src/types/ids.ts +44 -0
  1343. package/src/types/logs.ts +330 -0
  1344. package/src/types/permissions.ts +441 -0
  1345. package/src/types/plugin.ts +363 -0
  1346. package/src/types/textInputTypes.ts +387 -0
  1347. package/src/upstreamproxy/relay.ts +455 -0
  1348. package/src/upstreamproxy/upstreamproxy.ts +285 -0
  1349. package/src/utils/CircularBuffer.ts +84 -0
  1350. package/src/utils/Cursor.ts +1530 -0
  1351. package/src/utils/QueryGuard.ts +121 -0
  1352. package/src/utils/Shell.ts +474 -0
  1353. package/src/utils/ShellCommand.ts +465 -0
  1354. package/src/utils/abortController.ts +99 -0
  1355. package/src/utils/activityManager.ts +164 -0
  1356. package/src/utils/advisor.ts +145 -0
  1357. package/src/utils/agentContext.ts +178 -0
  1358. package/src/utils/agentId.ts +99 -0
  1359. package/src/utils/agentSwarmsEnabled.ts +44 -0
  1360. package/src/utils/agenticSessionSearch.ts +307 -0
  1361. package/src/utils/analyzeContext.ts +1382 -0
  1362. package/src/utils/ansiToPng.ts +334 -0
  1363. package/src/utils/ansiToSvg.ts +272 -0
  1364. package/src/utils/api.ts +718 -0
  1365. package/src/utils/apiPreconnect.ts +72 -0
  1366. package/src/utils/appleTerminalBackup.ts +124 -0
  1367. package/src/utils/argumentSubstitution.ts +145 -0
  1368. package/src/utils/array.ts +13 -0
  1369. package/src/utils/asciicast.ts +239 -0
  1370. package/src/utils/attachments.ts +3997 -0
  1371. package/src/utils/attribution.ts +393 -0
  1372. package/src/utils/auth.ts +2007 -0
  1373. package/src/utils/authFileDescriptor.ts +196 -0
  1374. package/src/utils/authPortable.ts +19 -0
  1375. package/src/utils/autoModeDenials.ts +26 -0
  1376. package/src/utils/autoRunIssue.tsx +122 -0
  1377. package/src/utils/autoUpdater.ts +562 -0
  1378. package/src/utils/aws.ts +74 -0
  1379. package/src/utils/awsAuthStatusManager.ts +81 -0
  1380. package/src/utils/background/remote/preconditions.ts +235 -0
  1381. package/src/utils/background/remote/remoteSession.ts +98 -0
  1382. package/src/utils/backgroundHousekeeping.ts +94 -0
  1383. package/src/utils/bash/ParsedCommand.ts +318 -0
  1384. package/src/utils/bash/ShellSnapshot.ts +582 -0
  1385. package/src/utils/bash/ast.ts +2679 -0
  1386. package/src/utils/bash/bashParser.ts +4436 -0
  1387. package/src/utils/bash/bashPipeCommand.ts +294 -0
  1388. package/src/utils/bash/commands.ts +1339 -0
  1389. package/src/utils/bash/heredoc.ts +733 -0
  1390. package/src/utils/bash/parser.ts +230 -0
  1391. package/src/utils/bash/prefix.ts +204 -0
  1392. package/src/utils/bash/registry.ts +53 -0
  1393. package/src/utils/bash/shellCompletion.ts +259 -0
  1394. package/src/utils/bash/shellPrefix.ts +28 -0
  1395. package/src/utils/bash/shellQuote.ts +304 -0
  1396. package/src/utils/bash/shellQuoting.ts +128 -0
  1397. package/src/utils/bash/specs/alias.ts +14 -0
  1398. package/src/utils/bash/specs/index.ts +18 -0
  1399. package/src/utils/bash/specs/nohup.ts +13 -0
  1400. package/src/utils/bash/specs/pyright.ts +91 -0
  1401. package/src/utils/bash/specs/sleep.ts +13 -0
  1402. package/src/utils/bash/specs/srun.ts +31 -0
  1403. package/src/utils/bash/specs/time.ts +13 -0
  1404. package/src/utils/bash/specs/timeout.ts +20 -0
  1405. package/src/utils/bash/treeSitterAnalysis.ts +506 -0
  1406. package/src/utils/betas.ts +438 -0
  1407. package/src/utils/billing.ts +78 -0
  1408. package/src/utils/binaryCheck.ts +53 -0
  1409. package/src/utils/browser.ts +68 -0
  1410. package/src/utils/bufferedWriter.ts +100 -0
  1411. package/src/utils/bundledMode.ts +22 -0
  1412. package/src/utils/caCerts.ts +115 -0
  1413. package/src/utils/caCertsConfig.ts +88 -0
  1414. package/src/utils/cachePaths.ts +38 -0
  1415. package/src/utils/classifierApprovals.ts +88 -0
  1416. package/src/utils/classifierApprovalsHook.ts +17 -0
  1417. package/src/utils/claudeCodeHints.ts +193 -0
  1418. package/src/utils/claudeDesktop.ts +152 -0
  1419. package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1420. package/src/utils/claudeInChrome/common.ts +540 -0
  1421. package/src/utils/claudeInChrome/mcpServer.ts +293 -0
  1422. package/src/utils/claudeInChrome/prompt.ts +83 -0
  1423. package/src/utils/claudeInChrome/setup.ts +400 -0
  1424. package/src/utils/claudeInChrome/setupPortable.ts +233 -0
  1425. package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
  1426. package/src/utils/claudemd.ts +1479 -0
  1427. package/src/utils/cleanup.ts +602 -0
  1428. package/src/utils/cleanupRegistry.ts +25 -0
  1429. package/src/utils/cliArgs.ts +60 -0
  1430. package/src/utils/cliHighlight.ts +54 -0
  1431. package/src/utils/codeIndexing.ts +206 -0
  1432. package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
  1433. package/src/utils/collapseHookSummaries.ts +59 -0
  1434. package/src/utils/collapseReadSearch.ts +1109 -0
  1435. package/src/utils/collapseTeammateShutdowns.ts +55 -0
  1436. package/src/utils/combinedAbortSignal.ts +47 -0
  1437. package/src/utils/commandLifecycle.ts +21 -0
  1438. package/src/utils/commitAttribution.ts +961 -0
  1439. package/src/utils/completionCache.ts +166 -0
  1440. package/src/utils/computerUse/appNames.ts +196 -0
  1441. package/src/utils/computerUse/cleanup.ts +86 -0
  1442. package/src/utils/computerUse/common.ts +61 -0
  1443. package/src/utils/computerUse/computerUseLock.ts +215 -0
  1444. package/src/utils/computerUse/drainRunLoop.ts +79 -0
  1445. package/src/utils/computerUse/escHotkey.ts +54 -0
  1446. package/src/utils/computerUse/executor.ts +658 -0
  1447. package/src/utils/computerUse/gates.ts +72 -0
  1448. package/src/utils/computerUse/hostAdapter.ts +69 -0
  1449. package/src/utils/computerUse/inputLoader.ts +30 -0
  1450. package/src/utils/computerUse/mcpServer.ts +106 -0
  1451. package/src/utils/computerUse/setup.ts +53 -0
  1452. package/src/utils/computerUse/swiftLoader.ts +23 -0
  1453. package/src/utils/computerUse/toolRendering.tsx +125 -0
  1454. package/src/utils/computerUse/wrapper.tsx +336 -0
  1455. package/src/utils/concurrentSessions.ts +204 -0
  1456. package/src/utils/config.ts +1817 -0
  1457. package/src/utils/configConstants.ts +21 -0
  1458. package/src/utils/contentArray.ts +51 -0
  1459. package/src/utils/context.ts +221 -0
  1460. package/src/utils/contextAnalysis.ts +272 -0
  1461. package/src/utils/contextSuggestions.ts +235 -0
  1462. package/src/utils/controlMessageCompat.ts +32 -0
  1463. package/src/utils/conversationRecovery.ts +597 -0
  1464. package/src/utils/cron.ts +308 -0
  1465. package/src/utils/cronJitterConfig.ts +75 -0
  1466. package/src/utils/cronScheduler.ts +565 -0
  1467. package/src/utils/cronTasks.ts +458 -0
  1468. package/src/utils/cronTasksLock.ts +195 -0
  1469. package/src/utils/crossProjectResume.ts +75 -0
  1470. package/src/utils/crypto.ts +13 -0
  1471. package/src/utils/cwd.ts +32 -0
  1472. package/src/utils/debug.ts +268 -0
  1473. package/src/utils/debugFilter.ts +157 -0
  1474. package/src/utils/deepLink/banner.ts +123 -0
  1475. package/src/utils/deepLink/parseDeepLink.ts +170 -0
  1476. package/src/utils/deepLink/protocolHandler.ts +136 -0
  1477. package/src/utils/deepLink/registerProtocol.ts +348 -0
  1478. package/src/utils/deepLink/terminalLauncher.ts +557 -0
  1479. package/src/utils/deepLink/terminalPreference.ts +54 -0
  1480. package/src/utils/desktopDeepLink.ts +236 -0
  1481. package/src/utils/detectRepository.ts +178 -0
  1482. package/src/utils/diagLogs.ts +94 -0
  1483. package/src/utils/diff.ts +177 -0
  1484. package/src/utils/directMemberMessage.ts +69 -0
  1485. package/src/utils/displayTags.ts +51 -0
  1486. package/src/utils/doctorContextWarnings.ts +265 -0
  1487. package/src/utils/doctorDiagnostic.ts +625 -0
  1488. package/src/utils/dxt/helpers.ts +88 -0
  1489. package/src/utils/dxt/zip.ts +226 -0
  1490. package/src/utils/earlyInput.ts +191 -0
  1491. package/src/utils/editor.ts +183 -0
  1492. package/src/utils/effort.ts +329 -0
  1493. package/src/utils/embeddedTools.ts +29 -0
  1494. package/src/utils/env.ts +347 -0
  1495. package/src/utils/envDynamic.ts +151 -0
  1496. package/src/utils/envUtils.ts +183 -0
  1497. package/src/utils/envValidation.ts +38 -0
  1498. package/src/utils/errorLogSink.ts +235 -0
  1499. package/src/utils/errors.ts +238 -0
  1500. package/src/utils/exampleCommands.ts +184 -0
  1501. package/src/utils/execFileNoThrow.ts +150 -0
  1502. package/src/utils/execFileNoThrowPortable.ts +89 -0
  1503. package/src/utils/execSyncWrapper.ts +38 -0
  1504. package/src/utils/exportRenderer.tsx +98 -0
  1505. package/src/utils/extraUsage.ts +23 -0
  1506. package/src/utils/fastMode.ts +532 -0
  1507. package/src/utils/file.ts +584 -0
  1508. package/src/utils/fileHistory.ts +1115 -0
  1509. package/src/utils/fileOperationAnalytics.ts +71 -0
  1510. package/src/utils/filePersistence/filePersistence.ts +287 -0
  1511. package/src/utils/filePersistence/outputsScanner.ts +126 -0
  1512. package/src/utils/fileRead.ts +102 -0
  1513. package/src/utils/fileReadCache.ts +96 -0
  1514. package/src/utils/fileStateCache.ts +142 -0
  1515. package/src/utils/findExecutable.ts +17 -0
  1516. package/src/utils/fingerprint.ts +76 -0
  1517. package/src/utils/forkedAgent.ts +689 -0
  1518. package/src/utils/format.ts +308 -0
  1519. package/src/utils/formatBriefTimestamp.ts +81 -0
  1520. package/src/utils/fpsTracker.ts +47 -0
  1521. package/src/utils/frontmatterParser.ts +370 -0
  1522. package/src/utils/fsOperations.ts +770 -0
  1523. package/src/utils/fullscreen.ts +202 -0
  1524. package/src/utils/generatedFiles.ts +136 -0
  1525. package/src/utils/generators.ts +88 -0
  1526. package/src/utils/genericProcessUtils.ts +184 -0
  1527. package/src/utils/getWorktreePaths.ts +70 -0
  1528. package/src/utils/getWorktreePathsPortable.ts +27 -0
  1529. package/src/utils/ghPrStatus.ts +106 -0
  1530. package/src/utils/git/gitConfigParser.ts +277 -0
  1531. package/src/utils/git/gitFilesystem.ts +699 -0
  1532. package/src/utils/git/gitignore.ts +99 -0
  1533. package/src/utils/git.ts +926 -0
  1534. package/src/utils/gitDiff.ts +532 -0
  1535. package/src/utils/gitSettings.ts +18 -0
  1536. package/src/utils/github/ghAuthStatus.ts +29 -0
  1537. package/src/utils/githubRepoPathMapping.ts +162 -0
  1538. package/src/utils/glob.ts +130 -0
  1539. package/src/utils/gracefulShutdown.ts +529 -0
  1540. package/src/utils/groupToolUses.ts +182 -0
  1541. package/src/utils/handlePromptSubmit.ts +610 -0
  1542. package/src/utils/hash.ts +46 -0
  1543. package/src/utils/headlessProfiler.ts +178 -0
  1544. package/src/utils/heapDumpService.ts +303 -0
  1545. package/src/utils/heatmap.ts +198 -0
  1546. package/src/utils/highlightMatch.tsx +28 -0
  1547. package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
  1548. package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
  1549. package/src/utils/hooks/execAgentHook.ts +339 -0
  1550. package/src/utils/hooks/execHttpHook.ts +242 -0
  1551. package/src/utils/hooks/execPromptHook.ts +211 -0
  1552. package/src/utils/hooks/fileChangedWatcher.ts +191 -0
  1553. package/src/utils/hooks/hookEvents.ts +192 -0
  1554. package/src/utils/hooks/hookHelpers.ts +83 -0
  1555. package/src/utils/hooks/hooksConfigManager.ts +400 -0
  1556. package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1557. package/src/utils/hooks/hooksSettings.ts +271 -0
  1558. package/src/utils/hooks/postSamplingHooks.ts +70 -0
  1559. package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1560. package/src/utils/hooks/registerSkillHooks.ts +64 -0
  1561. package/src/utils/hooks/sessionHooks.ts +447 -0
  1562. package/src/utils/hooks/skillImprovement.ts +267 -0
  1563. package/src/utils/hooks/ssrfGuard.ts +294 -0
  1564. package/src/utils/hooks.ts +5022 -0
  1565. package/src/utils/horizontalScroll.ts +137 -0
  1566. package/src/utils/http.ts +136 -0
  1567. package/src/utils/hyperlink.ts +39 -0
  1568. package/src/utils/iTermBackup.ts +73 -0
  1569. package/src/utils/ide.ts +1494 -0
  1570. package/src/utils/idePathConversion.ts +90 -0
  1571. package/src/utils/idleTimeout.ts +53 -0
  1572. package/src/utils/imagePaste.ts +416 -0
  1573. package/src/utils/imageResizer.ts +880 -0
  1574. package/src/utils/imageStore.ts +167 -0
  1575. package/src/utils/imageValidation.ts +104 -0
  1576. package/src/utils/immediateCommand.ts +15 -0
  1577. package/src/utils/inProcessTeammateHelpers.ts +102 -0
  1578. package/src/utils/ink.ts +26 -0
  1579. package/src/utils/intl.ts +94 -0
  1580. package/src/utils/jetbrains.ts +191 -0
  1581. package/src/utils/json.ts +277 -0
  1582. package/src/utils/jsonRead.ts +16 -0
  1583. package/src/utils/keyboardShortcuts.ts +14 -0
  1584. package/src/utils/lazySchema.ts +8 -0
  1585. package/src/utils/listSessionsImpl.ts +454 -0
  1586. package/src/utils/localInstaller.ts +162 -0
  1587. package/src/utils/lockfile.ts +43 -0
  1588. package/src/utils/log.ts +362 -0
  1589. package/src/utils/logoV2Utils.ts +350 -0
  1590. package/src/utils/mailbox.ts +73 -0
  1591. package/src/utils/managedEnv.ts +199 -0
  1592. package/src/utils/managedEnvConstants.ts +191 -0
  1593. package/src/utils/markdown.ts +381 -0
  1594. package/src/utils/markdownConfigLoader.ts +600 -0
  1595. package/src/utils/mcp/dateTimeParser.ts +121 -0
  1596. package/src/utils/mcp/elicitationValidation.ts +336 -0
  1597. package/src/utils/mcpInstructionsDelta.ts +130 -0
  1598. package/src/utils/mcpOutputStorage.ts +189 -0
  1599. package/src/utils/mcpValidation.ts +208 -0
  1600. package/src/utils/mcpWebSocketTransport.ts +200 -0
  1601. package/src/utils/memoize.ts +269 -0
  1602. package/src/utils/memory/types.ts +12 -0
  1603. package/src/utils/memory/versions.ts +8 -0
  1604. package/src/utils/memoryFileDetection.ts +289 -0
  1605. package/src/utils/messagePredicates.ts +8 -0
  1606. package/src/utils/messageQueueManager.ts +547 -0
  1607. package/src/utils/messages/mappers.ts +290 -0
  1608. package/src/utils/messages/systemInit.ts +96 -0
  1609. package/src/utils/messages.ts +5512 -0
  1610. package/src/utils/model/agent.ts +157 -0
  1611. package/src/utils/model/aliases.ts +25 -0
  1612. package/src/utils/model/antModels.ts +64 -0
  1613. package/src/utils/model/bedrock.ts +265 -0
  1614. package/src/utils/model/check1mAccess.ts +72 -0
  1615. package/src/utils/model/configs.ts +118 -0
  1616. package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1617. package/src/utils/model/deprecation.ts +101 -0
  1618. package/src/utils/model/model.ts +634 -0
  1619. package/src/utils/model/modelAllowlist.ts +170 -0
  1620. package/src/utils/model/modelCapabilities.ts +118 -0
  1621. package/src/utils/model/modelOptions.ts +540 -0
  1622. package/src/utils/model/modelStrings.ts +166 -0
  1623. package/src/utils/model/modelSupportOverrides.ts +50 -0
  1624. package/src/utils/model/providers.ts +46 -0
  1625. package/src/utils/model/validateModel.ts +159 -0
  1626. package/src/utils/modelCost.ts +235 -0
  1627. package/src/utils/modifiers.ts +36 -0
  1628. package/src/utils/mtls.ts +179 -0
  1629. package/src/utils/nativeInstaller/download.ts +523 -0
  1630. package/src/utils/nativeInstaller/index.ts +18 -0
  1631. package/src/utils/nativeInstaller/installer.ts +1708 -0
  1632. package/src/utils/nativeInstaller/packageManagers.ts +336 -0
  1633. package/src/utils/nativeInstaller/pidLock.ts +433 -0
  1634. package/src/utils/notebook.ts +224 -0
  1635. package/src/utils/objectGroupBy.ts +18 -0
  1636. package/src/utils/pasteStore.ts +104 -0
  1637. package/src/utils/path.ts +155 -0
  1638. package/src/utils/pdf.ts +300 -0
  1639. package/src/utils/pdfUtils.ts +70 -0
  1640. package/src/utils/peerAddress.ts +21 -0
  1641. package/src/utils/permissions/PermissionMode.ts +141 -0
  1642. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1643. package/src/utils/permissions/PermissionResult.ts +35 -0
  1644. package/src/utils/permissions/PermissionRule.ts +40 -0
  1645. package/src/utils/permissions/PermissionUpdate.ts +389 -0
  1646. package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1647. package/src/utils/permissions/autoModeState.ts +39 -0
  1648. package/src/utils/permissions/bashClassifier.ts +61 -0
  1649. package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1650. package/src/utils/permissions/classifierDecision.ts +98 -0
  1651. package/src/utils/permissions/classifierShared.ts +39 -0
  1652. package/src/utils/permissions/dangerousPatterns.ts +80 -0
  1653. package/src/utils/permissions/denialTracking.ts +45 -0
  1654. package/src/utils/permissions/filesystem.ts +1777 -0
  1655. package/src/utils/permissions/getNextPermissionMode.ts +101 -0
  1656. package/src/utils/permissions/pathValidation.ts +485 -0
  1657. package/src/utils/permissions/permissionExplainer.ts +250 -0
  1658. package/src/utils/permissions/permissionRuleParser.ts +198 -0
  1659. package/src/utils/permissions/permissionSetup.ts +1532 -0
  1660. package/src/utils/permissions/permissions.ts +1486 -0
  1661. package/src/utils/permissions/permissionsLoader.ts +296 -0
  1662. package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
  1663. package/src/utils/permissions/shellRuleMatching.ts +228 -0
  1664. package/src/utils/permissions/yoloClassifier.ts +1495 -0
  1665. package/src/utils/planModeV2.ts +95 -0
  1666. package/src/utils/plans.ts +397 -0
  1667. package/src/utils/platform.ts +150 -0
  1668. package/src/utils/plugins/addDirPluginSettings.ts +71 -0
  1669. package/src/utils/plugins/cacheUtils.ts +196 -0
  1670. package/src/utils/plugins/dependencyResolver.ts +305 -0
  1671. package/src/utils/plugins/fetchTelemetry.ts +135 -0
  1672. package/src/utils/plugins/gitAvailability.ts +69 -0
  1673. package/src/utils/plugins/headlessPluginInstall.ts +174 -0
  1674. package/src/utils/plugins/hintRecommendation.ts +164 -0
  1675. package/src/utils/plugins/installCounts.ts +292 -0
  1676. package/src/utils/plugins/installedPluginsManager.ts +1268 -0
  1677. package/src/utils/plugins/loadPluginAgents.ts +348 -0
  1678. package/src/utils/plugins/loadPluginCommands.ts +946 -0
  1679. package/src/utils/plugins/loadPluginHooks.ts +287 -0
  1680. package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1681. package/src/utils/plugins/lspPluginIntegration.ts +387 -0
  1682. package/src/utils/plugins/lspRecommendation.ts +374 -0
  1683. package/src/utils/plugins/managedPlugins.ts +27 -0
  1684. package/src/utils/plugins/marketplaceHelpers.ts +592 -0
  1685. package/src/utils/plugins/marketplaceManager.ts +2643 -0
  1686. package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
  1687. package/src/utils/plugins/mcpbHandler.ts +968 -0
  1688. package/src/utils/plugins/officialMarketplace.ts +25 -0
  1689. package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1690. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1691. package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
  1692. package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
  1693. package/src/utils/plugins/performStartupChecks.tsx +70 -0
  1694. package/src/utils/plugins/pluginAutoupdate.ts +284 -0
  1695. package/src/utils/plugins/pluginBlocklist.ts +127 -0
  1696. package/src/utils/plugins/pluginDirectories.ts +178 -0
  1697. package/src/utils/plugins/pluginFlagging.ts +208 -0
  1698. package/src/utils/plugins/pluginIdentifier.ts +123 -0
  1699. package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1700. package/src/utils/plugins/pluginLoader.ts +3302 -0
  1701. package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
  1702. package/src/utils/plugins/pluginPolicy.ts +20 -0
  1703. package/src/utils/plugins/pluginStartupCheck.ts +341 -0
  1704. package/src/utils/plugins/pluginVersioning.ts +157 -0
  1705. package/src/utils/plugins/reconciler.ts +265 -0
  1706. package/src/utils/plugins/refresh.ts +215 -0
  1707. package/src/utils/plugins/schemas.ts +1681 -0
  1708. package/src/utils/plugins/validatePlugin.ts +903 -0
  1709. package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
  1710. package/src/utils/plugins/zipCache.ts +406 -0
  1711. package/src/utils/plugins/zipCacheAdapters.ts +164 -0
  1712. package/src/utils/powershell/dangerousCmdlets.ts +185 -0
  1713. package/src/utils/powershell/parser.ts +1804 -0
  1714. package/src/utils/powershell/staticPrefix.ts +316 -0
  1715. package/src/utils/preflightChecks.tsx +151 -0
  1716. package/src/utils/privacyLevel.ts +55 -0
  1717. package/src/utils/process.ts +68 -0
  1718. package/src/utils/processUserInput/processBashCommand.tsx +140 -0
  1719. package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
  1720. package/src/utils/processUserInput/processTextPrompt.ts +100 -0
  1721. package/src/utils/processUserInput/processUserInput.ts +605 -0
  1722. package/src/utils/profilerBase.ts +46 -0
  1723. package/src/utils/promptCategory.ts +49 -0
  1724. package/src/utils/promptEditor.ts +188 -0
  1725. package/src/utils/promptShellExecution.ts +183 -0
  1726. package/src/utils/proxy.ts +426 -0
  1727. package/src/utils/queryContext.ts +179 -0
  1728. package/src/utils/queryHelpers.ts +552 -0
  1729. package/src/utils/queryProfiler.ts +301 -0
  1730. package/src/utils/queueProcessor.ts +95 -0
  1731. package/src/utils/readEditContext.ts +227 -0
  1732. package/src/utils/readFileInRange.ts +383 -0
  1733. package/src/utils/releaseNotes.ts +360 -0
  1734. package/src/utils/renderOptions.ts +77 -0
  1735. package/src/utils/ripgrep.ts +679 -0
  1736. package/src/utils/sandbox/sandbox-adapter.ts +985 -0
  1737. package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1738. package/src/utils/sanitization.ts +91 -0
  1739. package/src/utils/screenshotClipboard.ts +121 -0
  1740. package/src/utils/sdkEventQueue.ts +134 -0
  1741. package/src/utils/secureStorage/fallbackStorage.ts +70 -0
  1742. package/src/utils/secureStorage/index.ts +17 -0
  1743. package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
  1744. package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1745. package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1746. package/src/utils/secureStorage/plainTextStorage.ts +84 -0
  1747. package/src/utils/semanticBoolean.ts +29 -0
  1748. package/src/utils/semanticNumber.ts +36 -0
  1749. package/src/utils/semver.ts +59 -0
  1750. package/src/utils/sequential.ts +56 -0
  1751. package/src/utils/sessionActivity.ts +133 -0
  1752. package/src/utils/sessionEnvVars.ts +22 -0
  1753. package/src/utils/sessionEnvironment.ts +166 -0
  1754. package/src/utils/sessionFileAccessHooks.ts +250 -0
  1755. package/src/utils/sessionIngressAuth.ts +140 -0
  1756. package/src/utils/sessionRestore.ts +551 -0
  1757. package/src/utils/sessionStart.ts +232 -0
  1758. package/src/utils/sessionState.ts +150 -0
  1759. package/src/utils/sessionStorage.ts +5105 -0
  1760. package/src/utils/sessionStoragePortable.ts +793 -0
  1761. package/src/utils/sessionTitle.ts +129 -0
  1762. package/src/utils/sessionUrl.ts +64 -0
  1763. package/src/utils/set.ts +53 -0
  1764. package/src/utils/settings/allErrors.ts +32 -0
  1765. package/src/utils/settings/applySettingsChange.ts +92 -0
  1766. package/src/utils/settings/changeDetector.ts +488 -0
  1767. package/src/utils/settings/constants.ts +202 -0
  1768. package/src/utils/settings/internalWrites.ts +37 -0
  1769. package/src/utils/settings/managedPath.ts +34 -0
  1770. package/src/utils/settings/mdm/constants.ts +81 -0
  1771. package/src/utils/settings/mdm/rawRead.ts +130 -0
  1772. package/src/utils/settings/mdm/settings.ts +316 -0
  1773. package/src/utils/settings/permissionValidation.ts +262 -0
  1774. package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
  1775. package/src/utils/settings/schemaOutput.ts +8 -0
  1776. package/src/utils/settings/settings.ts +1015 -0
  1777. package/src/utils/settings/settingsCache.ts +80 -0
  1778. package/src/utils/settings/toolValidationConfig.ts +103 -0
  1779. package/src/utils/settings/types.ts +1148 -0
  1780. package/src/utils/settings/validateEditTool.ts +45 -0
  1781. package/src/utils/settings/validation.ts +265 -0
  1782. package/src/utils/settings/validationTips.ts +164 -0
  1783. package/src/utils/shell/bashProvider.ts +255 -0
  1784. package/src/utils/shell/outputLimits.ts +14 -0
  1785. package/src/utils/shell/powershellDetection.ts +107 -0
  1786. package/src/utils/shell/powershellProvider.ts +123 -0
  1787. package/src/utils/shell/prefix.ts +367 -0
  1788. package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1789. package/src/utils/shell/resolveDefaultShell.ts +14 -0
  1790. package/src/utils/shell/shellProvider.ts +33 -0
  1791. package/src/utils/shell/shellToolUtils.ts +22 -0
  1792. package/src/utils/shell/specPrefix.ts +241 -0
  1793. package/src/utils/shellConfig.ts +167 -0
  1794. package/src/utils/sideQuery.ts +222 -0
  1795. package/src/utils/sideQuestion.ts +155 -0
  1796. package/src/utils/signal.ts +43 -0
  1797. package/src/utils/sinks.ts +16 -0
  1798. package/src/utils/skills/skillChangeDetector.ts +311 -0
  1799. package/src/utils/slashCommandParsing.ts +60 -0
  1800. package/src/utils/sleep.ts +84 -0
  1801. package/src/utils/sliceAnsi.ts +91 -0
  1802. package/src/utils/slowOperations.ts +286 -0
  1803. package/src/utils/standaloneAgent.ts +23 -0
  1804. package/src/utils/startupProfiler.ts +194 -0
  1805. package/src/utils/staticRender.tsx +116 -0
  1806. package/src/utils/stats.ts +1061 -0
  1807. package/src/utils/statsCache.ts +434 -0
  1808. package/src/utils/status.tsx +362 -0
  1809. package/src/utils/statusNoticeDefinitions.tsx +198 -0
  1810. package/src/utils/statusNoticeHelpers.ts +20 -0
  1811. package/src/utils/stream.ts +76 -0
  1812. package/src/utils/streamJsonStdoutGuard.ts +123 -0
  1813. package/src/utils/streamlinedTransform.ts +201 -0
  1814. package/src/utils/stringUtils.ts +235 -0
  1815. package/src/utils/subprocessEnv.ts +99 -0
  1816. package/src/utils/suggestions/commandSuggestions.ts +567 -0
  1817. package/src/utils/suggestions/directoryCompletion.ts +263 -0
  1818. package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1819. package/src/utils/suggestions/skillUsageTracking.ts +55 -0
  1820. package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1821. package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
  1822. package/src/utils/swarm/backends/ITermBackend.ts +370 -0
  1823. package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
  1824. package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1825. package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
  1826. package/src/utils/swarm/backends/detection.ts +128 -0
  1827. package/src/utils/swarm/backends/it2Setup.ts +245 -0
  1828. package/src/utils/swarm/backends/registry.ts +464 -0
  1829. package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1830. package/src/utils/swarm/backends/types.ts +311 -0
  1831. package/src/utils/swarm/constants.ts +33 -0
  1832. package/src/utils/swarm/inProcessRunner.ts +1552 -0
  1833. package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
  1834. package/src/utils/swarm/permissionSync.ts +928 -0
  1835. package/src/utils/swarm/reconnection.ts +119 -0
  1836. package/src/utils/swarm/spawnInProcess.ts +328 -0
  1837. package/src/utils/swarm/spawnUtils.ts +146 -0
  1838. package/src/utils/swarm/teamHelpers.ts +683 -0
  1839. package/src/utils/swarm/teammateInit.ts +129 -0
  1840. package/src/utils/swarm/teammateLayoutManager.ts +107 -0
  1841. package/src/utils/swarm/teammateModel.ts +10 -0
  1842. package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
  1843. package/src/utils/systemDirectories.ts +74 -0
  1844. package/src/utils/systemPrompt.ts +123 -0
  1845. package/src/utils/systemPromptType.ts +14 -0
  1846. package/src/utils/systemTheme.ts +119 -0
  1847. package/src/utils/taggedId.ts +54 -0
  1848. package/src/utils/task/TaskOutput.ts +390 -0
  1849. package/src/utils/task/diskOutput.ts +451 -0
  1850. package/src/utils/task/framework.ts +308 -0
  1851. package/src/utils/task/outputFormatting.ts +38 -0
  1852. package/src/utils/task/sdkProgress.ts +36 -0
  1853. package/src/utils/tasks.ts +862 -0
  1854. package/src/utils/teamDiscovery.ts +81 -0
  1855. package/src/utils/teamMemoryOps.ts +88 -0
  1856. package/src/utils/teammate.ts +292 -0
  1857. package/src/utils/teammateContext.ts +96 -0
  1858. package/src/utils/teammateMailbox.ts +1183 -0
  1859. package/src/utils/telemetry/betaSessionTracing.ts +491 -0
  1860. package/src/utils/telemetry/bigqueryExporter.ts +252 -0
  1861. package/src/utils/telemetry/events.ts +75 -0
  1862. package/src/utils/telemetry/instrumentation.ts +825 -0
  1863. package/src/utils/telemetry/logger.ts +26 -0
  1864. package/src/utils/telemetry/perfettoTracing.ts +1120 -0
  1865. package/src/utils/telemetry/pluginTelemetry.ts +289 -0
  1866. package/src/utils/telemetry/sessionTracing.ts +927 -0
  1867. package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
  1868. package/src/utils/telemetryAttributes.ts +71 -0
  1869. package/src/utils/teleport/api.ts +466 -0
  1870. package/src/utils/teleport/environmentSelection.ts +77 -0
  1871. package/src/utils/teleport/environments.ts +120 -0
  1872. package/src/utils/teleport/gitBundle.ts +292 -0
  1873. package/src/utils/teleport.tsx +1226 -0
  1874. package/src/utils/tempfile.ts +31 -0
  1875. package/src/utils/terminal.ts +131 -0
  1876. package/src/utils/terminalPanel.ts +191 -0
  1877. package/src/utils/textHighlighting.ts +166 -0
  1878. package/src/utils/theme.ts +639 -0
  1879. package/src/utils/thinking.ts +162 -0
  1880. package/src/utils/timeouts.ts +39 -0
  1881. package/src/utils/tmuxSocket.ts +427 -0
  1882. package/src/utils/todo/types.ts +18 -0
  1883. package/src/utils/tokenBudget.ts +73 -0
  1884. package/src/utils/tokens.ts +261 -0
  1885. package/src/utils/toolErrors.ts +132 -0
  1886. package/src/utils/toolPool.ts +79 -0
  1887. package/src/utils/toolResultStorage.ts +1040 -0
  1888. package/src/utils/toolSchemaCache.ts +26 -0
  1889. package/src/utils/toolSearch.ts +756 -0
  1890. package/src/utils/transcriptSearch.ts +202 -0
  1891. package/src/utils/treeify.ts +170 -0
  1892. package/src/utils/truncate.ts +179 -0
  1893. package/src/utils/ultraplan/ccrSession.ts +349 -0
  1894. package/src/utils/ultraplan/keyword.ts +127 -0
  1895. package/src/utils/ultraplan/prompt.txt +1 -0
  1896. package/src/utils/unaryLogging.ts +39 -0
  1897. package/src/utils/undercover.ts +89 -0
  1898. package/src/utils/user.ts +194 -0
  1899. package/src/utils/userAgent.ts +10 -0
  1900. package/src/utils/userPromptKeywords.ts +27 -0
  1901. package/src/utils/uuid.ts +27 -0
  1902. package/src/utils/warningHandler.ts +121 -0
  1903. package/src/utils/which.ts +82 -0
  1904. package/src/utils/windowsPaths.ts +173 -0
  1905. package/src/utils/withResolvers.ts +13 -0
  1906. package/src/utils/words.ts +800 -0
  1907. package/src/utils/workloadContext.ts +57 -0
  1908. package/src/utils/worktree.ts +1519 -0
  1909. package/src/utils/worktreeModeEnabled.ts +11 -0
  1910. package/src/utils/xdg.ts +65 -0
  1911. package/src/utils/xml.ts +16 -0
  1912. package/src/utils/yaml.ts +15 -0
  1913. package/src/utils/zodToJsonSchema.ts +23 -0
  1914. package/src/vim/motions.ts +82 -0
  1915. package/src/vim/operators.ts +556 -0
  1916. package/src/vim/textObjects.ts +186 -0
  1917. package/src/vim/transitions.ts +490 -0
  1918. package/src/vim/types.ts +199 -0
  1919. package/src/voice/voiceModeEnabled.ts +54 -0
  1920. package/start.js +1 -0
@@ -0,0 +1,1578 @@
1
+ import { feature } from 'bun:bundle'
2
+ import { chmod, open, rename, stat, unlink } from 'fs/promises'
3
+ import mapValues from 'lodash-es/mapValues.js'
4
+ import memoize from 'lodash-es/memoize.js'
5
+ import { dirname, join, parse } from 'path'
6
+ import { getPlatform } from 'src/utils/platform.js'
7
+ import type { PluginError } from '../../types/plugin.js'
8
+ import { getPluginErrorMessage } from '../../types/plugin.js'
9
+ import { isClaudeInChromeMCPServer } from '../../utils/claudeInChrome/common.js'
10
+ import {
11
+ getCurrentProjectConfig,
12
+ getGlobalConfig,
13
+ saveCurrentProjectConfig,
14
+ saveGlobalConfig,
15
+ } from '../../utils/config.js'
16
+ import { getCwd } from '../../utils/cwd.js'
17
+ import { logForDebugging } from '../../utils/debug.js'
18
+ import { getErrnoCode } from '../../utils/errors.js'
19
+ import { getFsImplementation } from '../../utils/fsOperations.js'
20
+ import { safeParseJSON } from '../../utils/json.js'
21
+ import { logError } from '../../utils/log.js'
22
+ import { getPluginMcpServers } from '../../utils/plugins/mcpPluginIntegration.js'
23
+ import { loadAllPluginsCacheOnly } from '../../utils/plugins/pluginLoader.js'
24
+ import { isSettingSourceEnabled } from '../../utils/settings/constants.js'
25
+ import { getManagedFilePath } from '../../utils/settings/managedPath.js'
26
+ import { isRestrictedToPluginOnly } from '../../utils/settings/pluginOnlyPolicy.js'
27
+ import {
28
+ getInitialSettings,
29
+ getSettingsForSource,
30
+ } from '../../utils/settings/settings.js'
31
+ import {
32
+ isMcpServerCommandEntry,
33
+ isMcpServerNameEntry,
34
+ isMcpServerUrlEntry,
35
+ type SettingsJson,
36
+ } from '../../utils/settings/types.js'
37
+ import type { ValidationError } from '../../utils/settings/validation.js'
38
+ import { jsonStringify } from '../../utils/slowOperations.js'
39
+ import {
40
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
41
+ logEvent,
42
+ } from '../analytics/index.js'
43
+ import { fetchClaudeAIMcpConfigsIfEligible } from './claudeai.js'
44
+ import { expandEnvVarsInString } from './envExpansion.js'
45
+ import {
46
+ type ConfigScope,
47
+ type McpHTTPServerConfig,
48
+ type McpJsonConfig,
49
+ McpJsonConfigSchema,
50
+ type McpServerConfig,
51
+ McpServerConfigSchema,
52
+ type McpSSEServerConfig,
53
+ type McpStdioServerConfig,
54
+ type McpWebSocketServerConfig,
55
+ type ScopedMcpServerConfig,
56
+ } from './types.js'
57
+ import { getProjectMcpServerStatus } from './utils.js'
58
+
59
+ /**
60
+ * Get the path to the managed MCP configuration file
61
+ */
62
+ export function getEnterpriseMcpFilePath(): string {
63
+ return join(getManagedFilePath(), 'managed-mcp.json')
64
+ }
65
+
66
+ /**
67
+ * Internal utility: Add scope to server configs
68
+ */
69
+ function addScopeToServers(
70
+ servers: Record<string, McpServerConfig> | undefined,
71
+ scope: ConfigScope,
72
+ ): Record<string, ScopedMcpServerConfig> {
73
+ if (!servers) {
74
+ return {}
75
+ }
76
+ const scopedServers: Record<string, ScopedMcpServerConfig> = {}
77
+ for (const [name, config] of Object.entries(servers)) {
78
+ scopedServers[name] = { ...config, scope }
79
+ }
80
+ return scopedServers
81
+ }
82
+
83
+ /**
84
+ * Internal utility: Write MCP config to .mcp.json file.
85
+ * Preserves file permissions and flushes to disk before rename.
86
+ * Uses the original path for rename (does not follow symlinks).
87
+ */
88
+ async function writeMcpjsonFile(config: McpJsonConfig): Promise<void> {
89
+ const mcpJsonPath = join(getCwd(), '.mcp.json')
90
+
91
+ // Read existing file permissions to preserve them
92
+ let existingMode: number | undefined
93
+ try {
94
+ const stats = await stat(mcpJsonPath)
95
+ existingMode = stats.mode
96
+ } catch (e: unknown) {
97
+ const code = getErrnoCode(e)
98
+ if (code !== 'ENOENT') {
99
+ throw e
100
+ }
101
+ // File doesn't exist yet -- no permissions to preserve
102
+ }
103
+
104
+ // Write to temp file, flush to disk, then atomic rename
105
+ const tempPath = `${mcpJsonPath}.tmp.${process.pid}.${Date.now()}`
106
+ const handle = await open(tempPath, 'w', existingMode ?? 0o644)
107
+ try {
108
+ await handle.writeFile(jsonStringify(config, null, 2), {
109
+ encoding: 'utf8',
110
+ })
111
+ await handle.datasync()
112
+ } finally {
113
+ await handle.close()
114
+ }
115
+
116
+ try {
117
+ // Restore original file permissions on the temp file before rename
118
+ if (existingMode !== undefined) {
119
+ await chmod(tempPath, existingMode)
120
+ }
121
+ await rename(tempPath, mcpJsonPath)
122
+ } catch (e: unknown) {
123
+ // Clean up temp file on failure
124
+ try {
125
+ await unlink(tempPath)
126
+ } catch {
127
+ // Best-effort cleanup
128
+ }
129
+ throw e
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Extract command array from server config (stdio servers only)
135
+ * Returns null for non-stdio servers
136
+ */
137
+ function getServerCommandArray(config: McpServerConfig): string[] | null {
138
+ // Non-stdio servers don't have commands
139
+ if (config.type !== undefined && config.type !== 'stdio') {
140
+ return null
141
+ }
142
+ const stdioConfig = config as McpStdioServerConfig
143
+ return [stdioConfig.command, ...(stdioConfig.args ?? [])]
144
+ }
145
+
146
+ /**
147
+ * Check if two command arrays match exactly
148
+ */
149
+ function commandArraysMatch(a: string[], b: string[]): boolean {
150
+ if (a.length !== b.length) {
151
+ return false
152
+ }
153
+ return a.every((val, idx) => val === b[idx])
154
+ }
155
+
156
+ /**
157
+ * Extract URL from server config (remote servers only)
158
+ * Returns null for stdio/sdk servers
159
+ */
160
+ function getServerUrl(config: McpServerConfig): string | null {
161
+ return 'url' in config ? config.url : null
162
+ }
163
+
164
+ /**
165
+ * CCR proxy URL path markers. In remote sessions, claude.ai connectors arrive
166
+ * via --mcp-config with URLs rewritten to route through the CCR/session-ingress
167
+ * SHTTP proxy. The original vendor URL is preserved in the mcp_url query param
168
+ * so the proxy knows where to forward. See api-go/ccr/internal/ccrshared/
169
+ * mcp_url_rewriter.go and api-go/ccr/internal/mcpproxy/proxy.go.
170
+ */
171
+ const CCR_PROXY_PATH_MARKERS = [
172
+ '/v2/session_ingress/shttp/mcp/',
173
+ '/v2/ccr-sessions/',
174
+ ]
175
+
176
+ /**
177
+ * If the URL is a CCR proxy URL, extract the original vendor URL from the
178
+ * mcp_url query parameter. Otherwise return the URL unchanged. This lets
179
+ * signature-based dedup match a plugin's raw vendor URL against a connector's
180
+ * rewritten proxy URL when both point at the same MCP server.
181
+ */
182
+ export function unwrapCcrProxyUrl(url: string): string {
183
+ if (!CCR_PROXY_PATH_MARKERS.some(m => url.includes(m))) {
184
+ return url
185
+ }
186
+ try {
187
+ const parsed = new URL(url)
188
+ const original = parsed.searchParams.get('mcp_url')
189
+ return original || url
190
+ } catch {
191
+ return url
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Compute a dedup signature for an MCP server config.
197
+ * Two configs with the same signature are considered "the same server" for
198
+ * plugin deduplication. Ignores env (plugins always inject CLAUDE_PLUGIN_ROOT)
199
+ * and headers (same URL = same server regardless of auth).
200
+ * Returns null only for configs with neither command nor url (sdk type).
201
+ */
202
+ export function getMcpServerSignature(config: McpServerConfig): string | null {
203
+ const cmd = getServerCommandArray(config)
204
+ if (cmd) {
205
+ return `stdio:${jsonStringify(cmd)}`
206
+ }
207
+ const url = getServerUrl(config)
208
+ if (url) {
209
+ return `url:${unwrapCcrProxyUrl(url)}`
210
+ }
211
+ return null
212
+ }
213
+
214
+ /**
215
+ * Filter plugin MCP servers, dropping any whose signature matches a
216
+ * manually-configured server or an earlier-loaded plugin server.
217
+ * Manual wins over plugin; between plugins, first-loaded wins.
218
+ *
219
+ * Plugin servers are namespaced `plugin:name:server` so they never key-collide
220
+ * with manual servers in the merge — this content-based check catches the case
221
+ * where both actually launch the same underlying process/connection.
222
+ */
223
+ export function dedupPluginMcpServers(
224
+ pluginServers: Record<string, ScopedMcpServerConfig>,
225
+ manualServers: Record<string, ScopedMcpServerConfig>,
226
+ ): {
227
+ servers: Record<string, ScopedMcpServerConfig>
228
+ suppressed: Array<{ name: string; duplicateOf: string }>
229
+ } {
230
+ // Map signature -> server name so we can report which server a dup matches
231
+ const manualSigs = new Map<string, string>()
232
+ for (const [name, config] of Object.entries(manualServers)) {
233
+ const sig = getMcpServerSignature(config)
234
+ if (sig && !manualSigs.has(sig)) manualSigs.set(sig, name)
235
+ }
236
+
237
+ const servers: Record<string, ScopedMcpServerConfig> = {}
238
+ const suppressed: Array<{ name: string; duplicateOf: string }> = []
239
+ const seenPluginSigs = new Map<string, string>()
240
+ for (const [name, config] of Object.entries(pluginServers)) {
241
+ const sig = getMcpServerSignature(config)
242
+ if (sig === null) {
243
+ servers[name] = config
244
+ continue
245
+ }
246
+ const manualDup = manualSigs.get(sig)
247
+ if (manualDup !== undefined) {
248
+ logForDebugging(
249
+ `Suppressing plugin MCP server "${name}": duplicates manually-configured "${manualDup}"`,
250
+ )
251
+ suppressed.push({ name, duplicateOf: manualDup })
252
+ continue
253
+ }
254
+ const pluginDup = seenPluginSigs.get(sig)
255
+ if (pluginDup !== undefined) {
256
+ logForDebugging(
257
+ `Suppressing plugin MCP server "${name}": duplicates earlier plugin server "${pluginDup}"`,
258
+ )
259
+ suppressed.push({ name, duplicateOf: pluginDup })
260
+ continue
261
+ }
262
+ seenPluginSigs.set(sig, name)
263
+ servers[name] = config
264
+ }
265
+ return { servers, suppressed }
266
+ }
267
+
268
+ /**
269
+ * Filter claude.ai connectors, dropping any whose signature matches an enabled
270
+ * manually-configured server. Manual wins: a user who wrote .mcp.json or ran
271
+ * `claude mcp add` expressed higher intent than a connector toggled in the web UI.
272
+ *
273
+ * Connector keys are `claude.ai <DisplayName>` so they never key-collide with
274
+ * manual servers in the merge — this content-based check catches the case where
275
+ * both point at the same underlying URL (e.g. `mcp__slack__*` and
276
+ * `mcp__claude_ai_Slack__*` both hitting mcp.slack.com, ~600 chars/turn wasted).
277
+ *
278
+ * Only enabled manual servers count as dedup targets — a disabled manual server
279
+ * mustn't suppress its connector twin, or neither runs.
280
+ */
281
+ export function dedupClaudeAiMcpServers(
282
+ claudeAiServers: Record<string, ScopedMcpServerConfig>,
283
+ manualServers: Record<string, ScopedMcpServerConfig>,
284
+ ): {
285
+ servers: Record<string, ScopedMcpServerConfig>
286
+ suppressed: Array<{ name: string; duplicateOf: string }>
287
+ } {
288
+ const manualSigs = new Map<string, string>()
289
+ for (const [name, config] of Object.entries(manualServers)) {
290
+ if (isMcpServerDisabled(name)) continue
291
+ const sig = getMcpServerSignature(config)
292
+ if (sig && !manualSigs.has(sig)) manualSigs.set(sig, name)
293
+ }
294
+
295
+ const servers: Record<string, ScopedMcpServerConfig> = {}
296
+ const suppressed: Array<{ name: string; duplicateOf: string }> = []
297
+ for (const [name, config] of Object.entries(claudeAiServers)) {
298
+ const sig = getMcpServerSignature(config)
299
+ const manualDup = sig !== null ? manualSigs.get(sig) : undefined
300
+ if (manualDup !== undefined) {
301
+ logForDebugging(
302
+ `Suppressing claude.ai connector "${name}": duplicates manually-configured "${manualDup}"`,
303
+ )
304
+ suppressed.push({ name, duplicateOf: manualDup })
305
+ continue
306
+ }
307
+ servers[name] = config
308
+ }
309
+ return { servers, suppressed }
310
+ }
311
+
312
+ /**
313
+ * Convert a URL pattern with wildcards to a RegExp
314
+ * Supports * as wildcard matching any characters
315
+ * Examples:
316
+ * "https://example.com/*" matches "https://example.com/api/v1"
317
+ * "https://*.example.com/*" matches "https://api.example.com/path"
318
+ * "https://example.com:*\/*" matches any port
319
+ */
320
+ function urlPatternToRegex(pattern: string): RegExp {
321
+ // Escape regex special characters except *
322
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&')
323
+ // Replace * with regex equivalent (match any characters)
324
+ const regexStr = escaped.replace(/\*/g, '.*')
325
+ return new RegExp(`^${regexStr}$`)
326
+ }
327
+
328
+ /**
329
+ * Check if a URL matches a pattern with wildcard support
330
+ */
331
+ function urlMatchesPattern(url: string, pattern: string): boolean {
332
+ const regex = urlPatternToRegex(pattern)
333
+ return regex.test(url)
334
+ }
335
+
336
+ /**
337
+ * Get the settings to use for MCP server allowlist policy.
338
+ * When allowManagedMcpServersOnly is set in policySettings, only managed settings
339
+ * control which servers are allowed. Otherwise, returns merged settings.
340
+ */
341
+ function getMcpAllowlistSettings(): SettingsJson {
342
+ if (shouldAllowManagedMcpServersOnly()) {
343
+ return getSettingsForSource('policySettings') ?? {}
344
+ }
345
+ return getInitialSettings()
346
+ }
347
+
348
+ /**
349
+ * Get the settings to use for MCP server denylist policy.
350
+ * Denylists always merge from all sources — users can always deny servers
351
+ * for themselves, even when allowManagedMcpServersOnly is set.
352
+ */
353
+ function getMcpDenylistSettings(): SettingsJson {
354
+ return getInitialSettings()
355
+ }
356
+
357
+ /**
358
+ * Check if an MCP server is denied by enterprise policy
359
+ * Checks name-based, command-based, and URL-based restrictions
360
+ * @param serverName The name of the server to check
361
+ * @param config Optional server config for command/URL-based matching
362
+ * @returns true if denied, false if not on denylist
363
+ */
364
+ function isMcpServerDenied(
365
+ serverName: string,
366
+ config?: McpServerConfig,
367
+ ): boolean {
368
+ const settings = getMcpDenylistSettings()
369
+ if (!settings.deniedMcpServers) {
370
+ return false // No restrictions
371
+ }
372
+
373
+ // Check name-based denial
374
+ for (const entry of settings.deniedMcpServers) {
375
+ if (isMcpServerNameEntry(entry) && entry.serverName === serverName) {
376
+ return true
377
+ }
378
+ }
379
+
380
+ // Check command-based denial (stdio servers only) and URL-based denial (remote servers only)
381
+ if (config) {
382
+ const serverCommand = getServerCommandArray(config)
383
+ if (serverCommand) {
384
+ for (const entry of settings.deniedMcpServers) {
385
+ if (
386
+ isMcpServerCommandEntry(entry) &&
387
+ commandArraysMatch(entry.serverCommand, serverCommand)
388
+ ) {
389
+ return true
390
+ }
391
+ }
392
+ }
393
+
394
+ const serverUrl = getServerUrl(config)
395
+ if (serverUrl) {
396
+ for (const entry of settings.deniedMcpServers) {
397
+ if (
398
+ isMcpServerUrlEntry(entry) &&
399
+ urlMatchesPattern(serverUrl, entry.serverUrl)
400
+ ) {
401
+ return true
402
+ }
403
+ }
404
+ }
405
+ }
406
+
407
+ return false
408
+ }
409
+
410
+ /**
411
+ * Check if an MCP server is allowed by enterprise policy
412
+ * Checks name-based, command-based, and URL-based restrictions
413
+ * @param serverName The name of the server to check
414
+ * @param config Optional server config for command/URL-based matching
415
+ * @returns true if allowed, false if blocked by policy
416
+ */
417
+ function isMcpServerAllowedByPolicy(
418
+ serverName: string,
419
+ config?: McpServerConfig,
420
+ ): boolean {
421
+ // Denylist takes absolute precedence
422
+ if (isMcpServerDenied(serverName, config)) {
423
+ return false
424
+ }
425
+
426
+ const settings = getMcpAllowlistSettings()
427
+ if (!settings.allowedMcpServers) {
428
+ return true // No allowlist restrictions (undefined)
429
+ }
430
+
431
+ // Empty allowlist means block all servers
432
+ if (settings.allowedMcpServers.length === 0) {
433
+ return false
434
+ }
435
+
436
+ // Check if allowlist contains any command-based or URL-based entries
437
+ const hasCommandEntries = settings.allowedMcpServers.some(
438
+ isMcpServerCommandEntry,
439
+ )
440
+ const hasUrlEntries = settings.allowedMcpServers.some(isMcpServerUrlEntry)
441
+
442
+ if (config) {
443
+ const serverCommand = getServerCommandArray(config)
444
+ const serverUrl = getServerUrl(config)
445
+
446
+ if (serverCommand) {
447
+ // This is a stdio server
448
+ if (hasCommandEntries) {
449
+ // If ANY serverCommand entries exist, stdio servers MUST match one of them
450
+ for (const entry of settings.allowedMcpServers) {
451
+ if (
452
+ isMcpServerCommandEntry(entry) &&
453
+ commandArraysMatch(entry.serverCommand, serverCommand)
454
+ ) {
455
+ return true
456
+ }
457
+ }
458
+ return false // Stdio server doesn't match any command entry
459
+ } else {
460
+ // No command entries, check name-based allowance
461
+ for (const entry of settings.allowedMcpServers) {
462
+ if (isMcpServerNameEntry(entry) && entry.serverName === serverName) {
463
+ return true
464
+ }
465
+ }
466
+ return false
467
+ }
468
+ } else if (serverUrl) {
469
+ // This is a remote server (sse, http, ws, etc.)
470
+ if (hasUrlEntries) {
471
+ // If ANY serverUrl entries exist, remote servers MUST match one of them
472
+ for (const entry of settings.allowedMcpServers) {
473
+ if (
474
+ isMcpServerUrlEntry(entry) &&
475
+ urlMatchesPattern(serverUrl, entry.serverUrl)
476
+ ) {
477
+ return true
478
+ }
479
+ }
480
+ return false // Remote server doesn't match any URL entry
481
+ } else {
482
+ // No URL entries, check name-based allowance
483
+ for (const entry of settings.allowedMcpServers) {
484
+ if (isMcpServerNameEntry(entry) && entry.serverName === serverName) {
485
+ return true
486
+ }
487
+ }
488
+ return false
489
+ }
490
+ } else {
491
+ // Unknown server type - check name-based allowance only
492
+ for (const entry of settings.allowedMcpServers) {
493
+ if (isMcpServerNameEntry(entry) && entry.serverName === serverName) {
494
+ return true
495
+ }
496
+ }
497
+ return false
498
+ }
499
+ }
500
+
501
+ // No config provided - check name-based allowance only
502
+ for (const entry of settings.allowedMcpServers) {
503
+ if (isMcpServerNameEntry(entry) && entry.serverName === serverName) {
504
+ return true
505
+ }
506
+ }
507
+ return false
508
+ }
509
+
510
+ /**
511
+ * Filter a record of MCP server configs by managed policy (allowedMcpServers /
512
+ * deniedMcpServers). Servers blocked by policy are dropped and their names
513
+ * returned so callers can warn the user.
514
+ *
515
+ * Intended for user-controlled config entry points that bypass the policy filter
516
+ * in getClaudeCodeMcpConfigs(): --mcp-config (main.tsx) and the mcp_set_servers
517
+ * control message (print.ts, SDK V2 Query.setMcpServers()).
518
+ *
519
+ * SDK-type servers are exempt — they are SDK-managed transport placeholders,
520
+ * not CLI-managed connections. The CLI never spawns a process or opens a
521
+ * network connection for them; tool calls route back to the SDK via
522
+ * mcp_tool_call. URL/command-based allowlist entries are meaningless for them
523
+ * (no url, no command), and gating by name would silently drop them during
524
+ * installPluginsAndApplyMcpInBackground's sdkMcpConfigs carry-forward.
525
+ *
526
+ * The generic has no type constraint because the two callsites use different
527
+ * config type families: main.tsx uses ScopedMcpServerConfig (service type,
528
+ * args: string[] required), print.ts uses McpServerConfigForProcessTransport
529
+ * (SDK wire type, args?: string[] optional). Both are structurally compatible
530
+ * with what isMcpServerAllowedByPolicy actually reads (type/url/command/args)
531
+ * — the policy check only reads, never requires any field to be present.
532
+ * The `as McpServerConfig` widening is safe for that reason; the downstream
533
+ * checks tolerate missing/undefined fields: `config` is optional, and
534
+ * `getServerCommandArray` defaults `args` to `[]` via `?? []`.
535
+ */
536
+ export function filterMcpServersByPolicy<T>(configs: Record<string, T>): {
537
+ allowed: Record<string, T>
538
+ blocked: string[]
539
+ } {
540
+ const allowed: Record<string, T> = {}
541
+ const blocked: string[] = []
542
+ for (const [name, config] of Object.entries(configs)) {
543
+ const c = config as McpServerConfig
544
+ if (c.type === 'sdk' || isMcpServerAllowedByPolicy(name, c)) {
545
+ allowed[name] = config
546
+ } else {
547
+ blocked.push(name)
548
+ }
549
+ }
550
+ return { allowed, blocked }
551
+ }
552
+
553
+ /**
554
+ * Internal utility: Expands environment variables in an MCP server config
555
+ */
556
+ function expandEnvVars(config: McpServerConfig): {
557
+ expanded: McpServerConfig
558
+ missingVars: string[]
559
+ } {
560
+ const missingVars: string[] = []
561
+
562
+ function expandString(str: string): string {
563
+ const { expanded, missingVars: vars } = expandEnvVarsInString(str)
564
+ missingVars.push(...vars)
565
+ return expanded
566
+ }
567
+
568
+ let expanded: McpServerConfig
569
+
570
+ switch (config.type) {
571
+ case undefined:
572
+ case 'stdio': {
573
+ const stdioConfig = config as McpStdioServerConfig
574
+ expanded = {
575
+ ...stdioConfig,
576
+ command: expandString(stdioConfig.command),
577
+ args: stdioConfig.args.map(expandString),
578
+ env: stdioConfig.env
579
+ ? mapValues(stdioConfig.env, expandString)
580
+ : undefined,
581
+ }
582
+ break
583
+ }
584
+ case 'sse':
585
+ case 'http':
586
+ case 'ws': {
587
+ const remoteConfig = config as
588
+ | McpSSEServerConfig
589
+ | McpHTTPServerConfig
590
+ | McpWebSocketServerConfig
591
+ expanded = {
592
+ ...remoteConfig,
593
+ url: expandString(remoteConfig.url),
594
+ headers: remoteConfig.headers
595
+ ? mapValues(remoteConfig.headers, expandString)
596
+ : undefined,
597
+ }
598
+ break
599
+ }
600
+ case 'sse-ide':
601
+ case 'ws-ide':
602
+ expanded = config
603
+ break
604
+ case 'sdk':
605
+ expanded = config
606
+ break
607
+ case 'claudeai-proxy':
608
+ expanded = config
609
+ break
610
+ }
611
+
612
+ return {
613
+ expanded,
614
+ missingVars: [...new Set(missingVars)],
615
+ }
616
+ }
617
+
618
+ /**
619
+ * Add a new MCP server configuration
620
+ * @param name The name of the server
621
+ * @param config The server configuration
622
+ * @param scope The configuration scope
623
+ * @throws Error if name is invalid or server already exists, or if the config is invalid
624
+ */
625
+ export async function addMcpConfig(
626
+ name: string,
627
+ config: unknown,
628
+ scope: ConfigScope,
629
+ ): Promise<void> {
630
+ if (name.match(/[^a-zA-Z0-9_-]/)) {
631
+ throw new Error(
632
+ `Invalid name ${name}. Names can only contain letters, numbers, hyphens, and underscores.`,
633
+ )
634
+ }
635
+
636
+ // Block reserved server name "claude-in-chrome"
637
+ if (isClaudeInChromeMCPServer(name)) {
638
+ throw new Error(`Cannot add MCP server "${name}": this name is reserved.`)
639
+ }
640
+
641
+ if (feature('CHICAGO_MCP')) {
642
+ const { isComputerUseMCPServer } = await import(
643
+ '../../utils/computerUse/common.js'
644
+ )
645
+ if (isComputerUseMCPServer(name)) {
646
+ throw new Error(`Cannot add MCP server "${name}": this name is reserved.`)
647
+ }
648
+ }
649
+
650
+ // Block adding servers when enterprise MCP config exists (it has exclusive control)
651
+ if (doesEnterpriseMcpConfigExist()) {
652
+ throw new Error(
653
+ `Cannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers`,
654
+ )
655
+ }
656
+
657
+ // Validate config first (needed for command-based policy checks)
658
+ const result = McpServerConfigSchema().safeParse(config)
659
+ if (!result.success) {
660
+ const formattedErrors = result.error.issues
661
+ .map(err => `${err.path.join('.')}: ${err.message}`)
662
+ .join(', ')
663
+ throw new Error(`Invalid configuration: ${formattedErrors}`)
664
+ }
665
+ const validatedConfig = result.data
666
+
667
+ // Check denylist (with config for command-based checks)
668
+ if (isMcpServerDenied(name, validatedConfig)) {
669
+ throw new Error(
670
+ `Cannot add MCP server "${name}": server is explicitly blocked by enterprise policy`,
671
+ )
672
+ }
673
+
674
+ // Check allowlist (with config for command-based checks)
675
+ if (!isMcpServerAllowedByPolicy(name, validatedConfig)) {
676
+ throw new Error(
677
+ `Cannot add MCP server "${name}": not allowed by enterprise policy`,
678
+ )
679
+ }
680
+
681
+ // Check if server already exists in the target scope
682
+ switch (scope) {
683
+ case 'project': {
684
+ const { servers } = getProjectMcpConfigsFromCwd()
685
+ if (servers[name]) {
686
+ throw new Error(`MCP server ${name} already exists in .mcp.json`)
687
+ }
688
+ break
689
+ }
690
+ case 'user': {
691
+ const globalConfig = getGlobalConfig()
692
+ if (globalConfig.mcpServers?.[name]) {
693
+ throw new Error(`MCP server ${name} already exists in user config`)
694
+ }
695
+ break
696
+ }
697
+ case 'local': {
698
+ const projectConfig = getCurrentProjectConfig()
699
+ if (projectConfig.mcpServers?.[name]) {
700
+ throw new Error(`MCP server ${name} already exists in local config`)
701
+ }
702
+ break
703
+ }
704
+ case 'dynamic':
705
+ throw new Error('Cannot add MCP server to scope: dynamic')
706
+ case 'enterprise':
707
+ throw new Error('Cannot add MCP server to scope: enterprise')
708
+ case 'claudeai':
709
+ throw new Error('Cannot add MCP server to scope: claudeai')
710
+ }
711
+
712
+ // Add based on scope
713
+ switch (scope) {
714
+ case 'project': {
715
+ const { servers: existingServers } = getProjectMcpConfigsFromCwd()
716
+
717
+ const mcpServers: Record<string, McpServerConfig> = {}
718
+ for (const [serverName, serverConfig] of Object.entries(
719
+ existingServers,
720
+ )) {
721
+ const { scope: _, ...configWithoutScope } = serverConfig
722
+ mcpServers[serverName] = configWithoutScope
723
+ }
724
+ mcpServers[name] = validatedConfig
725
+ const mcpConfig = { mcpServers }
726
+
727
+ // Write back to .mcp.json
728
+ try {
729
+ await writeMcpjsonFile(mcpConfig)
730
+ } catch (error) {
731
+ throw new Error(`Failed to write to .mcp.json: ${error}`)
732
+ }
733
+ break
734
+ }
735
+
736
+ case 'user': {
737
+ saveGlobalConfig(current => ({
738
+ ...current,
739
+ mcpServers: {
740
+ ...current.mcpServers,
741
+ [name]: validatedConfig,
742
+ },
743
+ }))
744
+ break
745
+ }
746
+
747
+ case 'local': {
748
+ saveCurrentProjectConfig(current => ({
749
+ ...current,
750
+ mcpServers: {
751
+ ...current.mcpServers,
752
+ [name]: validatedConfig,
753
+ },
754
+ }))
755
+ break
756
+ }
757
+
758
+ default:
759
+ throw new Error(`Cannot add MCP server to scope: ${scope}`)
760
+ }
761
+ }
762
+
763
+ /**
764
+ * Remove an MCP server configuration
765
+ * @param name The name of the server to remove
766
+ * @param scope The configuration scope
767
+ * @throws Error if server not found in specified scope
768
+ */
769
+ export async function removeMcpConfig(
770
+ name: string,
771
+ scope: ConfigScope,
772
+ ): Promise<void> {
773
+ switch (scope) {
774
+ case 'project': {
775
+ const { servers: existingServers } = getProjectMcpConfigsFromCwd()
776
+
777
+ if (!existingServers[name]) {
778
+ throw new Error(`No MCP server found with name: ${name} in .mcp.json`)
779
+ }
780
+
781
+ // Strip scope information when writing back to .mcp.json
782
+ const mcpServers: Record<string, McpServerConfig> = {}
783
+ for (const [serverName, serverConfig] of Object.entries(
784
+ existingServers,
785
+ )) {
786
+ if (serverName !== name) {
787
+ const { scope: _, ...configWithoutScope } = serverConfig
788
+ mcpServers[serverName] = configWithoutScope
789
+ }
790
+ }
791
+ const mcpConfig = { mcpServers }
792
+ try {
793
+ await writeMcpjsonFile(mcpConfig)
794
+ } catch (error) {
795
+ throw new Error(`Failed to remove from .mcp.json: ${error}`)
796
+ }
797
+ break
798
+ }
799
+
800
+ case 'user': {
801
+ const config = getGlobalConfig()
802
+ if (!config.mcpServers?.[name]) {
803
+ throw new Error(`No user-scoped MCP server found with name: ${name}`)
804
+ }
805
+ saveGlobalConfig(current => {
806
+ const { [name]: _, ...restMcpServers } = current.mcpServers ?? {}
807
+ return {
808
+ ...current,
809
+ mcpServers: restMcpServers,
810
+ }
811
+ })
812
+ break
813
+ }
814
+
815
+ case 'local': {
816
+ // Check if server exists before updating
817
+ const config = getCurrentProjectConfig()
818
+ if (!config.mcpServers?.[name]) {
819
+ throw new Error(`No project-local MCP server found with name: ${name}`)
820
+ }
821
+ saveCurrentProjectConfig(current => {
822
+ const { [name]: _, ...restMcpServers } = current.mcpServers ?? {}
823
+ return {
824
+ ...current,
825
+ mcpServers: restMcpServers,
826
+ }
827
+ })
828
+ break
829
+ }
830
+
831
+ default:
832
+ throw new Error(`Cannot remove MCP server from scope: ${scope}`)
833
+ }
834
+ }
835
+
836
+ /**
837
+ * Get MCP configs from current directory only (no parent traversal).
838
+ * Used by addMcpConfig and removeMcpConfig to modify the local .mcp.json file.
839
+ * Exported for testing purposes.
840
+ *
841
+ * @returns Servers with scope information and any validation errors from current directory's .mcp.json
842
+ */
843
+ export function getProjectMcpConfigsFromCwd(): {
844
+ servers: Record<string, ScopedMcpServerConfig>
845
+ errors: ValidationError[]
846
+ } {
847
+ // Check if project source is enabled
848
+ if (!isSettingSourceEnabled('projectSettings')) {
849
+ return { servers: {}, errors: [] }
850
+ }
851
+
852
+ const mcpJsonPath = join(getCwd(), '.mcp.json')
853
+
854
+ const { config, errors } = parseMcpConfigFromFilePath({
855
+ filePath: mcpJsonPath,
856
+ expandVars: true,
857
+ scope: 'project',
858
+ })
859
+
860
+ // Missing .mcp.json is expected, but malformed files should report errors
861
+ if (!config) {
862
+ const nonMissingErrors = errors.filter(
863
+ e => !e.message.startsWith('MCP config file not found'),
864
+ )
865
+ if (nonMissingErrors.length > 0) {
866
+ logForDebugging(
867
+ `MCP config errors for ${mcpJsonPath}: ${jsonStringify(nonMissingErrors.map(e => e.message))}`,
868
+ { level: 'error' },
869
+ )
870
+ return { servers: {}, errors: nonMissingErrors }
871
+ }
872
+ return { servers: {}, errors: [] }
873
+ }
874
+
875
+ return {
876
+ servers: config.mcpServers
877
+ ? addScopeToServers(config.mcpServers, 'project')
878
+ : {},
879
+ errors: errors || [],
880
+ }
881
+ }
882
+
883
+ /**
884
+ * Get all MCP configurations from a specific scope
885
+ * @param scope The configuration scope
886
+ * @returns Servers with scope information and any validation errors
887
+ */
888
+ export function getMcpConfigsByScope(
889
+ scope: 'project' | 'user' | 'local' | 'enterprise',
890
+ ): {
891
+ servers: Record<string, ScopedMcpServerConfig>
892
+ errors: ValidationError[]
893
+ } {
894
+ // Check if this source is enabled
895
+ const sourceMap: Record<
896
+ string,
897
+ 'projectSettings' | 'userSettings' | 'localSettings'
898
+ > = {
899
+ project: 'projectSettings',
900
+ user: 'userSettings',
901
+ local: 'localSettings',
902
+ }
903
+
904
+ if (scope in sourceMap && !isSettingSourceEnabled(sourceMap[scope]!)) {
905
+ return { servers: {}, errors: [] }
906
+ }
907
+
908
+ switch (scope) {
909
+ case 'project': {
910
+ const allServers: Record<string, ScopedMcpServerConfig> = {}
911
+ const allErrors: ValidationError[] = []
912
+
913
+ // Build list of directories to check
914
+ const dirs: string[] = []
915
+ let currentDir = getCwd()
916
+
917
+ while (currentDir !== parse(currentDir).root) {
918
+ dirs.push(currentDir)
919
+ currentDir = dirname(currentDir)
920
+ }
921
+
922
+ // Process from root downward to CWD (so closer files have higher priority)
923
+ for (const dir of dirs.reverse()) {
924
+ const mcpJsonPath = join(dir, '.mcp.json')
925
+
926
+ const { config, errors } = parseMcpConfigFromFilePath({
927
+ filePath: mcpJsonPath,
928
+ expandVars: true,
929
+ scope: 'project',
930
+ })
931
+
932
+ // Missing .mcp.json in parent directories is expected, but malformed files should report errors
933
+ if (!config) {
934
+ const nonMissingErrors = errors.filter(
935
+ e => !e.message.startsWith('MCP config file not found'),
936
+ )
937
+ if (nonMissingErrors.length > 0) {
938
+ logForDebugging(
939
+ `MCP config errors for ${mcpJsonPath}: ${jsonStringify(nonMissingErrors.map(e => e.message))}`,
940
+ { level: 'error' },
941
+ )
942
+ allErrors.push(...nonMissingErrors)
943
+ }
944
+ continue
945
+ }
946
+
947
+ if (config.mcpServers) {
948
+ // Merge servers, with files closer to CWD overriding parent configs
949
+ Object.assign(allServers, addScopeToServers(config.mcpServers, scope))
950
+ }
951
+
952
+ if (errors.length > 0) {
953
+ allErrors.push(...errors)
954
+ }
955
+ }
956
+
957
+ return {
958
+ servers: allServers,
959
+ errors: allErrors,
960
+ }
961
+ }
962
+ case 'user': {
963
+ const mcpServers = getGlobalConfig().mcpServers
964
+ if (!mcpServers) {
965
+ return { servers: {}, errors: [] }
966
+ }
967
+
968
+ const { config, errors } = parseMcpConfig({
969
+ configObject: { mcpServers },
970
+ expandVars: true,
971
+ scope: 'user',
972
+ })
973
+
974
+ return {
975
+ servers: addScopeToServers(config?.mcpServers, scope),
976
+ errors,
977
+ }
978
+ }
979
+ case 'local': {
980
+ const mcpServers = getCurrentProjectConfig().mcpServers
981
+ if (!mcpServers) {
982
+ return { servers: {}, errors: [] }
983
+ }
984
+
985
+ const { config, errors } = parseMcpConfig({
986
+ configObject: { mcpServers },
987
+ expandVars: true,
988
+ scope: 'local',
989
+ })
990
+
991
+ return {
992
+ servers: addScopeToServers(config?.mcpServers, scope),
993
+ errors,
994
+ }
995
+ }
996
+ case 'enterprise': {
997
+ const enterpriseMcpPath = getEnterpriseMcpFilePath()
998
+
999
+ const { config, errors } = parseMcpConfigFromFilePath({
1000
+ filePath: enterpriseMcpPath,
1001
+ expandVars: true,
1002
+ scope: 'enterprise',
1003
+ })
1004
+
1005
+ // Missing enterprise config file is expected, but malformed files should report errors
1006
+ if (!config) {
1007
+ const nonMissingErrors = errors.filter(
1008
+ e => !e.message.startsWith('MCP config file not found'),
1009
+ )
1010
+ if (nonMissingErrors.length > 0) {
1011
+ logForDebugging(
1012
+ `Enterprise MCP config errors for ${enterpriseMcpPath}: ${jsonStringify(nonMissingErrors.map(e => e.message))}`,
1013
+ { level: 'error' },
1014
+ )
1015
+ return { servers: {}, errors: nonMissingErrors }
1016
+ }
1017
+ return { servers: {}, errors: [] }
1018
+ }
1019
+
1020
+ return {
1021
+ servers: addScopeToServers(config.mcpServers, scope),
1022
+ errors,
1023
+ }
1024
+ }
1025
+ }
1026
+ }
1027
+
1028
+ /**
1029
+ * Get an MCP server configuration by name
1030
+ * @param name The name of the server
1031
+ * @returns The server configuration with scope, or undefined if not found
1032
+ */
1033
+ export function getMcpConfigByName(name: string): ScopedMcpServerConfig | null {
1034
+ const { servers: enterpriseServers } = getMcpConfigsByScope('enterprise')
1035
+
1036
+ // When MCP is locked to plugin-only, only enterprise servers are reachable
1037
+ // by name. User/project/local servers are blocked — same as getClaudeCodeMcpConfigs().
1038
+ if (isRestrictedToPluginOnly('mcp')) {
1039
+ return enterpriseServers[name] ?? null
1040
+ }
1041
+
1042
+ const { servers: userServers } = getMcpConfigsByScope('user')
1043
+ const { servers: projectServers } = getMcpConfigsByScope('project')
1044
+ const { servers: localServers } = getMcpConfigsByScope('local')
1045
+
1046
+ if (enterpriseServers[name]) {
1047
+ return enterpriseServers[name]
1048
+ }
1049
+ if (localServers[name]) {
1050
+ return localServers[name]
1051
+ }
1052
+ if (projectServers[name]) {
1053
+ return projectServers[name]
1054
+ }
1055
+ if (userServers[name]) {
1056
+ return userServers[name]
1057
+ }
1058
+
1059
+ return null
1060
+ }
1061
+
1062
+ /**
1063
+ * Get Claude Code MCP configurations (excludes claude.ai servers from the
1064
+ * returned set — they're fetched separately and merged by callers).
1065
+ * This is fast: only local file reads; no awaited network calls on the
1066
+ * critical path. The optional extraDedupTargets promise (e.g. the in-flight
1067
+ * claude.ai connector fetch) is awaited only after loadAllPluginsCacheOnly() completes,
1068
+ * so the two overlap rather than serialize.
1069
+ * @returns Claude Code server configurations with appropriate scopes
1070
+ */
1071
+ export async function getClaudeCodeMcpConfigs(
1072
+ dynamicServers: Record<string, ScopedMcpServerConfig> = {},
1073
+ extraDedupTargets: Promise<
1074
+ Record<string, ScopedMcpServerConfig>
1075
+ > = Promise.resolve({}),
1076
+ ): Promise<{
1077
+ servers: Record<string, ScopedMcpServerConfig>
1078
+ errors: PluginError[]
1079
+ }> {
1080
+ const { servers: enterpriseServers } = getMcpConfigsByScope('enterprise')
1081
+
1082
+ // If an enterprise mcp config exists, do not use any others; this has exclusive control over all MCP servers
1083
+ // (enterprise customers often do not want their users to be able to add their own MCP servers).
1084
+ if (doesEnterpriseMcpConfigExist()) {
1085
+ // Apply policy filtering to enterprise servers
1086
+ const filtered: Record<string, ScopedMcpServerConfig> = {}
1087
+
1088
+ for (const [name, serverConfig] of Object.entries(enterpriseServers)) {
1089
+ if (!isMcpServerAllowedByPolicy(name, serverConfig)) {
1090
+ continue
1091
+ }
1092
+ filtered[name] = serverConfig
1093
+ }
1094
+
1095
+ return { servers: filtered, errors: [] }
1096
+ }
1097
+
1098
+ // Load other scopes — unless the managed policy locks MCP to plugin-only.
1099
+ // Unlike the enterprise-exclusive block above, this keeps plugin servers.
1100
+ const mcpLocked = isRestrictedToPluginOnly('mcp')
1101
+ const noServers: { servers: Record<string, ScopedMcpServerConfig> } = {
1102
+ servers: {},
1103
+ }
1104
+ const { servers: userServers } = mcpLocked
1105
+ ? noServers
1106
+ : getMcpConfigsByScope('user')
1107
+ const { servers: projectServers } = mcpLocked
1108
+ ? noServers
1109
+ : getMcpConfigsByScope('project')
1110
+ const { servers: localServers } = mcpLocked
1111
+ ? noServers
1112
+ : getMcpConfigsByScope('local')
1113
+
1114
+ // Load plugin MCP servers
1115
+ const pluginMcpServers: Record<string, ScopedMcpServerConfig> = {}
1116
+
1117
+ const pluginResult = await loadAllPluginsCacheOnly()
1118
+
1119
+ // Collect MCP-specific errors during server loading
1120
+ const mcpErrors: PluginError[] = []
1121
+
1122
+ // Log any plugin loading errors - NEVER silently fail in production
1123
+ if (pluginResult.errors.length > 0) {
1124
+ for (const error of pluginResult.errors) {
1125
+ // Only log as MCP error if it's actually MCP-related
1126
+ // Otherwise just log as debug since the plugin might not have MCP servers
1127
+ if (
1128
+ error.type === 'mcp-config-invalid' ||
1129
+ error.type === 'mcpb-download-failed' ||
1130
+ error.type === 'mcpb-extract-failed' ||
1131
+ error.type === 'mcpb-invalid-manifest'
1132
+ ) {
1133
+ const errorMessage = `Plugin MCP loading error - ${error.type}: ${getPluginErrorMessage(error)}`
1134
+ logError(new Error(errorMessage))
1135
+ } else {
1136
+ // Plugin doesn't exist or isn't available - this is common and not necessarily an error
1137
+ // The plugin system will handle installing it if possible
1138
+ const errorType = error.type
1139
+ logForDebugging(
1140
+ `Plugin not available for MCP: ${error.source} - error type: ${errorType}`,
1141
+ )
1142
+ }
1143
+ }
1144
+ }
1145
+
1146
+ // Process enabled plugins for MCP servers in parallel
1147
+ const pluginServerResults = await Promise.all(
1148
+ pluginResult.enabled.map(plugin => getPluginMcpServers(plugin, mcpErrors)),
1149
+ )
1150
+ for (const servers of pluginServerResults) {
1151
+ if (servers) {
1152
+ Object.assign(pluginMcpServers, servers)
1153
+ }
1154
+ }
1155
+
1156
+ // Add any MCP-specific errors from server loading to plugin errors
1157
+ if (mcpErrors.length > 0) {
1158
+ for (const error of mcpErrors) {
1159
+ const errorMessage = `Plugin MCP server error - ${error.type}: ${getPluginErrorMessage(error)}`
1160
+ logError(new Error(errorMessage))
1161
+ }
1162
+ }
1163
+
1164
+ // Filter project servers to only include approved ones
1165
+ const approvedProjectServers: Record<string, ScopedMcpServerConfig> = {}
1166
+ for (const [name, config] of Object.entries(projectServers)) {
1167
+ if (getProjectMcpServerStatus(name) === 'approved') {
1168
+ approvedProjectServers[name] = config
1169
+ }
1170
+ }
1171
+
1172
+ // Dedup plugin servers against manually-configured ones (and each other).
1173
+ // Plugin server keys are namespaced `plugin:x:y` so they never collide with
1174
+ // manual keys in the merge below — this content-based filter catches the case
1175
+ // where both would launch the same underlying process/connection.
1176
+ // Only servers that will actually connect are valid dedup targets — a
1177
+ // disabled manual server mustn't suppress a plugin server, or neither runs
1178
+ // (manual is skipped by name at connection time; plugin was removed here).
1179
+ const extraTargets = await extraDedupTargets
1180
+ const enabledManualServers: Record<string, ScopedMcpServerConfig> = {}
1181
+ for (const [name, config] of Object.entries({
1182
+ ...userServers,
1183
+ ...approvedProjectServers,
1184
+ ...localServers,
1185
+ ...dynamicServers,
1186
+ ...extraTargets,
1187
+ })) {
1188
+ if (
1189
+ !isMcpServerDisabled(name) &&
1190
+ isMcpServerAllowedByPolicy(name, config)
1191
+ ) {
1192
+ enabledManualServers[name] = config
1193
+ }
1194
+ }
1195
+ // Split off disabled/policy-blocked plugin servers so they don't win the
1196
+ // first-plugin-wins race against an enabled duplicate — same invariant as
1197
+ // above. They're merged back after dedup so they still appear in /mcp
1198
+ // (policy filtering at the end of this function drops blocked ones).
1199
+ const enabledPluginServers: Record<string, ScopedMcpServerConfig> = {}
1200
+ const disabledPluginServers: Record<string, ScopedMcpServerConfig> = {}
1201
+ for (const [name, config] of Object.entries(pluginMcpServers)) {
1202
+ if (
1203
+ isMcpServerDisabled(name) ||
1204
+ !isMcpServerAllowedByPolicy(name, config)
1205
+ ) {
1206
+ disabledPluginServers[name] = config
1207
+ } else {
1208
+ enabledPluginServers[name] = config
1209
+ }
1210
+ }
1211
+ const { servers: dedupedPluginServers, suppressed } = dedupPluginMcpServers(
1212
+ enabledPluginServers,
1213
+ enabledManualServers,
1214
+ )
1215
+ Object.assign(dedupedPluginServers, disabledPluginServers)
1216
+ // Surface suppressions in /plugin UI. Pushed AFTER the logError loop above
1217
+ // so these don't go to the error log — they're informational, not errors.
1218
+ for (const { name, duplicateOf } of suppressed) {
1219
+ // name is "plugin:${pluginName}:${serverName}" from addPluginScopeToServers
1220
+ const parts = name.split(':')
1221
+ if (parts[0] !== 'plugin' || parts.length < 3) continue
1222
+ mcpErrors.push({
1223
+ type: 'mcp-server-suppressed-duplicate',
1224
+ source: name,
1225
+ plugin: parts[1]!,
1226
+ serverName: parts.slice(2).join(':'),
1227
+ duplicateOf,
1228
+ })
1229
+ }
1230
+
1231
+ // Merge in order of precedence: plugin < user < project < local
1232
+ const configs = Object.assign(
1233
+ {},
1234
+ dedupedPluginServers,
1235
+ userServers,
1236
+ approvedProjectServers,
1237
+ localServers,
1238
+ )
1239
+
1240
+ // Apply policy filtering to merged configs
1241
+ const filtered: Record<string, ScopedMcpServerConfig> = {}
1242
+
1243
+ for (const [name, serverConfig] of Object.entries(configs)) {
1244
+ if (!isMcpServerAllowedByPolicy(name, serverConfig as McpServerConfig)) {
1245
+ continue
1246
+ }
1247
+ filtered[name] = serverConfig as ScopedMcpServerConfig
1248
+ }
1249
+
1250
+ return { servers: filtered, errors: mcpErrors }
1251
+ }
1252
+
1253
+ /**
1254
+ * Get all MCP configurations across all scopes, including claude.ai servers.
1255
+ * This may be slow due to network calls - use getClaudeCodeMcpConfigs() for fast startup.
1256
+ * @returns All server configurations with appropriate scopes
1257
+ */
1258
+ export async function getAllMcpConfigs(): Promise<{
1259
+ servers: Record<string, ScopedMcpServerConfig>
1260
+ errors: PluginError[]
1261
+ }> {
1262
+ // In enterprise mode, don't load claude.ai servers (enterprise has exclusive control)
1263
+ if (doesEnterpriseMcpConfigExist()) {
1264
+ return getClaudeCodeMcpConfigs()
1265
+ }
1266
+
1267
+ // Kick off the claude.ai fetch before getClaudeCodeMcpConfigs so it overlaps
1268
+ // with loadAllPluginsCacheOnly() inside. Memoized — the awaited call below is a cache hit.
1269
+ const claudeaiPromise = fetchClaudeAIMcpConfigsIfEligible()
1270
+ const { servers: claudeCodeServers, errors } = await getClaudeCodeMcpConfigs(
1271
+ {},
1272
+ claudeaiPromise,
1273
+ )
1274
+ const { allowed: claudeaiMcpServers } = filterMcpServersByPolicy(
1275
+ await claudeaiPromise,
1276
+ )
1277
+
1278
+ // Suppress claude.ai connectors that duplicate an enabled manual server.
1279
+ // Keys never collide (`slack` vs `claude.ai Slack`) so the merge below
1280
+ // won't catch this — need content-based dedup by URL signature.
1281
+ const { servers: dedupedClaudeAi } = dedupClaudeAiMcpServers(
1282
+ claudeaiMcpServers,
1283
+ claudeCodeServers,
1284
+ )
1285
+
1286
+ // Merge with claude.ai having lowest precedence
1287
+ const servers = Object.assign({}, dedupedClaudeAi, claudeCodeServers)
1288
+
1289
+ return { servers, errors }
1290
+ }
1291
+
1292
+ /**
1293
+ * Parse and validate an MCP configuration object
1294
+ * @param params Parsing parameters
1295
+ * @returns Validated configuration with any errors
1296
+ */
1297
+ export function parseMcpConfig(params: {
1298
+ configObject: unknown
1299
+ expandVars: boolean
1300
+ scope: ConfigScope
1301
+ filePath?: string
1302
+ }): {
1303
+ config: McpJsonConfig | null
1304
+ errors: ValidationError[]
1305
+ } {
1306
+ const { configObject, expandVars, scope, filePath } = params
1307
+ const schemaResult = McpJsonConfigSchema().safeParse(configObject)
1308
+ if (!schemaResult.success) {
1309
+ return {
1310
+ config: null,
1311
+ errors: schemaResult.error.issues.map(issue => ({
1312
+ ...(filePath && { file: filePath }),
1313
+ path: issue.path.join('.'),
1314
+ message: 'Does not adhere to MCP server configuration schema',
1315
+ mcpErrorMetadata: {
1316
+ scope,
1317
+ severity: 'fatal',
1318
+ },
1319
+ })),
1320
+ }
1321
+ }
1322
+
1323
+ // Validate each server and expand variables if requested
1324
+ const errors: ValidationError[] = []
1325
+ const validatedServers: Record<string, McpServerConfig> = {}
1326
+
1327
+ for (const [name, config] of Object.entries(schemaResult.data.mcpServers)) {
1328
+ let configToCheck = config
1329
+
1330
+ if (expandVars) {
1331
+ const { expanded, missingVars } = expandEnvVars(config)
1332
+
1333
+ if (missingVars.length > 0) {
1334
+ errors.push({
1335
+ ...(filePath && { file: filePath }),
1336
+ path: `mcpServers.${name}`,
1337
+ message: `Missing environment variables: ${missingVars.join(', ')}`,
1338
+ suggestion: `Set the following environment variables: ${missingVars.join(', ')}`,
1339
+ mcpErrorMetadata: {
1340
+ scope,
1341
+ serverName: name,
1342
+ severity: 'warning',
1343
+ },
1344
+ })
1345
+ }
1346
+
1347
+ configToCheck = expanded
1348
+ }
1349
+
1350
+ // Check for Windows-specific npx usage without cmd wrapper
1351
+ if (
1352
+ getPlatform() === 'windows' &&
1353
+ (!configToCheck.type || configToCheck.type === 'stdio') &&
1354
+ (configToCheck.command === 'npx' ||
1355
+ configToCheck.command.endsWith('\\npx') ||
1356
+ configToCheck.command.endsWith('/npx'))
1357
+ ) {
1358
+ errors.push({
1359
+ ...(filePath && { file: filePath }),
1360
+ path: `mcpServers.${name}`,
1361
+ message: `Windows requires 'cmd /c' wrapper to execute npx`,
1362
+ suggestion: `Change command to "cmd" with args ["/c", "npx", ...]. See: https://code.claude.com/docs/en/mcp#configure-mcp-servers`,
1363
+ mcpErrorMetadata: {
1364
+ scope,
1365
+ serverName: name,
1366
+ severity: 'warning',
1367
+ },
1368
+ })
1369
+ }
1370
+
1371
+ validatedServers[name] = configToCheck
1372
+ }
1373
+ return {
1374
+ config: { mcpServers: validatedServers },
1375
+ errors,
1376
+ }
1377
+ }
1378
+
1379
+ /**
1380
+ * Parse and validate an MCP configuration from a file path
1381
+ * @param params Parsing parameters
1382
+ * @returns Validated configuration with any errors
1383
+ */
1384
+ export function parseMcpConfigFromFilePath(params: {
1385
+ filePath: string
1386
+ expandVars: boolean
1387
+ scope: ConfigScope
1388
+ }): {
1389
+ config: McpJsonConfig | null
1390
+ errors: ValidationError[]
1391
+ } {
1392
+ const { filePath, expandVars, scope } = params
1393
+ const fs = getFsImplementation()
1394
+
1395
+ let configContent: string
1396
+ try {
1397
+ configContent = fs.readFileSync(filePath, { encoding: 'utf8' })
1398
+ } catch (error: unknown) {
1399
+ const code = getErrnoCode(error)
1400
+ if (code === 'ENOENT') {
1401
+ return {
1402
+ config: null,
1403
+ errors: [
1404
+ {
1405
+ file: filePath,
1406
+ path: '',
1407
+ message: `MCP config file not found: ${filePath}`,
1408
+ suggestion: 'Check that the file path is correct',
1409
+ mcpErrorMetadata: {
1410
+ scope,
1411
+ severity: 'fatal',
1412
+ },
1413
+ },
1414
+ ],
1415
+ }
1416
+ }
1417
+ logForDebugging(
1418
+ `MCP config read error for ${filePath} (scope=${scope}): ${error}`,
1419
+ { level: 'error' },
1420
+ )
1421
+ return {
1422
+ config: null,
1423
+ errors: [
1424
+ {
1425
+ file: filePath,
1426
+ path: '',
1427
+ message: `Failed to read file: ${error}`,
1428
+ suggestion: 'Check file permissions and ensure the file exists',
1429
+ mcpErrorMetadata: {
1430
+ scope,
1431
+ severity: 'fatal',
1432
+ },
1433
+ },
1434
+ ],
1435
+ }
1436
+ }
1437
+
1438
+ const parsedJson = safeParseJSON(configContent)
1439
+
1440
+ if (!parsedJson) {
1441
+ logForDebugging(
1442
+ `MCP config is not valid JSON: ${filePath} (scope=${scope}, length=${configContent.length}, first100=${jsonStringify(configContent.slice(0, 100))})`,
1443
+ { level: 'error' },
1444
+ )
1445
+ return {
1446
+ config: null,
1447
+ errors: [
1448
+ {
1449
+ file: filePath,
1450
+ path: '',
1451
+ message: `MCP config is not a valid JSON`,
1452
+ suggestion: 'Fix the JSON syntax errors in the file',
1453
+ mcpErrorMetadata: {
1454
+ scope,
1455
+ severity: 'fatal',
1456
+ },
1457
+ },
1458
+ ],
1459
+ }
1460
+ }
1461
+
1462
+ return parseMcpConfig({
1463
+ configObject: parsedJson,
1464
+ expandVars,
1465
+ scope,
1466
+ filePath,
1467
+ })
1468
+ }
1469
+
1470
+ export const doesEnterpriseMcpConfigExist = memoize((): boolean => {
1471
+ const { config } = parseMcpConfigFromFilePath({
1472
+ filePath: getEnterpriseMcpFilePath(),
1473
+ expandVars: true,
1474
+ scope: 'enterprise',
1475
+ })
1476
+ return config !== null
1477
+ })
1478
+
1479
+ /**
1480
+ * Check if MCP allowlist policy should only come from managed settings.
1481
+ * This is true when policySettings has allowManagedMcpServersOnly: true.
1482
+ * When enabled, allowedMcpServers is read exclusively from managed settings.
1483
+ * Users can still add their own MCP servers and deny servers via deniedMcpServers.
1484
+ */
1485
+ export function shouldAllowManagedMcpServersOnly(): boolean {
1486
+ return (
1487
+ getSettingsForSource('policySettings')?.allowManagedMcpServersOnly === true
1488
+ )
1489
+ }
1490
+
1491
+ /**
1492
+ * Check if all MCP servers in a config are allowed with enterprise MCP config.
1493
+ */
1494
+ export function areMcpConfigsAllowedWithEnterpriseMcpConfig(
1495
+ configs: Record<string, ScopedMcpServerConfig>,
1496
+ ): boolean {
1497
+ // NOTE: While all SDK MCP servers should be safe from a security perspective, we are still discussing
1498
+ // what the best way to do this is. In the meantime, we are limiting this to claude-vscode for now to
1499
+ // unbreak the VSCode extension for certain enterprise customers who have enterprise MCP config enabled.
1500
+ // https://anthropic.slack.com/archives/C093UA0KLD7/p1764975463670109
1501
+ return Object.values(configs).every(
1502
+ c => c.type === 'sdk' && c.name === 'claude-vscode',
1503
+ )
1504
+ }
1505
+
1506
+ /**
1507
+ * Built-in MCP server that defaults to disabled. Unlike user-configured servers
1508
+ * (opt-out via disabledMcpServers), this requires explicit opt-in via
1509
+ * enabledMcpServers. Shows up in /mcp as disabled until the user enables it.
1510
+ */
1511
+ /* eslint-disable @typescript-eslint/no-require-imports */
1512
+ const DEFAULT_DISABLED_BUILTIN = feature('CHICAGO_MCP')
1513
+ ? (
1514
+ require('../../utils/computerUse/common.js') as typeof import('../../utils/computerUse/common.js')
1515
+ ).COMPUTER_USE_MCP_SERVER_NAME
1516
+ : null
1517
+ /* eslint-enable @typescript-eslint/no-require-imports */
1518
+
1519
+ function isDefaultDisabledBuiltin(name: string): boolean {
1520
+ return DEFAULT_DISABLED_BUILTIN !== null && name === DEFAULT_DISABLED_BUILTIN
1521
+ }
1522
+
1523
+ /**
1524
+ * Check if an MCP server is disabled
1525
+ * @param name The name of the server
1526
+ * @returns true if the server is disabled
1527
+ */
1528
+ export function isMcpServerDisabled(name: string): boolean {
1529
+ const projectConfig = getCurrentProjectConfig()
1530
+ if (isDefaultDisabledBuiltin(name)) {
1531
+ const enabledServers = projectConfig.enabledMcpServers || []
1532
+ return !enabledServers.includes(name)
1533
+ }
1534
+ const disabledServers = projectConfig.disabledMcpServers || []
1535
+ return disabledServers.includes(name)
1536
+ }
1537
+
1538
+ function toggleMembership(
1539
+ list: string[],
1540
+ name: string,
1541
+ shouldContain: boolean,
1542
+ ): string[] {
1543
+ const contains = list.includes(name)
1544
+ if (contains === shouldContain) return list
1545
+ return shouldContain ? [...list, name] : list.filter(s => s !== name)
1546
+ }
1547
+
1548
+ /**
1549
+ * Enable or disable an MCP server
1550
+ * @param name The name of the server
1551
+ * @param enabled Whether the server should be enabled
1552
+ */
1553
+ export function setMcpServerEnabled(name: string, enabled: boolean): void {
1554
+ const isBuiltinStateChange =
1555
+ isDefaultDisabledBuiltin(name) && isMcpServerDisabled(name) === enabled
1556
+
1557
+ saveCurrentProjectConfig(current => {
1558
+ if (isDefaultDisabledBuiltin(name)) {
1559
+ const prev = current.enabledMcpServers || []
1560
+ const next = toggleMembership(prev, name, enabled)
1561
+ if (next === prev) return current
1562
+ return { ...current, enabledMcpServers: next }
1563
+ }
1564
+
1565
+ const prev = current.disabledMcpServers || []
1566
+ const next = toggleMembership(prev, name, !enabled)
1567
+ if (next === prev) return current
1568
+ return { ...current, disabledMcpServers: next }
1569
+ })
1570
+
1571
+ if (isBuiltinStateChange) {
1572
+ logEvent('tengu_builtin_mcp_toggle', {
1573
+ serverName:
1574
+ name as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1575
+ enabled,
1576
+ })
1577
+ }
1578
+ }