@within-7/minto 0.3.6 → 0.3.10

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 (238) hide show
  1. package/{cli.js → cli.cjs} +25 -23
  2. package/dist/commands/agents/AgentsCommand.js +459 -655
  3. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  4. package/dist/commands/agents/types.js +1 -0
  5. package/dist/commands/agents/types.js.map +2 -2
  6. package/dist/commands/agents/utils/fileOperations.js +96 -36
  7. package/dist/commands/agents/utils/fileOperations.js.map +3 -3
  8. package/dist/commands/agents/utils/index.js +3 -1
  9. package/dist/commands/agents/utils/index.js.map +2 -2
  10. package/dist/commands/context.js +54 -23
  11. package/dist/commands/context.js.map +2 -2
  12. package/dist/commands/export.js +673 -93
  13. package/dist/commands/export.js.map +2 -2
  14. package/dist/commands/language.js +110 -0
  15. package/dist/commands/language.js.map +7 -0
  16. package/dist/commands/mcp-interactive.js +419 -217
  17. package/dist/commands/mcp-interactive.js.map +2 -2
  18. package/dist/commands/model.js +415 -66
  19. package/dist/commands/model.js.map +2 -2
  20. package/dist/commands/new.js +56 -0
  21. package/dist/commands/new.js.map +7 -0
  22. package/dist/commands/permissions.js +75 -49
  23. package/dist/commands/permissions.js.map +2 -2
  24. package/dist/commands/plugin.js +882 -185
  25. package/dist/commands/plugin.js.map +3 -3
  26. package/dist/commands/resume.js +251 -16
  27. package/dist/commands/resume.js.map +2 -2
  28. package/dist/commands/sandbox.js +168 -70
  29. package/dist/commands/sandbox.js.map +2 -2
  30. package/dist/commands/sessions.js +224 -0
  31. package/dist/commands/sessions.js.map +7 -0
  32. package/dist/commands/setup.js +596 -109
  33. package/dist/commands/setup.js.map +2 -2
  34. package/dist/commands/stats.js +292 -0
  35. package/dist/commands/stats.js.map +7 -0
  36. package/dist/commands/status.js +75 -7
  37. package/dist/commands/status.js.map +2 -2
  38. package/dist/commands/undo.js +154 -180
  39. package/dist/commands/undo.js.map +2 -2
  40. package/dist/commands.js +6 -0
  41. package/dist/commands.js.map +2 -2
  42. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
  43. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
  44. package/dist/components/Config.js +9 -8
  45. package/dist/components/Config.js.map +2 -2
  46. package/dist/components/HeaderBar.js +2 -1
  47. package/dist/components/HeaderBar.js.map +2 -2
  48. package/dist/components/Help.js +166 -32
  49. package/dist/components/Help.js.map +2 -2
  50. package/dist/components/HotkeyHelpPanel.js +46 -44
  51. package/dist/components/HotkeyHelpPanel.js.map +2 -2
  52. package/dist/components/InfoPanel/InfoPanel.js +123 -0
  53. package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
  54. package/dist/components/InfoPanel/index.js +5 -0
  55. package/dist/components/InfoPanel/index.js.map +7 -0
  56. package/dist/components/InfoPanel/types.js +1 -0
  57. package/dist/components/InfoPanel/types.js.map +7 -0
  58. package/dist/components/Logo.js +5 -2
  59. package/dist/components/Logo.js.map +2 -2
  60. package/dist/components/MCPServerApprovalDialog.js +6 -5
  61. package/dist/components/MCPServerApprovalDialog.js.map +2 -2
  62. package/dist/components/MCPServerMultiselectDialog.js +5 -4
  63. package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
  64. package/dist/components/MessageSelector.js +4 -3
  65. package/dist/components/MessageSelector.js.map +2 -2
  66. package/dist/components/ModelConfig.js +13 -12
  67. package/dist/components/ModelConfig.js.map +2 -2
  68. package/dist/components/ModelListManager.js +4 -3
  69. package/dist/components/ModelListManager.js.map +2 -2
  70. package/dist/components/ModelSelector/BrandTextInput.js +43 -0
  71. package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
  72. package/dist/components/ModelSelector/ModelSelector.js +419 -501
  73. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  74. package/dist/components/ModelSelector/WizardContainer.js +45 -0
  75. package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
  76. package/dist/components/ModelSelector/index.js +1 -3
  77. package/dist/components/ModelSelector/index.js.map +2 -2
  78. package/dist/components/PromptInput.js +77 -44
  79. package/dist/components/PromptInput.js.map +2 -2
  80. package/dist/components/SensitiveFileWarning.js +12 -8
  81. package/dist/components/SensitiveFileWarning.js.map +2 -2
  82. package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
  83. package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
  84. package/dist/components/SimpleSelector/index.js +5 -0
  85. package/dist/components/SimpleSelector/index.js.map +7 -0
  86. package/dist/components/SimpleSelector/types.js +1 -0
  87. package/dist/components/SimpleSelector/types.js.map +7 -0
  88. package/dist/components/StatusOverlayContent.js +21 -0
  89. package/dist/components/StatusOverlayContent.js.map +7 -0
  90. package/dist/components/TabbedListView/ScrollableList.js +117 -0
  91. package/dist/components/TabbedListView/ScrollableList.js.map +7 -0
  92. package/dist/components/TabbedListView/SearchInput.js +23 -0
  93. package/dist/components/TabbedListView/SearchInput.js.map +7 -0
  94. package/dist/components/TabbedListView/TabBar.js +20 -0
  95. package/dist/components/TabbedListView/TabBar.js.map +7 -0
  96. package/dist/components/TabbedListView/TabbedListView.js +246 -0
  97. package/dist/components/TabbedListView/TabbedListView.js.map +7 -0
  98. package/dist/components/TabbedListView/index.js +11 -0
  99. package/dist/components/TabbedListView/index.js.map +7 -0
  100. package/dist/components/TabbedListView/types.js +1 -0
  101. package/dist/components/TabbedListView/types.js.map +7 -0
  102. package/dist/components/TodoChangeBlock.js +6 -5
  103. package/dist/components/TodoChangeBlock.js.map +3 -3
  104. package/dist/components/TodoPanel.js +6 -3
  105. package/dist/components/TodoPanel.js.map +3 -3
  106. package/dist/components/TrustDialog.js +6 -5
  107. package/dist/components/TrustDialog.js.map +2 -2
  108. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +2 -1
  109. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +2 -2
  110. package/dist/constants/macros.js +1 -1
  111. package/dist/constants/macros.js.map +1 -1
  112. package/dist/constants/product.js +2 -2
  113. package/dist/constants/product.js.map +1 -1
  114. package/dist/constants/prompts.js +17 -0
  115. package/dist/constants/prompts.js.map +2 -2
  116. package/dist/constants/toolInputExamples.js +5 -1
  117. package/dist/constants/toolInputExamples.js.map +2 -2
  118. package/dist/core/backupHook.js +29 -0
  119. package/dist/core/backupHook.js.map +7 -0
  120. package/dist/core/config/defaults.js +8 -2
  121. package/dist/core/config/defaults.js.map +2 -2
  122. package/dist/core/config/schema.js +14 -2
  123. package/dist/core/config/schema.js.map +2 -2
  124. package/dist/core/costTracker.js +0 -16
  125. package/dist/core/costTracker.js.map +2 -2
  126. package/dist/core/tokenStatsManager.js +5 -0
  127. package/dist/core/tokenStatsManager.js.map +2 -2
  128. package/dist/cost-tracker.js +0 -16
  129. package/dist/cost-tracker.js.map +2 -2
  130. package/dist/entrypoints/bootstrap.js +56 -0
  131. package/dist/entrypoints/bootstrap.js.map +7 -0
  132. package/dist/entrypoints/cli.js +164 -23
  133. package/dist/entrypoints/cli.js.map +3 -3
  134. package/dist/history.js +75 -15
  135. package/dist/history.js.map +2 -2
  136. package/dist/i18n/index.js +2 -2
  137. package/dist/i18n/index.js.map +2 -2
  138. package/dist/i18n/locales/en.js +582 -1
  139. package/dist/i18n/locales/en.js.map +2 -2
  140. package/dist/i18n/locales/zh-CN.js +582 -1
  141. package/dist/i18n/locales/zh-CN.js.map +2 -2
  142. package/dist/i18n/types.js.map +1 -1
  143. package/dist/index.js +1 -1
  144. package/dist/index.js.map +2 -2
  145. package/dist/messages.js +11 -0
  146. package/dist/messages.js.map +2 -2
  147. package/dist/permissions.js.map +2 -2
  148. package/dist/query.js +9 -0
  149. package/dist/query.js.map +2 -2
  150. package/dist/screens/REPL.js +45 -7
  151. package/dist/screens/REPL.js.map +2 -2
  152. package/dist/services/customCommands.js +44 -16
  153. package/dist/services/customCommands.js.map +2 -2
  154. package/dist/services/plugins/lspServers.js +1 -1
  155. package/dist/services/plugins/lspServers.js.map +2 -2
  156. package/dist/services/plugins/pluginRuntime.js +2 -1
  157. package/dist/services/plugins/pluginRuntime.js.map +2 -2
  158. package/dist/services/plugins/pluginValidation.js +10 -3
  159. package/dist/services/plugins/pluginValidation.js.map +2 -2
  160. package/dist/services/plugins/skillMarketplace.js +16 -8
  161. package/dist/services/plugins/skillMarketplace.js.map +2 -2
  162. package/dist/services/systemReminder.js +17 -6
  163. package/dist/services/systemReminder.js.map +2 -2
  164. package/dist/tools/FileEditTool/FileEditTool.js +7 -0
  165. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  166. package/dist/tools/FileWriteTool/FileWriteTool.js +7 -0
  167. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  168. package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
  169. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  170. package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
  171. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  172. package/dist/tools/TaskTool/TaskTool.js +179 -1
  173. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  174. package/dist/tools/TodoWriteTool/prompt.js +21 -0
  175. package/dist/tools/TodoWriteTool/prompt.js.map +2 -2
  176. package/dist/tools/URLFetcherTool/prompt.js +14 -9
  177. package/dist/tools/URLFetcherTool/prompt.js.map +2 -2
  178. package/dist/tools/WebSearchTool/prompt.js +12 -6
  179. package/dist/tools/WebSearchTool/prompt.js.map +2 -2
  180. package/dist/types/PermissionMode.js +30 -1
  181. package/dist/types/PermissionMode.js.map +2 -2
  182. package/dist/types/plugin.js +2 -4
  183. package/dist/types/plugin.js.map +2 -2
  184. package/dist/utils/agentHookExecutor.js +103 -0
  185. package/dist/utils/agentHookExecutor.js.map +7 -0
  186. package/dist/utils/agentLoader.js +272 -32
  187. package/dist/utils/agentLoader.js.map +2 -2
  188. package/dist/utils/agentMemory.js +134 -0
  189. package/dist/utils/agentMemory.js.map +7 -0
  190. package/dist/utils/claudeCodeSync.js +439 -0
  191. package/dist/utils/claudeCodeSync.js.map +7 -0
  192. package/dist/utils/config.js +52 -24
  193. package/dist/utils/config.js.map +2 -2
  194. package/dist/utils/configPaths.js +199 -0
  195. package/dist/utils/configPaths.js.map +7 -0
  196. package/dist/utils/execFileNoThrow.js +2 -1
  197. package/dist/utils/execFileNoThrow.js.map +2 -2
  198. package/dist/utils/historyManager.js +234 -0
  199. package/dist/utils/historyManager.js.map +7 -0
  200. package/dist/utils/marketplaceManager.js +80 -43
  201. package/dist/utils/marketplaceManager.js.map +2 -2
  202. package/dist/utils/messages.js +13 -8
  203. package/dist/utils/messages.js.map +2 -2
  204. package/dist/utils/migration/index.js +37 -0
  205. package/dist/utils/migration/index.js.map +7 -0
  206. package/dist/utils/migration/migrateHistory.js +273 -0
  207. package/dist/utils/migration/migrateHistory.js.map +7 -0
  208. package/dist/utils/migration/migrateTodos.js +323 -0
  209. package/dist/utils/migration/migrateTodos.js.map +7 -0
  210. package/dist/utils/pasteCache.js +309 -0
  211. package/dist/utils/pasteCache.js.map +7 -0
  212. package/dist/utils/pluginInstaller.js +34 -24
  213. package/dist/utils/pluginInstaller.js.map +2 -2
  214. package/dist/utils/pluginLoader.js +54 -28
  215. package/dist/utils/pluginLoader.js.map +2 -2
  216. package/dist/utils/repoFetcher.js +110 -0
  217. package/dist/utils/repoFetcher.js.map +7 -0
  218. package/dist/utils/sessionIndex.js +192 -0
  219. package/dist/utils/sessionIndex.js.map +7 -0
  220. package/dist/utils/sessionTracker.js +170 -0
  221. package/dist/utils/sessionTracker.js.map +7 -0
  222. package/dist/utils/skillLoader.js +103 -5
  223. package/dist/utils/skillLoader.js.map +2 -2
  224. package/dist/utils/stats.js +417 -0
  225. package/dist/utils/stats.js.map +7 -0
  226. package/dist/utils/stringSubstitution.js +106 -0
  227. package/dist/utils/stringSubstitution.js.map +7 -0
  228. package/dist/utils/teamConfig.js +156 -14
  229. package/dist/utils/teamConfig.js.map +2 -2
  230. package/dist/utils/terminal.js +1 -1
  231. package/dist/utils/terminal.js.map +2 -2
  232. package/dist/utils/todoStorage.js +51 -19
  233. package/dist/utils/todoStorage.js.map +2 -2
  234. package/dist/utils/tooling/safeRender.js.map +2 -2
  235. package/dist/version.js +2 -2
  236. package/dist/version.js.map +1 -1
  237. package/package.json +71 -28
  238. package/scripts/{postinstall.js → postinstall.cjs} +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/mcp-interactive.tsx"],
4
- "sourcesContent": ["/**\n * Interactive MCP Server Management UI\n *\n * Complete interactive interface for MCP server management with navigation\n */\n\nimport React, { useState, useEffect, useCallback } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { Select } from '@components/CustomSelect/select'\nimport { getTheme } from '@utils/theme'\nimport { SEMANTIC_COLORS } from '@constants/colors'\nimport { Command } from '@commands'\nimport {\n listMCPServers,\n getClients,\n refreshMCPConnections,\n getMcpServer,\n addMcpServer,\n removeMcpServer,\n type ScopedMcpServerConfig,\n} from '@services/mcpClient'\nimport { SimpleSpinner } from '@components/Spinner'\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '@utils/config'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype Screen = 'main-menu' | 'server-list' | 'server-details'\n\ntype NavigationState = {\n screen: Screen\n serverName?: string\n}\n\ntype ServerStatus = {\n name: string\n status: 'connected' | 'failed'\n config: ScopedMcpServerConfig\n}\n\n// =============================================================================\n// Main Menu\n// =============================================================================\n\nconst MainMenu: React.FC<{\n onNavigate: (state: NavigationState) => void\n onExit: () => void\n isActive?: boolean\n}> = ({ onNavigate, onExit, isActive = true }) => {\n const theme = getTheme()\n\n const options = [\n { label: '\uD83D\uDCCB View all MCP servers', value: 'list' },\n { label: '\uD83D\uDD04 Refresh connections', value: 'refresh' },\n ]\n\n // Only listen when this component is active\n useInput(\n (input, key) => {\n if (key.escape) onExit()\n },\n { isActive },\n )\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n MCP Server Manager\n </Text>\n </Box>\n\n <Select\n options={options}\n onChange={value => {\n if (value === 'list') onNavigate({ screen: 'server-list' })\n else if (value === 'refresh') {\n refreshMCPConnections()\n onNavigate({ screen: 'server-list' })\n }\n }}\n />\n\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n Press <Text bold>ESC</Text> to exit\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Server List\n// =============================================================================\n\nconst ServerList: React.FC<{\n onNavigate: (state: NavigationState) => void\n onBack: () => void\n isActive?: boolean\n}> = ({ onNavigate, onBack, isActive = true }) => {\n const theme = getTheme()\n const [loading, setLoading] = useState(true)\n const [servers, setServers] = useState<ServerStatus[]>([])\n\n useEffect(() => {\n const loadServers = async () => {\n const serverConfigs = listMCPServers()\n const clients = await getClients()\n\n const serverStatuses: ServerStatus[] = Object.entries(serverConfigs).map(\n ([name, _]) => {\n const client = clients.find(c => c.name === name)\n const config = getMcpServer(name)!\n return {\n name,\n status: client?.type === 'connected' ? 'connected' : 'failed',\n config,\n }\n },\n )\n\n setServers(serverStatuses)\n setLoading(false)\n }\n\n loadServers()\n }, [])\n\n // Memoize the onChange handler to prevent infinite re-renders\n const handleServerSelect = useCallback(\n (serverName: string) => {\n onNavigate({ screen: 'server-details', serverName })\n },\n [onNavigate],\n )\n\n // Only listen when this component is active\n useInput(\n (input, key) => {\n if (key.escape) onBack()\n },\n { isActive },\n )\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <SimpleSpinner label=\"Loading MCP servers...\" />\n </Box>\n )\n }\n\n if (servers.length === 0) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text>No MCP servers configured.</Text>\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n Press <Text bold>ESC</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n }\n\n const options = servers.map(server => {\n const statusIcon = server.status === 'connected' ? '\u2713' : '\u2717'\n const statusColor =\n server.status === 'connected' ? theme.success : theme.error\n return {\n label: (\n <Text>\n <Text color={statusColor}>{statusIcon}</Text> {server.name}{' '}\n <Text color={SEMANTIC_COLORS.dim}>({server.config.scope})</Text>\n </Text>\n ),\n value: server.name,\n }\n })\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n MCP Servers\n </Text>\n </Box>\n\n <Select options={options} onChange={handleServerSelect} />\n\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n Press <Text bold>ESC</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Server Details\n// =============================================================================\n\nconst ServerDetails: React.FC<{\n serverName: string\n onBack: () => void\n onRefresh: () => void\n isActive?: boolean\n}> = ({ serverName, onBack, onRefresh, isActive = true }) => {\n const theme = getTheme()\n const [loading, setLoading] = useState(true)\n const [server, setServer] = useState<ServerStatus | null>(null)\n const [toggling, setToggling] = useState(false)\n\n useEffect(() => {\n const loadServer = async () => {\n const config = getMcpServer(serverName)\n if (!config) {\n onBack()\n return\n }\n\n const clients = await getClients()\n const client = clients.find(c => c.name === serverName)\n\n setServer({\n name: serverName,\n status: client?.type === 'connected' ? 'connected' : 'failed',\n config,\n })\n setLoading(false)\n }\n\n loadServer()\n }, [serverName])\n\n const toggleEnabled = async () => {\n if (!server) return\n\n setToggling(true)\n\n // Get current project config\n const projectConfig = getCurrentProjectConfig()\n const currentServer = projectConfig.mcpServers?.[serverName]\n\n if (currentServer) {\n // Toggle in project config\n const newEnabled = !(currentServer.enabled ?? true)\n await saveCurrentProjectConfig({\n ...projectConfig,\n mcpServers: {\n ...projectConfig.mcpServers,\n [serverName]: {\n ...currentServer,\n enabled: newEnabled,\n },\n },\n })\n } else {\n // Server is from global or mcprc, copy to project and disable\n const serverConfig = getMcpServer(serverName)\n if (serverConfig) {\n await saveCurrentProjectConfig({\n ...projectConfig,\n mcpServers: {\n ...projectConfig.mcpServers,\n [serverName]: {\n ...serverConfig,\n enabled: false,\n },\n },\n })\n }\n }\n\n setToggling(false)\n refreshMCPConnections()\n onRefresh()\n }\n\n // Only listen when this component is active\n useInput(\n (input, key) => {\n if (key.escape) onBack()\n },\n { isActive },\n )\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <SimpleSpinner label=\"Loading server details...\" />\n </Box>\n )\n }\n\n if (!server) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={theme.error}>Server not found</Text>\n </Box>\n )\n }\n\n const isEnabled = 'enabled' in server.config ? server.config.enabled : true\n const statusColor =\n server.status === 'connected' ? theme.success : theme.error\n const enabledColor = isEnabled ? theme.success : theme.error\n\n const options = [\n {\n label: isEnabled ? '\uD83D\uDD34 Disable server' : '\uD83D\uDFE2 Enable server',\n value: 'toggle',\n },\n { label: '\uD83D\uDD04 Refresh connection', value: 'refresh' },\n { label: '\u2190 Back to list', value: 'back' },\n ]\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n {server.name}\n </Text>\n </Box>\n\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>\n Status: <Text color={statusColor}>{server.status}</Text>\n </Text>\n <Text>\n Enabled: <Text color={enabledColor}>{isEnabled ? 'Yes' : 'No'}</Text>\n </Text>\n <Text>\n Scope: <Text color={SEMANTIC_COLORS.dim}>{server.config.scope}</Text>\n </Text>\n <Text>\n Type: <Text color={SEMANTIC_COLORS.dim}>{server.config.type}</Text>\n </Text>\n </Box>\n\n {toggling ? (\n <SimpleSpinner label=\"Toggling server...\" />\n ) : (\n <Select\n options={options}\n onChange={value => {\n if (value === 'toggle') toggleEnabled()\n else if (value === 'refresh') {\n refreshMCPConnections()\n onRefresh()\n } else if (value === 'back') onBack()\n }}\n />\n )}\n\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n Press <Text bold>ESC</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Main Interactive Component\n// =============================================================================\n\nconst MCPInteractive: React.FC<{\n onDone: (result?: string) => void\n}> = ({ onDone }) => {\n const [navState, setNavState] = useState<NavigationState>({\n screen: 'main-menu',\n })\n\n const handleNavigate = (state: NavigationState) => {\n setNavState(state)\n }\n\n const handleBack = () => {\n if (navState.screen === 'server-details') {\n setNavState({ screen: 'server-list' })\n } else {\n setNavState({ screen: 'main-menu' })\n }\n }\n\n const handleRefresh = () => {\n // Reload current screen\n setNavState({ ...navState })\n }\n\n switch (navState.screen) {\n case 'main-menu':\n return <MainMenu onNavigate={handleNavigate} onExit={() => onDone()} />\n\n case 'server-list':\n return <ServerList onNavigate={handleNavigate} onBack={handleBack} />\n\n case 'server-details':\n return (\n <ServerDetails\n serverName={navState.serverName!}\n onBack={handleBack}\n onRefresh={handleRefresh}\n />\n )\n\n default:\n return <Text>Unknown screen</Text>\n }\n}\n\n// =============================================================================\n// Command Definition\n// =============================================================================\n\nconst mcpInteractive = {\n type: 'local-jsx',\n name: 'mcp',\n description: 'Interactive MCP server management',\n isEnabled: true,\n isHidden: false,\n async call(onDone: (result?: string) => void) {\n return <MCPInteractive onDone={onDone} />\n },\n userFacingName() {\n return 'mcp'\n },\n} satisfies Command\n\nexport default mcpInteractive\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Interactive MCP Server Management UI\n *\n * Uses TabbedListView for consistent UI matching /agents and /plugins.\n *\n * Phase flow:\n * main \u2192 (select server) \u2192 server-actions \u2192 (toggle|delete|back)\n * \u2193\n * confirm-delete \u2192 main\n * main \u2192 (Add Server) \u2192 add-name \u2192 add-command \u2192 main\n * main \u2192 (Refresh All) \u2192 main\n */\n\nimport React, { useState, useEffect, useCallback, useMemo } from 'react'\nimport { Command } from '@commands'\nimport {\n listMCPServers,\n getClients,\n refreshMCPConnections,\n getMcpServer,\n addMcpServer,\n removeMcpServer,\n type ScopedMcpServerConfig,\n} from '@services/mcpClient'\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '@utils/config'\nimport { TabbedListView } from '@components/TabbedListView/TabbedListView'\nimport type {\n ListItem,\n TabDefinition,\n StatusOverlay,\n} from '@components/TabbedListView/types'\nimport { t } from '@i18n'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype ServerStatus = {\n name: string\n status: 'connected' | 'failed'\n config: ScopedMcpServerConfig\n}\n\ntype MCPPhase =\n | { type: 'main' }\n | { type: 'server-actions'; serverName: string; scope: string }\n | { type: 'confirm-delete'; serverName: string; scope: string }\n | { type: 'add-name' }\n | { type: 'add-command'; name: string }\n\n// Special item IDs for action entries in the list\nconst ID_ADD_SERVER = '__add__'\nconst ID_REFRESH_ALL = '__refresh__'\nconst ID_TOGGLE = '__toggle__'\nconst ID_DELETE = '__delete__'\nconst ID_BACK = '__back__'\nconst ID_CONFIRM_YES = '__yes__'\nconst ID_CONFIRM_NO = '__no__'\n\n// =============================================================================\n// Main Interactive Component\n// =============================================================================\n\nconst MCPInteractive: React.FC<{\n onDone: (result?: string) => void\n}> = ({ onDone }) => {\n const [phase, setPhase] = useState<MCPPhase>({ type: 'main' })\n const [activeTab, setActiveTab] = useState('all')\n const [searchQuery, setSearchQuery] = useState('')\n const [statusOverlay, setStatusOverlay] = useState<StatusOverlay | null>(null)\n const [servers, setServers] = useState<ServerStatus[]>([])\n const [loading, setLoading] = useState(true)\n\n // Load servers\n const loadServers = useCallback(async () => {\n try {\n const serverConfigs = listMCPServers()\n const clients = await getClients()\n\n const serverStatuses: ServerStatus[] = Object.entries(serverConfigs).map(\n ([name, _]) => {\n const client = clients.find(c => c.name === name)\n const config = getMcpServer(name)!\n return {\n name,\n status: client?.type === 'connected' ? 'connected' : 'failed',\n config,\n }\n },\n )\n\n setServers(serverStatuses)\n } catch {\n setServers([])\n }\n }, [])\n\n // Initial load\n useEffect(() => {\n setLoading(true)\n loadServers().finally(() => setLoading(false))\n }, [loadServers])\n\n // Reload on return to main\n useEffect(() => {\n if (phase.type === 'main') {\n loadServers()\n setSearchQuery('')\n }\n }, [phase, loadServers])\n\n // \u2500\u2500\u2500 Actions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const toggleServer = useCallback(\n async (serverName: string) => {\n setStatusOverlay({\n type: 'loading',\n message: t('commands.mcp.toggling'),\n })\n try {\n const projectConfig = getCurrentProjectConfig()\n const currentServer = projectConfig.mcpServers?.[serverName]\n\n if (currentServer) {\n const newEnabled = !(currentServer.enabled ?? true)\n await saveCurrentProjectConfig({\n ...projectConfig,\n mcpServers: {\n ...projectConfig.mcpServers,\n [serverName]: { ...currentServer, enabled: newEnabled },\n },\n })\n } else {\n const serverConfig = getMcpServer(serverName)\n if (serverConfig) {\n await saveCurrentProjectConfig({\n ...projectConfig,\n mcpServers: {\n ...projectConfig.mcpServers,\n [serverName]: { ...serverConfig, enabled: false },\n },\n })\n }\n }\n\n refreshMCPConnections()\n await loadServers()\n setStatusOverlay({\n type: 'success',\n message: t('commands.mcp.toggleSuccess'),\n })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n setStatusOverlay({ type: 'error', message: msg })\n }\n },\n [loadServers],\n )\n\n const deleteServer = useCallback(\n async (serverName: string, scope: string) => {\n setStatusOverlay({\n type: 'loading',\n message: t('commands.mcp.deleting'),\n })\n try {\n removeMcpServer(serverName, scope as 'project' | 'global')\n refreshMCPConnections()\n await loadServers()\n setStatusOverlay({\n type: 'success',\n message: t('commands.mcp.deleteSuccess'),\n })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n setStatusOverlay({ type: 'error', message: msg })\n }\n },\n [loadServers],\n )\n\n const addNewServer = useCallback(\n async (name: string, commandOrUrl: string) => {\n setStatusOverlay({\n type: 'loading',\n message: t('commands.mcp.adding'),\n })\n try {\n if (\n commandOrUrl.startsWith('http://') ||\n commandOrUrl.startsWith('https://')\n ) {\n addMcpServer(name, { type: 'sse', url: commandOrUrl }, 'project')\n } else {\n const parts = commandOrUrl.split(/\\s+/)\n const command = parts[0]\n const args = parts.slice(1)\n addMcpServer(\n name,\n { type: 'stdio', command, args: args.length > 0 ? args : [] },\n 'project',\n )\n }\n refreshMCPConnections()\n await loadServers()\n setStatusOverlay({\n type: 'success',\n message: t('commands.mcp.addSuccess'),\n })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n setStatusOverlay({\n type: 'error',\n message: `${t('commands.mcp.addFailed')}: ${msg}`,\n })\n }\n },\n [loadServers],\n )\n\n const refreshAll = useCallback(async () => {\n setStatusOverlay({\n type: 'loading',\n message: t('commands.mcp.refreshing'),\n })\n try {\n refreshMCPConnections()\n await loadServers()\n setStatusOverlay({\n type: 'success',\n message: t('commands.mcp.refreshSuccess'),\n })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n setStatusOverlay({ type: 'error', message: msg })\n }\n }, [loadServers])\n\n // \u2500\u2500\u2500 Build tabs, items, title based on phase \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const { tabs, items, title, footerHint, searchEnabled, searchPlaceholder } =\n useMemo(() => {\n switch (phase.type) {\n case 'main': {\n const projectCount = servers.filter(\n s => s.config.scope === 'project',\n ).length\n const globalCount = servers.filter(\n s => s.config.scope === 'global',\n ).length\n\n const mainTabs: TabDefinition[] = [\n {\n id: 'all',\n label: t('commands.mcp.tabAll'),\n badge: servers.length,\n },\n {\n id: 'project',\n label: t('commands.mcp.tabProject'),\n badge: projectCount,\n },\n {\n id: 'global',\n label: t('commands.mcp.tabGlobal'),\n badge: globalCount,\n },\n ]\n\n // Filter servers by active tab\n const filtered =\n activeTab === 'all'\n ? servers\n : servers.filter(s => s.config.scope === activeTab)\n\n const mainItems: ListItem[] = filtered.map(server => {\n const isEnabled =\n 'enabled' in server.config ? server.config.enabled : true\n return {\n id: server.name,\n label: server.name,\n description: `${server.config.scope} \u00B7 ${server.config.type}`,\n status: !isEnabled\n ? 'disabled'\n : server.status === 'connected'\n ? 'enabled'\n : 'error',\n data: { type: 'server', server },\n }\n })\n\n // Action entries at the bottom\n mainItems.push({\n id: ID_ADD_SERVER,\n label: `+ ${t('commands.mcp.addServer')}`,\n data: { type: 'action' },\n })\n mainItems.push({\n id: ID_REFRESH_ALL,\n label: `\u21BB ${t('commands.mcp.refreshAll')}`,\n data: { type: 'action' },\n })\n\n return {\n tabs: mainTabs,\n items: mainItems,\n title: t('commands.mcp.title'),\n footerHint:\n '\u2191\u2193 Navigate \u00B7 Enter Select \u00B7 Tab Switch \u00B7 / Search \u00B7 Esc Exit',\n searchEnabled: true,\n searchPlaceholder: undefined,\n }\n }\n\n case 'server-actions': {\n const server = servers.find(s => s.name === phase.serverName)\n const isEnabled = server\n ? 'enabled' in server.config\n ? server.config.enabled\n : true\n : true\n\n const actionItems: ListItem[] = [\n {\n id: ID_TOGGLE,\n label: isEnabled\n ? t('commands.mcp.disable')\n : t('commands.mcp.enable'),\n },\n { id: ID_DELETE, label: t('commands.mcp.deleteServer') },\n { id: ID_BACK, label: `\u2190 ${t('commands.mcp.back')}` },\n ]\n\n return {\n tabs: [\n { id: 'actions', label: t('commands.mcp.actions') },\n ] as TabDefinition[],\n items: actionItems,\n title: phase.serverName,\n footerHint: '\u2191\u2193 Navigate \u00B7 Enter Select \u00B7 Esc Back',\n searchEnabled: false,\n searchPlaceholder: undefined,\n }\n }\n\n case 'confirm-delete': {\n const confirmItems: ListItem[] = [\n { id: ID_CONFIRM_YES, label: t('commands.mcp.confirmYes') },\n { id: ID_CONFIRM_NO, label: t('commands.mcp.confirmNo') },\n ]\n\n return {\n tabs: [\n { id: 'actions', label: t('commands.mcp.actions') },\n ] as TabDefinition[],\n items: confirmItems,\n title: t('commands.mcp.confirmDeleteTitle').replace(\n '{name}',\n phase.serverName,\n ),\n footerHint: '\u2191\u2193 Navigate \u00B7 Enter Select \u00B7 Esc Back',\n searchEnabled: false,\n searchPlaceholder: undefined,\n }\n }\n\n case 'add-name': {\n return {\n tabs: [\n { id: 'add', label: t('commands.mcp.addServer') },\n ] as TabDefinition[],\n items: [] as ListItem[],\n title: t('commands.mcp.addServer'),\n footerHint: t('commands.mcp.addFooterHint'),\n searchEnabled: true,\n searchPlaceholder: t('commands.mcp.addNamePlaceholder'),\n }\n }\n\n case 'add-command': {\n const exampleItems: ListItem[] = [\n {\n id: 'example-stdio',\n label: 'npx -y @modelcontextprotocol/server-xxx',\n description: 'stdio command',\n },\n {\n id: 'example-sse',\n label: 'https://example.com/mcp/sse',\n description: 'SSE endpoint',\n },\n ]\n\n return {\n tabs: [\n { id: 'add', label: t('commands.mcp.addServer') },\n ] as TabDefinition[],\n items: exampleItems,\n title: `${t('commands.mcp.addServer')}: ${phase.name}`,\n footerHint: t('commands.mcp.addCommandFooterHint'),\n searchEnabled: true,\n searchPlaceholder: t('commands.mcp.addCommandPlaceholder'),\n }\n }\n }\n }, [phase, activeTab, servers])\n\n // \u2500\u2500\u2500 Handle tab change \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const handleTabChange = useCallback((tabId: string) => {\n setActiveTab(tabId)\n setSearchQuery('')\n }, [])\n\n // \u2500\u2500\u2500 Handle status overlay dismiss \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const handleStatusDismiss = useCallback(() => {\n setStatusOverlay(null)\n setPhase({ type: 'main' })\n }, [])\n\n // \u2500\u2500\u2500 Handle ESC / back navigation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const handleBack = useCallback(() => {\n if (statusOverlay && statusOverlay.type !== 'loading') {\n handleStatusDismiss()\n return\n }\n switch (phase.type) {\n case 'main':\n onDone()\n break\n case 'server-actions':\n setPhase({ type: 'main' })\n setSearchQuery('')\n break\n case 'confirm-delete':\n setPhase({\n type: 'server-actions',\n serverName: phase.serverName,\n scope: phase.scope,\n })\n break\n case 'add-name':\n case 'add-command':\n setPhase({ type: 'main' })\n setSearchQuery('')\n break\n }\n }, [phase, statusOverlay, onDone, handleStatusDismiss])\n\n const handleClose = useCallback(() => {\n if (statusOverlay && statusOverlay.type !== 'loading') {\n handleStatusDismiss()\n return\n }\n if (phase.type === 'main') {\n onDone()\n } else {\n setPhase({ type: 'main' })\n setSearchQuery('')\n }\n }, [phase, statusOverlay, onDone, handleStatusDismiss])\n\n // \u2500\u2500\u2500 Handle search submit (for add-name / add-command) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const handleSearchSubmit = useCallback(\n async (query: string) => {\n if (!query.trim()) return\n\n if (phase.type === 'add-name') {\n setPhase({ type: 'add-command', name: query.trim() })\n setSearchQuery('')\n return\n }\n\n if (phase.type === 'add-command') {\n await addNewServer(phase.name, query.trim())\n setSearchQuery('')\n }\n },\n [phase, addNewServer],\n )\n\n // \u2500\u2500\u2500 Handle item selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const handleSelect = useCallback(\n async (item: ListItem) => {\n switch (phase.type) {\n case 'main': {\n if (item.id === ID_ADD_SERVER) {\n setPhase({ type: 'add-name' })\n setSearchQuery('')\n return\n }\n if (item.id === ID_REFRESH_ALL) {\n await refreshAll()\n return\n }\n // Server selected \u2014 go to actions\n const data = item.data as { type: string; server?: ServerStatus }\n if (data.type === 'server' && data.server) {\n setPhase({\n type: 'server-actions',\n serverName: data.server.name,\n scope: data.server.config.scope,\n })\n }\n break\n }\n\n case 'server-actions': {\n if (item.id === ID_BACK) {\n setPhase({ type: 'main' })\n return\n }\n if (item.id === ID_TOGGLE) {\n await toggleServer(phase.serverName)\n return\n }\n if (item.id === ID_DELETE) {\n setPhase({\n type: 'confirm-delete',\n serverName: phase.serverName,\n scope: phase.scope,\n })\n }\n break\n }\n\n case 'confirm-delete': {\n if (item.id === ID_CONFIRM_YES) {\n await deleteServer(phase.serverName, phase.scope)\n } else {\n // No \u2014 back to actions\n setPhase({\n type: 'server-actions',\n serverName: phase.serverName,\n scope: phase.scope,\n })\n }\n break\n }\n\n case 'add-command': {\n // Clicking an example copies label to search\n setSearchQuery(item.label)\n break\n }\n }\n },\n [phase, refreshAll, toggleServer, deleteServer],\n )\n\n // \u2500\u2500\u2500 Determine current tab for rendering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const currentTab =\n phase.type === 'main'\n ? activeTab\n : phase.type === 'server-actions' || phase.type === 'confirm-delete'\n ? 'actions'\n : 'add'\n\n // \u2500\u2500\u2500 Determine if search submit is needed \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const needsSearchSubmit =\n phase.type === 'add-name' || phase.type === 'add-command'\n\n return (\n <TabbedListView\n title={title}\n tabs={tabs}\n activeTab={currentTab}\n onTabChange={handleTabChange}\n items={items}\n searchEnabled={searchEnabled}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n onSearchSubmit={needsSearchSubmit ? handleSearchSubmit : undefined}\n onSelect={handleSelect}\n onClose={handleClose}\n onBack={handleBack}\n statusOverlay={statusOverlay}\n footerHint={footerHint}\n groupByCategory={false}\n isLoading={loading}\n emptyText={t('commands.mcp.noServers')}\n statusDismissHint=\"Enter Continue \u00B7 Esc Back\"\n />\n )\n}\n\n// =============================================================================\n// Command Definition\n// =============================================================================\n\nconst mcpInteractive = {\n type: 'local-jsx',\n name: 'mcp',\n description: t('commands.mcp.description'),\n isEnabled: true,\n isHidden: false,\n hidePromptInput: true,\n async call(onDone: (result?: string) => void) {\n return <MCPInteractive onDone={onDone} />\n },\n userFacingName() {\n return 'mcp'\n },\n} satisfies Command\n\nexport default mcpInteractive\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }