thaddeus 1.0.26 → 1.0.28

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 (2082) hide show
  1. package/package.json +14 -5
  2. package/src/QueryEngine.js +926 -0
  3. package/src/Task.js +49 -0
  4. package/src/Tool.js +61 -0
  5. package/src/assistant/gate.js +5 -0
  6. package/src/assistant/index.js +106 -0
  7. package/src/assistant/sessionHistory.js +145 -0
  8. package/src/bootstrap/state.js +1163 -0
  9. package/src/bridge/bridgeApi.js +304 -0
  10. package/src/bridge/bridgeConfig.js +39 -0
  11. package/src/bridge/bridgeDebug.js +73 -0
  12. package/src/bridge/bridgeEnabled.js +185 -0
  13. package/src/bridge/bridgeMain.js +2289 -0
  14. package/src/bridge/bridgeMessaging.js +353 -0
  15. package/src/bridge/bridgePermissionCallbacks.js +10 -0
  16. package/src/bridge/bridgePointer.js +175 -0
  17. package/src/bridge/bridgeStatusUtil.js +105 -0
  18. package/src/bridge/bridgeUI.js +411 -0
  19. package/src/bridge/capacityWake.js +35 -0
  20. package/src/bridge/codeSessionApi.js +111 -0
  21. package/src/bridge/createSession.js +273 -0
  22. package/src/bridge/debugUtils.js +115 -0
  23. package/src/bridge/envLessBridgeConfig.js +120 -0
  24. package/src/bridge/flushGate.js +65 -0
  25. package/src/bridge/inboundAttachments.js +152 -0
  26. package/src/bridge/inboundMessages.js +63 -0
  27. package/src/bridge/initReplBridge.js +431 -0
  28. package/src/bridge/jwtUtils.js +185 -0
  29. package/src/bridge/peerSessions.js +5 -0
  30. package/src/bridge/pollConfig.js +85 -0
  31. package/src/bridge/pollConfigDefaults.js +62 -0
  32. package/src/bridge/remoteBridgeCore.js +712 -0
  33. package/src/bridge/replBridge.js +1719 -0
  34. package/src/bridge/replBridgeHandle.js +30 -0
  35. package/src/bridge/replBridgeTransport.js +236 -0
  36. package/src/bridge/sessionIdCompat.js +56 -0
  37. package/src/bridge/sessionRunner.js +421 -0
  38. package/src/bridge/trustedDevice.js +170 -0
  39. package/src/bridge/types.js +9 -0
  40. package/src/bridge/webhookSanitizer.js +6 -0
  41. package/src/bridge/workSecret.js +99 -0
  42. package/src/buddy/CompanionSprite.js +348 -0
  43. package/src/buddy/companion.js +107 -0
  44. package/src/buddy/prompt.js +33 -0
  45. package/src/buddy/sprites.js +488 -0
  46. package/src/buddy/types.js +90 -0
  47. package/src/buddy/useBuddyNotification.js +85 -0
  48. package/src/cli/bg.js +17 -0
  49. package/src/cli/exit.js +30 -0
  50. package/src/cli/handlers/agents.js +55 -0
  51. package/src/cli/handlers/auth.js +249 -0
  52. package/src/cli/handlers/autoMode.js +128 -0
  53. package/src/cli/handlers/mcp.js +335 -0
  54. package/src/cli/handlers/plugins.js +634 -0
  55. package/src/cli/handlers/templateJobs.js +19 -0
  56. package/src/cli/handlers/util.js +76 -0
  57. package/src/cli/ndjsonSafeStringify.js +27 -0
  58. package/src/cli/print.js +4294 -0
  59. package/src/cli/remoteIO.js +208 -0
  60. package/src/cli/structuredIO.js +644 -0
  61. package/src/cli/transports/HybridTransport.js +233 -0
  62. package/src/cli/transports/SSETransport.js +538 -0
  63. package/src/cli/transports/SerialBatchEventUploader.js +224 -0
  64. package/src/cli/transports/WebSocketTransport.js +613 -0
  65. package/src/cli/transports/WorkerStateUploader.js +88 -0
  66. package/src/cli/transports/ccrClient.js +711 -0
  67. package/src/cli/transports/transportUtils.js +39 -0
  68. package/src/cli/update.js +314 -0
  69. package/src/commandCenter/launch.js +39 -0
  70. package/src/commandCenter/phoneApi.js +168 -0
  71. package/src/commandCenter/phoneStore.js +159 -0
  72. package/src/commandCenter/reactorBus.js +130 -0
  73. package/src/commandCenter/server.js +288 -0
  74. package/src/commandCenter/server.ts +42 -7
  75. package/src/commandCenter/tunnel.js +199 -0
  76. package/src/commands/add-dir/add-dir.js +121 -0
  77. package/src/commands/add-dir/index.js +8 -0
  78. package/src/commands/add-dir/validation.js +76 -0
  79. package/src/commands/advisor.js +88 -0
  80. package/src/commands/agents/agents.js +10 -0
  81. package/src/commands/agents/index.js +7 -0
  82. package/src/commands/agents-platform/index.js +2 -0
  83. package/src/commands/assistant/index.js +86 -0
  84. package/src/commands/backup/index.js +31 -0
  85. package/src/commands/branch/branch.js +205 -0
  86. package/src/commands/branch/index.js +11 -0
  87. package/src/commands/bridge/bridge.js +513 -0
  88. package/src/commands/bridge/index.js +22 -0
  89. package/src/commands/bridge-kick.js +179 -0
  90. package/src/commands/brief.js +89 -0
  91. package/src/commands/btw/btw.js +235 -0
  92. package/src/commands/btw/index.js +9 -0
  93. package/src/commands/buddy/buddy.js +100 -0
  94. package/src/commands/buddy/index.js +11 -0
  95. package/src/commands/chrome/chrome.js +291 -0
  96. package/src/commands/chrome/index.js +10 -0
  97. package/src/commands/clear/caches.js +116 -0
  98. package/src/commands/clear/clear.js +5 -0
  99. package/src/commands/clear/conversation.js +189 -0
  100. package/src/commands/clear/index.js +9 -0
  101. package/src/commands/color/color.js +58 -0
  102. package/src/commands/color/index.js +9 -0
  103. package/src/commands/commit-push-pr.js +137 -0
  104. package/src/commands/commit.js +80 -0
  105. package/src/commands/compact/compact.js +194 -0
  106. package/src/commands/compact/index.js +11 -0
  107. package/src/commands/config/config.js +6 -0
  108. package/src/commands/config/index.js +8 -0
  109. package/src/commands/context/context-noninteractive.js +219 -0
  110. package/src/commands/context/context.js +45 -0
  111. package/src/commands/context/index.js +21 -0
  112. package/src/commands/coordinator.js +34 -0
  113. package/src/commands/copy/copy.js +366 -0
  114. package/src/commands/copy/index.js +7 -0
  115. package/src/commands/cost/cost.js +21 -0
  116. package/src/commands/cost/index.js +16 -0
  117. package/src/commands/createMovedToPluginCommand.js +33 -0
  118. package/src/commands/desktop/desktop.js +6 -0
  119. package/src/commands/desktop/index.js +22 -0
  120. package/src/commands/diff/diff.js +6 -0
  121. package/src/commands/diff/index.js +6 -0
  122. package/src/commands/doctor/doctor.js +6 -0
  123. package/src/commands/doctor/index.js +9 -0
  124. package/src/commands/effort/effort.js +166 -0
  125. package/src/commands/effort/index.js +11 -0
  126. package/src/commands/exit/exit.js +32 -0
  127. package/src/commands/exit/index.js +9 -0
  128. package/src/commands/export/export.js +87 -0
  129. package/src/commands/export/index.js +8 -0
  130. package/src/commands/extra-usage/extra-usage-core.js +99 -0
  131. package/src/commands/extra-usage/extra-usage-noninteractive.js +13 -0
  132. package/src/commands/extra-usage/extra-usage.js +15 -0
  133. package/src/commands/extra-usage/index.js +29 -0
  134. package/src/commands/fast/fast.js +276 -0
  135. package/src/commands/fast/index.js +19 -0
  136. package/src/commands/feedback/feedback.js +11 -0
  137. package/src/commands/feedback/index.js +20 -0
  138. package/src/commands/files/files.js +11 -0
  139. package/src/commands/files/index.js +9 -0
  140. package/src/commands/force-snip.js +19 -0
  141. package/src/commands/fork/index.js +67 -0
  142. package/src/commands/heapdump/heapdump.js +14 -0
  143. package/src/commands/heapdump/index.js +9 -0
  144. package/src/commands/help/help.js +6 -0
  145. package/src/commands/help/index.js +7 -0
  146. package/src/commands/hooks/hooks.js +12 -0
  147. package/src/commands/hooks/index.js +8 -0
  148. package/src/commands/ide/ide.js +615 -0
  149. package/src/commands/ide/index.js +8 -0
  150. package/src/commands/init-verifiers.js +258 -0
  151. package/src/commands/init.js +248 -0
  152. package/src/commands/insights.js +2554 -0
  153. package/src/commands/install-github-app/ApiKeyStep.js +230 -0
  154. package/src/commands/install-github-app/CheckExistingSecretStep.js +194 -0
  155. package/src/commands/install-github-app/CheckGitHubStep.js +16 -0
  156. package/src/commands/install-github-app/ChooseRepoStep.js +211 -0
  157. package/src/commands/install-github-app/CreatingStep.js +53 -0
  158. package/src/commands/install-github-app/ErrorStep.js +84 -0
  159. package/src/commands/install-github-app/ExistingWorkflowStep.js +105 -0
  160. package/src/commands/install-github-app/InstallAppStep.js +97 -0
  161. package/src/commands/install-github-app/OAuthFlowStep.js +190 -0
  162. package/src/commands/install-github-app/SuccessStep.js +94 -0
  163. package/src/commands/install-github-app/WarningsStep.js +71 -0
  164. package/src/commands/install-github-app/index.js +10 -0
  165. package/src/commands/install-github-app/install-github-app.js +593 -0
  166. package/src/commands/install-github-app/setupGitHubActions.js +227 -0
  167. package/src/commands/install-slack-app/index.js +9 -0
  168. package/src/commands/install-slack-app/install-slack-app.js +25 -0
  169. package/src/commands/install.js +198 -0
  170. package/src/commands/keybindings/index.js +10 -0
  171. package/src/commands/keybindings/keybindings.js +47 -0
  172. package/src/commands/login/index.js +21 -0
  173. package/src/commands/login/login.js +135 -0
  174. package/src/commands/logout/index.js +11 -0
  175. package/src/commands/logout/logout.js +75 -0
  176. package/src/commands/mcp/addCommand.js +183 -0
  177. package/src/commands/mcp/index.js +9 -0
  178. package/src/commands/mcp/mcp.js +78 -0
  179. package/src/commands/mcp/xaaIdpCommand.js +193 -0
  180. package/src/commands/memories/index.js +9 -0
  181. package/src/commands/memories/index.ts +12 -0
  182. package/src/commands/memories/memories.tsx +949 -0
  183. package/src/commands/memory/index.js +7 -0
  184. package/src/commands/memory/memory.js +71 -0
  185. package/src/commands/mobile/index.js +9 -0
  186. package/src/commands/mobile/mobile.js +279 -0
  187. package/src/commands/model/index.js +14 -0
  188. package/src/commands/model/model.js +284 -0
  189. package/src/commands/output-style/index.js +8 -0
  190. package/src/commands/output-style/output-style.js +6 -0
  191. package/src/commands/passes/index.js +17 -0
  192. package/src/commands/passes/passes.js +23 -0
  193. package/src/commands/peers/index.js +68 -0
  194. package/src/commands/permissions/index.js +8 -0
  195. package/src/commands/permissions/permissions.js +9 -0
  196. package/src/commands/plan/index.js +8 -0
  197. package/src/commands/plan/plan.js +116 -0
  198. package/src/commands/plugin/AddMarketplace.js +96 -0
  199. package/src/commands/plugin/BrowseMarketplace.js +582 -0
  200. package/src/commands/plugin/DiscoverPlugins.js +613 -0
  201. package/src/commands/plugin/ManageMarketplaces.js +583 -0
  202. package/src/commands/plugin/ManagePlugins.js +1783 -0
  203. package/src/commands/plugin/PluginErrors.js +124 -0
  204. package/src/commands/plugin/PluginOptionsDialog.js +367 -0
  205. package/src/commands/plugin/PluginOptionsFlow.js +97 -0
  206. package/src/commands/plugin/PluginSettings.js +1041 -0
  207. package/src/commands/plugin/PluginTrustWarning.js +35 -0
  208. package/src/commands/plugin/UnifiedInstalledCell.js +616 -0
  209. package/src/commands/plugin/ValidatePlugin.js +96 -0
  210. package/src/commands/plugin/index.js +10 -0
  211. package/src/commands/plugin/parseArgs.js +71 -0
  212. package/src/commands/plugin/plugin.js +6 -0
  213. package/src/commands/plugin/pluginDetailsHelpers.js +95 -0
  214. package/src/commands/plugin/usePagination.js +89 -0
  215. package/src/commands/pr_comments/index.js +49 -0
  216. package/src/commands/privacy-settings/index.js +11 -0
  217. package/src/commands/privacy-settings/privacy-settings.js +55 -0
  218. package/src/commands/proactive.js +29 -0
  219. package/src/commands/rate-limit-options/index.js +15 -0
  220. package/src/commands/rate-limit-options/rate-limit-options.js +213 -0
  221. package/src/commands/release-notes/index.js +8 -0
  222. package/src/commands/release-notes/release-notes.js +38 -0
  223. package/src/commands/reload-plugins/index.js +11 -0
  224. package/src/commands/reload-plugins/reload-plugins.js +52 -0
  225. package/src/commands/remote-env/index.js +12 -0
  226. package/src/commands/remote-env/remote-env.js +6 -0
  227. package/src/commands/remote-setup/api.js +155 -0
  228. package/src/commands/remote-setup/index.js +15 -0
  229. package/src/commands/remote-setup/remote-setup.js +150 -0
  230. package/src/commands/remoteControlServer/index.js +58 -0
  231. package/src/commands/rename/generateSessionName.js +58 -0
  232. package/src/commands/rename/index.js +9 -0
  233. package/src/commands/rename/rename.js +52 -0
  234. package/src/commands/resume/index.js +9 -0
  235. package/src/commands/resume/resume.js +239 -0
  236. package/src/commands/review/UltrareviewOverageDialog.js +97 -0
  237. package/src/commands/review/reviewRemote.js +259 -0
  238. package/src/commands/review/ultrareviewCommand.js +58 -0
  239. package/src/commands/review/ultrareviewEnabled.js +10 -0
  240. package/src/commands/review.js +53 -0
  241. package/src/commands/rewind/index.js +10 -0
  242. package/src/commands/rewind/rewind.js +7 -0
  243. package/src/commands/sandbox-toggle/index.js +41 -0
  244. package/src/commands/sandbox-toggle/sandbox-toggle.js +73 -0
  245. package/src/commands/security-review.js +231 -0
  246. package/src/commands/session/index.js +13 -0
  247. package/src/commands/session/session.js +143 -0
  248. package/src/commands/skills/index.js +7 -0
  249. package/src/commands/skills/skills.js +6 -0
  250. package/src/commands/speak.js +21 -0
  251. package/src/commands/start-business.js +1575 -0
  252. package/src/commands/start-business.ts +1581 -0
  253. package/src/commands/stats/index.js +7 -0
  254. package/src/commands/stats/stats.js +6 -0
  255. package/src/commands/status/index.js +8 -0
  256. package/src/commands/status/status.js +6 -0
  257. package/src/commands/statusline.js +22 -0
  258. package/src/commands/stickers/index.js +8 -0
  259. package/src/commands/stickers/stickers.js +14 -0
  260. package/src/commands/subscribe-pr.js +131 -0
  261. package/src/commands/tag/index.js +9 -0
  262. package/src/commands/tag/tag.js +215 -0
  263. package/src/commands/tasks/index.js +8 -0
  264. package/src/commands/tasks/tasks.js +6 -0
  265. package/src/commands/terminalSetup/index.js +18 -0
  266. package/src/commands/terminalSetup/terminalSetup.js +491 -0
  267. package/src/commands/thaddeus-usage/index.js +17 -0
  268. package/src/commands/theme/index.js +7 -0
  269. package/src/commands/theme/theme.js +51 -0
  270. package/src/commands/thinkback/index.js +9 -0
  271. package/src/commands/thinkback/thinkback.js +528 -0
  272. package/src/commands/thinkback-play/index.js +13 -0
  273. package/src/commands/thinkback-play/thinkback-play.js +34 -0
  274. package/src/commands/torch.js +122 -0
  275. package/src/commands/ultraplan.js +416 -0
  276. package/src/commands/upgrade/index.js +12 -0
  277. package/src/commands/upgrade/upgrade.js +38 -0
  278. package/src/commands/usage/index.js +7 -0
  279. package/src/commands/usage/usage.js +6 -0
  280. package/src/commands/version.js +17 -0
  281. package/src/commands/vim/index.js +8 -0
  282. package/src/commands/vim/vim.js +25 -0
  283. package/src/commands/voice/index.js +13 -0
  284. package/src/commands/voice/voice.js +44 -0
  285. package/src/commands/workflows/index.js +123 -0
  286. package/src/commands.js +614 -0
  287. package/src/commands.ts +4 -0
  288. package/src/components/AgentProgressLine.js +112 -0
  289. package/src/components/AntModelSwitchCallout.js +8 -0
  290. package/src/components/App.js +46 -0
  291. package/src/components/ApproveApiKey.js +125 -0
  292. package/src/components/AutoModeOptInDialog.js +140 -0
  293. package/src/components/AutoUpdater.js +156 -0
  294. package/src/components/AutoUpdaterWrapper.js +78 -0
  295. package/src/components/AwsAuthStatusBox.js +88 -0
  296. package/src/components/BaseTextInput.js +105 -0
  297. package/src/components/BashModeProgress.js +49 -0
  298. package/src/components/BridgeDialog.js +415 -0
  299. package/src/components/BypassPermissionsModeDialog.js +87 -0
  300. package/src/components/ChannelDowngradeDialog.js +101 -0
  301. package/src/components/ClaudeInChromeOnboarding.js +126 -0
  302. package/src/components/ClaudeMdExternalIncludesDialog.js +137 -0
  303. package/src/components/ClickableImageRef.js +65 -0
  304. package/src/components/CompactSummary.js +120 -0
  305. package/src/components/ConfigurableShortcutHint.js +35 -0
  306. package/src/components/ConsoleOAuthFlow.js +554 -0
  307. package/src/components/ContextSuggestions.js +44 -0
  308. package/src/components/ContextVisualization.js +482 -0
  309. package/src/components/CoordinatorAgentStatus.js +261 -0
  310. package/src/components/CostThresholdDialog.js +49 -0
  311. package/src/components/CtrlOToExpand.js +50 -0
  312. package/src/components/CustomSelect/SelectMulti.js +150 -0
  313. package/src/components/CustomSelect/index.js +2 -0
  314. package/src/components/CustomSelect/option-map.js +32 -0
  315. package/src/components/CustomSelect/select-input-option.js +426 -0
  316. package/src/components/CustomSelect/select-option.js +24 -0
  317. package/src/components/CustomSelect/select.js +518 -0
  318. package/src/components/CustomSelect/use-multi-select-state.js +214 -0
  319. package/src/components/CustomSelect/use-select-input.js +170 -0
  320. package/src/components/CustomSelect/use-select-navigation.js +366 -0
  321. package/src/components/CustomSelect/use-select-state.js +22 -0
  322. package/src/components/DesktopHandoff.js +195 -0
  323. package/src/components/DesktopUpsell/DesktopUpsellStartup.js +174 -0
  324. package/src/components/DevBar.js +51 -0
  325. package/src/components/DevChannelsDialog.js +104 -0
  326. package/src/components/DiagnosticsDisplay.js +91 -0
  327. package/src/components/EffortCallout.js +264 -0
  328. package/src/components/EffortIndicator.js +28 -0
  329. package/src/components/ExitFlow.js +41 -0
  330. package/src/components/ExportDialog.js +101 -0
  331. package/src/components/FallbackToolUseErrorMessage.js +116 -0
  332. package/src/components/FallbackToolUseRejectedMessage.js +17 -0
  333. package/src/components/FastIcon.js +43 -0
  334. package/src/components/Feedback.js +369 -0
  335. package/src/components/FeedbackSurvey/FeedbackSurvey.js +151 -0
  336. package/src/components/FeedbackSurvey/FeedbackSurveyView.js +104 -0
  337. package/src/components/FeedbackSurvey/TranscriptSharePrompt.js +84 -0
  338. package/src/components/FeedbackSurvey/submitTranscriptShare.js +10 -0
  339. package/src/components/FeedbackSurvey/useDebouncedDigitInput.js +51 -0
  340. package/src/components/FeedbackSurvey/useFeedbackSurvey.js +258 -0
  341. package/src/components/FeedbackSurvey/useFrustrationDetection.js +8 -0
  342. package/src/components/FeedbackSurvey/useMemorySurvey.js +191 -0
  343. package/src/components/FeedbackSurvey/usePostCompactSurvey.js +202 -0
  344. package/src/components/FeedbackSurvey/useSurveyState.js +80 -0
  345. package/src/components/FileEditToolDiff.js +167 -0
  346. package/src/components/FileEditToolUpdatedMessage.js +112 -0
  347. package/src/components/FileEditToolUseRejectedMessage.js +158 -0
  348. package/src/components/FilePathLink.js +35 -0
  349. package/src/components/FullscreenLayout.js +578 -0
  350. package/src/components/GlobalSearchDialog.js +340 -0
  351. package/src/components/HelpV2/Commands.js +66 -0
  352. package/src/components/HelpV2/General.js +25 -0
  353. package/src/components/HelpV2/HelpV2.js +186 -0
  354. package/src/components/HighlightedCode/Fallback.js +193 -0
  355. package/src/components/HighlightedCode.js +185 -0
  356. package/src/components/HistorySearchDialog.js +93 -0
  357. package/src/components/IdeAutoConnectDialog.js +154 -0
  358. package/src/components/IdeOnboardingDialog.js +175 -0
  359. package/src/components/IdeStatusIndicator.js +50 -0
  360. package/src/components/IdleReturnDialog.js +117 -0
  361. package/src/components/InterruptedByUser.js +16 -0
  362. package/src/components/InvalidConfigDialog.js +135 -0
  363. package/src/components/InvalidSettingsDialog.js +85 -0
  364. package/src/components/KeybindingWarnings.js +55 -0
  365. package/src/components/LanguagePicker.js +84 -0
  366. package/src/components/LogSelector.js +1579 -0
  367. package/src/components/LogoV2/AnimatedAsterisk.js +43 -0
  368. package/src/components/LogoV2/AnimatedClawd.js +64 -0
  369. package/src/components/LogoV2/ChannelsNotice.js +262 -0
  370. package/src/components/LogoV2/Clawd.js +33 -0
  371. package/src/components/LogoV2/CondensedLogo.js +160 -0
  372. package/src/components/LogoV2/EmergencyTip.js +48 -0
  373. package/src/components/LogoV2/Feed.js +85 -0
  374. package/src/components/LogoV2/FeedColumn.js +55 -0
  375. package/src/components/LogoV2/GuestPassesUpsell.js +71 -0
  376. package/src/components/LogoV2/LogoV2.js +565 -0
  377. package/src/components/LogoV2/Opus1mMergeNotice.js +57 -0
  378. package/src/components/LogoV2/OverageCreditUpsell.js +161 -0
  379. package/src/components/LogoV2/VoiceModeNotice.js +71 -0
  380. package/src/components/LogoV2/WelcomeV2.js +14 -0
  381. package/src/components/LogoV2/feedConfigs.js +79 -0
  382. package/src/components/LspRecommendation/LspRecommendationMenu.js +46 -0
  383. package/src/components/MCPServerApprovalDialog.js +114 -0
  384. package/src/components/MCPServerDesktopImportDialog.js +206 -0
  385. package/src/components/MCPServerDialogCopy.js +16 -0
  386. package/src/components/MCPServerMultiselectDialog.js +134 -0
  387. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.js +150 -0
  388. package/src/components/ManagedSettingsSecurityDialog/utils.js +105 -0
  389. package/src/components/Markdown.js +233 -0
  390. package/src/components/MarkdownTable.js +280 -0
  391. package/src/components/MemoryUsageIndicator.js +28 -0
  392. package/src/components/Message.js +564 -0
  393. package/src/components/MessageModel.js +37 -0
  394. package/src/components/MessageResponse.js +73 -0
  395. package/src/components/MessageRow.js +346 -0
  396. package/src/components/MessageSelector.js +744 -0
  397. package/src/components/MessageTimestamp.js +58 -0
  398. package/src/components/Messages.js +645 -0
  399. package/src/components/ModelPicker.js +452 -0
  400. package/src/components/NativeAutoUpdater.js +152 -0
  401. package/src/components/NotebookEditToolUseRejectedMessage.js +84 -0
  402. package/src/components/OffscreenFreeze.js +35 -0
  403. package/src/components/Onboarding.js +174 -0
  404. package/src/components/OutputStylePicker.js +103 -0
  405. package/src/components/PackageManagerAutoUpdater.js +99 -0
  406. package/src/components/Passes/Passes.js +114 -0
  407. package/src/components/PrBadge.js +91 -0
  408. package/src/components/PressEnterToContinue.js +16 -0
  409. package/src/components/PromptInput/HistorySearchInput.js +45 -0
  410. package/src/components/PromptInput/IssueFlagBanner.js +8 -0
  411. package/src/components/PromptInput/Notifications.js +220 -0
  412. package/src/components/PromptInput/PromptInput.js +2014 -0
  413. package/src/components/PromptInput/PromptInputFooter.js +85 -0
  414. package/src/components/PromptInput/PromptInputFooterLeftSide.js +408 -0
  415. package/src/components/PromptInput/PromptInputFooterSuggestions.js +281 -0
  416. package/src/components/PromptInput/PromptInputHelpMenu.js +380 -0
  417. package/src/components/PromptInput/PromptInputModeIndicator.js +73 -0
  418. package/src/components/PromptInput/PromptInputQueuedCommands.js +105 -0
  419. package/src/components/PromptInput/PromptInputStashNotice.js +21 -0
  420. package/src/components/PromptInput/SandboxPromptFooterHint.js +66 -0
  421. package/src/components/PromptInput/ShimmeredInput.js +133 -0
  422. package/src/components/PromptInput/VoiceIndicator.js +137 -0
  423. package/src/components/PromptInput/inputModes.js +24 -0
  424. package/src/components/PromptInput/inputPaste.js +62 -0
  425. package/src/components/PromptInput/useMaybeTruncateInput.js +33 -0
  426. package/src/components/PromptInput/usePromptInputPlaceholder.js +53 -0
  427. package/src/components/PromptInput/useShowFastIconHint.js +23 -0
  428. package/src/components/PromptInput/useSwarmBanner.js +112 -0
  429. package/src/components/PromptInput/utils.js +50 -0
  430. package/src/components/QuickOpenDialog.js +244 -0
  431. package/src/components/RemoteCallout.js +53 -0
  432. package/src/components/RemoteEnvironmentDialog.js +346 -0
  433. package/src/components/ResumeTask.js +173 -0
  434. package/src/components/SandboxViolationExpandedView.js +106 -0
  435. package/src/components/ScrollKeybindingHandler.js +982 -0
  436. package/src/components/SearchBox.js +56 -0
  437. package/src/components/SentryErrorBoundary.js +16 -0
  438. package/src/components/SessionBackgroundHint.js +105 -0
  439. package/src/components/SessionPreview.js +200 -0
  440. package/src/components/Settings/Config.js +1626 -0
  441. package/src/components/Settings/Settings.js +131 -0
  442. package/src/components/Settings/Status.js +230 -0
  443. package/src/components/Settings/Usage.js +341 -0
  444. package/src/components/ShowInIDEPrompt.js +152 -0
  445. package/src/components/SkillImprovementSurvey.js +130 -0
  446. package/src/components/Spinner/FlashingChar.js +52 -0
  447. package/src/components/Spinner/GlimmerMessage.js +329 -0
  448. package/src/components/Spinner/ShimmerChar.js +23 -0
  449. package/src/components/Spinner/SpinnerAnimationRow.js +170 -0
  450. package/src/components/Spinner/SpinnerGlyph.js +70 -0
  451. package/src/components/Spinner/TeammateSpinnerLine.js +171 -0
  452. package/src/components/Spinner/TeammateSpinnerTree.js +269 -0
  453. package/src/components/Spinner/index.js +9 -0
  454. package/src/components/Spinner/teammateSelectHint.js +1 -0
  455. package/src/components/Spinner/useShimmerAnimation.js +22 -0
  456. package/src/components/Spinner/useStalledAnimation.js +63 -0
  457. package/src/components/Spinner/utils.js +78 -0
  458. package/src/components/Spinner.js +474 -0
  459. package/src/components/Stats.js +1000 -0
  460. package/src/components/StatusLine.js +286 -0
  461. package/src/components/StatusNotices.js +50 -0
  462. package/src/components/StructuredDiff/Fallback.js +336 -0
  463. package/src/components/StructuredDiff/colorDiff.js +37 -0
  464. package/src/components/StructuredDiff.js +153 -0
  465. package/src/components/StructuredDiffList.js +9 -0
  466. package/src/components/TagTabs.js +101 -0
  467. package/src/components/TaskListV2.js +333 -0
  468. package/src/components/TeammateViewHeader.js +88 -0
  469. package/src/components/TeleportError.js +191 -0
  470. package/src/components/TeleportProgress.js +131 -0
  471. package/src/components/TeleportRepoMismatchDialog.js +98 -0
  472. package/src/components/TeleportResumeWrapper.js +158 -0
  473. package/src/components/TeleportStash.js +82 -0
  474. package/src/components/TextInput.js +108 -0
  475. package/src/components/ThaddeusHint/PluginHintMenu.js +37 -0
  476. package/src/components/ThemePicker.js +331 -0
  477. package/src/components/ThinkingToggle.js +154 -0
  478. package/src/components/TokenWarning.js +171 -0
  479. package/src/components/ToolUseLoader.js +35 -0
  480. package/src/components/TrustDialog/TrustDialog.js +301 -0
  481. package/src/components/TrustDialog/utils.js +199 -0
  482. package/src/components/UndercoverAutoCallout.js +5 -0
  483. package/src/components/ValidationErrorsList.js +147 -0
  484. package/src/components/VimTextInput.js +136 -0
  485. package/src/components/VirtualMessageList.js +893 -0
  486. package/src/components/WorkflowMultiselectDialog.js +118 -0
  487. package/src/components/WorktreeExitDialog.js +220 -0
  488. package/src/components/agents/AgentDetail.js +227 -0
  489. package/src/components/agents/AgentEditor.js +147 -0
  490. package/src/components/agents/AgentNavigationFooter.js +22 -0
  491. package/src/components/agents/AgentsList.js +436 -0
  492. package/src/components/agents/AgentsMenu.js +849 -0
  493. package/src/components/agents/ColorPicker.js +110 -0
  494. package/src/components/agents/ModelSelector.js +63 -0
  495. package/src/components/agents/SnapshotUpdateDialog.js +14 -0
  496. package/src/components/agents/ToolSelector.js +557 -0
  497. package/src/components/agents/agentFileUtils.js +179 -0
  498. package/src/components/agents/generateAgent.js +161 -0
  499. package/src/components/agents/new-agent-creation/CreateAgentWizard.js +89 -0
  500. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.js +81 -0
  501. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.js +387 -0
  502. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.js +63 -0
  503. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.js +126 -0
  504. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.js +118 -0
  505. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.js +80 -0
  506. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.js +108 -0
  507. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.js +80 -0
  508. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.js +49 -0
  509. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.js +131 -0
  510. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.js +52 -0
  511. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.js +100 -0
  512. package/src/components/agents/types.js +4 -0
  513. package/src/components/agents/utils.js +14 -0
  514. package/src/components/agents/validateAgent.js +79 -0
  515. package/src/components/design-system/Byline.js +72 -0
  516. package/src/components/design-system/Dialog.js +117 -0
  517. package/src/components/design-system/Divider.js +110 -0
  518. package/src/components/design-system/FuzzyPicker.js +191 -0
  519. package/src/components/design-system/KeyboardShortcutHint.js +68 -0
  520. package/src/components/design-system/ListItem.js +184 -0
  521. package/src/components/design-system/LoadingState.js +69 -0
  522. package/src/components/design-system/Pane.js +69 -0
  523. package/src/components/design-system/ProgressBar.js +63 -0
  524. package/src/components/design-system/Ratchet.js +71 -0
  525. package/src/components/design-system/StatusIcon.js +70 -0
  526. package/src/components/design-system/Tabs.js +269 -0
  527. package/src/components/design-system/ThemeProvider.js +137 -0
  528. package/src/components/design-system/ThemedBox.js +126 -0
  529. package/src/components/design-system/ThemedText.js +60 -0
  530. package/src/components/design-system/color.js +22 -0
  531. package/src/components/diff/DiffDetailView.js +285 -0
  532. package/src/components/diff/DiffDialog.js +387 -0
  533. package/src/components/diff/DiffFileList.js +292 -0
  534. package/src/components/grove/Grove.js +483 -0
  535. package/src/components/hooks/HooksConfigMenu.js +583 -0
  536. package/src/components/hooks/PromptDialog.js +82 -0
  537. package/src/components/hooks/SelectEventMode.js +118 -0
  538. package/src/components/hooks/SelectHookMode.js +101 -0
  539. package/src/components/hooks/SelectMatcherMode.js +131 -0
  540. package/src/components/hooks/ViewHookMode.js +204 -0
  541. package/src/components/mcp/CapabilitiesSection.js +56 -0
  542. package/src/components/mcp/ElicitationDialog.js +945 -0
  543. package/src/components/mcp/MCPAgentServerMenu.js +95 -0
  544. package/src/components/mcp/MCPListPanel.js +505 -0
  545. package/src/components/mcp/MCPReconnect.js +168 -0
  546. package/src/components/mcp/MCPRemoteServerMenu.js +460 -0
  547. package/src/components/mcp/MCPSettings.js +414 -0
  548. package/src/components/mcp/MCPStdioServerMenu.js +95 -0
  549. package/src/components/mcp/MCPToolDetailView.js +219 -0
  550. package/src/components/mcp/MCPToolListView.js +137 -0
  551. package/src/components/mcp/McpParsingWarnings.js +212 -0
  552. package/src/components/mcp/index.js +8 -0
  553. package/src/components/mcp/utils/reconnectHelpers.js +35 -0
  554. package/src/components/memory/MemoryFileSelector.js +454 -0
  555. package/src/components/memory/MemoryUpdateNotification.js +43 -0
  556. package/src/components/messageActions.js +418 -0
  557. package/src/components/messages/AdvisorMessage.js +152 -0
  558. package/src/components/messages/AssistantRedactedThinkingMessage.js +28 -0
  559. package/src/components/messages/AssistantTextMessage.js +287 -0
  560. package/src/components/messages/AssistantThinkingMessage.js +70 -0
  561. package/src/components/messages/AssistantToolUseMessage.js +324 -0
  562. package/src/components/messages/AttachmentMessage.js +418 -0
  563. package/src/components/messages/CollapsedReadSearchContent.js +363 -0
  564. package/src/components/messages/CompactBoundaryMessage.js +19 -0
  565. package/src/components/messages/GroupedToolUseContent.js +37 -0
  566. package/src/components/messages/HighlightedThinkingText.js +165 -0
  567. package/src/components/messages/HookProgressMessage.js +111 -0
  568. package/src/components/messages/PlanApprovalMessage.js +213 -0
  569. package/src/components/messages/RateLimitMessage.js +149 -0
  570. package/src/components/messages/ShutdownMessage.js +124 -0
  571. package/src/components/messages/SnipBoundaryMessage.js +7 -0
  572. package/src/components/messages/SystemAPIErrorMessage.js +136 -0
  573. package/src/components/messages/SystemTextMessage.js +842 -0
  574. package/src/components/messages/TaskAssignmentMessage.js +72 -0
  575. package/src/components/messages/UserAgentNotificationMessage.js +78 -0
  576. package/src/components/messages/UserBashInputMessage.js +52 -0
  577. package/src/components/messages/UserBashOutputMessage.js +55 -0
  578. package/src/components/messages/UserChannelMessage.js +130 -0
  579. package/src/components/messages/UserCommandMessage.js +107 -0
  580. package/src/components/messages/UserCrossSessionMessage.js +11 -0
  581. package/src/components/messages/UserForkBoilerplateMessage.js +11 -0
  582. package/src/components/messages/UserGitHubWebhookMessage.js +12 -0
  583. package/src/components/messages/UserImageMessage.js +54 -0
  584. package/src/components/messages/UserLocalCommandOutputMessage.js +170 -0
  585. package/src/components/messages/UserMemoryInputMessage.js +73 -0
  586. package/src/components/messages/UserPlanMessage.js +38 -0
  587. package/src/components/messages/UserPromptMessage.js +63 -0
  588. package/src/components/messages/UserResourceUpdateMessage.js +102 -0
  589. package/src/components/messages/UserTeammateMessage.js +156 -0
  590. package/src/components/messages/UserTextMessage.js +270 -0
  591. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.js +28 -0
  592. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.js +17 -0
  593. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +17 -0
  594. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.js +92 -0
  595. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.js +74 -0
  596. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.js +84 -0
  597. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +58 -0
  598. package/src/components/messages/UserToolResultMessage/utils.js +43 -0
  599. package/src/components/messages/nullRenderingAttachments.js +58 -0
  600. package/src/components/messages/teamMemCollapsed.js +142 -0
  601. package/src/components/messages/teamMemSaved.js +16 -0
  602. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +659 -0
  603. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.js +219 -0
  604. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.js +227 -0
  605. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.js +175 -0
  606. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.js +444 -0
  607. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.js +137 -0
  608. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.js +100 -0
  609. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.js +404 -0
  610. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.js +110 -0
  611. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.js +449 -0
  612. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.js +126 -0
  613. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.js +653 -0
  614. package/src/components/permissions/FallbackPermissionRequest.js +349 -0
  615. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +185 -0
  616. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.js +108 -0
  617. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.js +13 -0
  618. package/src/components/permissions/FilePermissionDialog/permissionOptions.js +137 -0
  619. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.js +131 -0
  620. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.js +86 -0
  621. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +164 -0
  622. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +79 -0
  623. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +113 -0
  624. package/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.js +7 -0
  625. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.js +164 -0
  626. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.js +218 -0
  627. package/src/components/permissions/PermissionDecisionDebugInfo.js +467 -0
  628. package/src/components/permissions/PermissionDialog.js +55 -0
  629. package/src/components/permissions/PermissionExplanation.js +269 -0
  630. package/src/components/permissions/PermissionPrompt.js +316 -0
  631. package/src/components/permissions/PermissionRequest.js +159 -0
  632. package/src/components/permissions/PermissionRequestTitle.js +58 -0
  633. package/src/components/permissions/PermissionRuleExplanation.js +110 -0
  634. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.js +178 -0
  635. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.js +73 -0
  636. package/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.js +7 -0
  637. package/src/components/permissions/SandboxPermissionRequest.js +162 -0
  638. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.js +228 -0
  639. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.js +385 -0
  640. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.js +259 -0
  641. package/src/components/permissions/WorkerBadge.js +44 -0
  642. package/src/components/permissions/WorkerPendingPermission.js +107 -0
  643. package/src/components/permissions/hooks.js +163 -0
  644. package/src/components/permissions/rules/AddPermissionRules.js +171 -0
  645. package/src/components/permissions/rules/AddWorkspaceDirectory.js +335 -0
  646. package/src/components/permissions/rules/PermissionRuleDescription.js +78 -0
  647. package/src/components/permissions/rules/PermissionRuleInput.js +136 -0
  648. package/src/components/permissions/rules/PermissionRuleList.js +1190 -0
  649. package/src/components/permissions/rules/RecentDenialsTab.js +205 -0
  650. package/src/components/permissions/rules/RemoveWorkspaceDirectory.js +103 -0
  651. package/src/components/permissions/rules/WorkspaceTab.js +133 -0
  652. package/src/components/permissions/shellPermissionHelpers.js +112 -0
  653. package/src/components/permissions/useShellPermissionFeedback.js +108 -0
  654. package/src/components/permissions/utils.js +14 -0
  655. package/src/components/sandbox/SandboxConfigTab.js +48 -0
  656. package/src/components/sandbox/SandboxDependenciesTab.js +123 -0
  657. package/src/components/sandbox/SandboxDoctorSection.js +47 -0
  658. package/src/components/sandbox/SandboxOverridesTab.js +193 -0
  659. package/src/components/sandbox/SandboxSettings.js +297 -0
  660. package/src/components/shell/ExpandShellOutputContext.js +33 -0
  661. package/src/components/shell/OutputLine.js +110 -0
  662. package/src/components/shell/ShellProgressMessage.js +144 -0
  663. package/src/components/shell/ShellTimeDisplay.js +72 -0
  664. package/src/components/skills/SkillsMenu.js +239 -0
  665. package/src/components/tasks/AsyncAgentDetailDialog.js +235 -0
  666. package/src/components/tasks/BackgroundTask.js +364 -0
  667. package/src/components/tasks/BackgroundTaskStatus.js +419 -0
  668. package/src/components/tasks/BackgroundTasksDialog.js +494 -0
  669. package/src/components/tasks/DreamDetailDialog.js +251 -0
  670. package/src/components/tasks/InProcessTeammateDetailDialog.js +275 -0
  671. package/src/components/tasks/MonitorMcpDetailDialog.js +7 -0
  672. package/src/components/tasks/RemoteSessionDetailDialog.js +868 -0
  673. package/src/components/tasks/RemoteSessionProgress.js +249 -0
  674. package/src/components/tasks/ShellDetailDialog.js +403 -0
  675. package/src/components/tasks/ShellProgress.js +77 -0
  676. package/src/components/tasks/WorkflowDetailDialog.js +7 -0
  677. package/src/components/tasks/renderToolActivity.js +29 -0
  678. package/src/components/tasks/taskStatusUtils.js +94 -0
  679. package/src/components/teams/TeamStatus.js +77 -0
  680. package/src/components/teams/TeamsDialog.js +673 -0
  681. package/src/components/ui/OrderedList.js +66 -0
  682. package/src/components/ui/OrderedListItem.js +41 -0
  683. package/src/components/ui/TreeSelect.js +300 -0
  684. package/src/components/wizard/WizardDialogLayout.js +48 -0
  685. package/src/components/wizard/WizardNavigationFooter.js +11 -0
  686. package/src/components/wizard/WizardProvider.js +217 -0
  687. package/src/components/wizard/index.js +4 -0
  688. package/src/components/wizard/useWizard.js +9 -0
  689. package/src/constants/apiLimits.js +81 -0
  690. package/src/constants/betas.js +45 -0
  691. package/src/constants/common.js +29 -0
  692. package/src/constants/cyberRiskInstruction.js +23 -0
  693. package/src/constants/errorIds.js +14 -0
  694. package/src/constants/figures.js +38 -0
  695. package/src/constants/files.js +150 -0
  696. package/src/constants/github-app.js +139 -0
  697. package/src/constants/identity.js +112 -0
  698. package/src/constants/keys.js +10 -0
  699. package/src/constants/messages.js +1 -0
  700. package/src/constants/oauth.js +175 -0
  701. package/src/constants/outputStyles.js +162 -0
  702. package/src/constants/product.js +54 -0
  703. package/src/constants/prompts.js +994 -0
  704. package/src/constants/spinnerVerbs.js +98 -0
  705. package/src/constants/system.js +77 -0
  706. package/src/constants/systemPromptSections.js +39 -0
  707. package/src/constants/toolLimits.js +50 -0
  708. package/src/constants/tools.js +103 -0
  709. package/src/constants/turnCompletionVerbs.js +12 -0
  710. package/src/constants/xml.js +73 -0
  711. package/src/context/QueuedMessageContext.js +51 -0
  712. package/src/context/fpsMetrics.js +22 -0
  713. package/src/context/mailbox.js +35 -0
  714. package/src/context/modalContext.js +34 -0
  715. package/src/context/notifications.js +199 -0
  716. package/src/context/overlayContext.js +149 -0
  717. package/src/context/promptOverlayContext.js +118 -0
  718. package/src/context/stats.js +207 -0
  719. package/src/context/voice.js +74 -0
  720. package/src/context.js +146 -0
  721. package/src/coordinator/coordinatorMode.js +345 -0
  722. package/src/coordinator/workerAgent.js +24 -0
  723. package/src/cost-tracker.js +208 -0
  724. package/src/costHook.js +17 -0
  725. package/src/daemon/main.js +19 -0
  726. package/src/dialogLaunchers.js +77 -0
  727. package/src/entrypoints/agentSdkTypes.js +202 -0
  728. package/src/entrypoints/cli.js +226 -0
  729. package/src/entrypoints/init.js +265 -0
  730. package/src/entrypoints/mcp.js +141 -0
  731. package/src/entrypoints/sandboxTypes.js +112 -0
  732. package/src/entrypoints/sdk/controlSchemas.js +452 -0
  733. package/src/entrypoints/sdk/controlTypes.js +1 -0
  734. package/src/entrypoints/sdk/coreSchemas.js +1331 -0
  735. package/src/entrypoints/sdk/coreTypes.generated.js +3 -0
  736. package/src/entrypoints/sdk/coreTypes.js +49 -0
  737. package/src/entrypoints/sdk/runtimeTypes.js +1 -0
  738. package/src/entrypoints/sdk/sdkUtilityTypes.js +1 -0
  739. package/src/entrypoints/sdk/settingsTypes.generated.js +1 -0
  740. package/src/entrypoints/sdk/toolTypes.js +1 -0
  741. package/src/environment-runner/main.js +8 -0
  742. package/src/history.js +386 -0
  743. package/src/hooks/fileSuggestions.js +635 -0
  744. package/src/hooks/notifs/useAntOrgWarningNotification.js +5 -0
  745. package/src/hooks/notifs/useAutoModeUnavailableNotification.js +47 -0
  746. package/src/hooks/notifs/useCanSwitchToExistingSubscription.js +58 -0
  747. package/src/hooks/notifs/useDeprecationWarningNotification.js +43 -0
  748. package/src/hooks/notifs/useFastModeNotification.js +164 -0
  749. package/src/hooks/notifs/useIDEStatusIndicator.js +174 -0
  750. package/src/hooks/notifs/useInstallMessages.js +27 -0
  751. package/src/hooks/notifs/useLspInitializationNotification.js +144 -0
  752. package/src/hooks/notifs/useMcpConnectivityStatus.js +81 -0
  753. package/src/hooks/notifs/useModelMigrationNotifications.js +53 -0
  754. package/src/hooks/notifs/useNpmDeprecationNotification.js +25 -0
  755. package/src/hooks/notifs/usePluginAutoupdateNotification.js +83 -0
  756. package/src/hooks/notifs/usePluginInstallationStatus.js +128 -0
  757. package/src/hooks/notifs/useRateLimitWarningNotification.js +119 -0
  758. package/src/hooks/notifs/useSettingsErrors.js +64 -0
  759. package/src/hooks/notifs/useStartupNotification.js +33 -0
  760. package/src/hooks/notifs/useTeammateShutdownNotification.js +64 -0
  761. package/src/hooks/renderPlaceholder.js +26 -0
  762. package/src/hooks/toolPermission/PermissionContext.js +211 -0
  763. package/src/hooks/toolPermission/handlers/coordinatorHandler.js +44 -0
  764. package/src/hooks/toolPermission/handlers/interactiveHandler.js +397 -0
  765. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.js +108 -0
  766. package/src/hooks/toolPermission/permissionLogging.js +145 -0
  767. package/src/hooks/unifiedSuggestions.js +130 -0
  768. package/src/hooks/useAfterFirstRender.js +12 -0
  769. package/src/hooks/useApiKeyVerification.js +63 -0
  770. package/src/hooks/useArrowKeyHistory.js +203 -0
  771. package/src/hooks/useAssistantHistory.js +193 -0
  772. package/src/hooks/useAwaySummary.js +105 -0
  773. package/src/hooks/useBackgroundTaskNavigation.js +204 -0
  774. package/src/hooks/useBlink.js +28 -0
  775. package/src/hooks/useCanUseTool.js +193 -0
  776. package/src/hooks/useCancelRequest.js +195 -0
  777. package/src/hooks/useChromeExtensionNotification.js +50 -0
  778. package/src/hooks/useClipboardImageHint.js +59 -0
  779. package/src/hooks/useCommandKeybindings.js +87 -0
  780. package/src/hooks/useCommandQueue.js +10 -0
  781. package/src/hooks/useCopyOnSelect.js +88 -0
  782. package/src/hooks/useDeferredHookMessages.js +43 -0
  783. package/src/hooks/useDiffData.js +69 -0
  784. package/src/hooks/useDiffInIDE.js +252 -0
  785. package/src/hooks/useDirectConnect.js +150 -0
  786. package/src/hooks/useDoublePress.js +44 -0
  787. package/src/hooks/useDynamicConfig.js +17 -0
  788. package/src/hooks/useElapsedTime.js +25 -0
  789. package/src/hooks/useExitOnCtrlCD.js +57 -0
  790. package/src/hooks/useExitOnCtrlCDWithKeybindings.js +17 -0
  791. package/src/hooks/useFileHistorySnapshotInit.js +14 -0
  792. package/src/hooks/useGlobalKeybindings.js +213 -0
  793. package/src/hooks/useHistorySearch.js +241 -0
  794. package/src/hooks/useIDEIntegration.js +56 -0
  795. package/src/hooks/useIdeAtMentioned.js +51 -0
  796. package/src/hooks/useIdeConnectionStatus.js +21 -0
  797. package/src/hooks/useIdeLogging.js +29 -0
  798. package/src/hooks/useIdeSelection.js +106 -0
  799. package/src/hooks/useInboxPoller.js +709 -0
  800. package/src/hooks/useInputBuffer.js +73 -0
  801. package/src/hooks/useIssueFlagBanner.js +115 -0
  802. package/src/hooks/useLogMessages.js +98 -0
  803. package/src/hooks/useLspPluginRecommendation.js +176 -0
  804. package/src/hooks/useMailboxBridge.js +15 -0
  805. package/src/hooks/useMainLoopModel.js +25 -0
  806. package/src/hooks/useManagePlugins.js +261 -0
  807. package/src/hooks/useMemoryUsage.js +28 -0
  808. package/src/hooks/useMergedClients.js +11 -0
  809. package/src/hooks/useMergedCommands.js +10 -0
  810. package/src/hooks/useMergedTools.js +32 -0
  811. package/src/hooks/useMinDisplayTime.js +26 -0
  812. package/src/hooks/useNotifyAfterTimeout.js +51 -0
  813. package/src/hooks/useOfficialMarketplaceNotification.js +47 -0
  814. package/src/hooks/usePasteHandler.js +195 -0
  815. package/src/hooks/usePluginRecommendationBase.js +101 -0
  816. package/src/hooks/usePrStatus.js +91 -0
  817. package/src/hooks/usePromptSuggestion.js +128 -0
  818. package/src/hooks/usePromptsFromClaudeInChrome.js +66 -0
  819. package/src/hooks/useQueueProcessor.js +46 -0
  820. package/src/hooks/useRemoteSession.js +431 -0
  821. package/src/hooks/useReplBridge.js +715 -0
  822. package/src/hooks/useSSHSession.js +167 -0
  823. package/src/hooks/useScheduledTasks.js +104 -0
  824. package/src/hooks/useSearchInput.js +302 -0
  825. package/src/hooks/useSessionBackgrounding.js +132 -0
  826. package/src/hooks/useSettings.js +10 -0
  827. package/src/hooks/useSettingsChange.js +13 -0
  828. package/src/hooks/useSkillImprovementSurvey.js +69 -0
  829. package/src/hooks/useSkillsChange.js +51 -0
  830. package/src/hooks/useSwarmInitialization.js +67 -0
  831. package/src/hooks/useSwarmPermissionPoller.js +215 -0
  832. package/src/hooks/useTaskListWatcher.js +157 -0
  833. package/src/hooks/useTasksV2.js +220 -0
  834. package/src/hooks/useTeammateViewAutoExit.js +55 -0
  835. package/src/hooks/useTeleportResume.js +81 -0
  836. package/src/hooks/useTerminalSize.js +9 -0
  837. package/src/hooks/useTextInput.js +397 -0
  838. package/src/hooks/useThaddeusHintRecommendation.js +117 -0
  839. package/src/hooks/useTimeout.js +10 -0
  840. package/src/hooks/useTurnDiffs.js +160 -0
  841. package/src/hooks/useTypeahead.js +1250 -0
  842. package/src/hooks/useUpdateNotification.js +21 -0
  843. package/src/hooks/useVimInput.js +232 -0
  844. package/src/hooks/useVirtualScroll.js +627 -0
  845. package/src/hooks/useVoice.js +952 -0
  846. package/src/hooks/useVoiceEnabled.js +21 -0
  847. package/src/hooks/useVoiceIntegration.js +629 -0
  848. package/src/infrastructure/audit.js +210 -0
  849. package/src/infrastructure/guardrails.js +513 -0
  850. package/src/infrastructure/index.js +11 -0
  851. package/src/ink/Ansi.js +269 -0
  852. package/src/ink/bidi.js +117 -0
  853. package/src/ink/clearTerminal.js +58 -0
  854. package/src/ink/colorize.js +198 -0
  855. package/src/ink/components/AlternateScreen.js +74 -0
  856. package/src/ink/components/App.js +562 -0
  857. package/src/ink/components/AppContext.js +11 -0
  858. package/src/ink/components/Box.js +155 -0
  859. package/src/ink/components/Button.js +166 -0
  860. package/src/ink/components/ClockContext.js +108 -0
  861. package/src/ink/components/CursorDeclarationContext.js +3 -0
  862. package/src/ink/components/ErrorOverview.js +50 -0
  863. package/src/ink/components/Link.js +34 -0
  864. package/src/ink/components/Newline.js +30 -0
  865. package/src/ink/components/NoSelect.js +57 -0
  866. package/src/ink/components/RawAnsi.js +46 -0
  867. package/src/ink/components/ScrollBox.js +171 -0
  868. package/src/ink/components/Spacer.js +20 -0
  869. package/src/ink/components/StdinContext.js +16 -0
  870. package/src/ink/components/TerminalFocusContext.js +45 -0
  871. package/src/ink/components/TerminalSizeContext.js +3 -0
  872. package/src/ink/components/Text.js +195 -0
  873. package/src/ink/constants.js +2 -0
  874. package/src/ink/dom.js +298 -0
  875. package/src/ink/events/click-event.js +36 -0
  876. package/src/ink/events/dispatcher.js +172 -0
  877. package/src/ink/events/emitter.js +31 -0
  878. package/src/ink/events/event-handlers.js +30 -0
  879. package/src/ink/events/event.js +9 -0
  880. package/src/ink/events/focus-event.js +16 -0
  881. package/src/ink/events/input-event.js +161 -0
  882. package/src/ink/events/keyboard-event.js +46 -0
  883. package/src/ink/events/terminal-event.js +78 -0
  884. package/src/ink/events/terminal-focus-event.js +15 -0
  885. package/src/ink/focus.js +158 -0
  886. package/src/ink/frame.js +30 -0
  887. package/src/ink/get-max-width.js +23 -0
  888. package/src/ink/hit-test.js +113 -0
  889. package/src/ink/hooks/use-animation-frame.js +48 -0
  890. package/src/ink/hooks/use-app.js +7 -0
  891. package/src/ink/hooks/use-declared-cursor.js +60 -0
  892. package/src/ink/hooks/use-input.js +70 -0
  893. package/src/ink/hooks/use-interval.js +54 -0
  894. package/src/ink/hooks/use-search-highlight.js +32 -0
  895. package/src/ink/hooks/use-selection.js +60 -0
  896. package/src/ink/hooks/use-stdin.js +7 -0
  897. package/src/ink/hooks/use-tab-status.js +57 -0
  898. package/src/ink/hooks/use-terminal-focus.js +15 -0
  899. package/src/ink/hooks/use-terminal-title.js +29 -0
  900. package/src/ink/hooks/use-terminal-viewport.js +77 -0
  901. package/src/ink/ink.js +1645 -0
  902. package/src/ink/instances.js +7 -0
  903. package/src/ink/layout/engine.js +4 -0
  904. package/src/ink/layout/geometry.js +61 -0
  905. package/src/ink/layout/node.js +62 -0
  906. package/src/ink/layout/yoga.js +237 -0
  907. package/src/ink/line-width-cache.js +19 -0
  908. package/src/ink/log-update.js +583 -0
  909. package/src/ink/measure-element.js +8 -0
  910. package/src/ink/measure-text.js +35 -0
  911. package/src/ink/node-cache.js +30 -0
  912. package/src/ink/optimizer.js +81 -0
  913. package/src/ink/output.js +556 -0
  914. package/src/ink/parse-keypress.js +695 -0
  915. package/src/ink/reconciler.js +384 -0
  916. package/src/ink/render-border.js +134 -0
  917. package/src/ink/render-node-to-output.js +1216 -0
  918. package/src/ink/render-to-screen.js +171 -0
  919. package/src/ink/renderer.js +129 -0
  920. package/src/ink/root.js +80 -0
  921. package/src/ink/screen.js +1132 -0
  922. package/src/ink/searchHighlight.js +78 -0
  923. package/src/ink/selection.js +792 -0
  924. package/src/ink/squash-text-nodes.js +56 -0
  925. package/src/ink/stringWidth.js +200 -0
  926. package/src/ink/styles.js +299 -0
  927. package/src/ink/supports-hyperlinks.js +40 -0
  928. package/src/ink/tabstops.js +39 -0
  929. package/src/ink/terminal-focus-state.js +35 -0
  930. package/src/ink/terminal-querier.js +173 -0
  931. package/src/ink/terminal.js +208 -0
  932. package/src/ink/termio/ansi.js +70 -0
  933. package/src/ink/termio/csi.js +260 -0
  934. package/src/ink/termio/dec.js +53 -0
  935. package/src/ink/termio/esc.js +55 -0
  936. package/src/ink/termio/osc.js +432 -0
  937. package/src/ink/termio/parser.js +356 -0
  938. package/src/ink/termio/sgr.js +292 -0
  939. package/src/ink/termio/tokenize.js +264 -0
  940. package/src/ink/termio/types.js +55 -0
  941. package/src/ink/termio.js +24 -0
  942. package/src/ink/useTerminalNotification.js +57 -0
  943. package/src/ink/warn.js +10 -0
  944. package/src/ink/widest-line.js +14 -0
  945. package/src/ink/wrap-text.js +54 -0
  946. package/src/ink/wrapAnsi.js +6 -0
  947. package/src/ink.js +50 -0
  948. package/src/integrations/credentialStore.js +176 -0
  949. package/src/integrations/index.js +5 -0
  950. package/src/integrations/integrationManager.js +180 -0
  951. package/src/integrations/providers/BaseProvider.js +180 -0
  952. package/src/integrations/providers/GitHubProvider.js +217 -0
  953. package/src/integrations/providers/GmailProvider.js +204 -0
  954. package/src/integrations/providers/GoogleCalendarProvider.js +113 -0
  955. package/src/integrations/providers/HubSpotProvider.js +159 -0
  956. package/src/integrations/providers/JiraProvider.js +216 -0
  957. package/src/integrations/providers/NotionProvider.js +221 -0
  958. package/src/integrations/providers/QuickBooksProvider.js +176 -0
  959. package/src/integrations/providers/SlackProvider.js +174 -0
  960. package/src/integrations/providers/StripeProvider.js +206 -0
  961. package/src/integrations/providers/TwilioProvider.js +239 -0
  962. package/src/integrations/providers/_template.js +112 -0
  963. package/src/integrations/types.js +7 -0
  964. package/src/interactiveHelpers.js +308 -0
  965. package/src/jobs/classifier.js +6 -0
  966. package/src/keybindings/KeybindingContext.js +184 -0
  967. package/src/keybindings/KeybindingProviderSetup.js +259 -0
  968. package/src/keybindings/defaultBindings.js +333 -0
  969. package/src/keybindings/loadUserBindings.js +393 -0
  970. package/src/keybindings/match.js +111 -0
  971. package/src/keybindings/parser.js +184 -0
  972. package/src/keybindings/reservedShortcuts.js +109 -0
  973. package/src/keybindings/resolver.js +182 -0
  974. package/src/keybindings/schema.js +205 -0
  975. package/src/keybindings/shortcutFormat.js +48 -0
  976. package/src/keybindings/template.js +40 -0
  977. package/src/keybindings/useKeybinding.js +161 -0
  978. package/src/keybindings/useShortcutDisplay.js +43 -0
  979. package/src/keybindings/validate.js +395 -0
  980. package/src/main.js +4128 -0
  981. package/src/memdir/findRelevantMemories.js +99 -0
  982. package/src/memdir/memdir.js +406 -0
  983. package/src/memdir/memoryAge.js +52 -0
  984. package/src/memdir/memoryScan.js +65 -0
  985. package/src/memdir/memoryShapeTelemetry.js +8 -0
  986. package/src/memdir/memoryTypes.js +260 -0
  987. package/src/memdir/paths.js +235 -0
  988. package/src/memdir/teamMemPaths.js +261 -0
  989. package/src/memdir/teamMemPrompts.js +82 -0
  990. package/src/migrations/migrateAutoUpdatesToSettings.js +47 -0
  991. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.js +32 -0
  992. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.js +83 -0
  993. package/src/migrations/migrateFennecToOpus.js +39 -0
  994. package/src/migrations/migrateLegacyOpusToCurrent.js +44 -0
  995. package/src/migrations/migrateOpusToOpus1m.js +31 -0
  996. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.js +23 -0
  997. package/src/migrations/migrateSonnet1mToSonnet45.js +38 -0
  998. package/src/migrations/migrateSonnet45ToSonnet46.js +48 -0
  999. package/src/migrations/resetAutoModeOptInForDefaultOffer.js +47 -0
  1000. package/src/migrations/resetProToOpusDefault.js +46 -0
  1001. package/src/moreright/useMoreRight.js +13 -0
  1002. package/src/native-ts/color-diff/index.js +819 -0
  1003. package/src/native-ts/file-index/index.js +328 -0
  1004. package/src/native-ts/yoga-layout/enums.js +101 -0
  1005. package/src/native-ts/yoga-layout/index.js +2113 -0
  1006. package/src/outputStyles/loadOutputStylesDir.js +71 -0
  1007. package/src/plugins/builtinPlugins.js +132 -0
  1008. package/src/plugins/bundled/index.js +22 -0
  1009. package/src/proactive/index.js +138 -0
  1010. package/src/proactive/useProactive.js +82 -0
  1011. package/src/projectOnboardingState.js +61 -0
  1012. package/src/query/config.js +17 -0
  1013. package/src/query/deps.js +12 -0
  1014. package/src/query/stopHooks.js +332 -0
  1015. package/src/query/tokenBudget.js +49 -0
  1016. package/src/query.js +1264 -0
  1017. package/src/remote/RemoteSessionManager.js +172 -0
  1018. package/src/remote/SessionsWebSocket.js +308 -0
  1019. package/src/remote/remotePermissionBridge.js +70 -0
  1020. package/src/remote/sdkMessageAdapter.js +227 -0
  1021. package/src/replLauncher.js +7 -0
  1022. package/src/schemas/hooks.js +174 -0
  1023. package/src/screens/Doctor.js +580 -0
  1024. package/src/screens/REPL.js +4500 -0
  1025. package/src/screens/ResumeConversation.js +339 -0
  1026. package/src/self-hosted-runner/main.js +8 -0
  1027. package/src/server/backends/dangerousBackend.js +8 -0
  1028. package/src/server/connectHeadless.js +6 -0
  1029. package/src/server/createDirectConnectSession.js +62 -0
  1030. package/src/server/directConnectManager.js +153 -0
  1031. package/src/server/lockfile.js +11 -0
  1032. package/src/server/parseConnectUrl.js +20 -0
  1033. package/src/server/server.js +12 -0
  1034. package/src/server/serverBanner.js +9 -0
  1035. package/src/server/serverLog.js +11 -0
  1036. package/src/server/sessionManager.js +19 -0
  1037. package/src/server/types.js +7 -0
  1038. package/src/services/AgentSummary/agentSummary.js +147 -0
  1039. package/src/services/MagicDocs/magicDocs.js +193 -0
  1040. package/src/services/MagicDocs/prompts.js +110 -0
  1041. package/src/services/PromptSuggestion/promptSuggestion.js +402 -0
  1042. package/src/services/PromptSuggestion/speculation.js +643 -0
  1043. package/src/services/SessionMemory/prompts.js +254 -0
  1044. package/src/services/SessionMemory/sessionMemory.js +358 -0
  1045. package/src/services/SessionMemory/sessionMemoryUtils.js +157 -0
  1046. package/src/services/analytics/config.js +27 -0
  1047. package/src/services/analytics/datadog.js +26 -0
  1048. package/src/services/analytics/firstPartyEventLogger.js +65 -0
  1049. package/src/services/analytics/firstPartyEventLoggingExporter.js +595 -0
  1050. package/src/services/analytics/growthbook.js +103 -0
  1051. package/src/services/analytics/index.js +91 -0
  1052. package/src/services/analytics/metadata.js +696 -0
  1053. package/src/services/analytics/sink.js +19 -0
  1054. package/src/services/analytics/sinkKillswitch.js +19 -0
  1055. package/src/services/api/adminRequests.js +57 -0
  1056. package/src/services/api/bootstrap.js +118 -0
  1057. package/src/services/api/claude.js +2466 -0
  1058. package/src/services/api/client.js +335 -0
  1059. package/src/services/api/dumpPrompts.js +174 -0
  1060. package/src/services/api/emptyUsage.js +20 -0
  1061. package/src/services/api/errorUtils.js +203 -0
  1062. package/src/services/api/errors.js +926 -0
  1063. package/src/services/api/filesApi.js +523 -0
  1064. package/src/services/api/firstTokenDate.js +49 -0
  1065. package/src/services/api/grove.js +44 -0
  1066. package/src/services/api/logging.js +484 -0
  1067. package/src/services/api/metricsOptOut.js +15 -0
  1068. package/src/services/api/overageCreditGrant.js +123 -0
  1069. package/src/services/api/promptCacheBreakDetection.js +510 -0
  1070. package/src/services/api/referral.js +219 -0
  1071. package/src/services/api/sessionIngress.js +358 -0
  1072. package/src/services/api/ultrareviewQuota.js +29 -0
  1073. package/src/services/api/usage.js +31 -0
  1074. package/src/services/api/withRetry.js +587 -0
  1075. package/src/services/api/xai/anthropic-shim.js +885 -0
  1076. package/src/services/api/xai/brightDataSearch.js +161 -0
  1077. package/src/services/api/xai/thaddeus-engine.js +605 -0
  1078. package/src/services/api/xai/xai-client.js +276 -0
  1079. package/src/services/autoDream/autoDream.js +244 -0
  1080. package/src/services/autoDream/config.js +17 -0
  1081. package/src/services/autoDream/consolidationLock.js +122 -0
  1082. package/src/services/autoDream/consolidationPrompt.js +55 -0
  1083. package/src/services/awaySummary.js +61 -0
  1084. package/src/services/claudeAiLimits.js +331 -0
  1085. package/src/services/claudeAiLimitsHook.js +15 -0
  1086. package/src/services/compact/apiMicrocompact.js +97 -0
  1087. package/src/services/compact/autoCompact.js +234 -0
  1088. package/src/services/compact/cachedMCConfig.js +5 -0
  1089. package/src/services/compact/compact.js +1256 -0
  1090. package/src/services/compact/compactWarningHook.js +12 -0
  1091. package/src/services/compact/compactWarningState.js +15 -0
  1092. package/src/services/compact/grouping.js +58 -0
  1093. package/src/services/compact/microCompact.js +414 -0
  1094. package/src/services/compact/postCompactCleanup.js +70 -0
  1095. package/src/services/compact/prompt.js +325 -0
  1096. package/src/services/compact/reactiveCompact.js +20 -0
  1097. package/src/services/compact/sessionMemoryCompact.js +467 -0
  1098. package/src/services/compact/snipCompact.js +23 -0
  1099. package/src/services/compact/snipProjection.js +11 -0
  1100. package/src/services/compact/timeBasedMCConfig.js +11 -0
  1101. package/src/services/contextCollapse/index.js +33 -0
  1102. package/src/services/contextCollapse/operations.js +5 -0
  1103. package/src/services/contextCollapse/persist.js +5 -0
  1104. package/src/services/diagnosticTracking.js +282 -0
  1105. package/src/services/elevenlabsTTS.js +245 -0
  1106. package/src/services/extractMemories/extractMemories.js +442 -0
  1107. package/src/services/extractMemories/prompts.js +129 -0
  1108. package/src/services/internalLogging.js +68 -0
  1109. package/src/services/lsp/LSPClient.js +306 -0
  1110. package/src/services/lsp/LSPDiagnosticRegistry.js +277 -0
  1111. package/src/services/lsp/LSPServerInstance.js +388 -0
  1112. package/src/services/lsp/LSPServerManager.js +305 -0
  1113. package/src/services/lsp/config.js +57 -0
  1114. package/src/services/lsp/manager.js +246 -0
  1115. package/src/services/lsp/passiveFeedback.js +226 -0
  1116. package/src/services/mcp/InProcessTransport.js +54 -0
  1117. package/src/services/mcp/MCPConnectionManager.js +50 -0
  1118. package/src/services/mcp/SdkControlTransport.js +115 -0
  1119. package/src/services/mcp/auth.js +1882 -0
  1120. package/src/services/mcp/channelAllowlist.js +57 -0
  1121. package/src/services/mcp/channelNotification.js +235 -0
  1122. package/src/services/mcp/channelPermissions.js +192 -0
  1123. package/src/services/mcp/claudeai.js +123 -0
  1124. package/src/services/mcp/client.js +2478 -0
  1125. package/src/services/mcp/config.js +1271 -0
  1126. package/src/services/mcp/elicitationHandler.js +192 -0
  1127. package/src/services/mcp/envExpansion.js +30 -0
  1128. package/src/services/mcp/headersHelper.js +93 -0
  1129. package/src/services/mcp/mcpStringUtils.js +85 -0
  1130. package/src/services/mcp/normalization.js +21 -0
  1131. package/src/services/mcp/oauthPort.js +69 -0
  1132. package/src/services/mcp/officialRegistry.js +20 -0
  1133. package/src/services/mcp/types.js +94 -0
  1134. package/src/services/mcp/useManageMCPConnections.js +818 -0
  1135. package/src/services/mcp/utils.js +433 -0
  1136. package/src/services/mcp/vscodeSdkMcp.js +69 -0
  1137. package/src/services/mcp/xaa.js +342 -0
  1138. package/src/services/mcp/xaaIdpLogin.js +377 -0
  1139. package/src/services/mcpServerApproval.js +30 -0
  1140. package/src/services/mockRateLimits.js +666 -0
  1141. package/src/services/notifier.js +114 -0
  1142. package/src/services/oauth/auth-code-listener.js +165 -0
  1143. package/src/services/oauth/client.js +397 -0
  1144. package/src/services/oauth/crypto.js +19 -0
  1145. package/src/services/oauth/getOauthProfile.js +48 -0
  1146. package/src/services/oauth/index.js +133 -0
  1147. package/src/services/plugins/PluginInstallationManager.js +139 -0
  1148. package/src/services/plugins/pluginCliCommands.js +230 -0
  1149. package/src/services/plugins/pluginOperations.js +826 -0
  1150. package/src/services/policyLimits/index.js +547 -0
  1151. package/src/services/policyLimits/types.js +9 -0
  1152. package/src/services/preventSleep.js +143 -0
  1153. package/src/services/rateLimitMessages.js +271 -0
  1154. package/src/services/rateLimitMocking.js +91 -0
  1155. package/src/services/remoteManagedSettings/index.js +534 -0
  1156. package/src/services/remoteManagedSettings/securityCheck.js +60 -0
  1157. package/src/services/remoteManagedSettings/syncCache.js +90 -0
  1158. package/src/services/remoteManagedSettings/syncCacheState.js +89 -0
  1159. package/src/services/remoteManagedSettings/types.js +12 -0
  1160. package/src/services/sessionTranscript/sessionTranscript.js +5 -0
  1161. package/src/services/settingsSync/index.js +478 -0
  1162. package/src/services/settingsSync/types.js +35 -0
  1163. package/src/services/skillSearch/featureCheck.js +8 -0
  1164. package/src/services/skillSearch/localSearch.js +5 -0
  1165. package/src/services/skillSearch/prefetch.js +8 -0
  1166. package/src/services/skillSearch/remoteSkillLoader.js +8 -0
  1167. package/src/services/skillSearch/remoteSkillState.js +11 -0
  1168. package/src/services/skillSearch/signals.js +3 -0
  1169. package/src/services/skillSearch/telemetry.js +8 -0
  1170. package/src/services/teamMemorySync/index.js +976 -0
  1171. package/src/services/teamMemorySync/secretScanner.js +275 -0
  1172. package/src/services/teamMemorySync/teamMemSecretGuard.js +33 -0
  1173. package/src/services/teamMemorySync/types.js +47 -0
  1174. package/src/services/teamMemorySync/watcher.js +326 -0
  1175. package/src/services/thaddeusAuth.js +485 -0
  1176. package/src/services/thaddeusAuthTypes.js +9 -0
  1177. package/src/services/thaddeusLoginFlow.js +236 -0
  1178. package/src/services/tips/tipHistory.js +17 -0
  1179. package/src/services/tips/tipRegistry.js +593 -0
  1180. package/src/services/tips/tipScheduler.js +40 -0
  1181. package/src/services/tokenEstimation.js +365 -0
  1182. package/src/services/toolUseSummary/toolUseSummaryGenerator.js +87 -0
  1183. package/src/services/tools/StreamingToolExecutor.js +413 -0
  1184. package/src/services/tools/toolExecution.js +1309 -0
  1185. package/src/services/tools/toolHooks.js +454 -0
  1186. package/src/services/tools/toolOrchestration.js +110 -0
  1187. package/src/services/vcr.js +291 -0
  1188. package/src/services/voice.js +392 -0
  1189. package/src/services/voiceKeyterms.js +94 -0
  1190. package/src/services/voiceStreamSTT.js +405 -0
  1191. package/src/setup.js +310 -0
  1192. package/src/skills/bundled/batch.js +114 -0
  1193. package/src/skills/bundled/claudeApi.js +145 -0
  1194. package/src/skills/bundled/claudeApiContent.js +71 -0
  1195. package/src/skills/bundled/claudeInChrome.js +27 -0
  1196. package/src/skills/bundled/debug.js +99 -0
  1197. package/src/skills/bundled/dream.js +49 -0
  1198. package/src/skills/bundled/emailSetup.js +196 -0
  1199. package/src/skills/bundled/hunter.js +28 -0
  1200. package/src/skills/bundled/index.js +80 -0
  1201. package/src/skills/bundled/keybindings.js +292 -0
  1202. package/src/skills/bundled/loop.js +81 -0
  1203. package/src/skills/bundled/loremIpsum.js +264 -0
  1204. package/src/skills/bundled/reactor.js +31 -0
  1205. package/src/skills/bundled/remember.js +73 -0
  1206. package/src/skills/bundled/runSkillGenerator.js +12 -0
  1207. package/src/skills/bundled/scheduleRemoteAgents.js +373 -0
  1208. package/src/skills/bundled/simplify.js +66 -0
  1209. package/src/skills/bundled/skillify.js +182 -0
  1210. package/src/skills/bundled/stuck.js +69 -0
  1211. package/src/skills/bundled/updateConfig.js +463 -0
  1212. package/src/skills/bundled/verify.js +23 -0
  1213. package/src/skills/bundled/verifyContent.js +10 -0
  1214. package/src/skills/bundledSkills.js +159 -0
  1215. package/src/skills/loadSkillsDir.js +736 -0
  1216. package/src/skills/mcpSkillBuilders.js +10 -0
  1217. package/src/skills/mcpSkills.js +5 -0
  1218. package/src/state/AppState.js +182 -0
  1219. package/src/state/AppStateStore.js +117 -0
  1220. package/src/state/onChangeAppState.js +132 -0
  1221. package/src/state/selectors.js +51 -0
  1222. package/src/state/store.js +21 -0
  1223. package/src/state/teammateViewHelpers.js +124 -0
  1224. package/src/stubs/ant-chrome-mcp/index.js +4 -0
  1225. package/src/stubs/ant-computer-use-input/index.js +2 -0
  1226. package/src/stubs/ant-computer-use-mcp/index.js +7 -0
  1227. package/src/stubs/ant-computer-use-mcp/sentinelApps.js +2 -0
  1228. package/src/stubs/ant-computer-use-mcp/types.js +3 -0
  1229. package/src/stubs/ant-computer-use-swift/index.js +1 -0
  1230. package/src/stubs/anthropic-sandbox/index.js +34 -0
  1231. package/src/tasks/DreamTask/DreamTask.js +99 -0
  1232. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.js +116 -0
  1233. package/src/tasks/InProcessTeammateTask/types.js +35 -0
  1234. package/src/tasks/LocalAgentTask/LocalAgentTask.js +507 -0
  1235. package/src/tasks/LocalMainSessionTask.js +338 -0
  1236. package/src/tasks/LocalShellTask/LocalShellTask.js +475 -0
  1237. package/src/tasks/LocalShellTask/guards.js +9 -0
  1238. package/src/tasks/LocalShellTask/killShellTasks.js +59 -0
  1239. package/src/tasks/LocalWorkflowTask/LocalWorkflowTask.js +7 -0
  1240. package/src/tasks/MonitorMcpTask/MonitorMcpTask.js +20 -0
  1241. package/src/tasks/RemoteAgentTask/RemoteAgentTask.js +742 -0
  1242. package/src/tasks/pillLabel.js +69 -0
  1243. package/src/tasks/stopTask.js +67 -0
  1244. package/src/tasks/types.js +18 -0
  1245. package/src/tasks.js +37 -0
  1246. package/src/tools/AIEmployeesTool/AIEmployeesTool.js +674 -0
  1247. package/src/tools/AIEmployeesTool/constants.js +1 -0
  1248. package/src/tools/AIEmployeesTool/prompt.js +56 -0
  1249. package/src/tools/AgentTool/AgentTool.js +1221 -0
  1250. package/src/tools/AgentTool/UI.js +593 -0
  1251. package/src/tools/AgentTool/agentColorManager.js +43 -0
  1252. package/src/tools/AgentTool/agentDisplay.js +72 -0
  1253. package/src/tools/AgentTool/agentMemory.js +125 -0
  1254. package/src/tools/AgentTool/agentMemorySnapshot.js +136 -0
  1255. package/src/tools/AgentTool/agentToolUtils.js +456 -0
  1256. package/src/tools/AgentTool/built-in/exploreAgent.js +76 -0
  1257. package/src/tools/AgentTool/built-in/generalPurposeAgent.js +28 -0
  1258. package/src/tools/AgentTool/built-in/planAgent.js +87 -0
  1259. package/src/tools/AgentTool/built-in/statuslineSetup.js +140 -0
  1260. package/src/tools/AgentTool/built-in/thaddeusGuideAgent.js +174 -0
  1261. package/src/tools/AgentTool/built-in/verificationAgent.js +146 -0
  1262. package/src/tools/AgentTool/builtInAgents.js +56 -0
  1263. package/src/tools/AgentTool/constants.js +11 -0
  1264. package/src/tools/AgentTool/forkSubagent.js +177 -0
  1265. package/src/tools/AgentTool/loadAgentsDir.js +497 -0
  1266. package/src/tools/AgentTool/prompt.js +260 -0
  1267. package/src/tools/AgentTool/resumeAgent.js +182 -0
  1268. package/src/tools/AgentTool/runAgent.js +627 -0
  1269. package/src/tools/AppointmentsTool/AppointmentsTool.js +628 -0
  1270. package/src/tools/AppointmentsTool/constants.js +1 -0
  1271. package/src/tools/AppointmentsTool/prompt.js +15 -0
  1272. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.js +238 -0
  1273. package/src/tools/AskUserQuestionTool/prompt.js +38 -0
  1274. package/src/tools/BashTool/BashTool.js +1009 -0
  1275. package/src/tools/BashTool/BashToolResultMessage.js +169 -0
  1276. package/src/tools/BashTool/UI.js +134 -0
  1277. package/src/tools/BashTool/bashCommandHelpers.js +184 -0
  1278. package/src/tools/BashTool/bashPermissions.js +2023 -0
  1279. package/src/tools/BashTool/bashSecurity.js +2267 -0
  1280. package/src/tools/BashTool/commandSemantics.js +105 -0
  1281. package/src/tools/BashTool/commentLabel.js +14 -0
  1282. package/src/tools/BashTool/destructiveCommandWarning.js +88 -0
  1283. package/src/tools/BashTool/modeValidation.js +86 -0
  1284. package/src/tools/BashTool/pathValidation.js +1079 -0
  1285. package/src/tools/BashTool/prompt.js +333 -0
  1286. package/src/tools/BashTool/readOnlyValidation.js +1794 -0
  1287. package/src/tools/BashTool/sedEditParser.js +282 -0
  1288. package/src/tools/BashTool/sedValidation.js +580 -0
  1289. package/src/tools/BashTool/shouldUseSandbox.js +125 -0
  1290. package/src/tools/BashTool/toolName.js +2 -0
  1291. package/src/tools/BashTool/utils.js +180 -0
  1292. package/src/tools/BriefTool/BriefTool.js +173 -0
  1293. package/src/tools/BriefTool/UI.js +67 -0
  1294. package/src/tools/BriefTool/attachments.js +86 -0
  1295. package/src/tools/BriefTool/prompt.js +19 -0
  1296. package/src/tools/BriefTool/upload.js +136 -0
  1297. package/src/tools/CalendarTool/CalendarTool.js +498 -0
  1298. package/src/tools/CalendarTool/constants.js +1 -0
  1299. package/src/tools/CalendarTool/prompt.js +11 -0
  1300. package/src/tools/ConfigTool/ConfigTool.js +398 -0
  1301. package/src/tools/ConfigTool/UI.js +25 -0
  1302. package/src/tools/ConfigTool/constants.js +1 -0
  1303. package/src/tools/ConfigTool/prompt.js +82 -0
  1304. package/src/tools/ConfigTool/supportedSettings.js +180 -0
  1305. package/src/tools/ContactsTool/ContactsTool.js +648 -0
  1306. package/src/tools/ContactsTool/constants.js +1 -0
  1307. package/src/tools/ContactsTool/prompt.js +15 -0
  1308. package/src/tools/CtxInspectTool/CtxInspectTool.js +44 -0
  1309. package/src/tools/DiscoverSkillsTool/prompt.js +4 -0
  1310. package/src/tools/EmailReadTool/index.js +410 -0
  1311. package/src/tools/EmailSendTool/index.js +178 -0
  1312. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.js +98 -0
  1313. package/src/tools/EnterPlanModeTool/UI.js +14 -0
  1314. package/src/tools/EnterPlanModeTool/constants.js +1 -0
  1315. package/src/tools/EnterPlanModeTool/prompt.js +164 -0
  1316. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.js +104 -0
  1317. package/src/tools/EnterWorktreeTool/UI.js +9 -0
  1318. package/src/tools/EnterWorktreeTool/constants.js +1 -0
  1319. package/src/tools/EnterWorktreeTool/prompt.js +30 -0
  1320. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.js +383 -0
  1321. package/src/tools/ExitPlanModeTool/UI.js +32 -0
  1322. package/src/tools/ExitPlanModeTool/constants.js +2 -0
  1323. package/src/tools/ExitPlanModeTool/prompt.js +27 -0
  1324. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.js +257 -0
  1325. package/src/tools/ExitWorktreeTool/UI.js +10 -0
  1326. package/src/tools/ExitWorktreeTool/constants.js +1 -0
  1327. package/src/tools/ExitWorktreeTool/prompt.js +32 -0
  1328. package/src/tools/FileEditTool/FileEditTool.js +480 -0
  1329. package/src/tools/FileEditTool/UI.js +202 -0
  1330. package/src/tools/FileEditTool/constants.js +7 -0
  1331. package/src/tools/FileEditTool/prompt.js +24 -0
  1332. package/src/tools/FileEditTool/types.js +50 -0
  1333. package/src/tools/FileEditTool/utils.js +579 -0
  1334. package/src/tools/FileReadTool/FileReadTool.js +889 -0
  1335. package/src/tools/FileReadTool/UI.js +126 -0
  1336. package/src/tools/FileReadTool/imageProcessor.js +46 -0
  1337. package/src/tools/FileReadTool/limits.js +70 -0
  1338. package/src/tools/FileReadTool/prompt.js +31 -0
  1339. package/src/tools/FileWriteTool/FileWriteTool.js +341 -0
  1340. package/src/tools/FileWriteTool/UI.js +339 -0
  1341. package/src/tools/FileWriteTool/prompt.js +15 -0
  1342. package/src/tools/GlobTool/GlobTool.js +161 -0
  1343. package/src/tools/GlobTool/UI.js +40 -0
  1344. package/src/tools/GlobTool/prompt.js +6 -0
  1345. package/src/tools/GrepTool/GrepTool.js +439 -0
  1346. package/src/tools/GrepTool/UI.js +155 -0
  1347. package/src/tools/GrepTool/prompt.js +16 -0
  1348. package/src/tools/IntegrationsTool/IntegrationsTool.js +217 -0
  1349. package/src/tools/IntegrationsTool/constants.js +1 -0
  1350. package/src/tools/IntegrationsTool/prompt.js +41 -0
  1351. package/src/tools/InteractionsTool/InteractionsTool.js +525 -0
  1352. package/src/tools/InteractionsTool/constants.js +1 -0
  1353. package/src/tools/InteractionsTool/prompt.js +14 -0
  1354. package/src/tools/InvoicesTool/InvoicesTool.js +581 -0
  1355. package/src/tools/InvoicesTool/constants.js +1 -0
  1356. package/src/tools/InvoicesTool/prompt.js +15 -0
  1357. package/src/tools/LSPTool/LSPTool.js +660 -0
  1358. package/src/tools/LSPTool/UI.js +205 -0
  1359. package/src/tools/LSPTool/formatters.js +445 -0
  1360. package/src/tools/LSPTool/prompt.js +20 -0
  1361. package/src/tools/LSPTool/schemas.js +197 -0
  1362. package/src/tools/LSPTool/symbolContext.js +75 -0
  1363. package/src/tools/LeadScorerTool/LeadScorerTool.js +509 -0
  1364. package/src/tools/LeadScorerTool/constants.js +1 -0
  1365. package/src/tools/LeadScorerTool/prompt.js +11 -0
  1366. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +100 -0
  1367. package/src/tools/ListMcpResourcesTool/UI.js +17 -0
  1368. package/src/tools/ListMcpResourcesTool/prompt.js +18 -0
  1369. package/src/tools/ListPeersTool/ListPeersTool.js +45 -0
  1370. package/src/tools/MCPTool/MCPTool.js +60 -0
  1371. package/src/tools/MCPTool/UI.js +343 -0
  1372. package/src/tools/MCPTool/classifyForCollapse.js +597 -0
  1373. package/src/tools/MCPTool/prompt.js +3 -0
  1374. package/src/tools/McpAuthTool/McpAuthTool.js +162 -0
  1375. package/src/tools/MonitorTool/MonitorTool.js +55 -0
  1376. package/src/tools/NotebookEditTool/NotebookEditTool.js +421 -0
  1377. package/src/tools/NotebookEditTool/UI.js +41 -0
  1378. package/src/tools/NotebookEditTool/constants.js +2 -0
  1379. package/src/tools/NotebookEditTool/prompt.js +2 -0
  1380. package/src/tools/OverflowTestTool/OverflowTestTool.js +51 -0
  1381. package/src/tools/PhoneBridgeTool/PhoneBridgeTool.js +301 -0
  1382. package/src/tools/PhoneBridgeTool/constants.js +1 -0
  1383. package/src/tools/PhoneBridgeTool/prompt.js +26 -0
  1384. package/src/tools/PowerShellTool/PowerShellTool.js +900 -0
  1385. package/src/tools/PowerShellTool/UI.js +58 -0
  1386. package/src/tools/PowerShellTool/clmTypes.js +207 -0
  1387. package/src/tools/PowerShellTool/commandSemantics.js +115 -0
  1388. package/src/tools/PowerShellTool/commonParameters.js +27 -0
  1389. package/src/tools/PowerShellTool/destructiveCommandWarning.js +92 -0
  1390. package/src/tools/PowerShellTool/gitSafety.js +185 -0
  1391. package/src/tools/PowerShellTool/modeValidation.js +357 -0
  1392. package/src/tools/PowerShellTool/pathValidation.js +1712 -0
  1393. package/src/tools/PowerShellTool/powershellPermissions.js +1351 -0
  1394. package/src/tools/PowerShellTool/powershellSecurity.js +942 -0
  1395. package/src/tools/PowerShellTool/prompt.js +132 -0
  1396. package/src/tools/PowerShellTool/readOnlyValidation.js +1633 -0
  1397. package/src/tools/PowerShellTool/toolName.js +2 -0
  1398. package/src/tools/PushNotificationTool/PushNotificationTool.js +35 -0
  1399. package/src/tools/REPLTool/REPLTool.js +44 -0
  1400. package/src/tools/REPLTool/constants.js +43 -0
  1401. package/src/tools/REPLTool/primitiveTools.js +36 -0
  1402. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +112 -0
  1403. package/src/tools/ReadMcpResourceTool/UI.js +24 -0
  1404. package/src/tools/ReadMcpResourceTool/prompt.js +15 -0
  1405. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.js +142 -0
  1406. package/src/tools/RemoteTriggerTool/UI.js +12 -0
  1407. package/src/tools/RemoteTriggerTool/prompt.js +12 -0
  1408. package/src/tools/ReviewArtifactTool/ReviewArtifactTool.js +51 -0
  1409. package/src/tools/ScheduleCronTool/CronCreateTool.js +120 -0
  1410. package/src/tools/ScheduleCronTool/CronDeleteTool.js +74 -0
  1411. package/src/tools/ScheduleCronTool/CronListTool.js +77 -0
  1412. package/src/tools/ScheduleCronTool/UI.js +29 -0
  1413. package/src/tools/ScheduleCronTool/prompt.js +115 -0
  1414. package/src/tools/SendMessageTool/SendMessageTool.js +673 -0
  1415. package/src/tools/SendMessageTool/UI.js +24 -0
  1416. package/src/tools/SendMessageTool/constants.js +1 -0
  1417. package/src/tools/SendMessageTool/prompt.js +47 -0
  1418. package/src/tools/SendUserFileTool/SendUserFileTool.js +35 -0
  1419. package/src/tools/SendUserFileTool/prompt.js +5 -0
  1420. package/src/tools/SkillTool/SkillTool.js +825 -0
  1421. package/src/tools/SkillTool/UI.js +61 -0
  1422. package/src/tools/SkillTool/constants.js +1 -0
  1423. package/src/tools/SkillTool/prompt.js +184 -0
  1424. package/src/tools/SleepTool/SleepTool.js +42 -0
  1425. package/src/tools/SleepTool/prompt.js +14 -0
  1426. package/src/tools/SnipTool/SnipTool.js +47 -0
  1427. package/src/tools/SnipTool/prompt.js +5 -0
  1428. package/src/tools/SubscribePRTool/SubscribePRTool.js +49 -0
  1429. package/src/tools/SuggestBackgroundPRTool/SuggestBackgroundPRTool.js +44 -0
  1430. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.js +138 -0
  1431. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +1 -1
  1432. package/src/tools/TaskCreateTool/TaskCreateTool.js +104 -0
  1433. package/src/tools/TaskCreateTool/constants.js +1 -0
  1434. package/src/tools/TaskCreateTool/prompt.js +52 -0
  1435. package/src/tools/TaskGetTool/TaskGetTool.js +106 -0
  1436. package/src/tools/TaskGetTool/constants.js +1 -0
  1437. package/src/tools/TaskGetTool/prompt.js +23 -0
  1438. package/src/tools/TaskListTool/TaskListTool.js +89 -0
  1439. package/src/tools/TaskListTool/constants.js +1 -0
  1440. package/src/tools/TaskListTool/prompt.js +44 -0
  1441. package/src/tools/TaskOutputTool/TaskOutputTool.js +536 -0
  1442. package/src/tools/TaskOutputTool/constants.js +1 -0
  1443. package/src/tools/TaskStopTool/TaskStopTool.js +110 -0
  1444. package/src/tools/TaskStopTool/UI.js +31 -0
  1445. package/src/tools/TaskStopTool/prompt.js +7 -0
  1446. package/src/tools/TaskUpdateTool/TaskUpdateTool.js +301 -0
  1447. package/src/tools/TaskUpdateTool/constants.js +1 -0
  1448. package/src/tools/TaskUpdateTool/prompt.js +76 -0
  1449. package/src/tools/TeamCreateTool/TeamCreateTool.js +177 -0
  1450. package/src/tools/TeamCreateTool/UI.js +4 -0
  1451. package/src/tools/TeamCreateTool/constants.js +1 -0
  1452. package/src/tools/TeamCreateTool/prompt.js +113 -0
  1453. package/src/tools/TeamDeleteTool/TeamDeleteTool.js +102 -0
  1454. package/src/tools/TeamDeleteTool/UI.js +13 -0
  1455. package/src/tools/TeamDeleteTool/constants.js +1 -0
  1456. package/src/tools/TeamDeleteTool/prompt.js +16 -0
  1457. package/src/tools/TerminalCaptureTool/TerminalCaptureTool.js +47 -0
  1458. package/src/tools/TerminalCaptureTool/prompt.js +11 -0
  1459. package/src/tools/TodoWriteTool/TodoWriteTool.js +99 -0
  1460. package/src/tools/TodoWriteTool/constants.js +1 -0
  1461. package/src/tools/TodoWriteTool/prompt.js +181 -0
  1462. package/src/tools/ToolSearchTool/ToolSearchTool.js +357 -0
  1463. package/src/tools/ToolSearchTool/constants.js +1 -0
  1464. package/src/tools/ToolSearchTool/prompt.js +97 -0
  1465. package/src/tools/TungstenTool/TungstenLiveMonitor.js +7 -0
  1466. package/src/tools/TungstenTool/TungstenTool.js +3 -0
  1467. package/src/tools/VerifyPlanExecutionTool/VerifyPlanExecutionTool.js +45 -0
  1468. package/src/tools/VerifyPlanExecutionTool/constants.js +2 -0
  1469. package/src/tools/WebBrowserTool/WebBrowserPanel.js +5 -0
  1470. package/src/tools/WebBrowserTool/WebBrowserTool.js +58 -0
  1471. package/src/tools/WebFetchTool/UI.js +31 -0
  1472. package/src/tools/WebFetchTool/WebFetchTool.js +246 -0
  1473. package/src/tools/WebFetchTool/preapproved.js +154 -0
  1474. package/src/tools/WebFetchTool/prompt.js +39 -0
  1475. package/src/tools/WebFetchTool/utils.js +368 -0
  1476. package/src/tools/WebSearchTool/UI.js +67 -0
  1477. package/src/tools/WebSearchTool/WebSearchTool.js +396 -0
  1478. package/src/tools/WebSearchTool/prompt.js +32 -0
  1479. package/src/tools/WorkflowTool/WorkflowPermissionRequest.js +7 -0
  1480. package/src/tools/WorkflowTool/WorkflowTool.js +51 -0
  1481. package/src/tools/WorkflowTool/bundled/index.js +5 -0
  1482. package/src/tools/WorkflowTool/constants.js +1 -0
  1483. package/src/tools/WorkflowTool/createWorkflowCommand.js +5 -0
  1484. package/src/tools/shared/gitOperationTracking.js +220 -0
  1485. package/src/tools/shared/spawnMultiAgent.js +805 -0
  1486. package/src/tools/testing/TestingPermissionTool.js +72 -0
  1487. package/src/tools/utils.js +24 -0
  1488. package/src/tools.js +365 -0
  1489. package/src/types/command.js +8 -0
  1490. package/src/types/connectorText.js +3 -0
  1491. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.js +673 -0
  1492. package/src/types/generated/events_mono/common/v1/auth.js +49 -0
  1493. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.js +147 -0
  1494. package/src/types/generated/google/protobuf/timestamp.js +38 -0
  1495. package/src/types/hooks.js +153 -0
  1496. package/src/types/ids.js +27 -0
  1497. package/src/types/logs.js +11 -0
  1498. package/src/types/permissions.js +25 -0
  1499. package/src/types/plugin.js +72 -0
  1500. package/src/types/textInputTypes.js +20 -0
  1501. package/src/upstreamproxy/relay.js +346 -0
  1502. package/src/upstreamproxy/upstreamproxy.js +234 -0
  1503. package/src/utils/CircularBuffer.js +75 -0
  1504. package/src/utils/Cursor.js +1229 -0
  1505. package/src/utils/QueryGuard.js +115 -0
  1506. package/src/utils/Shell.js +374 -0
  1507. package/src/utils/ShellCommand.js +336 -0
  1508. package/src/utils/abortController.js +74 -0
  1509. package/src/utils/activityManager.js +127 -0
  1510. package/src/utils/advisor.js +77 -0
  1511. package/src/utils/agentContext.js +91 -0
  1512. package/src/utils/agentId.js +83 -0
  1513. package/src/utils/agentSwarmsEnabled.js +37 -0
  1514. package/src/utils/agenticSessionSearch.js +255 -0
  1515. package/src/utils/analyzeContext.js +846 -0
  1516. package/src/utils/ansiToPng.js +259 -0
  1517. package/src/utils/ansiToSvg.js +207 -0
  1518. package/src/utils/api.js +555 -0
  1519. package/src/utils/apiPreconnect.js +62 -0
  1520. package/src/utils/appleTerminalBackup.js +95 -0
  1521. package/src/utils/argumentSubstitution.js +114 -0
  1522. package/src/utils/array.js +12 -0
  1523. package/src/utils/asciicast.js +200 -0
  1524. package/src/utils/attachments.js +2518 -0
  1525. package/src/utils/attribution.js +308 -0
  1526. package/src/utils/auth.js +1598 -0
  1527. package/src/utils/authFileDescriptor.js +152 -0
  1528. package/src/utils/authPortable.js +14 -0
  1529. package/src/utils/autoModeDenials.js +15 -0
  1530. package/src/utils/autoRunIssue.js +113 -0
  1531. package/src/utils/autoUpdater.js +457 -0
  1532. package/src/utils/aws.js +44 -0
  1533. package/src/utils/awsAuthStatusManager.js +66 -0
  1534. package/src/utils/background/remote/preconditions.js +175 -0
  1535. package/src/utils/background/remote/remoteSession.js +53 -0
  1536. package/src/utils/backgroundHousekeeping.js +64 -0
  1537. package/src/utils/bash/ParsedCommand.js +241 -0
  1538. package/src/utils/bash/ShellSnapshot.js +489 -0
  1539. package/src/utils/bash/ast.js +2590 -0
  1540. package/src/utils/bash/bashParser.js +4355 -0
  1541. package/src/utils/bash/bashPipeCommand.js +249 -0
  1542. package/src/utils/bash/commands.js +1131 -0
  1543. package/src/utils/bash/heredoc.js +647 -0
  1544. package/src/utils/bash/parser.js +195 -0
  1545. package/src/utils/bash/prefix.js +154 -0
  1546. package/src/utils/bash/registry.js +23 -0
  1547. package/src/utils/bash/shellCompletion.js +196 -0
  1548. package/src/utils/bash/shellPrefix.js +25 -0
  1549. package/src/utils/bash/shellQuote.js +253 -0
  1550. package/src/utils/bash/shellQuoting.js +106 -0
  1551. package/src/utils/bash/specs/alias.js +11 -0
  1552. package/src/utils/bash/specs/index.js +16 -0
  1553. package/src/utils/bash/specs/nohup.js +10 -0
  1554. package/src/utils/bash/specs/pyright.js +88 -0
  1555. package/src/utils/bash/specs/sleep.js +10 -0
  1556. package/src/utils/bash/specs/srun.js +28 -0
  1557. package/src/utils/bash/specs/time.js +10 -0
  1558. package/src/utils/bash/specs/timeout.js +17 -0
  1559. package/src/utils/bash/treeSitterAnalysis.js +407 -0
  1560. package/src/utils/betas.js +331 -0
  1561. package/src/utils/billing.js +54 -0
  1562. package/src/utils/binaryCheck.js +40 -0
  1563. package/src/utils/browser.js +58 -0
  1564. package/src/utils/bufferedWriter.js +77 -0
  1565. package/src/utils/bundledMode.js +19 -0
  1566. package/src/utils/businessDb.js +390 -0
  1567. package/src/utils/caCerts.js +91 -0
  1568. package/src/utils/caCertsConfig.js +77 -0
  1569. package/src/utils/cachePaths.js +28 -0
  1570. package/src/utils/classifierApprovals.js +66 -0
  1571. package/src/utils/classifierApprovalsHook.js +10 -0
  1572. package/src/utils/claudeDesktop.js +108 -0
  1573. package/src/utils/claudeInChrome/chromeNativeHost.js +416 -0
  1574. package/src/utils/claudeInChrome/common.js +466 -0
  1575. package/src/utils/claudeInChrome/mcpServer.js +237 -0
  1576. package/src/utils/claudeInChrome/prompt.js +79 -0
  1577. package/src/utils/claudeInChrome/setup.js +304 -0
  1578. package/src/utils/claudeInChrome/setupPortable.js +172 -0
  1579. package/src/utils/claudeInChrome/toolRendering.js +235 -0
  1580. package/src/utils/claudemd.js +1052 -0
  1581. package/src/utils/cleanup.js +514 -0
  1582. package/src/utils/cleanupRegistry.js +22 -0
  1583. package/src/utils/cliArgs.js +53 -0
  1584. package/src/utils/cliHighlight.js +45 -0
  1585. package/src/utils/codeIndexing.js +149 -0
  1586. package/src/utils/collapseBackgroundBashNotifications.js +70 -0
  1587. package/src/utils/collapseHookSummaries.js +48 -0
  1588. package/src/utils/collapseReadSearch.js +869 -0
  1589. package/src/utils/collapseTeammateShutdowns.js +44 -0
  1590. package/src/utils/combinedAbortSignal.js +40 -0
  1591. package/src/utils/commandLifecycle.js +7 -0
  1592. package/src/utils/commitAttribution.js +718 -0
  1593. package/src/utils/completionCache.js +138 -0
  1594. package/src/utils/computerUse/appNames.js +170 -0
  1595. package/src/utils/computerUse/cleanup.js +65 -0
  1596. package/src/utils/computerUse/common.js +56 -0
  1597. package/src/utils/computerUse/computerUseLock.js +183 -0
  1598. package/src/utils/computerUse/drainRunLoop.js +71 -0
  1599. package/src/utils/computerUse/escHotkey.js +53 -0
  1600. package/src/utils/computerUse/executor.js +480 -0
  1601. package/src/utils/computerUse/gates.js +55 -0
  1602. package/src/utils/computerUse/hostAdapter.js +62 -0
  1603. package/src/utils/computerUse/inputLoader.js +25 -0
  1604. package/src/utils/computerUse/mcpServer.js +84 -0
  1605. package/src/utils/computerUse/setup.js +42 -0
  1606. package/src/utils/computerUse/swiftLoader.js +18 -0
  1607. package/src/utils/computerUse/toolRendering.js +101 -0
  1608. package/src/utils/computerUse/wrapper.js +317 -0
  1609. package/src/utils/concurrentSessions.js +179 -0
  1610. package/src/utils/config.js +1078 -0
  1611. package/src/utils/configConstants.js +18 -0
  1612. package/src/utils/contentArray.js +45 -0
  1613. package/src/utils/context.js +185 -0
  1614. package/src/utils/contextAnalysis.js +171 -0
  1615. package/src/utils/contextSuggestions.js +158 -0
  1616. package/src/utils/controlMessageCompat.js +31 -0
  1617. package/src/utils/conversationRecovery.js +434 -0
  1618. package/src/utils/cron.js +260 -0
  1619. package/src/utils/cronJitterConfig.js +62 -0
  1620. package/src/utils/cronScheduler.js +388 -0
  1621. package/src/utils/cronTasks.js +328 -0
  1622. package/src/utils/cronTasksLock.js +159 -0
  1623. package/src/utils/crossProjectResume.js +46 -0
  1624. package/src/utils/crypto.js +13 -0
  1625. package/src/utils/cwd.js +29 -0
  1626. package/src/utils/debug.js +220 -0
  1627. package/src/utils/debugFilter.js +125 -0
  1628. package/src/utils/deepLink/banner.js +103 -0
  1629. package/src/utils/deepLink/parseDeepLink.js +138 -0
  1630. package/src/utils/deepLink/protocolHandler.js +119 -0
  1631. package/src/utils/deepLink/registerProtocol.js +291 -0
  1632. package/src/utils/deepLink/terminalLauncher.js +455 -0
  1633. package/src/utils/deepLink/terminalPreference.js +51 -0
  1634. package/src/utils/desktopDeepLink.js +208 -0
  1635. package/src/utils/detectRepository.js +157 -0
  1636. package/src/utils/diagLogs.js +74 -0
  1637. package/src/utils/diff.js +108 -0
  1638. package/src/utils/directMemberMessage.js +34 -0
  1639. package/src/utils/displayTags.js +46 -0
  1640. package/src/utils/doctorContextWarnings.js +179 -0
  1641. package/src/utils/doctorDiagnostic.js +494 -0
  1642. package/src/utils/dxt/helpers.js +64 -0
  1643. package/src/utils/dxt/zip.js +167 -0
  1644. package/src/utils/earlyInput.js +166 -0
  1645. package/src/utils/editor.js +163 -0
  1646. package/src/utils/effort.js +271 -0
  1647. package/src/utils/embeddedTools.js +26 -0
  1648. package/src/utils/employeeChat.js +271 -0
  1649. package/src/utils/employeeDb.js +326 -0
  1650. package/src/utils/env.js +358 -0
  1651. package/src/utils/envDynamic.js +130 -0
  1652. package/src/utils/envUtils.js +161 -0
  1653. package/src/utils/envValidation.js +26 -0
  1654. package/src/utils/errorLogSink.js +196 -0
  1655. package/src/utils/errors.js +207 -0
  1656. package/src/utils/exampleCommands.js +165 -0
  1657. package/src/utils/execFileNoThrow.js +93 -0
  1658. package/src/utils/execFileNoThrowPortable.js +49 -0
  1659. package/src/utils/execSyncWrapper.js +6 -0
  1660. package/src/utils/exportRenderer.js +71 -0
  1661. package/src/utils/extraUsage.js +19 -0
  1662. package/src/utils/fastMode.js +393 -0
  1663. package/src/utils/file.js +467 -0
  1664. package/src/utils/fileHistory.js +851 -0
  1665. package/src/utils/fileOperationAnalytics.js +45 -0
  1666. package/src/utils/filePersistence/filePersistence.js +212 -0
  1667. package/src/utils/filePersistence/outputsScanner.js +104 -0
  1668. package/src/utils/filePersistence/types.js +4 -0
  1669. package/src/utils/fileRead.js +81 -0
  1670. package/src/utils/fileReadCache.js +78 -0
  1671. package/src/utils/fileStateCache.js +99 -0
  1672. package/src/utils/findExecutable.js +13 -0
  1673. package/src/utils/fingerprint.js +58 -0
  1674. package/src/utils/forkedAgent.js +410 -0
  1675. package/src/utils/format.js +238 -0
  1676. package/src/utils/formatBriefTimestamp.js +72 -0
  1677. package/src/utils/fpsTracker.js +34 -0
  1678. package/src/utils/frontmatterParser.js +260 -0
  1679. package/src/utils/fsOperations.js +555 -0
  1680. package/src/utils/fullscreen.js +194 -0
  1681. package/src/utils/generatedFiles.js +122 -0
  1682. package/src/utils/generators.js +67 -0
  1683. package/src/utils/genericProcessUtils.js +155 -0
  1684. package/src/utils/getWorktreePaths.js +56 -0
  1685. package/src/utils/getWorktreePathsPortable.js +23 -0
  1686. package/src/utils/ghPrStatus.js +71 -0
  1687. package/src/utils/git/gitConfigParser.js +226 -0
  1688. package/src/utils/git/gitFilesystem.js +606 -0
  1689. package/src/utils/git/gitignore.js +84 -0
  1690. package/src/utils/git.js +725 -0
  1691. package/src/utils/gitDiff.js +395 -0
  1692. package/src/utils/gitSettings.js +18 -0
  1693. package/src/utils/github/ghAuthStatus.js +23 -0
  1694. package/src/utils/githubRepoPathMapping.js +135 -0
  1695. package/src/utils/glob.js +90 -0
  1696. package/src/utils/gracefulShutdown.js +447 -0
  1697. package/src/utils/groupToolUses.js +126 -0
  1698. package/src/utils/handlePromptSubmit.js +398 -0
  1699. package/src/utils/hash.js +44 -0
  1700. package/src/utils/headlessProfiler.js +147 -0
  1701. package/src/utils/heapDumpService.js +201 -0
  1702. package/src/utils/heatmap.js +151 -0
  1703. package/src/utils/highlightMatch.js +29 -0
  1704. package/src/utils/hooks/AsyncHookRegistry.js +187 -0
  1705. package/src/utils/hooks/apiQueryHookHelper.js +77 -0
  1706. package/src/utils/hooks/execAgentHook.js +257 -0
  1707. package/src/utils/hooks/execHttpHook.js +184 -0
  1708. package/src/utils/hooks/execPromptHook.js +171 -0
  1709. package/src/utils/hooks/fileChangedWatcher.js +161 -0
  1710. package/src/utils/hooks/hookEvents.js +111 -0
  1711. package/src/utils/hooks/hookHelpers.js +60 -0
  1712. package/src/utils/hooks/hooksConfigManager.js +323 -0
  1713. package/src/utils/hooks/hooksConfigSnapshot.js +114 -0
  1714. package/src/utils/hooks/hooksSettings.js +204 -0
  1715. package/src/utils/hooks/postSamplingHooks.js +39 -0
  1716. package/src/utils/hooks/registerFrontmatterHooks.js +47 -0
  1717. package/src/utils/hooks/registerSkillHooks.js +40 -0
  1718. package/src/utils/hooks/sessionHooks.js +252 -0
  1719. package/src/utils/hooks/skillImprovement.js +211 -0
  1720. package/src/utils/hooks/ssrfGuard.js +258 -0
  1721. package/src/utils/hooks.js +3668 -0
  1722. package/src/utils/horizontalScroll.js +108 -0
  1723. package/src/utils/http.js +120 -0
  1724. package/src/utils/hyperlink.js +28 -0
  1725. package/src/utils/iTermBackup.js +48 -0
  1726. package/src/utils/ide.js +1195 -0
  1727. package/src/utils/idePathConversion.js +66 -0
  1728. package/src/utils/idleTimeout.js +44 -0
  1729. package/src/utils/imagePaste.js +343 -0
  1730. package/src/utils/imageResizer.js +664 -0
  1731. package/src/utils/imageStore.js +150 -0
  1732. package/src/utils/imageValidation.js +92 -0
  1733. package/src/utils/immediateCommand.js +12 -0
  1734. package/src/utils/inProcessTeammateHelpers.js +71 -0
  1735. package/src/utils/ink.js +20 -0
  1736. package/src/utils/intl.js +83 -0
  1737. package/src/utils/jetbrains.js +152 -0
  1738. package/src/utils/json.js +231 -0
  1739. package/src/utils/jsonRead.js +14 -0
  1740. package/src/utils/keyboardShortcuts.js +11 -0
  1741. package/src/utils/lazySchema.js +8 -0
  1742. package/src/utils/listSessionsImpl.js +332 -0
  1743. package/src/utils/localInstaller.js +130 -0
  1744. package/src/utils/lockfile.js +30 -0
  1745. package/src/utils/log.js +280 -0
  1746. package/src/utils/logoV2Utils.js +256 -0
  1747. package/src/utils/mailbox.js +50 -0
  1748. package/src/utils/managedEnv.js +160 -0
  1749. package/src/utils/managedEnvConstants.js +185 -0
  1750. package/src/utils/markdown.js +315 -0
  1751. package/src/utils/markdownConfigLoader.js +480 -0
  1752. package/src/utils/mcp/dateTimeParser.js +102 -0
  1753. package/src/utils/mcp/elicitationValidation.js +259 -0
  1754. package/src/utils/mcpInstructionsDelta.js +97 -0
  1755. package/src/utils/mcpOutputStorage.js +159 -0
  1756. package/src/utils/mcpValidation.js +165 -0
  1757. package/src/utils/mcpWebSocketTransport.js +180 -0
  1758. package/src/utils/memoize.js +205 -0
  1759. package/src/utils/memory/types.js +9 -0
  1760. package/src/utils/memory/versions.js +7 -0
  1761. package/src/utils/memoryFileDetection.js +245 -0
  1762. package/src/utils/messagePredicates.js +6 -0
  1763. package/src/utils/messageQueueManager.js +430 -0
  1764. package/src/utils/messages/mappers.js +240 -0
  1765. package/src/utils/messages/systemInit.js +72 -0
  1766. package/src/utils/messages.js +4286 -0
  1767. package/src/utils/model/agent.js +128 -0
  1768. package/src/utils/model/aliases.js +21 -0
  1769. package/src/utils/model/antModels.js +25 -0
  1770. package/src/utils/model/bedrock.js +220 -0
  1771. package/src/utils/model/check1mAccess.js +64 -0
  1772. package/src/utils/model/configs.js +86 -0
  1773. package/src/utils/model/contextWindowUpgradeCheck.js +41 -0
  1774. package/src/utils/model/deprecation.js +72 -0
  1775. package/src/utils/model/model.js +533 -0
  1776. package/src/utils/model/modelAllowlist.js +148 -0
  1777. package/src/utils/model/modelCapabilities.js +105 -0
  1778. package/src/utils/model/modelOptions.js +450 -0
  1779. package/src/utils/model/modelStrings.js +144 -0
  1780. package/src/utils/model/modelSupportOverrides.js +40 -0
  1781. package/src/utils/model/providers.js +35 -0
  1782. package/src/utils/model/validateModel.js +131 -0
  1783. package/src/utils/modelCost.js +160 -0
  1784. package/src/utils/modifiers.js +39 -0
  1785. package/src/utils/mtls.js +132 -0
  1786. package/src/utils/nativeInstaller/download.js +370 -0
  1787. package/src/utils/nativeInstaller/index.js +8 -0
  1788. package/src/utils/nativeInstaller/installer.js +1395 -0
  1789. package/src/utils/nativeInstaller/packageManagers.js +258 -0
  1790. package/src/utils/nativeInstaller/pidLock.js +347 -0
  1791. package/src/utils/notebook.js +176 -0
  1792. package/src/utils/objectGroupBy.js +15 -0
  1793. package/src/utils/pasteStore.js +93 -0
  1794. package/src/utils/path.js +140 -0
  1795. package/src/utils/pdf.js +236 -0
  1796. package/src/utils/pdfUtils.js +61 -0
  1797. package/src/utils/peerAddress.js +20 -0
  1798. package/src/utils/permissions/PermissionMode.js +95 -0
  1799. package/src/utils/permissions/PermissionPromptToolResultSchema.js +85 -0
  1800. package/src/utils/permissions/PermissionResult.js +11 -0
  1801. package/src/utils/permissions/PermissionRule.js +19 -0
  1802. package/src/utils/permissions/PermissionUpdate.js +268 -0
  1803. package/src/utils/permissions/PermissionUpdateSchema.js +61 -0
  1804. package/src/utils/permissions/autoModeState.js +31 -0
  1805. package/src/utils/permissions/bashClassifier.js +30 -0
  1806. package/src/utils/permissions/bypassPermissionsKillswitch.js +115 -0
  1807. package/src/utils/permissions/classifierDecision.js +86 -0
  1808. package/src/utils/permissions/classifierShared.js +28 -0
  1809. package/src/utils/permissions/dangerousPatterns.js +78 -0
  1810. package/src/utils/permissions/denialTracking.js +34 -0
  1811. package/src/utils/permissions/filesystem.js +1411 -0
  1812. package/src/utils/permissions/getNextPermissionMode.js +74 -0
  1813. package/src/utils/permissions/pathValidation.js +351 -0
  1814. package/src/utils/permissions/permissionExplainer.js +188 -0
  1815. package/src/utils/permissions/permissionRuleParser.js +175 -0
  1816. package/src/utils/permissions/permissionSetup.js +1162 -0
  1817. package/src/utils/permissions/permissions.js +1063 -0
  1818. package/src/utils/permissions/permissionsLoader.js +217 -0
  1819. package/src/utils/permissions/shadowedRuleDetection.js +149 -0
  1820. package/src/utils/permissions/shellRuleMatching.js +174 -0
  1821. package/src/utils/permissions/yoloClassifier.js +1193 -0
  1822. package/src/utils/planModeV2.js +75 -0
  1823. package/src/utils/plans.js +334 -0
  1824. package/src/utils/platform.js +122 -0
  1825. package/src/utils/plugins/addDirPluginSettings.js +53 -0
  1826. package/src/utils/plugins/cacheUtils.js +174 -0
  1827. package/src/utils/plugins/dependencyResolver.js +244 -0
  1828. package/src/utils/plugins/fetchTelemetry.js +108 -0
  1829. package/src/utils/plugins/gitAvailability.js +65 -0
  1830. package/src/utils/plugins/headlessPluginInstall.js +136 -0
  1831. package/src/utils/plugins/hintRecommendation.js +136 -0
  1832. package/src/utils/plugins/installCounts.js +221 -0
  1833. package/src/utils/plugins/installedPluginsManager.js +1003 -0
  1834. package/src/utils/plugins/loadPluginAgents.js +219 -0
  1835. package/src/utils/plugins/loadPluginCommands.js +595 -0
  1836. package/src/utils/plugins/loadPluginHooks.js +239 -0
  1837. package/src/utils/plugins/loadPluginOutputStyles.js +112 -0
  1838. package/src/utils/plugins/lspPluginIntegration.js +293 -0
  1839. package/src/utils/plugins/lspRecommendation.js +278 -0
  1840. package/src/utils/plugins/managedPlugins.js +26 -0
  1841. package/src/utils/plugins/marketplaceHelpers.js +470 -0
  1842. package/src/utils/plugins/marketplaceManager.js +1939 -0
  1843. package/src/utils/plugins/mcpPluginIntegration.js +465 -0
  1844. package/src/utils/plugins/mcpbHandler.js +708 -0
  1845. package/src/utils/plugins/officialMarketplace.js +19 -0
  1846. package/src/utils/plugins/officialMarketplaceGcs.js +202 -0
  1847. package/src/utils/plugins/officialMarketplaceStartupCheck.js +344 -0
  1848. package/src/utils/plugins/orphanedPluginFilter.js +96 -0
  1849. package/src/utils/plugins/parseMarketplaceInput.js +143 -0
  1850. package/src/utils/plugins/performStartupChecks.js +66 -0
  1851. package/src/utils/plugins/pluginAutoupdate.js +210 -0
  1852. package/src/utils/plugins/pluginBlocklist.js +93 -0
  1853. package/src/utils/plugins/pluginDirectories.js +170 -0
  1854. package/src/utils/plugins/pluginFlagging.js +173 -0
  1855. package/src/utils/plugins/pluginIdentifier.js +78 -0
  1856. package/src/utils/plugins/pluginInstallationHelpers.js +400 -0
  1857. package/src/utils/plugins/pluginLoader.js +2426 -0
  1858. package/src/utils/plugins/pluginOptionsStorage.js +311 -0
  1859. package/src/utils/plugins/pluginPolicy.js +18 -0
  1860. package/src/utils/plugins/pluginStartupCheck.js +261 -0
  1861. package/src/utils/plugins/pluginVersioning.js +128 -0
  1862. package/src/utils/plugins/reconciler.js +181 -0
  1863. package/src/utils/plugins/refresh.js +162 -0
  1864. package/src/utils/plugins/schemas.js +1283 -0
  1865. package/src/utils/plugins/validatePlugin.js +765 -0
  1866. package/src/utils/plugins/walkPluginMarkdown.js +49 -0
  1867. package/src/utils/plugins/zipCache.js +346 -0
  1868. package/src/utils/plugins/zipCacheAdapters.js +133 -0
  1869. package/src/utils/powershell/dangerousCmdlets.js +174 -0
  1870. package/src/utils/powershell/parser.js +1357 -0
  1871. package/src/utils/powershell/staticPrefix.js +277 -0
  1872. package/src/utils/preflightChecks.js +147 -0
  1873. package/src/utils/privacyLevel.js +49 -0
  1874. package/src/utils/process.js +56 -0
  1875. package/src/utils/processUserInput/processBashCommand.js +118 -0
  1876. package/src/utils/processUserInput/processSlashCommand.js +845 -0
  1877. package/src/utils/processUserInput/processTextPrompt.js +68 -0
  1878. package/src/utils/processUserInput/processUserInput.js +344 -0
  1879. package/src/utils/profilerBase.js +32 -0
  1880. package/src/utils/promptCategory.js +39 -0
  1881. package/src/utils/promptEditor.js +151 -0
  1882. package/src/utils/promptShellExecution.js +117 -0
  1883. package/src/utils/protectedNamespace.js +4 -0
  1884. package/src/utils/proxy.js +345 -0
  1885. package/src/utils/queryContext.js +110 -0
  1886. package/src/utils/queryHelpers.js +436 -0
  1887. package/src/utils/queryProfiler.js +242 -0
  1888. package/src/utils/queueProcessor.js +70 -0
  1889. package/src/utils/readEditContext.js +176 -0
  1890. package/src/utils/readFileInRange.js +278 -0
  1891. package/src/utils/releaseNotes.js +307 -0
  1892. package/src/utils/renderOptions.js +67 -0
  1893. package/src/utils/ripgrep.js +521 -0
  1894. package/src/utils/sandbox/sandbox-adapter.js +750 -0
  1895. package/src/utils/sandbox/sandbox-ui-utils.js +11 -0
  1896. package/src/utils/sanitization.js +72 -0
  1897. package/src/utils/screenshotClipboard.js +89 -0
  1898. package/src/utils/sdkEventQueue.js +49 -0
  1899. package/src/utils/secureStorage/fallbackStorage.js +59 -0
  1900. package/src/utils/secureStorage/index.js +13 -0
  1901. package/src/utils/secureStorage/keychainPrefetch.js +91 -0
  1902. package/src/utils/secureStorage/macOsKeychainHelpers.js +91 -0
  1903. package/src/utils/secureStorage/macOsKeychainStorage.js +192 -0
  1904. package/src/utils/secureStorage/plainTextStorage.js +81 -0
  1905. package/src/utils/semanticBoolean.js +23 -0
  1906. package/src/utils/semanticNumber.js +34 -0
  1907. package/src/utils/semver.js +51 -0
  1908. package/src/utils/sequential.js +43 -0
  1909. package/src/utils/sessionActivity.js +120 -0
  1910. package/src/utils/sessionEnvVars.js +18 -0
  1911. package/src/utils/sessionEnvironment.js +131 -0
  1912. package/src/utils/sessionFileAccessHooks.js +205 -0
  1913. package/src/utils/sessionIngressAuth.js +113 -0
  1914. package/src/utils/sessionRestore.js +357 -0
  1915. package/src/utils/sessionStart.js +165 -0
  1916. package/src/utils/sessionState.js +76 -0
  1917. package/src/utils/sessionStorage.js +4162 -0
  1918. package/src/utils/sessionStoragePortable.js +665 -0
  1919. package/src/utils/sessionTitle.js +120 -0
  1920. package/src/utils/sessionUrl.js +50 -0
  1921. package/src/utils/set.js +50 -0
  1922. package/src/utils/settings/allErrors.js +29 -0
  1923. package/src/utils/settings/applySettingsChange.js +65 -0
  1924. package/src/utils/settings/changeDetector.js +409 -0
  1925. package/src/utils/settings/constants.js +166 -0
  1926. package/src/utils/settings/internalWrites.js +33 -0
  1927. package/src/utils/settings/managedPath.js +29 -0
  1928. package/src/utils/settings/mdm/constants.js +62 -0
  1929. package/src/utils/settings/mdm/rawRead.js +97 -0
  1930. package/src/utils/settings/mdm/settings.js +254 -0
  1931. package/src/utils/settings/permissionValidation.js +224 -0
  1932. package/src/utils/settings/pluginOnlyPolicy.js +53 -0
  1933. package/src/utils/settings/schemaOutput.js +7 -0
  1934. package/src/utils/settings/settings.js +791 -0
  1935. package/src/utils/settings/settingsCache.js +47 -0
  1936. package/src/utils/settings/toolValidationConfig.js +76 -0
  1937. package/src/utils/settings/types.js +846 -0
  1938. package/src/utils/settings/validateEditTool.js +34 -0
  1939. package/src/utils/settings/validation.js +192 -0
  1940. package/src/utils/settings/validationTips.js +111 -0
  1941. package/src/utils/shell/bashProvider.js +202 -0
  1942. package/src/utils/shell/outputLimits.js +7 -0
  1943. package/src/utils/shell/powershellDetection.js +96 -0
  1944. package/src/utils/shell/powershellProvider.js +104 -0
  1945. package/src/utils/shell/prefix.js +246 -0
  1946. package/src/utils/shell/readOnlyCommandValidation.js +1776 -0
  1947. package/src/utils/shell/resolveDefaultShell.js +13 -0
  1948. package/src/utils/shell/shellProvider.js +2 -0
  1949. package/src/utils/shell/shellToolUtils.js +21 -0
  1950. package/src/utils/shell/specPrefix.js +198 -0
  1951. package/src/utils/shellConfig.js +136 -0
  1952. package/src/utils/sideQuery.js +134 -0
  1953. package/src/utils/sideQuestion.js +121 -0
  1954. package/src/utils/signal.js +34 -0
  1955. package/src/utils/sinks.js +15 -0
  1956. package/src/utils/skills/skillChangeDetector.js +264 -0
  1957. package/src/utils/slashCommandParsing.js +46 -0
  1958. package/src/utils/sleep.js +72 -0
  1959. package/src/utils/sliceAnsi.js +74 -0
  1960. package/src/utils/slowOperations.js +216 -0
  1961. package/src/utils/standaloneAgent.js +20 -0
  1962. package/src/utils/startupProfiler.js +149 -0
  1963. package/src/utils/staticRender.js +104 -0
  1964. package/src/utils/stats.js +802 -0
  1965. package/src/utils/statsCache.js +330 -0
  1966. package/src/utils/status.js +359 -0
  1967. package/src/utils/statusNoticeDefinitions.js +123 -0
  1968. package/src/utils/statusNoticeHelpers.js +15 -0
  1969. package/src/utils/stream.js +73 -0
  1970. package/src/utils/streamJsonStdoutGuard.js +107 -0
  1971. package/src/utils/streamlinedTransform.js +162 -0
  1972. package/src/utils/stringUtils.js +202 -0
  1973. package/src/utils/subprocessEnv.js +87 -0
  1974. package/src/utils/suggestions/commandSuggestions.js +458 -0
  1975. package/src/utils/suggestions/directoryCompletion.js +191 -0
  1976. package/src/utils/suggestions/shellHistoryCompletion.js +95 -0
  1977. package/src/utils/suggestions/skillUsageTracking.js +50 -0
  1978. package/src/utils/suggestions/slackChannelSuggestions.js +169 -0
  1979. package/src/utils/swarm/It2SetupPrompt.js +386 -0
  1980. package/src/utils/swarm/backends/ITermBackend.js +276 -0
  1981. package/src/utils/swarm/backends/InProcessBackend.js +237 -0
  1982. package/src/utils/swarm/backends/PaneBackendExecutor.js +250 -0
  1983. package/src/utils/swarm/backends/TmuxBackend.js +574 -0
  1984. package/src/utils/swarm/backends/detection.js +112 -0
  1985. package/src/utils/swarm/backends/it2Setup.js +185 -0
  1986. package/src/utils/swarm/backends/registry.js +369 -0
  1987. package/src/utils/swarm/backends/teammateModeSnapshot.js +68 -0
  1988. package/src/utils/swarm/backends/types.js +9 -0
  1989. package/src/utils/swarm/constants.js +29 -0
  1990. package/src/utils/swarm/inProcessRunner.js +1021 -0
  1991. package/src/utils/swarm/leaderPermissionBridge.js +31 -0
  1992. package/src/utils/swarm/permissionSync.js +667 -0
  1993. package/src/utils/swarm/reconnection.js +82 -0
  1994. package/src/utils/swarm/spawnInProcess.js +218 -0
  1995. package/src/utils/swarm/spawnUtils.js +123 -0
  1996. package/src/utils/swarm/teamHelpers.js +484 -0
  1997. package/src/utils/swarm/teammateInit.js +87 -0
  1998. package/src/utils/swarm/teammateLayoutManager.js +82 -0
  1999. package/src/utils/swarm/teammateModel.js +9 -0
  2000. package/src/utils/swarm/teammatePromptAddendum.js +17 -0
  2001. package/src/utils/systemDirectories.js +51 -0
  2002. package/src/utils/systemPrompt.js +88 -0
  2003. package/src/utils/systemPromptType.js +9 -0
  2004. package/src/utils/systemTheme.js +108 -0
  2005. package/src/utils/taggedId.js +49 -0
  2006. package/src/utils/task/TaskOutput.js +320 -0
  2007. package/src/utils/task/diskOutput.js +387 -0
  2008. package/src/utils/task/framework.js +236 -0
  2009. package/src/utils/task/outputFormatting.js +24 -0
  2010. package/src/utils/task/sdkProgress.js +24 -0
  2011. package/src/utils/taskSummary.js +3 -0
  2012. package/src/utils/tasks.js +672 -0
  2013. package/src/utils/teamDiscovery.js +48 -0
  2014. package/src/utils/teamMemoryOps.js +67 -0
  2015. package/src/utils/teammate.js +237 -0
  2016. package/src/utils/teammateContext.js +56 -0
  2017. package/src/utils/teammateMailbox.js +793 -0
  2018. package/src/utils/telemetry/betaSessionTracing.js +25 -0
  2019. package/src/utils/telemetry/bigqueryExporter.js +17 -0
  2020. package/src/utils/telemetry/events.js +7 -0
  2021. package/src/utils/telemetry/instrumentation.js +16 -0
  2022. package/src/utils/telemetry/logger.js +25 -0
  2023. package/src/utils/telemetry/perfettoTracing.js +882 -0
  2024. package/src/utils/telemetry/pluginTelemetry.js +76 -0
  2025. package/src/utils/telemetry/sessionTracing.js +62 -0
  2026. package/src/utils/telemetry/skillLoadedEvent.js +4 -0
  2027. package/src/utils/telemetryAttributes.js +56 -0
  2028. package/src/utils/teleport/api.js +299 -0
  2029. package/src/utils/teleport/environmentSelection.js +55 -0
  2030. package/src/utils/teleport/environments.js +84 -0
  2031. package/src/utils/teleport/gitBundle.js +192 -0
  2032. package/src/utils/teleport.js +1047 -0
  2033. package/src/utils/tempfile.js +26 -0
  2034. package/src/utils/terminal.js +105 -0
  2035. package/src/utils/terminalPanel.js +155 -0
  2036. package/src/utils/textHighlighting.js +113 -0
  2037. package/src/utils/thaddeusHints.js +142 -0
  2038. package/src/utils/theme.js +525 -0
  2039. package/src/utils/thinking.js +130 -0
  2040. package/src/utils/timeouts.js +35 -0
  2041. package/src/utils/tmuxSocket.js +373 -0
  2042. package/src/utils/todo/types.js +9 -0
  2043. package/src/utils/tokenBudget.js +62 -0
  2044. package/src/utils/tokens.js +223 -0
  2045. package/src/utils/toolErrors.js +101 -0
  2046. package/src/utils/toolPool.js +61 -0
  2047. package/src/utils/toolResultStorage.js +768 -0
  2048. package/src/utils/toolSchemaCache.js +7 -0
  2049. package/src/utils/toolSearch.js +551 -0
  2050. package/src/utils/transcriptSearch.js +200 -0
  2051. package/src/utils/treeify.js +111 -0
  2052. package/src/utils/truncate.js +164 -0
  2053. package/src/utils/udsClient.js +5 -0
  2054. package/src/utils/udsMessaging.js +23 -0
  2055. package/src/utils/ultraplan/ccrSession.js +264 -0
  2056. package/src/utils/ultraplan/keyword.js +122 -0
  2057. package/src/utils/unaryLogging.js +16 -0
  2058. package/src/utils/undercover.js +89 -0
  2059. package/src/utils/user.js +137 -0
  2060. package/src/utils/userAgent.js +9 -0
  2061. package/src/utils/userPromptKeywords.js +21 -0
  2062. package/src/utils/uuid.js +22 -0
  2063. package/src/utils/warningHandler.js +97 -0
  2064. package/src/utils/which.js +75 -0
  2065. package/src/utils/windowsPaths.js +146 -0
  2066. package/src/utils/withResolvers.js +13 -0
  2067. package/src/utils/words.js +793 -0
  2068. package/src/utils/workforceIntent.js +192 -0
  2069. package/src/utils/workloadContext.js +42 -0
  2070. package/src/utils/worktree.js +1142 -0
  2071. package/src/utils/worktreeModeEnabled.js +11 -0
  2072. package/src/utils/xdg.js +52 -0
  2073. package/src/utils/xml.js +15 -0
  2074. package/src/utils/yaml.js +14 -0
  2075. package/src/utils/zodToJsonSchema.js +19 -0
  2076. package/src/vim/motions.js +73 -0
  2077. package/src/vim/operators.js +401 -0
  2078. package/src/vim/textObjects.js +153 -0
  2079. package/src/vim/transitions.js +340 -0
  2080. package/src/vim/types.js +93 -0
  2081. package/src/voice/voiceModeEnabled.js +20 -0
  2082. package/thaddeus-terminal.ts +401 -3
@@ -0,0 +1,1783 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import figures from 'figures';
3
+ import * as fs from 'fs/promises';
4
+ import * as path from 'path';
5
+ import * as React from 'react';
6
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { ConfigurableShortcutHint } from '../../components/ConfigurableShortcutHint.js';
8
+ import { Byline } from '../../components/design-system/Byline.js';
9
+ import { MCPRemoteServerMenu } from '../../components/mcp/MCPRemoteServerMenu.js';
10
+ import { MCPStdioServerMenu } from '../../components/mcp/MCPStdioServerMenu.js';
11
+ import { MCPToolDetailView } from '../../components/mcp/MCPToolDetailView.js';
12
+ import { MCPToolListView } from '../../components/mcp/MCPToolListView.js';
13
+ import { SearchBox } from '../../components/SearchBox.js';
14
+ import { useSearchInput } from '../../hooks/useSearchInput.js';
15
+ import { useTerminalSize } from '../../hooks/useTerminalSize.js';
16
+ // eslint-disable-next-line custom-rules/prefer-use-keybindings -- useInput needed for raw search mode text input
17
+ import { Box, Text, useInput, useTerminalFocus } from '../../ink.js';
18
+ import { useKeybinding, useKeybindings } from '../../keybindings/useKeybinding.js';
19
+ import { getBuiltinPluginDefinition } from '../../plugins/builtinPlugins.js';
20
+ import { useMcpToggleEnabled } from '../../services/mcp/MCPConnectionManager.js';
21
+ import { filterToolsByServer } from '../../services/mcp/utils.js';
22
+ import { disablePluginOp, enablePluginOp, getPluginInstallationFromV2, isInstallableScope, isPluginEnabledAtProjectScope, uninstallPluginOp, updatePluginOp } from '../../services/plugins/pluginOperations.js';
23
+ import { useAppState } from '../../state/AppState.js';
24
+ import { count } from '../../utils/array.js';
25
+ import { openBrowser } from '../../utils/browser.js';
26
+ import { logForDebugging } from '../../utils/debug.js';
27
+ import { errorMessage, toError } from '../../utils/errors.js';
28
+ import { logError } from '../../utils/log.js';
29
+ import { clearAllCaches } from '../../utils/plugins/cacheUtils.js';
30
+ import { loadInstalledPluginsV2 } from '../../utils/plugins/installedPluginsManager.js';
31
+ import { getMarketplace } from '../../utils/plugins/marketplaceManager.js';
32
+ import { isMcpbSource, loadMcpbFile } from '../../utils/plugins/mcpbHandler.js';
33
+ import { getPluginDataDirSize, pluginDataDirPath } from '../../utils/plugins/pluginDirectories.js';
34
+ import { getFlaggedPlugins, markFlaggedPluginsSeen, removeFlaggedPlugin } from '../../utils/plugins/pluginFlagging.js';
35
+ import { parsePluginIdentifier } from '../../utils/plugins/pluginIdentifier.js';
36
+ import { loadAllPlugins } from '../../utils/plugins/pluginLoader.js';
37
+ import { loadPluginOptions, savePluginOptions } from '../../utils/plugins/pluginOptionsStorage.js';
38
+ import { isPluginBlockedByPolicy } from '../../utils/plugins/pluginPolicy.js';
39
+ import { getPluginEditableScopes } from '../../utils/plugins/pluginStartupCheck.js';
40
+ import { getSettings_DEPRECATED, getSettingsForSource, updateSettingsForSource } from '../../utils/settings/settings.js';
41
+ import { jsonParse } from '../../utils/slowOperations.js';
42
+ import { plural } from '../../utils/stringUtils.js';
43
+ import { formatErrorMessage, getErrorGuidance } from './PluginErrors.js';
44
+ import { PluginOptionsDialog } from './PluginOptionsDialog.js';
45
+ import { PluginOptionsFlow } from './PluginOptionsFlow.js';
46
+ import { UnifiedInstalledCell } from './UnifiedInstalledCell.js';
47
+ import { usePagination } from './usePagination.js';
48
+ /**
49
+ * Get list of base file names (without .md extension) from a directory
50
+ * @param dirPath The directory path to list files from
51
+ * @returns Array of base file names without .md extension
52
+ * @example
53
+ * // Given directory contains: agent-sdk-verifier-py.md, agent-sdk-verifier-ts.md, README.txt
54
+ * await getBaseFileNames('/path/to/agents')
55
+ * // Returns: ['agent-sdk-verifier-py', 'agent-sdk-verifier-ts']
56
+ */
57
+ async function getBaseFileNames(dirPath) {
58
+ try {
59
+ const entries = await fs.readdir(dirPath, {
60
+ withFileTypes: true
61
+ });
62
+ return entries.filter((entry) => entry.isFile() && entry.name.endsWith('.md')).map((entry) => {
63
+ // Remove .md extension specifically
64
+ const baseName = path.basename(entry.name, '.md');
65
+ return baseName;
66
+ });
67
+ }
68
+ catch (error) {
69
+ const errorMsg = errorMessage(error);
70
+ logForDebugging(`Failed to read plugin components from ${dirPath}: ${errorMsg}`, {
71
+ level: 'error'
72
+ });
73
+ logError(toError(error));
74
+ // Return empty array to allow graceful degradation - plugin details can still be shown
75
+ return [];
76
+ }
77
+ }
78
+ /**
79
+ * Get list of skill directory names from a skills directory
80
+ * Skills are directories containing a SKILL.md file
81
+ * @param dirPath The skills directory path to scan
82
+ * @returns Array of skill directory names that contain SKILL.md
83
+ * @example
84
+ * // Given directory contains: my-skill/SKILL.md, another-skill/SKILL.md, README.txt
85
+ * await getSkillDirNames('/path/to/skills')
86
+ * // Returns: ['my-skill', 'another-skill']
87
+ */
88
+ async function getSkillDirNames(dirPath) {
89
+ try {
90
+ const entries = await fs.readdir(dirPath, {
91
+ withFileTypes: true
92
+ });
93
+ const skillNames = [];
94
+ for (const entry of entries) {
95
+ // Check if it's a directory or symlink (symlinks may point to skill directories)
96
+ if (entry.isDirectory() || entry.isSymbolicLink()) {
97
+ // Check if this directory contains a SKILL.md file
98
+ const skillFilePath = path.join(dirPath, entry.name, 'SKILL.md');
99
+ try {
100
+ const st = await fs.stat(skillFilePath);
101
+ if (st.isFile()) {
102
+ skillNames.push(entry.name);
103
+ }
104
+ }
105
+ catch {
106
+ // No SKILL.md file in this directory, skip it
107
+ }
108
+ }
109
+ }
110
+ return skillNames;
111
+ }
112
+ catch (error) {
113
+ const errorMsg = errorMessage(error);
114
+ logForDebugging(`Failed to read skill directories from ${dirPath}: ${errorMsg}`, {
115
+ level: 'error'
116
+ });
117
+ logError(toError(error));
118
+ // Return empty array to allow graceful degradation - plugin details can still be shown
119
+ return [];
120
+ }
121
+ }
122
+ // Component to display installed plugin components
123
+ function PluginComponentsDisplay({ plugin, marketplace }) {
124
+ const [components, setComponents] = useState(null);
125
+ const [loading, setLoading] = useState(true);
126
+ const [error, setError] = useState(null);
127
+ useEffect(() => {
128
+ async function loadComponents() {
129
+ try {
130
+ // Built-in plugins don't have a marketplace entry — read from the
131
+ // registered definition directly.
132
+ if (marketplace === 'builtin') {
133
+ const builtinDef = getBuiltinPluginDefinition(plugin.name);
134
+ if (builtinDef) {
135
+ const skillNames = builtinDef.skills?.map(s => s.name) ?? [];
136
+ const hookEvents = builtinDef.hooks ? Object.keys(builtinDef.hooks) : [];
137
+ const mcpServerNames = builtinDef.mcpServers ? Object.keys(builtinDef.mcpServers) : [];
138
+ setComponents({
139
+ commands: null,
140
+ agents: null,
141
+ skills: skillNames.length > 0 ? skillNames : null,
142
+ hooks: hookEvents.length > 0 ? hookEvents : null,
143
+ mcpServers: mcpServerNames.length > 0 ? mcpServerNames : null
144
+ });
145
+ }
146
+ else {
147
+ setError(`Built-in plugin ${plugin.name} not found`);
148
+ }
149
+ setLoading(false);
150
+ return;
151
+ }
152
+ const marketplaceData = await getMarketplace(marketplace);
153
+ // Find the plugin entry in the array
154
+ const pluginEntry = marketplaceData.plugins.find(p => p.name === plugin.name);
155
+ if (pluginEntry) {
156
+ // Combine commands from both sources
157
+ const commandPathList = [];
158
+ if (plugin.commandsPath) {
159
+ commandPathList.push(plugin.commandsPath);
160
+ }
161
+ if (plugin.commandsPaths) {
162
+ commandPathList.push(...plugin.commandsPaths);
163
+ }
164
+ // Get base file names from all command paths
165
+ const commandList = [];
166
+ for (const commandPath of commandPathList) {
167
+ if (typeof commandPath === 'string') {
168
+ // commandPath is already a full path
169
+ const baseNames = await getBaseFileNames(commandPath);
170
+ commandList.push(...baseNames);
171
+ }
172
+ }
173
+ // Combine agents from both sources
174
+ const agentPathList = [];
175
+ if (plugin.agentsPath) {
176
+ agentPathList.push(plugin.agentsPath);
177
+ }
178
+ if (plugin.agentsPaths) {
179
+ agentPathList.push(...plugin.agentsPaths);
180
+ }
181
+ // Get base file names from all agent paths
182
+ const agentList = [];
183
+ for (const agentPath of agentPathList) {
184
+ if (typeof agentPath === 'string') {
185
+ // agentPath is already a full path
186
+ const baseNames_0 = await getBaseFileNames(agentPath);
187
+ agentList.push(...baseNames_0);
188
+ }
189
+ }
190
+ // Combine skills from both sources
191
+ const skillPathList = [];
192
+ if (plugin.skillsPath) {
193
+ skillPathList.push(plugin.skillsPath);
194
+ }
195
+ if (plugin.skillsPaths) {
196
+ skillPathList.push(...plugin.skillsPaths);
197
+ }
198
+ // Get skill directory names from all skill paths
199
+ // Skills are directories containing SKILL.md files
200
+ const skillList = [];
201
+ for (const skillPath of skillPathList) {
202
+ if (typeof skillPath === 'string') {
203
+ // skillPath is already a full path to a skills directory
204
+ const skillDirNames = await getSkillDirNames(skillPath);
205
+ skillList.push(...skillDirNames);
206
+ }
207
+ }
208
+ // Combine hooks from both sources
209
+ const hooksList = [];
210
+ if (plugin.hooksConfig) {
211
+ hooksList.push(Object.keys(plugin.hooksConfig));
212
+ }
213
+ if (pluginEntry.hooks) {
214
+ hooksList.push(pluginEntry.hooks);
215
+ }
216
+ // Combine MCP servers from both sources
217
+ const mcpServersList = [];
218
+ if (plugin.mcpServers) {
219
+ mcpServersList.push(Object.keys(plugin.mcpServers));
220
+ }
221
+ if (pluginEntry.mcpServers) {
222
+ mcpServersList.push(pluginEntry.mcpServers);
223
+ }
224
+ setComponents({
225
+ commands: commandList.length > 0 ? commandList : null,
226
+ agents: agentList.length > 0 ? agentList : null,
227
+ skills: skillList.length > 0 ? skillList : null,
228
+ hooks: hooksList.length > 0 ? hooksList : null,
229
+ mcpServers: mcpServersList.length > 0 ? mcpServersList : null
230
+ });
231
+ }
232
+ else {
233
+ setError(`Plugin ${plugin.name} not found in marketplace`);
234
+ }
235
+ }
236
+ catch (err) {
237
+ setError(err instanceof Error ? err.message : 'Failed to load components');
238
+ }
239
+ finally {
240
+ setLoading(false);
241
+ }
242
+ }
243
+ void loadComponents();
244
+ }, [plugin.name, plugin.commandsPath, plugin.commandsPaths, plugin.agentsPath, plugin.agentsPaths, plugin.skillsPath, plugin.skillsPaths, plugin.hooksConfig, plugin.mcpServers, marketplace]);
245
+ if (loading) {
246
+ return null; // Don't show loading state for cleaner UI
247
+ }
248
+ if (error) {
249
+ return _jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Components:" }), _jsxs(Text, { dimColor: true, children: ["Error: ", error] })] });
250
+ }
251
+ if (!components) {
252
+ return null; // No components info available
253
+ }
254
+ const hasComponents = components.commands || components.agents || components.skills || components.hooks || components.mcpServers;
255
+ if (!hasComponents) {
256
+ return null; // No components defined
257
+ }
258
+ return _jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Installed components:" }), components.commands ? _jsxs(Text, { dimColor: true, children: ["\u2022 Commands:", ' ', typeof components.commands === 'string' ? components.commands : Array.isArray(components.commands) ? components.commands.join(', ') : Object.keys(components.commands).join(', ')] }) : null, components.agents ? _jsxs(Text, { dimColor: true, children: ["\u2022 Agents:", ' ', typeof components.agents === 'string' ? components.agents : Array.isArray(components.agents) ? components.agents.join(', ') : Object.keys(components.agents).join(', ')] }) : null, components.skills ? _jsxs(Text, { dimColor: true, children: ["\u2022 Skills:", ' ', typeof components.skills === 'string' ? components.skills : Array.isArray(components.skills) ? components.skills.join(', ') : Object.keys(components.skills).join(', ')] }) : null, components.hooks ? _jsxs(Text, { dimColor: true, children: ["\u2022 Hooks:", ' ', typeof components.hooks === 'string' ? components.hooks : Array.isArray(components.hooks) ? components.hooks.map(String).join(', ') : typeof components.hooks === 'object' && components.hooks !== null ? Object.keys(components.hooks).join(', ') : String(components.hooks)] }) : null, components.mcpServers ? _jsxs(Text, { dimColor: true, children: ["\u2022 MCP Servers:", ' ', typeof components.mcpServers === 'string' ? components.mcpServers : Array.isArray(components.mcpServers) ? components.mcpServers.map(String).join(', ') : typeof components.mcpServers === 'object' && components.mcpServers !== null ? Object.keys(components.mcpServers).join(', ') : String(components.mcpServers)] }) : null] });
259
+ }
260
+ /**
261
+ * Check if a plugin is from a local source and cannot be remotely updated
262
+ * @returns Error message if local, null if remote/updatable
263
+ */
264
+ async function checkIfLocalPlugin(pluginName, marketplaceName) {
265
+ const marketplace = await getMarketplace(marketplaceName);
266
+ const entry = marketplace?.plugins.find(p => p.name === pluginName);
267
+ if (entry && typeof entry.source === 'string') {
268
+ return `Local plugins cannot be updated remotely. To update, modify the source at: ${entry.source}`;
269
+ }
270
+ return null;
271
+ }
272
+ /**
273
+ * Filter out plugins that are force-disabled by org policy (policySettings).
274
+ * These are blocked by the organization and cannot be re-enabled by the user.
275
+ * Checks policySettings directly rather than installation scope, since managed
276
+ * settings don't create installation records with scope 'managed'.
277
+ */
278
+ export function filterManagedDisabledPlugins(plugins) {
279
+ return plugins.filter(plugin => {
280
+ const marketplace = plugin.source.split('@')[1] || 'local';
281
+ return !isPluginBlockedByPolicy(`${plugin.name}@${marketplace}`);
282
+ });
283
+ }
284
+ export function ManagePlugins({ setViewState: setParentViewState, setResult, onManageComplete, onSearchModeChange, targetPlugin, targetMarketplace, action }) {
285
+ // App state for MCP access
286
+ const mcpClients = useAppState(s => s.mcp.clients);
287
+ const mcpTools = useAppState(s_0 => s_0.mcp.tools);
288
+ const pluginErrors = useAppState(s_1 => s_1.plugins.errors);
289
+ const flaggedPlugins = getFlaggedPlugins();
290
+ // Search state
291
+ const [isSearchMode, setIsSearchModeRaw] = useState(false);
292
+ const setIsSearchMode = useCallback((active) => {
293
+ setIsSearchModeRaw(active);
294
+ onSearchModeChange?.(active);
295
+ }, [onSearchModeChange]);
296
+ const isTerminalFocused = useTerminalFocus();
297
+ const { columns: terminalWidth } = useTerminalSize();
298
+ // View state
299
+ const [viewState, setViewState] = useState('plugin-list');
300
+ const { query: searchQuery, setQuery: setSearchQuery, cursorOffset: searchCursorOffset } = useSearchInput({
301
+ isActive: viewState === 'plugin-list' && isSearchMode,
302
+ onExit: () => {
303
+ setIsSearchMode(false);
304
+ }
305
+ });
306
+ const [selectedPlugin, setSelectedPlugin] = useState(null);
307
+ // Data state
308
+ const [marketplaces, setMarketplaces] = useState([]);
309
+ const [pluginStates, setPluginStates] = useState([]);
310
+ const [loading, setLoading] = useState(true);
311
+ const [pendingToggles, setPendingToggles] = useState(new Map());
312
+ // Guard to prevent auto-navigation from re-triggering after the user
313
+ // navigates away (targetPlugin is never cleared by the parent).
314
+ const hasAutoNavigated = useRef(false);
315
+ // Auto-action (enable/disable/uninstall) to fire after auto-navigation lands.
316
+ // Ref, not state: it's consumed by a one-shot effect that already re-runs on
317
+ // viewState/selectedPlugin, so a render-triggering state var would be redundant.
318
+ const pendingAutoActionRef = useRef(undefined);
319
+ // MCP toggle hook
320
+ const toggleMcpServer = useMcpToggleEnabled();
321
+ // Handle escape to go back - viewState-dependent navigation
322
+ const handleBack = React.useCallback(() => {
323
+ if (viewState === 'plugin-details') {
324
+ setViewState('plugin-list');
325
+ setSelectedPlugin(null);
326
+ setProcessError(null);
327
+ }
328
+ else if (typeof viewState === 'object' && viewState.type === 'failed-plugin-details') {
329
+ setViewState('plugin-list');
330
+ setProcessError(null);
331
+ }
332
+ else if (viewState === 'configuring') {
333
+ setViewState('plugin-details');
334
+ setConfigNeeded(null);
335
+ }
336
+ else if (typeof viewState === 'object' && (viewState.type === 'plugin-options' || viewState.type === 'configuring-options')) {
337
+ // Cancel mid-sequence — plugin is already enabled, just bail to list.
338
+ // User can configure later via the Configure options menu if they want.
339
+ setViewState('plugin-list');
340
+ setSelectedPlugin(null);
341
+ setResult('Plugin enabled. Configuration skipped — run /reload-plugins to apply.');
342
+ if (onManageComplete) {
343
+ void onManageComplete();
344
+ }
345
+ }
346
+ else if (typeof viewState === 'object' && viewState.type === 'flagged-detail') {
347
+ setViewState('plugin-list');
348
+ setProcessError(null);
349
+ }
350
+ else if (typeof viewState === 'object' && viewState.type === 'mcp-detail') {
351
+ setViewState('plugin-list');
352
+ setProcessError(null);
353
+ }
354
+ else if (typeof viewState === 'object' && viewState.type === 'mcp-tools') {
355
+ setViewState({
356
+ type: 'mcp-detail',
357
+ client: viewState.client
358
+ });
359
+ }
360
+ else if (typeof viewState === 'object' && viewState.type === 'mcp-tool-detail') {
361
+ setViewState({
362
+ type: 'mcp-tools',
363
+ client: viewState.client
364
+ });
365
+ }
366
+ else {
367
+ if (pendingToggles.size > 0) {
368
+ setResult('Run /reload-plugins to apply plugin changes.');
369
+ return;
370
+ }
371
+ setParentViewState({
372
+ type: 'menu'
373
+ });
374
+ }
375
+ }, [viewState, setParentViewState, pendingToggles, setResult]);
376
+ // Escape when not in search mode - go back.
377
+ // Excludes confirm-project-uninstall (has its own confirm:no handler in
378
+ // Confirmation context — letting this fire would create competing handlers)
379
+ // and confirm-data-cleanup (uses raw useInput where n and escape are
380
+ // DIFFERENT actions: keep-data vs cancel).
381
+ useKeybinding('confirm:no', handleBack, {
382
+ context: 'Confirmation',
383
+ isActive: (viewState !== 'plugin-list' || !isSearchMode) && viewState !== 'confirm-project-uninstall' && !(typeof viewState === 'object' && viewState.type === 'confirm-data-cleanup')
384
+ });
385
+ // Helper to get MCP status
386
+ const getMcpStatus = (client) => {
387
+ if (client.type === 'connected')
388
+ return 'connected';
389
+ if (client.type === 'disabled')
390
+ return 'disabled';
391
+ if (client.type === 'pending')
392
+ return 'pending';
393
+ if (client.type === 'needs-auth')
394
+ return 'needs-auth';
395
+ return 'failed';
396
+ };
397
+ // Derive unified items from plugins and MCP servers
398
+ const unifiedItems = useMemo(() => {
399
+ const mergedSettings = getSettings_DEPRECATED();
400
+ // Build map of plugin name -> child MCPs
401
+ // Plugin MCPs have names like "plugin:pluginName:serverName"
402
+ const pluginMcpMap = new Map();
403
+ for (const client_0 of mcpClients) {
404
+ if (client_0.name.startsWith('plugin:')) {
405
+ const parts = client_0.name.split(':');
406
+ if (parts.length >= 3) {
407
+ const pluginName = parts[1];
408
+ const serverName = parts.slice(2).join(':');
409
+ const existing = pluginMcpMap.get(pluginName) || [];
410
+ existing.push({
411
+ displayName: serverName,
412
+ client: client_0
413
+ });
414
+ pluginMcpMap.set(pluginName, existing);
415
+ }
416
+ }
417
+ }
418
+ const pluginsWithChildren = [];
419
+ for (const state of pluginStates) {
420
+ const pluginId = `${state.plugin.name}@${state.marketplace}`;
421
+ const isEnabled = mergedSettings?.enabledPlugins?.[pluginId] !== false;
422
+ const errors = pluginErrors.filter(e => 'plugin' in e && e.plugin === state.plugin.name || e.source === pluginId || e.source.startsWith(`${state.plugin.name}@`));
423
+ // Built-in plugins use 'builtin' scope; others look up from V2 data.
424
+ const originalScope = state.plugin.isBuiltin ? 'builtin' : state.scope || 'user';
425
+ pluginsWithChildren.push({
426
+ item: {
427
+ type: 'plugin',
428
+ id: pluginId,
429
+ name: state.plugin.name,
430
+ description: state.plugin.manifest.description,
431
+ marketplace: state.marketplace,
432
+ scope: originalScope,
433
+ isEnabled,
434
+ errorCount: errors.length,
435
+ errors,
436
+ plugin: state.plugin,
437
+ pendingEnable: state.pendingEnable,
438
+ pendingUpdate: state.pendingUpdate,
439
+ pendingToggle: pendingToggles.get(pluginId)
440
+ },
441
+ originalScope,
442
+ childMcps: pluginMcpMap.get(state.plugin.name) || []
443
+ });
444
+ }
445
+ // Find orphan errors (errors for plugins that failed to load entirely)
446
+ const matchedPluginIds = new Set(pluginsWithChildren.map(({ item }) => item.id));
447
+ const matchedPluginNames = new Set(pluginsWithChildren.map(({ item: item_0 }) => item_0.name));
448
+ const orphanErrorsBySource = new Map();
449
+ for (const error of pluginErrors) {
450
+ if (matchedPluginIds.has(error.source) || 'plugin' in error && typeof error.plugin === 'string' && matchedPluginNames.has(error.plugin)) {
451
+ continue;
452
+ }
453
+ const existing_0 = orphanErrorsBySource.get(error.source) || [];
454
+ existing_0.push(error);
455
+ orphanErrorsBySource.set(error.source, existing_0);
456
+ }
457
+ const pluginScopes = getPluginEditableScopes();
458
+ const failedPluginItems = [];
459
+ for (const [pluginId_0, errors_0] of orphanErrorsBySource) {
460
+ // Skip plugins that are already shown in the flagged section
461
+ if (pluginId_0 in flaggedPlugins)
462
+ continue;
463
+ const parsed = parsePluginIdentifier(pluginId_0);
464
+ const pluginName_0 = parsed.name || pluginId_0;
465
+ const marketplace = parsed.marketplace || 'unknown';
466
+ const rawScope = pluginScopes.get(pluginId_0);
467
+ // 'flag' is session-only (from --plugin-dir / flagSettings) and undefined
468
+ // means the plugin isn't in any settings source. Default both to 'user'
469
+ // since UnifiedInstalledItem doesn't have a 'flag' scope variant.
470
+ const scope = rawScope === 'flag' || rawScope === undefined ? 'user' : rawScope;
471
+ failedPluginItems.push({
472
+ type: 'failed-plugin',
473
+ id: pluginId_0,
474
+ name: pluginName_0,
475
+ marketplace,
476
+ scope,
477
+ errorCount: errors_0.length,
478
+ errors: errors_0
479
+ });
480
+ }
481
+ // Build standalone MCP items
482
+ const standaloneMcps = [];
483
+ for (const client_1 of mcpClients) {
484
+ if (client_1.name === 'ide')
485
+ continue;
486
+ if (client_1.name.startsWith('plugin:'))
487
+ continue;
488
+ standaloneMcps.push({
489
+ type: 'mcp',
490
+ id: `mcp:${client_1.name}`,
491
+ name: client_1.name,
492
+ description: undefined,
493
+ scope: client_1.config.scope,
494
+ status: getMcpStatus(client_1),
495
+ client: client_1
496
+ });
497
+ }
498
+ // Define scope order for display
499
+ const scopeOrder = {
500
+ flagged: -1,
501
+ project: 0,
502
+ local: 1,
503
+ user: 2,
504
+ enterprise: 3,
505
+ managed: 4,
506
+ dynamic: 5,
507
+ builtin: 6
508
+ };
509
+ // Build final list by merging plugins (with their child MCPs) and standalone MCPs
510
+ // Group by scope to avoid duplicate scope headers
511
+ const unified = [];
512
+ // Create a map of scope -> items for proper merging
513
+ const itemsByScope = new Map();
514
+ // Add plugins with their child MCPs
515
+ for (const { item: item_1, originalScope: originalScope_0, childMcps } of pluginsWithChildren) {
516
+ const scope_0 = item_1.scope;
517
+ if (!itemsByScope.has(scope_0)) {
518
+ itemsByScope.set(scope_0, []);
519
+ }
520
+ itemsByScope.get(scope_0).push(item_1);
521
+ // Add child MCPs right after the plugin, indented (use original scope, not 'flagged').
522
+ // Built-in plugins map to 'user' for display since MCP ConfigScope doesn't include 'builtin'.
523
+ for (const { displayName, client: client_2 } of childMcps) {
524
+ const displayScope = originalScope_0 === 'builtin' ? 'user' : originalScope_0;
525
+ if (!itemsByScope.has(displayScope)) {
526
+ itemsByScope.set(displayScope, []);
527
+ }
528
+ itemsByScope.get(displayScope).push({
529
+ type: 'mcp',
530
+ id: `mcp:${client_2.name}`,
531
+ name: displayName,
532
+ description: undefined,
533
+ scope: displayScope,
534
+ status: getMcpStatus(client_2),
535
+ client: client_2,
536
+ indented: true
537
+ });
538
+ }
539
+ }
540
+ // Add standalone MCPs to their respective scope groups
541
+ for (const mcp of standaloneMcps) {
542
+ const scope_1 = mcp.scope;
543
+ if (!itemsByScope.has(scope_1)) {
544
+ itemsByScope.set(scope_1, []);
545
+ }
546
+ itemsByScope.get(scope_1).push(mcp);
547
+ }
548
+ // Add failed plugins to their respective scope groups
549
+ for (const failedPlugin of failedPluginItems) {
550
+ const scope_2 = failedPlugin.scope;
551
+ if (!itemsByScope.has(scope_2)) {
552
+ itemsByScope.set(scope_2, []);
553
+ }
554
+ itemsByScope.get(scope_2).push(failedPlugin);
555
+ }
556
+ // Add flagged (delisted) plugins from user settings.
557
+ // Reason/text are looked up from the cached security messages file.
558
+ for (const [pluginId_1, entry] of Object.entries(flaggedPlugins)) {
559
+ const parsed_0 = parsePluginIdentifier(pluginId_1);
560
+ const pluginName_1 = parsed_0.name || pluginId_1;
561
+ const marketplace_0 = parsed_0.marketplace || 'unknown';
562
+ if (!itemsByScope.has('flagged')) {
563
+ itemsByScope.set('flagged', []);
564
+ }
565
+ itemsByScope.get('flagged').push({
566
+ type: 'flagged-plugin',
567
+ id: pluginId_1,
568
+ name: pluginName_1,
569
+ marketplace: marketplace_0,
570
+ scope: 'flagged',
571
+ reason: 'delisted',
572
+ text: 'Removed from marketplace',
573
+ flaggedAt: entry.flaggedAt
574
+ });
575
+ }
576
+ // Sort scopes and build final list
577
+ const sortedScopes = [...itemsByScope.keys()].sort((a, b) => (scopeOrder[a] ?? 99) - (scopeOrder[b] ?? 99));
578
+ for (const scope_3 of sortedScopes) {
579
+ const items = itemsByScope.get(scope_3);
580
+ // Separate items into plugin groups (with their child MCPs) and standalone MCPs
581
+ // This preserves parent-child relationships that would be broken by naive sorting
582
+ const pluginGroups = [];
583
+ const standaloneMcpsInScope = [];
584
+ let i = 0;
585
+ while (i < items.length) {
586
+ const item_2 = items[i];
587
+ if (item_2.type === 'plugin' || item_2.type === 'failed-plugin' || item_2.type === 'flagged-plugin') {
588
+ // Collect the plugin and its child MCPs as a group
589
+ const group = [item_2];
590
+ i++;
591
+ // Look ahead for indented child MCPs
592
+ let nextItem = items[i];
593
+ while (nextItem?.type === 'mcp' && nextItem.indented) {
594
+ group.push(nextItem);
595
+ i++;
596
+ nextItem = items[i];
597
+ }
598
+ pluginGroups.push(group);
599
+ }
600
+ else if (item_2.type === 'mcp' && !item_2.indented) {
601
+ // Standalone MCP (not a child of a plugin)
602
+ standaloneMcpsInScope.push(item_2);
603
+ i++;
604
+ }
605
+ else {
606
+ // Skip orphaned indented MCPs (shouldn't happen)
607
+ i++;
608
+ }
609
+ }
610
+ // Sort plugin groups by the plugin name (first item in each group)
611
+ pluginGroups.sort((a_0, b_0) => a_0[0].name.localeCompare(b_0[0].name));
612
+ // Sort standalone MCPs by name
613
+ standaloneMcpsInScope.sort((a_1, b_1) => a_1.name.localeCompare(b_1.name));
614
+ // Build final list: plugins (with their children) first, then standalone MCPs
615
+ for (const group_0 of pluginGroups) {
616
+ unified.push(...group_0);
617
+ }
618
+ unified.push(...standaloneMcpsInScope);
619
+ }
620
+ return unified;
621
+ }, [pluginStates, mcpClients, pluginErrors, pendingToggles, flaggedPlugins]);
622
+ // Mark flagged plugins as seen when the Installed view renders them.
623
+ // After 48 hours from seenAt, they auto-clear on next load.
624
+ const flaggedIds = useMemo(() => unifiedItems.filter(item_3 => item_3.type === 'flagged-plugin').map(item_4 => item_4.id), [unifiedItems]);
625
+ useEffect(() => {
626
+ if (flaggedIds.length > 0) {
627
+ void markFlaggedPluginsSeen(flaggedIds);
628
+ }
629
+ }, [flaggedIds]);
630
+ // Filter items based on search query (matches name or description)
631
+ const filteredItems = useMemo(() => {
632
+ if (!searchQuery)
633
+ return unifiedItems;
634
+ const lowerQuery = searchQuery.toLowerCase();
635
+ return unifiedItems.filter(item_5 => item_5.name.toLowerCase().includes(lowerQuery) || 'description' in item_5 && item_5.description?.toLowerCase().includes(lowerQuery));
636
+ }, [unifiedItems, searchQuery]);
637
+ // Selection state
638
+ const [selectedIndex, setSelectedIndex] = useState(0);
639
+ // Pagination for unified list (continuous scrolling)
640
+ const pagination = usePagination({
641
+ totalItems: filteredItems.length,
642
+ selectedIndex,
643
+ maxVisible: 8
644
+ });
645
+ // Details view state
646
+ const [detailsMenuIndex, setDetailsMenuIndex] = useState(0);
647
+ const [isProcessing, setIsProcessing] = useState(false);
648
+ const [processError, setProcessError] = useState(null);
649
+ // Configuration state
650
+ const [configNeeded, setConfigNeeded] = useState(null);
651
+ const [_isLoadingConfig, setIsLoadingConfig] = useState(false);
652
+ const [selectedPluginHasMcpb, setSelectedPluginHasMcpb] = useState(false);
653
+ // Detect if selected plugin has MCPB
654
+ // Reads raw marketplace.json to work with old cached marketplaces
655
+ useEffect(() => {
656
+ if (!selectedPlugin) {
657
+ setSelectedPluginHasMcpb(false);
658
+ return;
659
+ }
660
+ async function detectMcpb() {
661
+ // Check plugin manifest first
662
+ const mcpServersSpec = selectedPlugin.plugin.manifest.mcpServers;
663
+ let hasMcpb = false;
664
+ if (mcpServersSpec) {
665
+ hasMcpb = typeof mcpServersSpec === 'string' && isMcpbSource(mcpServersSpec) || Array.isArray(mcpServersSpec) && mcpServersSpec.some(s_2 => typeof s_2 === 'string' && isMcpbSource(s_2));
666
+ }
667
+ // If not in manifest, read raw marketplace.json directly (bypassing schema validation)
668
+ // This works even with old cached marketplaces from before MCPB support
669
+ if (!hasMcpb) {
670
+ try {
671
+ const marketplaceDir = path.join(selectedPlugin.plugin.path, '..');
672
+ const marketplaceJsonPath = path.join(marketplaceDir, '.claude-plugin', 'marketplace.json');
673
+ const content = await fs.readFile(marketplaceJsonPath, 'utf-8');
674
+ const marketplace_1 = jsonParse(content);
675
+ const entry_0 = marketplace_1.plugins?.find((p) => p.name === selectedPlugin.plugin.name);
676
+ if (entry_0?.mcpServers) {
677
+ const spec = entry_0.mcpServers;
678
+ hasMcpb = typeof spec === 'string' && isMcpbSource(spec) || Array.isArray(spec) && spec.some((s_3) => typeof s_3 === 'string' && isMcpbSource(s_3));
679
+ }
680
+ }
681
+ catch (err) {
682
+ logForDebugging(`Failed to read raw marketplace.json: ${err}`);
683
+ }
684
+ }
685
+ setSelectedPluginHasMcpb(hasMcpb);
686
+ }
687
+ void detectMcpb();
688
+ }, [selectedPlugin]);
689
+ // Load installed plugins grouped by marketplace
690
+ useEffect(() => {
691
+ async function loadInstalledPlugins() {
692
+ setLoading(true);
693
+ try {
694
+ const { enabled, disabled } = await loadAllPlugins();
695
+ const mergedSettings = getSettings_DEPRECATED(); // Use merged settings to respect all layers
696
+ const allPlugins = filterManagedDisabledPlugins([...enabled, ...disabled]);
697
+ // Group plugins by marketplace
698
+ const pluginsByMarketplace = {};
699
+ for (const plugin of allPlugins) {
700
+ const marketplace = plugin.source.split('@')[1] || 'local';
701
+ if (!pluginsByMarketplace[marketplace]) {
702
+ pluginsByMarketplace[marketplace] = [];
703
+ }
704
+ pluginsByMarketplace[marketplace].push(plugin);
705
+ }
706
+ // Create marketplace info array with enabled/disabled counts
707
+ const marketplaceInfos = [];
708
+ for (const [name, plugins] of Object.entries(pluginsByMarketplace)) {
709
+ const enabledCount = count(plugins, p => {
710
+ const pluginId = `${p.name}@${name}`;
711
+ return mergedSettings?.enabledPlugins?.[pluginId] !== false;
712
+ });
713
+ const disabledCount = plugins.length - enabledCount;
714
+ marketplaceInfos.push({
715
+ name,
716
+ installedPlugins: plugins,
717
+ enabledCount,
718
+ disabledCount
719
+ });
720
+ }
721
+ // Sort marketplaces: claude-plugin-directory first, then alphabetically
722
+ marketplaceInfos.sort((a, b) => {
723
+ if (a.name === 'claude-plugin-directory')
724
+ return -1;
725
+ if (b.name === 'claude-plugin-directory')
726
+ return 1;
727
+ return a.name.localeCompare(b.name);
728
+ });
729
+ setMarketplaces(marketplaceInfos);
730
+ // Build flat list of all plugin states
731
+ const allStates = [];
732
+ for (const marketplace of marketplaceInfos) {
733
+ for (const plugin of marketplace.installedPlugins) {
734
+ const pluginId = `${plugin.name}@${marketplace.name}`;
735
+ // Built-in plugins don't have V2 install entries — skip the lookup.
736
+ const scope = plugin.isBuiltin ? 'builtin' : getPluginInstallationFromV2(pluginId).scope;
737
+ allStates.push({
738
+ plugin,
739
+ marketplace: marketplace.name,
740
+ scope,
741
+ pendingEnable: undefined,
742
+ pendingUpdate: false
743
+ });
744
+ }
745
+ }
746
+ setPluginStates(allStates);
747
+ setSelectedIndex(0);
748
+ }
749
+ finally {
750
+ setLoading(false);
751
+ }
752
+ }
753
+ void loadInstalledPlugins();
754
+ }, []);
755
+ // Auto-navigate to target plugin if specified (once only)
756
+ useEffect(() => {
757
+ if (hasAutoNavigated.current)
758
+ return;
759
+ if (targetPlugin && marketplaces.length > 0 && !loading) {
760
+ // targetPlugin may be `name` or `name@marketplace` (parseArgs passes the
761
+ // raw arg through). Parse it so p.name matching works either way.
762
+ const { name: targetName, marketplace: targetMktFromId } = parsePluginIdentifier(targetPlugin);
763
+ const effectiveTargetMarketplace = targetMarketplace ?? targetMktFromId;
764
+ // Use targetMarketplace if provided, otherwise search all
765
+ const marketplacesToSearch = effectiveTargetMarketplace ? marketplaces.filter(m => m.name === effectiveTargetMarketplace) : marketplaces;
766
+ // First check successfully loaded plugins
767
+ for (const marketplace_2 of marketplacesToSearch) {
768
+ const plugin = marketplace_2.installedPlugins.find(p_0 => p_0.name === targetName);
769
+ if (plugin) {
770
+ // Get scope from V2 data for proper operation handling
771
+ const pluginId_2 = `${plugin.name}@${marketplace_2.name}`;
772
+ const { scope: scope_4 } = getPluginInstallationFromV2(pluginId_2);
773
+ const pluginState = {
774
+ plugin,
775
+ marketplace: marketplace_2.name,
776
+ scope: scope_4,
777
+ pendingEnable: undefined,
778
+ pendingUpdate: false
779
+ };
780
+ setSelectedPlugin(pluginState);
781
+ setViewState('plugin-details');
782
+ pendingAutoActionRef.current = action;
783
+ hasAutoNavigated.current = true;
784
+ return;
785
+ }
786
+ }
787
+ // Fall back to failed plugins (those with errors but not loaded)
788
+ const failedItem = unifiedItems.find(item_6 => item_6.type === 'failed-plugin' && item_6.name === targetName);
789
+ if (failedItem && failedItem.type === 'failed-plugin') {
790
+ setViewState({
791
+ type: 'failed-plugin-details',
792
+ plugin: {
793
+ id: failedItem.id,
794
+ name: failedItem.name,
795
+ marketplace: failedItem.marketplace,
796
+ errors: failedItem.errors,
797
+ scope: failedItem.scope
798
+ }
799
+ });
800
+ hasAutoNavigated.current = true;
801
+ }
802
+ // No match in loaded OR failed plugins — close the dialog with a
803
+ // message rather than silently landing on the plugin list. Only do
804
+ // this when an action was requested (e.g. /plugin uninstall X);
805
+ // plain navigation (/plugin manage) should still just show the list.
806
+ if (!hasAutoNavigated.current && action) {
807
+ hasAutoNavigated.current = true;
808
+ setResult(`Plugin "${targetPlugin}" is not installed in this project`);
809
+ }
810
+ }
811
+ }, [targetPlugin, targetMarketplace, marketplaces, loading, unifiedItems, action, setResult]);
812
+ // Handle single plugin operations from details view
813
+ const handleSingleOperation = async (operation) => {
814
+ if (!selectedPlugin)
815
+ return;
816
+ const pluginScope = selectedPlugin.scope || 'user';
817
+ const isBuiltin = pluginScope === 'builtin';
818
+ // Built-in plugins can only be enabled/disabled, not updated/uninstalled.
819
+ if (isBuiltin && (operation === 'update' || operation === 'uninstall')) {
820
+ setProcessError('Built-in plugins cannot be updated or uninstalled.');
821
+ return;
822
+ }
823
+ // Managed scope plugins can only be updated, not enabled/disabled/uninstalled
824
+ if (!isBuiltin && !isInstallableScope(pluginScope) && operation !== 'update') {
825
+ setProcessError('This plugin is managed by your organization. Contact your admin to disable it.');
826
+ return;
827
+ }
828
+ setIsProcessing(true);
829
+ setProcessError(null);
830
+ try {
831
+ const pluginId_3 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
832
+ let reverseDependents;
833
+ // enable/disable omit scope — pluginScope is the install scope from
834
+ // installed_plugins.json (where files are cached), which can diverge
835
+ // from the settings scope (where enablement lives). Passing it trips
836
+ // the cross-scope guard. Auto-detect finds the right scope. #38084
837
+ switch (operation) {
838
+ case 'enable':
839
+ {
840
+ const enableResult = await enablePluginOp(pluginId_3);
841
+ if (!enableResult.success) {
842
+ throw new Error(enableResult.message);
843
+ }
844
+ break;
845
+ }
846
+ case 'disable':
847
+ {
848
+ const disableResult = await disablePluginOp(pluginId_3);
849
+ if (!disableResult.success) {
850
+ throw new Error(disableResult.message);
851
+ }
852
+ reverseDependents = disableResult.reverseDependents;
853
+ break;
854
+ }
855
+ case 'uninstall':
856
+ {
857
+ if (isBuiltin)
858
+ break; // guarded above; narrows pluginScope
859
+ if (!isInstallableScope(pluginScope))
860
+ break;
861
+ // If the plugin is enabled in .claude/settings.json (shared with the
862
+ // team), divert to a confirmation dialog that offers to disable in
863
+ // settings.local.json instead. Check the settings file directly —
864
+ // `pluginScope` (from installed_plugins.json) can be 'user' even when
865
+ // the plugin is ALSO project-enabled, and uninstalling the user-scope
866
+ // install would leave the project enablement active.
867
+ if (isPluginEnabledAtProjectScope(pluginId_3)) {
868
+ setIsProcessing(false);
869
+ setViewState('confirm-project-uninstall');
870
+ return;
871
+ }
872
+ // If the plugin has persistent data (${CLAUDE_PLUGIN_DATA}) AND this
873
+ // is the last scope, prompt before deleting it. For multi-scope
874
+ // installs, the op's isLastScope check won't delete regardless of
875
+ // the user's y/n — showing the dialog would mislead ("y" → nothing
876
+ // happens). Length check mirrors pluginOperations.ts:513.
877
+ const installs = loadInstalledPluginsV2().plugins[pluginId_3];
878
+ const isLastScope = !installs || installs.length <= 1;
879
+ const dataSize = isLastScope ? await getPluginDataDirSize(pluginId_3) : null;
880
+ if (dataSize) {
881
+ setIsProcessing(false);
882
+ setViewState({
883
+ type: 'confirm-data-cleanup',
884
+ size: dataSize
885
+ });
886
+ return;
887
+ }
888
+ const result_0 = await uninstallPluginOp(pluginId_3, pluginScope);
889
+ if (!result_0.success) {
890
+ throw new Error(result_0.message);
891
+ }
892
+ reverseDependents = result_0.reverseDependents;
893
+ break;
894
+ }
895
+ case 'update':
896
+ {
897
+ if (isBuiltin)
898
+ break; // guarded above; narrows pluginScope
899
+ const result = await updatePluginOp(pluginId_3, pluginScope);
900
+ if (!result.success) {
901
+ throw new Error(result.message);
902
+ }
903
+ // If already up to date, show message and exit
904
+ if (result.alreadyUpToDate) {
905
+ setResult(`${selectedPlugin.plugin.name} is already at the latest version (${result.newVersion}).`);
906
+ if (onManageComplete) {
907
+ await onManageComplete();
908
+ }
909
+ setParentViewState({
910
+ type: 'menu'
911
+ });
912
+ return;
913
+ }
914
+ // Success - will show standard message below
915
+ break;
916
+ }
917
+ }
918
+ // Operations (enable, disable, uninstall, update) now use centralized functions
919
+ // that handle their own settings updates, so we only need to clear caches here
920
+ clearAllCaches();
921
+ // Prompt for manifest.userConfig + channel userConfig if the plugin ends
922
+ // up enabled. Re-read settings rather than keying on `operation ===
923
+ // 'enable'`: install enables on install, so the menu shows "Disable"
924
+ // first. PluginOptionsFlow itself checks getUnconfiguredOptions — if
925
+ // nothing needs filling, it calls onDone('skipped') immediately.
926
+ const pluginIdNow = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
927
+ const settingsAfter = getSettings_DEPRECATED();
928
+ const enabledAfter = settingsAfter?.enabledPlugins?.[pluginIdNow] !== false;
929
+ if (enabledAfter) {
930
+ setIsProcessing(false);
931
+ setViewState({
932
+ type: 'plugin-options'
933
+ });
934
+ return;
935
+ }
936
+ const operationName = operation === 'enable' ? 'Enabled' : operation === 'disable' ? 'Disabled' : operation === 'update' ? 'Updated' : 'Uninstalled';
937
+ // Single-line warning — notification timeout is ~8s, multi-line would scroll off.
938
+ // The persistent record is in the Errors tab (dependency-unsatisfied after reload).
939
+ const depWarn = reverseDependents && reverseDependents.length > 0 ? ` · required by ${reverseDependents.join(', ')}` : '';
940
+ const message = `✓ ${operationName} ${selectedPlugin.plugin.name}${depWarn}. Run /reload-plugins to apply.`;
941
+ setResult(message);
942
+ if (onManageComplete) {
943
+ await onManageComplete();
944
+ }
945
+ setParentViewState({
946
+ type: 'menu'
947
+ });
948
+ }
949
+ catch (error_0) {
950
+ setIsProcessing(false);
951
+ const errorMessage = error_0 instanceof Error ? error_0.message : String(error_0);
952
+ setProcessError(`Failed to ${operation}: ${errorMessage}`);
953
+ logError(toError(error_0));
954
+ }
955
+ };
956
+ // Latest-ref: lets the auto-action effect call the current closure without
957
+ // adding handleSingleOperation (recreated every render) to its deps.
958
+ const handleSingleOperationRef = useRef(handleSingleOperation);
959
+ handleSingleOperationRef.current = handleSingleOperation;
960
+ // Auto-execute the action prop (/plugin uninstall X, /plugin enable X, etc.)
961
+ // once auto-navigation has landed on plugin-details.
962
+ useEffect(() => {
963
+ if (viewState === 'plugin-details' && selectedPlugin && pendingAutoActionRef.current) {
964
+ const pending = pendingAutoActionRef.current;
965
+ pendingAutoActionRef.current = undefined;
966
+ void handleSingleOperationRef.current(pending);
967
+ }
968
+ }, [viewState, selectedPlugin]);
969
+ // Handle toggle enable/disable
970
+ const handleToggle = React.useCallback(() => {
971
+ if (selectedIndex >= filteredItems.length)
972
+ return;
973
+ const item_7 = filteredItems[selectedIndex];
974
+ if (item_7?.type === 'flagged-plugin')
975
+ return;
976
+ if (item_7?.type === 'plugin') {
977
+ const pluginId_4 = `${item_7.plugin.name}@${item_7.marketplace}`;
978
+ const mergedSettings_0 = getSettings_DEPRECATED();
979
+ const currentPending = pendingToggles.get(pluginId_4);
980
+ const isEnabled_0 = mergedSettings_0?.enabledPlugins?.[pluginId_4] !== false;
981
+ const pluginScope_0 = item_7.scope;
982
+ const isBuiltin_0 = pluginScope_0 === 'builtin';
983
+ if (isBuiltin_0 || isInstallableScope(pluginScope_0)) {
984
+ const newPending = new Map(pendingToggles);
985
+ // Omit scope — see handleSingleOperation's enable/disable comment.
986
+ if (currentPending) {
987
+ // Cancel: reverse the operation back to the original state
988
+ newPending.delete(pluginId_4);
989
+ void (async () => {
990
+ try {
991
+ if (currentPending === 'will-disable') {
992
+ await enablePluginOp(pluginId_4);
993
+ }
994
+ else {
995
+ await disablePluginOp(pluginId_4);
996
+ }
997
+ clearAllCaches();
998
+ }
999
+ catch (err_0) {
1000
+ logError(err_0);
1001
+ }
1002
+ })();
1003
+ }
1004
+ else {
1005
+ newPending.set(pluginId_4, isEnabled_0 ? 'will-disable' : 'will-enable');
1006
+ void (async () => {
1007
+ try {
1008
+ if (isEnabled_0) {
1009
+ await disablePluginOp(pluginId_4);
1010
+ }
1011
+ else {
1012
+ await enablePluginOp(pluginId_4);
1013
+ }
1014
+ clearAllCaches();
1015
+ }
1016
+ catch (err_1) {
1017
+ logError(err_1);
1018
+ }
1019
+ })();
1020
+ }
1021
+ setPendingToggles(newPending);
1022
+ }
1023
+ }
1024
+ else if (item_7?.type === 'mcp') {
1025
+ void toggleMcpServer(item_7.client.name);
1026
+ }
1027
+ }, [selectedIndex, filteredItems, pendingToggles, pluginStates, toggleMcpServer]);
1028
+ // Handle accept (Enter) in plugin-list
1029
+ const handleAccept = React.useCallback(() => {
1030
+ if (selectedIndex >= filteredItems.length)
1031
+ return;
1032
+ const item_8 = filteredItems[selectedIndex];
1033
+ if (item_8?.type === 'plugin') {
1034
+ const state_0 = pluginStates.find(s_4 => s_4.plugin.name === item_8.plugin.name && s_4.marketplace === item_8.marketplace);
1035
+ if (state_0) {
1036
+ setSelectedPlugin(state_0);
1037
+ setViewState('plugin-details');
1038
+ setDetailsMenuIndex(0);
1039
+ setProcessError(null);
1040
+ }
1041
+ }
1042
+ else if (item_8?.type === 'flagged-plugin') {
1043
+ setViewState({
1044
+ type: 'flagged-detail',
1045
+ plugin: {
1046
+ id: item_8.id,
1047
+ name: item_8.name,
1048
+ marketplace: item_8.marketplace,
1049
+ reason: item_8.reason,
1050
+ text: item_8.text,
1051
+ flaggedAt: item_8.flaggedAt
1052
+ }
1053
+ });
1054
+ setProcessError(null);
1055
+ }
1056
+ else if (item_8?.type === 'failed-plugin') {
1057
+ setViewState({
1058
+ type: 'failed-plugin-details',
1059
+ plugin: {
1060
+ id: item_8.id,
1061
+ name: item_8.name,
1062
+ marketplace: item_8.marketplace,
1063
+ errors: item_8.errors,
1064
+ scope: item_8.scope
1065
+ }
1066
+ });
1067
+ setDetailsMenuIndex(0);
1068
+ setProcessError(null);
1069
+ }
1070
+ else if (item_8?.type === 'mcp') {
1071
+ setViewState({
1072
+ type: 'mcp-detail',
1073
+ client: item_8.client
1074
+ });
1075
+ setProcessError(null);
1076
+ }
1077
+ }, [selectedIndex, filteredItems, pluginStates]);
1078
+ // Plugin-list navigation (non-search mode)
1079
+ useKeybindings({
1080
+ 'select:previous': () => {
1081
+ if (selectedIndex === 0) {
1082
+ setIsSearchMode(true);
1083
+ }
1084
+ else {
1085
+ pagination.handleSelectionChange(selectedIndex - 1, setSelectedIndex);
1086
+ }
1087
+ },
1088
+ 'select:next': () => {
1089
+ if (selectedIndex < filteredItems.length - 1) {
1090
+ pagination.handleSelectionChange(selectedIndex + 1, setSelectedIndex);
1091
+ }
1092
+ },
1093
+ 'select:accept': handleAccept
1094
+ }, {
1095
+ context: 'Select',
1096
+ isActive: viewState === 'plugin-list' && !isSearchMode
1097
+ });
1098
+ useKeybindings({
1099
+ 'plugin:toggle': handleToggle
1100
+ }, {
1101
+ context: 'Plugin',
1102
+ isActive: viewState === 'plugin-list' && !isSearchMode
1103
+ });
1104
+ // Handle dismiss action in flagged-detail view
1105
+ const handleFlaggedDismiss = React.useCallback(() => {
1106
+ if (typeof viewState !== 'object' || viewState.type !== 'flagged-detail')
1107
+ return;
1108
+ void removeFlaggedPlugin(viewState.plugin.id);
1109
+ setViewState('plugin-list');
1110
+ }, [viewState]);
1111
+ useKeybindings({
1112
+ 'select:accept': handleFlaggedDismiss
1113
+ }, {
1114
+ context: 'Select',
1115
+ isActive: typeof viewState === 'object' && viewState.type === 'flagged-detail'
1116
+ });
1117
+ // Build details menu items (needed for navigation)
1118
+ const detailsMenuItems = React.useMemo(() => {
1119
+ if (viewState !== 'plugin-details' || !selectedPlugin)
1120
+ return [];
1121
+ const mergedSettings_1 = getSettings_DEPRECATED();
1122
+ const pluginId_5 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1123
+ const isEnabled_1 = mergedSettings_1?.enabledPlugins?.[pluginId_5] !== false;
1124
+ const isBuiltin_1 = selectedPlugin.marketplace === 'builtin';
1125
+ const menuItems = [];
1126
+ menuItems.push({
1127
+ label: isEnabled_1 ? 'Disable plugin' : 'Enable plugin',
1128
+ action: () => void handleSingleOperation(isEnabled_1 ? 'disable' : 'enable')
1129
+ });
1130
+ // Update/Uninstall options — not available for built-in plugins
1131
+ if (!isBuiltin_1) {
1132
+ menuItems.push({
1133
+ label: selectedPlugin.pendingUpdate ? 'Unmark for update' : 'Mark for update',
1134
+ action: async () => {
1135
+ try {
1136
+ const localError = await checkIfLocalPlugin(selectedPlugin.plugin.name, selectedPlugin.marketplace);
1137
+ if (localError) {
1138
+ setProcessError(localError);
1139
+ return;
1140
+ }
1141
+ const newStates = [...pluginStates];
1142
+ const index = newStates.findIndex(s_5 => s_5.plugin.name === selectedPlugin.plugin.name && s_5.marketplace === selectedPlugin.marketplace);
1143
+ if (index !== -1) {
1144
+ newStates[index].pendingUpdate = !selectedPlugin.pendingUpdate;
1145
+ setPluginStates(newStates);
1146
+ setSelectedPlugin({
1147
+ ...selectedPlugin,
1148
+ pendingUpdate: !selectedPlugin.pendingUpdate
1149
+ });
1150
+ }
1151
+ }
1152
+ catch (error_1) {
1153
+ setProcessError(error_1 instanceof Error ? error_1.message : 'Failed to check plugin update availability');
1154
+ }
1155
+ }
1156
+ });
1157
+ if (selectedPluginHasMcpb) {
1158
+ menuItems.push({
1159
+ label: 'Configure',
1160
+ action: async () => {
1161
+ setIsLoadingConfig(true);
1162
+ try {
1163
+ const mcpServersSpec_0 = selectedPlugin.plugin.manifest.mcpServers;
1164
+ let mcpbPath = null;
1165
+ if (typeof mcpServersSpec_0 === 'string' && isMcpbSource(mcpServersSpec_0)) {
1166
+ mcpbPath = mcpServersSpec_0;
1167
+ }
1168
+ else if (Array.isArray(mcpServersSpec_0)) {
1169
+ for (const spec_0 of mcpServersSpec_0) {
1170
+ if (typeof spec_0 === 'string' && isMcpbSource(spec_0)) {
1171
+ mcpbPath = spec_0;
1172
+ break;
1173
+ }
1174
+ }
1175
+ }
1176
+ if (!mcpbPath) {
1177
+ setProcessError('No MCPB file found in plugin');
1178
+ setIsLoadingConfig(false);
1179
+ return;
1180
+ }
1181
+ const pluginId_6 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1182
+ const result_1 = await loadMcpbFile(mcpbPath, selectedPlugin.plugin.path, pluginId_6, undefined, undefined, true);
1183
+ if ('status' in result_1 && result_1.status === 'needs-config') {
1184
+ setConfigNeeded(result_1);
1185
+ setViewState('configuring');
1186
+ }
1187
+ else {
1188
+ setProcessError('Failed to load MCPB for configuration');
1189
+ }
1190
+ }
1191
+ catch (err_2) {
1192
+ const errorMsg = errorMessage(err_2);
1193
+ setProcessError(`Failed to load configuration: ${errorMsg}`);
1194
+ }
1195
+ finally {
1196
+ setIsLoadingConfig(false);
1197
+ }
1198
+ }
1199
+ });
1200
+ }
1201
+ if (selectedPlugin.plugin.manifest.userConfig && Object.keys(selectedPlugin.plugin.manifest.userConfig).length > 0) {
1202
+ menuItems.push({
1203
+ label: 'Configure options',
1204
+ action: () => {
1205
+ setViewState({
1206
+ type: 'configuring-options',
1207
+ schema: selectedPlugin.plugin.manifest.userConfig
1208
+ });
1209
+ }
1210
+ });
1211
+ }
1212
+ menuItems.push({
1213
+ label: 'Update now',
1214
+ action: () => void handleSingleOperation('update')
1215
+ });
1216
+ menuItems.push({
1217
+ label: 'Uninstall',
1218
+ action: () => void handleSingleOperation('uninstall')
1219
+ });
1220
+ }
1221
+ if (selectedPlugin.plugin.manifest.homepage) {
1222
+ menuItems.push({
1223
+ label: 'Open homepage',
1224
+ action: () => void openBrowser(selectedPlugin.plugin.manifest.homepage)
1225
+ });
1226
+ }
1227
+ if (selectedPlugin.plugin.manifest.repository) {
1228
+ menuItems.push({
1229
+ // Generic label — manifest.repository can be GitLab, Bitbucket,
1230
+ // Azure DevOps, etc. (gh-31598). pluginDetailsHelpers.tsx:74 keeps
1231
+ // 'View on GitHub' because that path has an explicit isGitHub check.
1232
+ label: 'View repository',
1233
+ action: () => void openBrowser(selectedPlugin.plugin.manifest.repository)
1234
+ });
1235
+ }
1236
+ menuItems.push({
1237
+ label: 'Back to plugin list',
1238
+ action: () => {
1239
+ setViewState('plugin-list');
1240
+ setSelectedPlugin(null);
1241
+ setProcessError(null);
1242
+ }
1243
+ });
1244
+ return menuItems;
1245
+ }, [viewState, selectedPlugin, selectedPluginHasMcpb, pluginStates]);
1246
+ // Plugin-details navigation
1247
+ useKeybindings({
1248
+ 'select:previous': () => {
1249
+ if (detailsMenuIndex > 0) {
1250
+ setDetailsMenuIndex(detailsMenuIndex - 1);
1251
+ }
1252
+ },
1253
+ 'select:next': () => {
1254
+ if (detailsMenuIndex < detailsMenuItems.length - 1) {
1255
+ setDetailsMenuIndex(detailsMenuIndex + 1);
1256
+ }
1257
+ },
1258
+ 'select:accept': () => {
1259
+ if (detailsMenuItems[detailsMenuIndex]) {
1260
+ detailsMenuItems[detailsMenuIndex].action();
1261
+ }
1262
+ }
1263
+ }, {
1264
+ context: 'Select',
1265
+ isActive: viewState === 'plugin-details' && !!selectedPlugin
1266
+ });
1267
+ // Failed-plugin-details: only "Uninstall" option, handle Enter
1268
+ useKeybindings({
1269
+ 'select:accept': () => {
1270
+ if (typeof viewState === 'object' && viewState.type === 'failed-plugin-details') {
1271
+ void (async () => {
1272
+ setIsProcessing(true);
1273
+ setProcessError(null);
1274
+ const pluginId_7 = viewState.plugin.id;
1275
+ const pluginScope_1 = viewState.plugin.scope;
1276
+ // Pass scope to uninstallPluginOp so it can find the correct V2
1277
+ // installation record and clean up on-disk files. Fall back to
1278
+ // default scope if not installable (e.g. 'managed', though that
1279
+ // case is guarded by isActive below). deleteDataDir=false: this
1280
+ // is a recovery path for a plugin that failed to load — it may
1281
+ // be reinstallable, so don't nuke ${CLAUDE_PLUGIN_DATA} silently.
1282
+ // The normal uninstall path prompts; this one preserves.
1283
+ const result_2 = isInstallableScope(pluginScope_1) ? await uninstallPluginOp(pluginId_7, pluginScope_1, false) : await uninstallPluginOp(pluginId_7, 'user', false);
1284
+ let success = result_2.success;
1285
+ if (!success) {
1286
+ // Plugin was never installed (only in enabledPlugins settings).
1287
+ // Remove directly from all editable settings sources.
1288
+ const editableSources = ['userSettings', 'projectSettings', 'localSettings'];
1289
+ for (const source of editableSources) {
1290
+ const settings = getSettingsForSource(source);
1291
+ if (settings?.enabledPlugins?.[pluginId_7] !== undefined) {
1292
+ updateSettingsForSource(source, {
1293
+ enabledPlugins: {
1294
+ ...settings.enabledPlugins,
1295
+ [pluginId_7]: undefined
1296
+ }
1297
+ });
1298
+ success = true;
1299
+ }
1300
+ }
1301
+ // Clear memoized caches so next loadAllPlugins() picks up settings changes
1302
+ clearAllCaches();
1303
+ }
1304
+ if (success) {
1305
+ if (onManageComplete) {
1306
+ await onManageComplete();
1307
+ }
1308
+ setIsProcessing(false);
1309
+ // Return to list (don't setResult — that closes the whole dialog)
1310
+ setViewState('plugin-list');
1311
+ }
1312
+ else {
1313
+ setIsProcessing(false);
1314
+ setProcessError(result_2.message);
1315
+ }
1316
+ })();
1317
+ }
1318
+ }
1319
+ }, {
1320
+ context: 'Select',
1321
+ isActive: typeof viewState === 'object' && viewState.type === 'failed-plugin-details' && viewState.plugin.scope !== 'managed'
1322
+ });
1323
+ // Confirm-project-uninstall: y/enter disables in settings.local.json, n/escape cancels
1324
+ useKeybindings({
1325
+ 'confirm:yes': () => {
1326
+ if (!selectedPlugin)
1327
+ return;
1328
+ setIsProcessing(true);
1329
+ setProcessError(null);
1330
+ const pluginId_8 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1331
+ // Write `false` directly — disablePluginOp's cross-scope guard would
1332
+ // reject this (plugin isn't in localSettings yet; the override IS the
1333
+ // point).
1334
+ const { error: error_2 } = updateSettingsForSource('localSettings', {
1335
+ enabledPlugins: {
1336
+ ...getSettingsForSource('localSettings')?.enabledPlugins,
1337
+ [pluginId_8]: false
1338
+ }
1339
+ });
1340
+ if (error_2) {
1341
+ setIsProcessing(false);
1342
+ setProcessError(`Failed to write settings: ${error_2.message}`);
1343
+ return;
1344
+ }
1345
+ clearAllCaches();
1346
+ setResult(`✓ Disabled ${selectedPlugin.plugin.name} in .claude/settings.local.json. Run /reload-plugins to apply.`);
1347
+ if (onManageComplete)
1348
+ void onManageComplete();
1349
+ setParentViewState({
1350
+ type: 'menu'
1351
+ });
1352
+ },
1353
+ 'confirm:no': () => {
1354
+ setViewState('plugin-details');
1355
+ setProcessError(null);
1356
+ }
1357
+ }, {
1358
+ context: 'Confirmation',
1359
+ isActive: viewState === 'confirm-project-uninstall' && !!selectedPlugin && !isProcessing
1360
+ });
1361
+ // Confirm-data-cleanup: y uninstalls + deletes data dir, n uninstalls + keeps,
1362
+ // esc cancels. Raw useInput because: (1) the Confirmation context maps
1363
+ // enter→confirm:yes, which would make Enter delete the data directory — a
1364
+ // destructive default the UI text ("y to delete · n to keep") doesn't
1365
+ // advertise; (2) unlike confirm-project-uninstall (which uses useKeybindings
1366
+ // where n and escape both map to confirm:no), here n and escape are DIFFERENT
1367
+ // actions (keep-data vs cancel), so this deliberately stays on raw useInput.
1368
+ // eslint-disable-next-line custom-rules/prefer-use-keybindings -- raw y/n/esc; Enter must not trigger destructive delete
1369
+ useInput((input, key) => {
1370
+ if (!selectedPlugin)
1371
+ return;
1372
+ const pluginId_9 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1373
+ const pluginScope_2 = selectedPlugin.scope;
1374
+ // Dialog is only reachable from the uninstall case (which guards on
1375
+ // isBuiltin), but TS can't track that across viewState transitions.
1376
+ if (!pluginScope_2 || pluginScope_2 === 'builtin' || !isInstallableScope(pluginScope_2))
1377
+ return;
1378
+ const doUninstall = async (deleteDataDir) => {
1379
+ setIsProcessing(true);
1380
+ setProcessError(null);
1381
+ try {
1382
+ const result_3 = await uninstallPluginOp(pluginId_9, pluginScope_2, deleteDataDir);
1383
+ if (!result_3.success)
1384
+ throw new Error(result_3.message);
1385
+ clearAllCaches();
1386
+ const suffix = deleteDataDir ? '' : ' · data preserved';
1387
+ setResult(`${figures.tick} ${result_3.message}${suffix}`);
1388
+ if (onManageComplete)
1389
+ void onManageComplete();
1390
+ setParentViewState({
1391
+ type: 'menu'
1392
+ });
1393
+ }
1394
+ catch (e_0) {
1395
+ setIsProcessing(false);
1396
+ setProcessError(e_0 instanceof Error ? e_0.message : String(e_0));
1397
+ }
1398
+ };
1399
+ if (input === 'y' || input === 'Y') {
1400
+ void doUninstall(true);
1401
+ }
1402
+ else if (input === 'n' || input === 'N') {
1403
+ void doUninstall(false);
1404
+ }
1405
+ else if (key.escape) {
1406
+ setViewState('plugin-details');
1407
+ setProcessError(null);
1408
+ }
1409
+ }, {
1410
+ isActive: typeof viewState === 'object' && viewState.type === 'confirm-data-cleanup' && !!selectedPlugin && !isProcessing
1411
+ });
1412
+ // Reset selection when search query changes
1413
+ React.useEffect(() => {
1414
+ setSelectedIndex(0);
1415
+ }, [searchQuery]);
1416
+ // Handle input for entering search mode (text input handled by useSearchInput hook)
1417
+ // eslint-disable-next-line custom-rules/prefer-use-keybindings -- useInput needed for raw search mode text input
1418
+ useInput((input_0, key_0) => {
1419
+ const keyIsNotCtrlOrMeta = !key_0.ctrl && !key_0.meta;
1420
+ if (isSearchMode) {
1421
+ // Text input is handled by useSearchInput hook
1422
+ return;
1423
+ }
1424
+ // Enter search mode with '/' or any printable character (except navigation keys)
1425
+ if (input_0 === '/' && keyIsNotCtrlOrMeta) {
1426
+ setIsSearchMode(true);
1427
+ setSearchQuery('');
1428
+ setSelectedIndex(0);
1429
+ }
1430
+ else if (keyIsNotCtrlOrMeta && input_0.length > 0 && !/^\s+$/.test(input_0) && input_0 !== 'j' && input_0 !== 'k' && input_0 !== ' ') {
1431
+ setIsSearchMode(true);
1432
+ setSearchQuery(input_0);
1433
+ setSelectedIndex(0);
1434
+ }
1435
+ }, {
1436
+ isActive: viewState === 'plugin-list'
1437
+ });
1438
+ // Loading state
1439
+ if (loading) {
1440
+ return _jsx(Text, { children: "Loading installed plugins\u2026" });
1441
+ }
1442
+ // No plugins or MCPs installed
1443
+ if (unifiedItems.length === 0) {
1444
+ return _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, children: "Manage plugins" }) }), _jsx(Text, { children: "No plugins or MCP servers installed." }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Esc to go back" }) })] });
1445
+ }
1446
+ if (typeof viewState === 'object' && viewState.type === 'plugin-options' && selectedPlugin) {
1447
+ const pluginId_10 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1448
+ function finish(msg) {
1449
+ setResult(msg);
1450
+ // Plugin is enabled regardless of whether config was saved or
1451
+ // skipped — onManageComplete → markPluginsChanged → the
1452
+ // persistent "run /reload-plugins" notice.
1453
+ if (onManageComplete) {
1454
+ void onManageComplete();
1455
+ }
1456
+ setParentViewState({
1457
+ type: 'menu'
1458
+ });
1459
+ }
1460
+ return _jsx(PluginOptionsFlow, { plugin: selectedPlugin.plugin, pluginId: pluginId_10, onDone: (outcome, detail) => {
1461
+ switch (outcome) {
1462
+ case 'configured':
1463
+ finish(`✓ Enabled and configured ${selectedPlugin.plugin.name}. Run /reload-plugins to apply.`);
1464
+ break;
1465
+ case 'skipped':
1466
+ finish(`✓ Enabled ${selectedPlugin.plugin.name}. Run /reload-plugins to apply.`);
1467
+ break;
1468
+ case 'error':
1469
+ finish(`Failed to save configuration: ${detail}`);
1470
+ break;
1471
+ }
1472
+ } });
1473
+ }
1474
+ // Configure options (from the Manage menu)
1475
+ if (typeof viewState === 'object' && viewState.type === 'configuring-options' && selectedPlugin) {
1476
+ const pluginId_11 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1477
+ return _jsx(PluginOptionsDialog, { title: `Configure ${selectedPlugin.plugin.name}`, subtitle: "Plugin options", configSchema: viewState.schema, initialValues: loadPluginOptions(pluginId_11), onSave: values => {
1478
+ try {
1479
+ savePluginOptions(pluginId_11, values, viewState.schema);
1480
+ clearAllCaches();
1481
+ setResult('Configuration saved. Run /reload-plugins for changes to take effect.');
1482
+ }
1483
+ catch (err_3) {
1484
+ setProcessError(`Failed to save configuration: ${errorMessage(err_3)}`);
1485
+ }
1486
+ setViewState('plugin-details');
1487
+ }, onCancel: () => setViewState('plugin-details') });
1488
+ }
1489
+ // Configuration view
1490
+ if (viewState === 'configuring' && configNeeded && selectedPlugin) {
1491
+ const pluginId_12 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1492
+ async function handleSave(config) {
1493
+ if (!configNeeded || !selectedPlugin)
1494
+ return;
1495
+ try {
1496
+ // Find MCPB path again
1497
+ const mcpServersSpec_1 = selectedPlugin.plugin.manifest.mcpServers;
1498
+ let mcpbPath_0 = null;
1499
+ if (typeof mcpServersSpec_1 === 'string' && isMcpbSource(mcpServersSpec_1)) {
1500
+ mcpbPath_0 = mcpServersSpec_1;
1501
+ }
1502
+ else if (Array.isArray(mcpServersSpec_1)) {
1503
+ for (const spec_1 of mcpServersSpec_1) {
1504
+ if (typeof spec_1 === 'string' && isMcpbSource(spec_1)) {
1505
+ mcpbPath_0 = spec_1;
1506
+ break;
1507
+ }
1508
+ }
1509
+ }
1510
+ if (!mcpbPath_0) {
1511
+ setProcessError('No MCPB file found');
1512
+ setViewState('plugin-details');
1513
+ return;
1514
+ }
1515
+ // Reload with provided config
1516
+ await loadMcpbFile(mcpbPath_0, selectedPlugin.plugin.path, pluginId_12, undefined, config);
1517
+ // Success - go back to details
1518
+ setProcessError(null);
1519
+ setConfigNeeded(null);
1520
+ setViewState('plugin-details');
1521
+ setResult('Configuration saved. Run /reload-plugins for changes to take effect.');
1522
+ }
1523
+ catch (err_4) {
1524
+ const errorMsg_0 = errorMessage(err_4);
1525
+ setProcessError(`Failed to save configuration: ${errorMsg_0}`);
1526
+ setViewState('plugin-details');
1527
+ }
1528
+ }
1529
+ function handleCancel() {
1530
+ setConfigNeeded(null);
1531
+ setViewState('plugin-details');
1532
+ }
1533
+ return _jsx(PluginOptionsDialog, { title: `Configure ${configNeeded.manifest.name}`, subtitle: `Plugin: ${selectedPlugin.plugin.name}`, configSchema: configNeeded.configSchema, initialValues: configNeeded.existingConfig, onSave: handleSave, onCancel: handleCancel });
1534
+ }
1535
+ // Flagged plugin detail view
1536
+ if (typeof viewState === 'object' && viewState.type === 'flagged-detail') {
1537
+ const fp = viewState.plugin;
1538
+ return _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsxs(Text, { bold: true, children: [fp.name, " @ ", fp.marketplace] }) }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Status: " }), _jsx(Text, { color: "error", children: "Removed" })] }), _jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [_jsxs(Text, { color: "error", children: ["Removed from marketplace \u00B7 reason: ", fp.reason] }), _jsx(Text, { children: fp.text }), _jsxs(Text, { dimColor: true, children: ["Flagged on ", new Date(fp.flaggedAt).toLocaleDateString()] })] }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsxs(Box, { children: [_jsxs(Text, { children: [figures.pointer, " "] }), _jsx(Text, { color: "suggestion", children: "Dismiss" })] }) }), _jsxs(Byline, { children: [_jsx(ConfigurableShortcutHint, { action: "select:accept", context: "Select", fallback: "Enter", description: "dismiss" }), _jsx(ConfigurableShortcutHint, { action: "confirm:no", context: "Confirmation", fallback: "Esc", description: "back" })] })] });
1539
+ }
1540
+ // Confirm-project-uninstall: warn about shared .claude/settings.json,
1541
+ // offer to disable in settings.local.json instead.
1542
+ if (viewState === 'confirm-project-uninstall' && selectedPlugin) {
1543
+ return _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, color: "warning", children: [selectedPlugin.plugin.name, " is enabled in .claude/settings.json (shared with your team)"] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { children: "Disable it just for you in .claude/settings.local.json?" }), _jsx(Text, { dimColor: true, children: "This has the same effect as uninstalling, without affecting other contributors." })] }), processError && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "error", children: processError }) }), _jsx(Box, { marginTop: 1, children: isProcessing ? _jsx(Text, { dimColor: true, children: "Disabling\u2026" }) : _jsxs(Byline, { children: [_jsx(ConfigurableShortcutHint, { action: "confirm:yes", context: "Confirmation", fallback: "y", description: "disable" }), _jsx(ConfigurableShortcutHint, { action: "confirm:no", context: "Confirmation", fallback: "Esc", description: "cancel" })] }) })] });
1544
+ }
1545
+ // Confirm-data-cleanup: prompt before deleting ${CLAUDE_PLUGIN_DATA} dir
1546
+ if (typeof viewState === 'object' && viewState.type === 'confirm-data-cleanup' && selectedPlugin) {
1547
+ return _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: [selectedPlugin.plugin.name, " has ", viewState.size.human, " of persistent data"] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { children: "Delete it along with the plugin?" }), _jsx(Text, { dimColor: true, children: pluginDataDirPath(`${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`) })] }), processError && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "error", children: processError }) }), _jsx(Box, { marginTop: 1, children: isProcessing ? _jsx(Text, { dimColor: true, children: "Uninstalling\u2026" }) : _jsxs(Text, { children: [_jsx(Text, { bold: true, children: "y" }), " to delete \u00B7 ", _jsx(Text, { bold: true, children: "n" }), " to keep \u00B7", ' ', _jsx(Text, { bold: true, children: "esc" }), " to cancel"] }) })] });
1548
+ }
1549
+ // Plugin details view
1550
+ if (viewState === 'plugin-details' && selectedPlugin) {
1551
+ const mergedSettings_2 = getSettings_DEPRECATED(); // Use merged settings to respect all layers
1552
+ const pluginId_13 = `${selectedPlugin.plugin.name}@${selectedPlugin.marketplace}`;
1553
+ const isEnabled_2 = mergedSettings_2?.enabledPlugins?.[pluginId_13] !== false;
1554
+ // Compute plugin errors section
1555
+ const filteredPluginErrors = pluginErrors.filter(e_1 => 'plugin' in e_1 && e_1.plugin === selectedPlugin.plugin.name || e_1.source === pluginId_13 || e_1.source.startsWith(`${selectedPlugin.plugin.name}@`));
1556
+ const pluginErrorsSection = filteredPluginErrors.length === 0 ? null : _jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "error", children: [filteredPluginErrors.length, ' ', plural(filteredPluginErrors.length, 'error'), ":"] }), filteredPluginErrors.map((error_3, i_0) => {
1557
+ const guidance = getErrorGuidance(error_3);
1558
+ return _jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsx(Text, { color: "error", children: formatErrorMessage(error_3) }), guidance && _jsxs(Text, { dimColor: true, italic: true, children: [figures.arrowRight, " ", guidance] })] }, i_0);
1559
+ })] });
1560
+ return _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsxs(Text, { bold: true, children: [selectedPlugin.plugin.name, " @ ", selectedPlugin.marketplace] }) }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Scope: " }), _jsx(Text, { children: selectedPlugin.scope || 'user' })] }), selectedPlugin.plugin.manifest.version && _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Version: " }), _jsx(Text, { children: selectedPlugin.plugin.manifest.version })] }), selectedPlugin.plugin.manifest.description && _jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: selectedPlugin.plugin.manifest.description }) }), selectedPlugin.plugin.manifest.author && _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Author: " }), _jsx(Text, { children: selectedPlugin.plugin.manifest.author.name })] }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Status: " }), _jsx(Text, { color: isEnabled_2 ? 'success' : 'warning', children: isEnabled_2 ? 'Enabled' : 'Disabled' }), selectedPlugin.pendingUpdate && _jsx(Text, { color: "suggestion", children: " \u00B7 Marked for update" })] }), _jsx(PluginComponentsDisplay, { plugin: selectedPlugin.plugin, marketplace: selectedPlugin.marketplace }), pluginErrorsSection, _jsx(Box, { marginTop: 1, flexDirection: "column", children: detailsMenuItems.map((item_9, index_0) => {
1561
+ const isSelected = index_0 === detailsMenuIndex;
1562
+ return _jsxs(Box, { children: [isSelected && _jsxs(Text, { children: [figures.pointer, " "] }), !isSelected && _jsx(Text, { children: ' ' }), _jsx(Text, { bold: isSelected, color: item_9.label.includes('Uninstall') ? 'error' : item_9.label.includes('Update') ? 'suggestion' : undefined, children: item_9.label })] }, index_0);
1563
+ }) }), isProcessing && _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Processing\u2026" }) }), processError && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "error", children: processError }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, children: _jsxs(Byline, { children: [_jsx(ConfigurableShortcutHint, { action: "select:previous", context: "Select", fallback: "\u2191", description: "navigate" }), _jsx(ConfigurableShortcutHint, { action: "select:accept", context: "Select", fallback: "Enter", description: "select" }), _jsx(ConfigurableShortcutHint, { action: "confirm:no", context: "Confirmation", fallback: "Esc", description: "back" })] }) }) })] });
1564
+ }
1565
+ // Failed plugin detail view
1566
+ if (typeof viewState === 'object' && viewState.type === 'failed-plugin-details') {
1567
+ const failedPlugin_0 = viewState.plugin;
1568
+ const firstError = failedPlugin_0.errors[0];
1569
+ const errorMessage_0 = firstError ? formatErrorMessage(firstError) : 'Failed to load';
1570
+ return _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { bold: true, children: failedPlugin_0.name }), _jsxs(Text, { dimColor: true, children: [" @ ", failedPlugin_0.marketplace] }), _jsxs(Text, { dimColor: true, children: [" (", failedPlugin_0.scope, ")"] })] }), _jsx(Text, { color: "error", children: errorMessage_0 }), failedPlugin_0.scope === 'managed' ? _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Managed by your organization \u2014 contact your admin" }) }) : _jsxs(Box, { marginTop: 1, children: [_jsxs(Text, { color: "suggestion", children: [figures.pointer, " "] }), _jsx(Text, { bold: true, children: "Remove" })] }), isProcessing && _jsx(Text, { children: "Processing\u2026" }), processError && _jsx(Text, { color: "error", children: processError }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, children: _jsxs(Byline, { children: [failedPlugin_0.scope !== 'managed' && _jsx(ConfigurableShortcutHint, { action: "select:accept", context: "Select", fallback: "Enter", description: "remove" }), _jsx(ConfigurableShortcutHint, { action: "confirm:no", context: "Confirmation", fallback: "Esc", description: "back" })] }) }) })] });
1571
+ }
1572
+ // MCP detail view
1573
+ if (typeof viewState === 'object' && viewState.type === 'mcp-detail') {
1574
+ const client_3 = viewState.client;
1575
+ const serverToolsCount = filterToolsByServer(mcpTools, client_3.name).length;
1576
+ // Common handlers for MCP menus
1577
+ const handleMcpViewTools = () => {
1578
+ setViewState({
1579
+ type: 'mcp-tools',
1580
+ client: client_3
1581
+ });
1582
+ };
1583
+ const handleMcpCancel = () => {
1584
+ setViewState('plugin-list');
1585
+ };
1586
+ const handleMcpComplete = (result_4) => {
1587
+ if (result_4) {
1588
+ setResult(result_4);
1589
+ }
1590
+ setViewState('plugin-list');
1591
+ };
1592
+ // Transform MCPServerConnection to appropriate ServerInfo type
1593
+ const scope_5 = client_3.config.scope;
1594
+ const configType = client_3.config.type;
1595
+ if (configType === 'stdio') {
1596
+ const server = {
1597
+ name: client_3.name,
1598
+ client: client_3,
1599
+ scope: scope_5,
1600
+ transport: 'stdio',
1601
+ config: client_3.config
1602
+ };
1603
+ return _jsx(MCPStdioServerMenu, { server: server, serverToolsCount: serverToolsCount, onViewTools: handleMcpViewTools, onCancel: handleMcpCancel, onComplete: handleMcpComplete, borderless: true });
1604
+ }
1605
+ else if (configType === 'sse') {
1606
+ const server_0 = {
1607
+ name: client_3.name,
1608
+ client: client_3,
1609
+ scope: scope_5,
1610
+ transport: 'sse',
1611
+ isAuthenticated: undefined,
1612
+ config: client_3.config
1613
+ };
1614
+ return _jsx(MCPRemoteServerMenu, { server: server_0, serverToolsCount: serverToolsCount, onViewTools: handleMcpViewTools, onCancel: handleMcpCancel, onComplete: handleMcpComplete, borderless: true });
1615
+ }
1616
+ else if (configType === 'http') {
1617
+ const server_1 = {
1618
+ name: client_3.name,
1619
+ client: client_3,
1620
+ scope: scope_5,
1621
+ transport: 'http',
1622
+ isAuthenticated: undefined,
1623
+ config: client_3.config
1624
+ };
1625
+ return _jsx(MCPRemoteServerMenu, { server: server_1, serverToolsCount: serverToolsCount, onViewTools: handleMcpViewTools, onCancel: handleMcpCancel, onComplete: handleMcpComplete, borderless: true });
1626
+ }
1627
+ else if (configType === 'claudeai-proxy') {
1628
+ const server_2 = {
1629
+ name: client_3.name,
1630
+ client: client_3,
1631
+ scope: scope_5,
1632
+ transport: 'claudeai-proxy',
1633
+ isAuthenticated: undefined,
1634
+ config: client_3.config
1635
+ };
1636
+ return _jsx(MCPRemoteServerMenu, { server: server_2, serverToolsCount: serverToolsCount, onViewTools: handleMcpViewTools, onCancel: handleMcpCancel, onComplete: handleMcpComplete, borderless: true });
1637
+ }
1638
+ // Fallback - shouldn't happen but handle gracefully
1639
+ setViewState('plugin-list');
1640
+ return null;
1641
+ }
1642
+ // MCP tools view
1643
+ if (typeof viewState === 'object' && viewState.type === 'mcp-tools') {
1644
+ const client_4 = viewState.client;
1645
+ const scope_6 = client_4.config.scope;
1646
+ const configType_0 = client_4.config.type;
1647
+ // Build ServerInfo for MCPToolListView
1648
+ let server_3;
1649
+ if (configType_0 === 'stdio') {
1650
+ server_3 = {
1651
+ name: client_4.name,
1652
+ client: client_4,
1653
+ scope: scope_6,
1654
+ transport: 'stdio',
1655
+ config: client_4.config
1656
+ };
1657
+ }
1658
+ else if (configType_0 === 'sse') {
1659
+ server_3 = {
1660
+ name: client_4.name,
1661
+ client: client_4,
1662
+ scope: scope_6,
1663
+ transport: 'sse',
1664
+ isAuthenticated: undefined,
1665
+ config: client_4.config
1666
+ };
1667
+ }
1668
+ else if (configType_0 === 'http') {
1669
+ server_3 = {
1670
+ name: client_4.name,
1671
+ client: client_4,
1672
+ scope: scope_6,
1673
+ transport: 'http',
1674
+ isAuthenticated: undefined,
1675
+ config: client_4.config
1676
+ };
1677
+ }
1678
+ else {
1679
+ server_3 = {
1680
+ name: client_4.name,
1681
+ client: client_4,
1682
+ scope: scope_6,
1683
+ transport: 'claudeai-proxy',
1684
+ isAuthenticated: undefined,
1685
+ config: client_4.config
1686
+ };
1687
+ }
1688
+ return _jsx(MCPToolListView, { server: server_3, onSelectTool: (tool) => {
1689
+ setViewState({
1690
+ type: 'mcp-tool-detail',
1691
+ client: client_4,
1692
+ tool
1693
+ });
1694
+ }, onBack: () => setViewState({
1695
+ type: 'mcp-detail',
1696
+ client: client_4
1697
+ }) });
1698
+ }
1699
+ // MCP tool detail view
1700
+ if (typeof viewState === 'object' && viewState.type === 'mcp-tool-detail') {
1701
+ const { client: client_5, tool: tool_0 } = viewState;
1702
+ const scope_7 = client_5.config.scope;
1703
+ const configType_1 = client_5.config.type;
1704
+ // Build ServerInfo for MCPToolDetailView
1705
+ let server_4;
1706
+ if (configType_1 === 'stdio') {
1707
+ server_4 = {
1708
+ name: client_5.name,
1709
+ client: client_5,
1710
+ scope: scope_7,
1711
+ transport: 'stdio',
1712
+ config: client_5.config
1713
+ };
1714
+ }
1715
+ else if (configType_1 === 'sse') {
1716
+ server_4 = {
1717
+ name: client_5.name,
1718
+ client: client_5,
1719
+ scope: scope_7,
1720
+ transport: 'sse',
1721
+ isAuthenticated: undefined,
1722
+ config: client_5.config
1723
+ };
1724
+ }
1725
+ else if (configType_1 === 'http') {
1726
+ server_4 = {
1727
+ name: client_5.name,
1728
+ client: client_5,
1729
+ scope: scope_7,
1730
+ transport: 'http',
1731
+ isAuthenticated: undefined,
1732
+ config: client_5.config
1733
+ };
1734
+ }
1735
+ else {
1736
+ server_4 = {
1737
+ name: client_5.name,
1738
+ client: client_5,
1739
+ scope: scope_7,
1740
+ transport: 'claudeai-proxy',
1741
+ isAuthenticated: undefined,
1742
+ config: client_5.config
1743
+ };
1744
+ }
1745
+ return _jsx(MCPToolDetailView, { tool: tool_0, server: server_4, onBack: () => setViewState({
1746
+ type: 'mcp-tools',
1747
+ client: client_5
1748
+ }) });
1749
+ }
1750
+ // Plugin list view (main management interface)
1751
+ const visibleItems = pagination.getVisibleItems(filteredItems);
1752
+ return _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(SearchBox, { query: searchQuery, isFocused: isSearchMode, isTerminalFocused: isTerminalFocused, width: terminalWidth - 4, cursorOffset: searchCursorOffset }) }), filteredItems.length === 0 && searchQuery && _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["No items match \"", searchQuery, "\""] }) }), pagination.scrollPosition.canScrollUp && _jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", figures.arrowUp, " more above"] }) }), visibleItems.map((item_10, visibleIndex) => {
1753
+ const actualIndex = pagination.toActualIndex(visibleIndex);
1754
+ const isSelected_0 = actualIndex === selectedIndex && !isSearchMode;
1755
+ // Check if we need to show a scope header
1756
+ const prevItem = visibleIndex > 0 ? visibleItems[visibleIndex - 1] : null;
1757
+ const showScopeHeader = !prevItem || prevItem.scope !== item_10.scope;
1758
+ // Get scope label
1759
+ const getScopeLabel = (scope_8) => {
1760
+ switch (scope_8) {
1761
+ case 'flagged':
1762
+ return 'Flagged';
1763
+ case 'project':
1764
+ return 'Project';
1765
+ case 'local':
1766
+ return 'Local';
1767
+ case 'user':
1768
+ return 'User';
1769
+ case 'enterprise':
1770
+ return 'Enterprise';
1771
+ case 'managed':
1772
+ return 'Managed';
1773
+ case 'builtin':
1774
+ return 'Built-in';
1775
+ case 'dynamic':
1776
+ return 'Built-in';
1777
+ default:
1778
+ return scope_8;
1779
+ }
1780
+ };
1781
+ return _jsxs(React.Fragment, { children: [showScopeHeader && _jsx(Box, { marginTop: visibleIndex > 0 ? 1 : 0, paddingLeft: 2, children: _jsx(Text, { dimColor: item_10.scope !== 'flagged', color: item_10.scope === 'flagged' ? 'warning' : undefined, bold: item_10.scope === 'flagged', children: getScopeLabel(item_10.scope) }) }), _jsx(UnifiedInstalledCell, { item: item_10, isSelected: isSelected_0 })] }, item_10.id);
1782
+ }), pagination.scrollPosition.canScrollDown && _jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", figures.arrowDown, " more below"] }) }), _jsx(Box, { marginTop: 1, marginLeft: 1, children: _jsx(Text, { dimColor: true, italic: true, children: _jsxs(Byline, { children: [_jsx(Text, { children: "type to search" }), _jsx(ConfigurableShortcutHint, { action: "plugin:toggle", context: "Plugin", fallback: "Space", description: "toggle" }), _jsx(ConfigurableShortcutHint, { action: "select:accept", context: "Select", fallback: "Enter", description: "details" }), _jsx(ConfigurableShortcutHint, { action: "confirm:no", context: "Confirmation", fallback: "Esc", description: "back" })] }) }) }), pendingToggles.size > 0 && _jsx(Box, { marginLeft: 1, children: _jsx(Text, { dimColor: true, italic: true, children: "Run /reload-plugins to apply changes" }) })] });
1783
+ }