imcp 0.1.19 → 0.2.1
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.
- package/README.md +56 -0
- package/dist/__mocks__/strip-json-comments.d.ts +1 -0
- package/dist/__mocks__/strip-json-comments.js +2 -0
- package/dist/__mocks__/strip-json-comments.js.map +1 -0
- package/dist/cli/commands/install.js +1 -1
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/tui.d.ts +2 -0
- package/dist/cli/commands/tui.js +2 -0
- package/dist/cli/commands/tui.js.map +1 -0
- package/dist/cli/commands/uninstall.js +1 -1
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui/App.d.ts +1 -0
- package/dist/cli/tui/App.js +2 -0
- package/dist/cli/tui/App.js.map +1 -0
- package/dist/cli/tui/components/ClientSelector.d.ts +11 -0
- package/dist/cli/tui/components/ClientSelector.js +2 -0
- package/dist/cli/tui/components/ClientSelector.js.map +1 -0
- package/dist/cli/tui/components/Header.d.ts +1 -0
- package/dist/cli/tui/components/Header.js +2 -0
- package/dist/cli/tui/components/Header.js.map +1 -0
- package/dist/cli/tui/components/InstallProgress.d.ts +8 -0
- package/dist/cli/tui/components/InstallProgress.js +2 -0
- package/dist/cli/tui/components/InstallProgress.js.map +1 -0
- package/dist/cli/tui/components/Panel.d.ts +8 -0
- package/dist/cli/tui/components/Panel.js +2 -0
- package/dist/cli/tui/components/Panel.js.map +1 -0
- package/dist/cli/tui/components/SearchBar.d.ts +11 -0
- package/dist/cli/tui/components/SearchBar.js +2 -0
- package/dist/cli/tui/components/SearchBar.js.map +1 -0
- package/dist/cli/tui/components/ServerList.d.ts +16 -0
- package/dist/cli/tui/components/ServerList.js +2 -0
- package/dist/cli/tui/components/ServerList.js.map +1 -0
- package/dist/cli/tui/components/StepIndicator.d.ts +7 -0
- package/dist/cli/tui/components/StepIndicator.js +2 -0
- package/dist/cli/tui/components/StepIndicator.js.map +1 -0
- package/dist/cli/tui/hooks/useInstall.d.ts +18 -0
- package/dist/cli/tui/hooks/useInstall.js +2 -0
- package/dist/cli/tui/hooks/useInstall.js.map +1 -0
- package/dist/cli/tui/hooks/useServers.d.ts +18 -0
- package/dist/cli/tui/hooks/useServers.js +2 -0
- package/dist/cli/tui/hooks/useServers.js.map +1 -0
- package/dist/cli/tui/utils/fuzzySearch.d.ts +9 -0
- package/dist/cli/tui/utils/fuzzySearch.js +2 -0
- package/dist/cli/tui/utils/fuzzySearch.js.map +1 -0
- package/dist/cli/utils/clientOptions.d.ts +3 -0
- package/dist/cli/utils/clientOptions.js +2 -0
- package/dist/cli/utils/clientOptions.js.map +1 -0
- package/dist/core/installers/clients/BaseClientInstaller.d.ts +8 -0
- package/dist/core/installers/clients/BaseClientInstaller.js +1 -1
- package/dist/core/installers/clients/BaseClientInstaller.js.map +1 -1
- package/dist/core/installers/clients/ClaudeCodeInstaller.js +1 -1
- package/dist/core/installers/clients/ClaudeCodeInstaller.js.map +1 -1
- package/dist/core/installers/clients/ClientInstaller.d.ts +3 -0
- package/dist/core/installers/clients/ClientInstaller.js +1 -1
- package/dist/core/installers/clients/ClientInstaller.js.map +1 -1
- package/dist/core/installers/clients/ClientInstallerFactory.js +1 -1
- package/dist/core/installers/clients/ClientInstallerFactory.js.map +1 -1
- package/dist/core/installers/clients/CodexInstaller.d.ts +45 -0
- package/dist/core/installers/clients/CodexInstaller.js +2 -0
- package/dist/core/installers/clients/CodexInstaller.js.map +1 -0
- package/dist/core/installers/clients/GithubCopilotInstaller.js +1 -1
- package/dist/core/installers/clients/GithubCopilotInstaller.js.map +1 -1
- package/dist/core/installers/clients/RooCodeInstaller.d.ts +11 -0
- package/dist/core/installers/clients/RooCodeInstaller.js +2 -0
- package/dist/core/installers/clients/RooCodeInstaller.js.map +1 -0
- package/dist/core/installers/clients/VisualStudioInstaller.js +1 -1
- package/dist/core/installers/clients/VisualStudioInstaller.js.map +1 -1
- package/dist/core/loaders/ConfigurationLoader.js +1 -1
- package/dist/core/loaders/ConfigurationLoader.js.map +1 -1
- package/dist/core/loaders/ConfigurationProvider.d.ts +1 -0
- package/dist/core/loaders/ConfigurationProvider.js +1 -1
- package/dist/core/loaders/ConfigurationProvider.js.map +1 -1
- package/dist/core/metadatas/constants.js +1 -1
- package/dist/core/metadatas/constants.js.map +1 -1
- package/dist/core/metadatas/types.d.ts +2 -0
- package/dist/core/metadatas/types.js.map +1 -1
- package/dist/services/InstallationService.js +1 -1
- package/dist/services/InstallationService.js.map +1 -1
- package/dist/services/RequirementService.d.ts +2 -3
- package/dist/services/RequirementService.js +1 -1
- package/dist/services/RequirementService.js.map +1 -1
- package/dist/services/ServerService.d.ts +5 -0
- package/dist/services/ServerService.js +1 -1
- package/dist/services/ServerService.js.map +1 -1
- package/dist/services/TelemetryService.js +1 -1
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/utils/tomlUtils.d.ts +17 -0
- package/dist/utils/tomlUtils.js +2 -0
- package/dist/utils/tomlUtils.js.map +1 -0
- package/dist/web/public/js/modal/modalSetup.js +1 -1
- package/dist/web/public/js/modal/modalSetup.js.map +1 -1
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -66,10 +66,66 @@ npx -y imcp@latest serve --feed-file ./custom-feed.json --schemas-directory ./fe
|
|
|
66
66
|
npx -y imcp@latest serve --repo https://github.com/ai-microsoft/imcp-feed --branch main
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
+
### tui
|
|
70
|
+
|
|
71
|
+
Launch an interactive terminal UI for browsing, searching, and installing/uninstalling MCP servers.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
imcp tui
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Features:
|
|
78
|
+
- **Fuzzy search**: Type to filter servers instantly
|
|
79
|
+
- **Multi-select**: Choose multiple servers to install/uninstall at once
|
|
80
|
+
- **Install/Uninstall modes**: Press `Tab` to switch between modes
|
|
81
|
+
- **Client targeting**: Select which clients (GithubCopilot, MSRooCode, Cline, etc.) to install to
|
|
82
|
+
- **Installation status**: See which servers are already installed and on which clients
|
|
83
|
+
|
|
84
|
+
Controls:
|
|
85
|
+
- `↑↓` — Navigate servers/clients
|
|
86
|
+
- `Space` — Toggle selection
|
|
87
|
+
- `Tab` — Switch between Install/Uninstall mode (step 1) or focus areas
|
|
88
|
+
- `Enter` — Proceed to next step / Execute
|
|
89
|
+
- `Esc` — Go back / Clear search
|
|
90
|
+
- `q` — Quit
|
|
91
|
+
|
|
92
|
+
### install
|
|
93
|
+
|
|
94
|
+
Install MCP servers directly from the CLI, either by specifying a single server or by providing a JSON payload that mirrors the web API.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Install using defaults (all supported clients)
|
|
98
|
+
imcp install --name github-tools --clients "MSRooCode"
|
|
99
|
+
|
|
100
|
+
# Install with explicit client targets and env vars
|
|
101
|
+
imcp install --name github-tools \
|
|
102
|
+
--clients "MSRooCode;GithubCopilot" \
|
|
103
|
+
--envs "GITHUB_TOKEN=abc123;API_KEY=xyz789"
|
|
104
|
+
|
|
105
|
+
# Reinstall (remove existing configuration first)
|
|
106
|
+
imcp install --name github-tools --clients "MSRooCode" --reinstall
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Options:
|
|
110
|
+
|
|
111
|
+
- `--name <name>`: Server name (required unless using a payload)
|
|
112
|
+
- `--clients <clients>`: Semicolon-delimited list of clients (required unless using a payload)
|
|
113
|
+
- `--envs <envs>`: Semicolon-delimited `KEY=VALUE` pairs applied to single-server installs
|
|
114
|
+
- `--payload <json>`: Inline JSON payload (either a `serverList` object or a direct `{ "serverName": { ... } }` map)
|
|
115
|
+
- `--payload-file <path>`: Path to a JSON payload file matching the web API structure
|
|
116
|
+
- `-r, --reinstall`: Removes existing client configuration and forces requirement packages to reinstall before applying the new config
|
|
117
|
+
|
|
118
|
+
CLI installs block until requirement checks, requirement reinstalls (when requested), and client installers complete, so you always see success/failure inline in the terminal. The web UI continues to track these steps asynchronously via the install operation log.
|
|
119
|
+
|
|
120
|
+
Supported client keys: `MSRooCode`, `RooCode`, `Cline`, `GithubCopilot`, `ClaudeCode`, and (on Windows) `VisualStudio`.
|
|
121
|
+
|
|
122
|
+
The CLI automatically resolves each server's category based on the name defined in your feeds, so no `--category` flag is needed. Run `imcp pull` if a server name cannot be found locally. When using payloads, ensure each server entry includes a non-empty `targetClients` array using the keys above.
|
|
123
|
+
|
|
69
124
|
## MCP Installation and Publish
|
|
70
125
|
|
|
71
126
|
For details on how to install and publish MCP servers, please refer to the following documents:
|
|
72
127
|
|
|
128
|
+
- [CLI Install & Uninstall Guide](docs/cli-installation.md)
|
|
73
129
|
- [Installation Guide](wiki/Installation.md)
|
|
74
130
|
- [Publishing Guide](wiki/Publish.md)
|
|
75
131
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function stripJsonComments(jsonString: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["stripJsonComments","jsonString","replace"],"sources":["../../src/__mocks__/strip-json-comments.ts"],"mappings":"eACc,SAAUA,kBAAkBC,GAEtC,OAAOA,EACFC,QAAQ,YAAa,IACrBA,QAAQ,oBAAqB,GACtC","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Command}from"commander";import{serverService}from"../../services/ServerService.js";import{Logger}from"../../utils/logger.js";import{hasLocalFeeds}from"../../utils/feedUtils.js";import{
|
|
1
|
+
import{Command}from"commander";import fs from"fs/promises";import{serverService}from"../../services/ServerService.js";import{Logger}from"../../utils/logger.js";import{hasLocalFeeds}from"../../utils/feedUtils.js";import{mcpManager}from"../../services/MCPManager.js";import{SUPPORTED_CLIENTS_TEXT,normalizeTargetClients,parseClientsOption}from"../utils/clientOptions.js";function exitWithUsage(e,t){Logger.error(t),e.outputHelp(),process.exit(1)}async function loadServerListPayload(e,t){if(e||t)try{const r=t?await fs.readFile(t,"utf8"):e??"",s=JSON.parse(r),o=s?.serverList??s;if(!o||"object"!=typeof o||Array.isArray(o))throw new Error("Payload must be a JSON object containing server definitions.");return o}catch(e){const t=e instanceof Error?e.message:"Unknown error";throw new Error(`Failed to parse payload: ${t}`)}}export function createInstallCommand(){return new Command("install").description("Install specific MCP servers").addHelpText("after",'\nExamples:\n # Install a server\n $ imcp install --name github-tools --clients "MSRooCode"\n\n # Install with specific client targets (semicolon separated)\n $ imcp install --name github-tools --clients "MSRooCode;GithubCopilot"\n\n # Install with environment variables\n $ imcp install --name github-tools --clients "MSRooCode" --envs "GITHUB_TOKEN=abc123;API_KEY=xyz789"\n\n # Install using a payload file (matches web API payload structure)\n $ imcp install --payload-file ./installPayload.json\n\n # Reinstall (remove config first)\n $ imcp install --name github-tools --clients "MSRooCode" --reinstall\n ').option("--name <name>","Server name to install (required unless using --payload or --payload-file)").option("--clients <clients>",`Target clients (semicolon separated). Supported values: ${SUPPORTED_CLIENTS_TEXT}`).option("--envs <envs>","Environment variables (semicolon separated key=value pairs)").option("--payload <json>","Server install payload in JSON format (either a serverList object or a direct map of server names to options)").option("--payload-file <filepath>","Path to a JSON file that contains the install payload (same structure as the web API payload)").option("-r, --reinstall","Uninstall specified clients before installing again").action((async(e,t)=>{try{await hasLocalFeeds()||(Logger.log("Local feeds not found, syncing from remote..."),await serverService.syncFeeds()),await mcpManager.initialize();const{name:r,verbose:s,clients:o,envs:n,payload:i,payloadFile:a,reinstall:l}=e,c=Boolean(l);Logger.debug(`Install options: ${JSON.stringify({name:r,verbose:s,clients:o,envs:n,payload:!!i,payloadFile:a,reinstall:c})}`);const g=await loadServerListPayload(i,a);g||r&&r.trim()||exitWithUsage(t,"Server name is required unless a payload is provided."),g&&(r||o||n)&&Logger.warn("Name, clients, and env options are ignored when using payload-based installs.");const p=[];if(g)for(const[e,r]of Object.entries(g)){const s=e.trim();let o;s||exitWithUsage(t,"Payload contains an empty server name.");try{o=normalizeTargetClients(r.targetClients,`payload server "${s}"`)}catch(e){exitWithUsage(t,e instanceof Error?e.message:String(e))}const n={...r,targetClients:o,blockUntilComplete:!0,forceRequirementReinstall:c||!0===r.forceRequirementReinstall};p.push([s,n])}else if(r){const e=r.trim();let s;Logger.debug(`Server name: ${e}`);try{s=parseClientsOption(o),Logger.debug(`Target clients: ${JSON.stringify(s)}`)}catch(e){exitWithUsage(t,e instanceof Error?e.message:String(e))}const i={};if(n){const e=n.split(";");for(const t of e){const[e,r]=t.split("=").map((e=>e.trim()));e&&r?i[e]=r:Logger.error(`Invalid environment variable format: ${t}`)}}Object.keys(i).length>0&&Logger.debug(`Environment variables: ${JSON.stringify(i)}`);const a={force:!1,targetClients:s,blockUntilComplete:!0,forceRequirementReinstall:c,...Object.keys(i).length>0&&{env:i}};p.push([e,a])}let m;0===p.length&&exitWithUsage(t,"No servers specified for installation.");try{const e=p.map((([e])=>e));m=await serverService.resolveServerCategories(e),Logger.debug(`Resolved categories: ${JSON.stringify(m)}`)}catch(e){const t=e instanceof Error?e.message:"Failed to resolve server categories.";Logger.error(t),process.exit(1)}const d=[];for(const[e,t]of p){const r=m[e];if(Logger.log(`Installing server: ${e} (category: ${r})`),t.targetClients&&0!==t.targetClients.length||(Logger.error(`No clients specified for ${e}. This should not happen; please provide target clients.`),process.exit(1)),c){Logger.log(`Reinstall requested. Removing existing config for ${e} on ${t.targetClients.join(", ")}`);try{const s=await serverService.uninstallMcpServer(r,e,{targets:t.targetClients,removeData:!0});s.success||(Logger.error(s.message??`Failed to uninstall ${e} before reinstalling.`),process.exit(1))}catch(t){const r=t instanceof Error?t.message:"Unknown error";Logger.error(`Failed to uninstall ${e} before reinstalling: ${r}`),process.exit(1)}}d.push(serverService.installMcpServer(r,e,t))}const f=await Promise.all(d),{success:v,messages:u}=serverService.formatOperationResults(f);u.forEach((e=>{v?Logger.log(`✓ ${e}`):Logger.error(`✗ ${e}`)})),v||process.exit(1)}catch(e){const t=e instanceof Error?e.message:"Unknown error";Logger.error("Installation failed:",t),process.exit(1)}}))}
|
|
2
2
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","serverService","Logger","hasLocalFeeds","
|
|
1
|
+
{"version":3,"names":["Command","fs","serverService","Logger","hasLocalFeeds","mcpManager","SUPPORTED_CLIENTS_TEXT","normalizeTargetClients","parseClientsOption","exitWithUsage","command","message","error","outputHelp","process","exit","async","loadServerListPayload","payload","payloadFile","rawPayload","readFile","parsedPayload","JSON","parse","serverList","Array","isArray","Error","createInstallCommand","description","addHelpText","option","action","options","log","syncFeeds","initialize","name","verbose","clients","envs","reinstall","reinstallFlag","Boolean","debug","stringify","payloadServerList","trim","warn","resolvedServerEntries","rawName","rawOptions","Object","entries","trimmedName","normalizedTargets","targetClients","clientError","String","normalizedOptions","blockUntilComplete","forceRequirementReinstall","push","serverName","parsedClients","parsedEnvs","pairs","split","pair","key","value","map","s","keys","length","installOptions","force","env","categoryMap","serverNames","resolveServerCategories","resolutionError","installPromises","categoryName","join","uninstallResult","uninstallMcpServer","targets","removeData","success","uninstallError","installMcpServer","results","Promise","all","messages","formatOperationResults","forEach"],"sources":["../../../src/cli/commands/install.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Command}from"commander";import React from"react";import{render}from"ink";import{App}from"../tui/App.js";export function createTuiCommand(){return new Command("tui").description("Interactive TUI for browsing and installing MCP servers").action((async()=>{const{waitUntilExit:r}=render(React.createElement(App));await r()}))}
|
|
2
|
+
//# sourceMappingURL=tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Command","React","render","App","createTuiCommand","description","action","async","waitUntilExit","createElement"],"sources":["../../../src/cli/commands/tui.ts"],"mappings":"OAASA,YAAe,mBACjBC,UAAW,eACTC,WAAc,aACdC,QAAW,uBAEd,SAAUC,mBACd,OAAO,IAAIJ,QAAQ,OAChBK,YAAY,2DACZC,QAAOC,UACN,MAAMC,cAAEA,GAAkBN,OAAOD,MAAMQ,cAAcN,YAC/CK,GAAe,GAE3B","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Command}from"commander";import{serverService}from"../../services/ServerService.js";export function createUninstallCommand(){return new Command("uninstall").description("Uninstall specific MCP servers").requiredOption("--
|
|
1
|
+
import{Command}from"commander";import{serverService}from"../../services/ServerService.js";import{SUPPORTED_CLIENTS_TEXT,parseClientsOption}from"../utils/clientOptions.js";export function createUninstallCommand(){return new Command("uninstall").description("Uninstall specific MCP servers").requiredOption("--names <names>","Server names (semicolon separated)").requiredOption("--clients <clients>",`Clients to uninstall from (semicolon separated). Supported values: ${SUPPORTED_CLIENTS_TEXT}`).option("--remove-data","Remove all associated data",!0).action((async e=>{try{const r=e.names.split(";").map((e=>e.trim()));let s,o;try{s=await serverService.resolveServerCategories(r)}catch(e){const r=e instanceof Error?e.message:"Failed to resolve server categories";console.error(r),process.exit(1)}try{o=parseClientsOption(e.clients)}catch(e){const r=e instanceof Error?e.message:String(e);console.error(r),process.exit(1)}console.log(`Uninstalling servers: ${r.map((e=>`${e} (${s[e]})`)).join(", ")} on ${o.join(", ")}`);const t=await Promise.all(r.map((r=>serverService.uninstallMcpServer(s[r],r,{removeData:e.removeData,targets:o})))),{success:n,messages:a}=serverService.formatOperationResults(t);a.forEach((e=>{n?console.log(`✓ ${e}`):console.error(`✗ ${e}`)})),n||process.exit(1)}catch(e){const r=e instanceof Error?e.message:"Unknown error";console.error("Uninstallation failed:",r),process.exit(1)}}))}
|
|
2
2
|
//# sourceMappingURL=uninstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","serverService","createUninstallCommand","description","requiredOption","option","action","async","options","serverNames","names","split","map","name","trim","
|
|
1
|
+
{"version":3,"names":["Command","serverService","SUPPORTED_CLIENTS_TEXT","parseClientsOption","createUninstallCommand","description","requiredOption","option","action","async","options","serverNames","names","split","map","name","trim","categoryMap","parsedClients","resolveServerCategories","error","message","Error","console","process","exit","clients","targetError","String","log","join","results","Promise","all","serverName","uninstallMcpServer","removeData","targets","success","messages","formatOperationResults","forEach"],"sources":["../../../src/cli/commands/uninstall.ts"],"mappings":"OAASA,YAAe,mBACfC,kBAAqB,yCACrBC,uBAAwBC,uBAA0B,mCAErD,SAAUC,yBACd,OAAO,IAAIJ,QAAQ,aAChBK,YAAY,kCACZC,eACC,kBACA,sCAEDA,eACC,sBACA,sEAAsEJ,0BAEvEK,OACC,gBACA,8BACA,GAEDC,QAAOC,MAAOC,IAKb,IACE,MAAMC,EAAcD,EAAQE,MAAMC,MAAM,KAAKC,KAAKC,GAAiBA,EAAKC,SACxE,IAAIC,EASAC,EARJ,IACED,QAAoBhB,cAAckB,wBAAwBR,EAC5D,CAAE,MAAOS,GACP,MAAMC,EAAUD,aAAiBE,MAAQF,EAAMC,QAAU,sCACzDE,QAAQH,MAAMC,GACdG,QAAQC,KAAK,EACf,CAGA,IACEP,EAAgBf,mBAAmBO,EAAQgB,QAC7C,CAAE,MAAOC,GACP,MAAMN,EAAUM,aAAuBL,MAAQK,EAAYN,QAAUO,OAAOD,GAC5EJ,QAAQH,MAAMC,GACdG,QAAQC,KAAK,EACf,CAEAF,QAAQM,IAAI,yBAAyBlB,EAAYG,KAAIC,GAAQ,GAAGA,MAASE,EAAYF,QAAUe,KAAK,YAAYZ,EAAcY,KAAK,SAEnI,MAAMC,QAAgBC,QAAQC,IAC5BtB,EAAYG,KAAKoB,GACRjC,cAAckC,mBAAmBlB,EAAYiB,GAAaA,EAAY,CAC3EE,WAAY1B,EAAQ0B,WACpBC,QAASnB,QAKToB,QAAEA,EAAOC,SAAEA,GAAatC,cAAcuC,uBAAuBT,GACnEQ,EAASE,SAAQpB,IACXiB,EACFf,QAAQM,IAAI,KAAKR,KAEjBE,QAAQH,MAAM,KAAKC,IACrB,IAGGiB,GACHd,QAAQC,KAAK,EAEjB,CAAE,MAAOL,GACP,MAAMC,EAAUD,aAAiBE,MAAQF,EAAMC,QAAU,gBACzDE,QAAQH,MAAM,yBAA0BC,GACxCG,QAAQC,KAAK,EACf,IAEN","ignoreList":[]}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command}from"commander";import{createServeCommand}from"./commands/serve.js";import{Logger}from"../utils/logger.js";import{checkForUpdates}from"../utils/versionUtils.js";async function main(){const
|
|
2
|
+
import{Command}from"commander";import{createServeCommand}from"./commands/serve.js";import{createListCommand}from"./commands/list.js";import{createInstallCommand}from"./commands/install.js";import{createUninstallCommand}from"./commands/uninstall.js";import{createPullCommand}from"./commands/pull.js";import{createTuiCommand}from"./commands/tui.js";import{Logger}from"../utils/logger.js";import{checkForUpdates}from"../utils/versionUtils.js";async function main(){const o=new Command;o.name("imcp").description("IMCP (Install Model Context Protocol) CLI").option("--verbose","Show detailed logs for all commands"),o.parseOptions(process.argv);const e=o.opts();Logger.setVerbose(!!e.verbose),o.addCommand(createServeCommand()),o.addCommand(createInstallCommand()),o.addCommand(createListCommand()),o.addCommand(createUninstallCommand()),o.addCommand(createPullCommand()),o.addCommand(createTuiCommand()),o.exitOverride(),await checkForUpdates();try{await o.parseAsync(process.argv)}catch(o){const e=o;"commander.help"===e.code||"commander.version"===e.code?process.exit(0):(console.error("Error:",e.message||"An unknown error occurred"),process.exit(1))}}process.on("unhandledRejection",(o=>{o instanceof Error?console.error("Unhandled promise rejection:",o.message):console.error("Unhandled promise rejection:",o),process.exit(1)})),main().catch((o=>{o instanceof Error?console.error("Fatal error:",o.message):console.error("Fatal error:",o),process.exit(1)}));
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","createServeCommand","Logger","checkForUpdates","async","main","program","name","description","option","parseOptions","process","argv","opts","setVerbose","verbose","addCommand","exitOverride","parseAsync","error","commanderError","code","exit","console","message","on","Error","catch"],"sources":["../../src/cli/index.ts"],"mappings":";OAESA,YAAe,mBACfC,uBAA0B,
|
|
1
|
+
{"version":3,"names":["Command","createServeCommand","createListCommand","createInstallCommand","createUninstallCommand","createPullCommand","createTuiCommand","Logger","checkForUpdates","async","main","program","name","description","option","parseOptions","process","argv","opts","setVerbose","verbose","addCommand","exitOverride","parseAsync","error","commanderError","code","exit","console","message","on","Error","catch"],"sources":["../../src/cli/index.ts"],"mappings":";OAESA,YAAe,mBACfC,uBAA0B,6BAC1BC,sBAAyB,4BACzBC,yBAA4B,+BAC5BC,2BAA8B,iCAC9BC,sBAAyB,4BACzBC,qBAAwB,2BACxBC,WAAc,4BACdC,oBAAuB,2BAOhCC,eAAeC,OAIb,MAAMC,EAAU,IAAIX,QACpBW,EACGC,KAAK,QACLC,YAAY,6CACZC,OAAO,YAAa,uCAGvBH,EAAQI,aAAaC,QAAQC,MAC7B,MAAMC,EAAOP,EAAQO,OACrBX,OAAOY,aAAaD,EAAKE,SAGzBT,EAAQU,WAAWpB,sBACnBU,EAAQU,WAAWlB,wBACnBQ,EAAQU,WAAWnB,qBACnBS,EAAQU,WAAWjB,0BACnBO,EAAQU,WAAWhB,qBACnBM,EAAQU,WAAWf,oBAGnBK,EAAQW,qBAGFd,kBAEN,UACQG,EAAQY,WAAWP,QAAQC,KACnC,CAAE,MAAOO,GACP,MAAMC,EAAiBD,EAEK,mBAAxBC,EAAeC,MAGgB,sBAAxBD,EAAeC,KADxBV,QAAQW,KAAK,IAKbC,QAAQJ,MAAM,SAAUC,EAAeI,SAAW,6BAClDb,QAAQW,KAAK,GAEjB,CACF,CAGAX,QAAQc,GAAG,sBAAuBN,IAC5BA,aAAiBO,MACnBH,QAAQJ,MAAM,+BAAgCA,EAAMK,SAEpDD,QAAQJ,MAAM,+BAAgCA,GAEhDR,QAAQW,KAAK,EAAE,IAIjBjB,OAAOsB,OAAOR,IACRA,aAAiBO,MACnBH,QAAQJ,MAAM,eAAgBA,EAAMK,SAEpCD,QAAQJ,MAAM,eAAgBA,GAEhCR,QAAQW,KAAK,EAAE","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function App(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useState,useMemo,useCallback}from"react";import{Box,Text,useApp,useInput,useStdout}from"ink";import Spinner from"ink-spinner";import{Header}from"./components/Header.js";import{StepIndicator}from"./components/StepIndicator.js";import{ServerList}from"./components/ServerList.js";import{ClientSelector}from"./components/ClientSelector.js";import{InstallProgress}from"./components/InstallProgress.js";import{SearchBar}from"./components/SearchBar.js";import{useServers}from"./hooks/useServers.js";import{useInstall}from"./hooks/useInstall.js";import{createServerSearcher,filterServers}from"./utils/fuzzySearch.js";import{SUPPORTED_CLIENT_NAMES}from"../../core/metadatas/constants.js";export function App(){const{exit:e}=useApp(),{stdout:r}=useStdout(),s=r?.rows||24,{loading:t,error:n,servers:o,categories:l,installedInfo:i}=useServers(),{installing:c,progress:a,completed:d,operation:x,install:u,uninstall:m,reset:f}=useInstall(),[h,p]=useState("install"),[S,j]=useState(1),[_,C]=useState(""),[g,v]=useState(new Set),[T,I]=useState(new Set),[B,y]=useState(0),[b,w]=useState(0),z=useMemo((()=>createServerSearcher(o)),[o]),k=useMemo((()=>filterServers(o,_,z)),[o,_,z]),A=k.length,D=useMemo((()=>{const e=new Set;if(0===g.size)return e;const r=Array.from(g);if("install"===h){const s=r[0],t=i[s]?.clients||[];for(const s of t){r.every((e=>i[e]?.clients?.includes(s)))&&e.add(s)}}else for(const s of r){const r=i[s]?.clients||[];for(const s of r)e.add(s)}return e}),[g,i,h]),E=useCallback((e=>{v((r=>{const s=new Set(r);return s.has(e)?s.delete(e):s.add(e),s}))}),[]),M=useCallback((e=>{"install"===h&&D.has(e)||("uninstall"!==h||D.has(e))&&I((r=>{const s=new Set(r);return s.has(e)?s.delete(e):s.add(e),s}))}),[h,D]),P=useCallback((e=>{y((r=>{const s=r+e;return s<0?0:s>=A?Math.max(0,A-1):s}))}),[A]),L=useCallback((e=>{w((r=>{const s=r+e,t=SUPPORTED_CLIENT_NAMES.length-1;return s<0?0:s>t?t:s}))}),[]),H=useCallback((()=>{if(0===g.size||0===T.size)return;const e=Array.from(g).map((e=>{const[r,s]=e.split(":");return{category:r,serverName:s}}));j(3),"install"===h?u(e,Array.from(T)):m(e,Array.from(T))}),[g,T,h,u,m]),N=useCallback(((e,r)=>{1===S&&(r.backspace||r.delete?(C((e=>e.slice(0,-1))),y(0)):r.ctrl||r.meta||!e||r.return||r.tab||r.upArrow||r.downArrow||" "===e||"q"===e||(C((r=>r+e)),y(0)))}),[S]);useInput(((r,s)=>{if(N(r,s),!c||d)if("q"===r||s.ctrl&&"c"===r)e();else{if(d)return f(),j(1),v(new Set),void I(new Set);if(1===S){if(s.tab)return p((e=>"install"===e?"uninstall":"install")),void v(new Set);if(s.return&&g.size>0)return j(2),void I(new Set);if(s.escape&&_)return C(""),void y(0)}if(2===S){if(s.escape)return void j(1);if(s.return&&T.size>0)return void H()}}}));const U=s-4-3-(2===S?SUPPORTED_CLIENT_NAMES.length+4:0)-2;if(t)return _jsxs(Box,{flexDirection:"column",padding:1,children:[_jsx(Header,{}),_jsxs(Box,{children:[_jsx(Text,{color:"cyan",children:_jsx(Spinner,{type:"dots"})}),_jsx(Text,{children:" Loading servers..."})]})]});if(n)return _jsxs(Box,{flexDirection:"column",padding:1,children:[_jsx(Header,{}),_jsxs(Text,{color:"red",children:["Error: ",n]})]});if(3===S)return _jsxs(Box,{flexDirection:"column",padding:1,children:[_jsx(Header,{}),_jsx(StepIndicator,{step:3,selectedServerCount:g.size,selectedClientCount:T.size}),_jsx(InstallProgress,{progress:a,completed:d,operation:x}),d&&_jsx(Box,{marginTop:1,children:_jsx(Text,{dimColor:!0,italic:!0,children:"Press any key to continue..."})})]});if(1===S){const e=g.size>0?`${g.size} selected · enter next · q quit`:"tab switch mode · ↑↓ nav · space select";return _jsxs(Box,{flexDirection:"column",padding:1,height:s,children:[_jsx(Header,{}),_jsxs(Box,{marginBottom:1,children:[_jsx(Text,{color:"install"===h?"green":"gray",bold:"install"===h,underline:"install"===h,children:"Install"}),_jsx(Text,{dimColor:!0,children:" / "}),_jsx(Text,{color:"uninstall"===h?"red":"gray",bold:"uninstall"===h,underline:"uninstall"===h,children:"Uninstall"}),_jsx(Text,{dimColor:!0,children:" (Tab to switch)"})]}),_jsx(StepIndicator,{step:1,selectedServerCount:g.size,selectedClientCount:0}),_jsxs(Box,{flexDirection:"column",flexGrow:1,children:[_jsx(Text,{color:"cyan",bold:!0,children:"install"===h?"Select Servers to Install":"Select Servers to Uninstall"}),_jsx(ServerList,{categories:l,filteredServers:k,selectedServers:g,installedInfo:i,cursorIndex:B,onToggle:E,onCursorMove:P,focus:!0,height:U})]}),_jsx(SearchBar,{value:_,onChange:C,focus:!0,hint:e})]})}const q="install"===h?"install":"uninstall",O=T.size>0?`${T.size} client(s) · enter ${q} · esc back`:"↑↓ nav · space select · esc back";return _jsxs(Box,{flexDirection:"column",padding:1,height:s,children:[_jsx(Header,{}),_jsx(StepIndicator,{step:2,selectedServerCount:g.size,selectedClientCount:T.size}),_jsxs(Box,{flexDirection:"column",marginBottom:1,children:[_jsx(Text,{color:"cyan",bold:!0,children:"Selected Servers:"}),_jsxs(Box,{flexDirection:"column",paddingLeft:1,children:[Array.from(g).slice(0,3).map((e=>{const[,r]=e.split(":");return _jsxs(Text,{dimColor:!0,children:["• ",r]},e)})),g.size>3&&_jsxs(Text,{dimColor:!0,children:[" ...and ",g.size-3," more"]})]})]}),_jsxs(Box,{flexDirection:"column",flexGrow:1,children:[_jsx(Text,{color:"install"===h?"cyan":"red",bold:!0,children:"install"===h?"Choose Target Clients":"Choose Clients to Uninstall From"}),_jsx(Text,{dimColor:!0,children:"install"===h?"Select which clients to install the servers to:":"Select which clients to remove the servers from:"}),_jsx(Box,{marginTop:1,children:_jsx(ClientSelector,{selectedClients:T,alreadyInstalledClients:D,onToggle:M,cursorIndex:b,onCursorMove:L,focus:!0,mode:h})})]}),_jsxs(Box,{flexDirection:"column",children:[_jsx(Box,{children:_jsx(Text,{color:"gray",children:"─".repeat(60)})}),_jsx(Box,{justifyContent:"flex-end",children:_jsx(Text,{dimColor:!0,children:O})})]})]})}
|
|
2
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useMemo","useCallback","Box","Text","useApp","useInput","useStdout","Spinner","Header","StepIndicator","ServerList","ClientSelector","InstallProgress","SearchBar","useServers","useInstall","createServerSearcher","filterServers","SUPPORTED_CLIENT_NAMES","App","exit","stdout","terminalHeight","rows","loading","error","servers","categories","installedInfo","installing","progress","completed","operation","install","uninstall","reset","mode","setMode","step","setStep","searchQuery","setSearchQuery","selectedServers","setSelectedServers","Set","selectedClients","setSelectedClients","serverCursor","setServerCursor","clientCursor","setClientCursor","searcher","filteredServers","filteredServerCount","length","relevantClients","clients","size","selectedKeys","Array","from","firstKey","firstInstalled","client","every","key","includes","add","installed","toggleServer","prev","next","has","delete","toggleClient","moveServerCursor","delta","Math","max","moveClientCursor","startOperation","items","map","category","serverName","split","handleSearchInput","input","backspace","slice","ctrl","meta","return","tab","upArrow","downArrow","escape","availableHeight","_jsxs","flexDirection","padding","children","_jsx","color","type","selectedServerCount","selectedClientCount","marginTop","dimColor","italic","hint","height","marginBottom","bold","underline","flexGrow","cursorIndex","onToggle","onCursorMove","focus","value","onChange","actionLabel","paddingLeft","name","alreadyInstalledClients","repeat","justifyContent"],"sources":["../../../src/cli/tui/App.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
selectedClients: Set<string>;
|
|
3
|
+
alreadyInstalledClients: Set<string>;
|
|
4
|
+
onToggle: (client: string) => void;
|
|
5
|
+
cursorIndex: number;
|
|
6
|
+
onCursorMove: (delta: number) => void;
|
|
7
|
+
focus?: boolean;
|
|
8
|
+
mode: 'install' | 'uninstall';
|
|
9
|
+
}
|
|
10
|
+
export declare function ClientSelector({ selectedClients, alreadyInstalledClients, onToggle, cursorIndex, onCursorMove, focus, mode, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{Box,Text,useInput}from"ink";import{SUPPORTED_CLIENT_NAMES}from"../../../core/metadatas/constants.js";const CLIENT_ICONS={MSRooCode:"🦘",RooCode:"🦘",Cline:"🤖",GithubCopilot:"🐙",ClaudeCode:"🧠",VisualStudio:"💜"};export function ClientSelector({selectedClients:e,alreadyInstalledClients:o,onToggle:r,cursorIndex:s,onCursorMove:l,focus:n=!1,mode:t}){const i=SUPPORTED_CLIENT_NAMES;return useInput(((e,o)=>{if(n)if(o.upArrow)l(-1);else if(o.downArrow)l(1);else if(" "===e){const e=i[s];e&&r(e)}}),{isActive:n}),_jsx(Box,{flexDirection:"column",children:i.map(((r,l)=>{const i=e.has(r),d=o.has(r),a=n&&l===s,c=CLIENT_ICONS[r]||"📦",x="install"===t?d:!d;return _jsxs(Box,{children:[_jsx(Text,{color:a?"cyan":void 0,children:a?"❯ ":" "}),_jsxs(_Fragment,x?{children:[_jsx(Text,{color:"gray",dimColor:!0,children:"○ "}),_jsxs(Text,{dimColor:!0,children:[c," ",r]}),_jsx(Text,{color:"install"===t?"green":"gray",dimColor:!0,children:"install"===t?" (already installed)":" (not installed)"})]}:{children:[_jsxs(Text,{color:i?"install"===t?"green":"red":"gray",children:[i?"●":"○"," "]}),_jsxs(Text,{color:i?"install"===t?"green":"red":a?"white":void 0,bold:i||a,children:[c," ",r]})]})]},r)}))})}
|
|
2
|
+
//# sourceMappingURL=ClientSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Box","Text","useInput","SUPPORTED_CLIENT_NAMES","CLIENT_ICONS","MSRooCode","RooCode","Cline","GithubCopilot","ClaudeCode","VisualStudio","ClientSelector","selectedClients","alreadyInstalledClients","onToggle","cursorIndex","onCursorMove","focus","mode","clients","input","key","upArrow","downArrow","client","isActive","_jsx","flexDirection","children","map","idx","isSelected","has","isInstalled","isCursor","icon","isDisabled","_jsxs","color","undefined","_Fragment","dimColor","bold"],"sources":["../../../../src/cli/tui/components/ClientSelector.tsx"],"mappings":"sFACSA,IAAKC,KAAMC,aAAgB,aAC3BC,2BAA8B,uCAYvC,MAAMC,aAAuC,CAC3CC,UAAa,KACbC,QAAW,KACXC,MAAS,KACTC,cAAiB,KACjBC,WAAc,KACdC,aAAgB,aAGZ,SAAUC,gBAAeC,gBAC7BA,EAAeC,wBACfA,EAAuBC,SACvBA,EAAQC,YACRA,EAAWC,aACXA,EAAYC,MACZA,GAAQ,EAAKC,KACbA,IAEA,MAAMC,EAAUhB,uBAiBhB,OAfAD,UAAS,CAACkB,EAAeC,KACvB,GAAKJ,EAEL,GAAII,EAAIC,QACNN,GAAc,QACT,GAAIK,EAAIE,UACbP,EAAa,QACR,GAAc,MAAVI,EAAe,CACxB,MAAMI,EAASL,EAAQJ,GACnBS,GACFV,EAASU,EAEb,IACC,CAAEC,SAAUR,IAGbS,KAAC1B,IAAG,CAAC2B,cAAc,SAAQC,SACxBT,EAAQU,KAAI,CAACL,EAAQM,KACpB,MAAMC,EAAanB,EAAgBoB,IAAIR,GACjCS,EAAcpB,EAAwBmB,IAAIR,GAC1CU,EAAWjB,GAASa,IAAQf,EAC5BoB,EAAO/B,aAAaoB,IAAW,KAI/BY,EAAsB,YAATlB,EAAqBe,GAAeA,EAEvD,OACEI,MAACrC,IAAG,CAAA4B,SAAA,CACFF,KAACzB,KAAI,CAACqC,MAAOJ,EAAW,YAASK,EAASX,SACvCM,EAAW,KAAO,OAGnBG,MAAAG,UADDJ,EACC,CAAAR,SAAA,CACEF,KAACzB,KAAI,CAACqC,MAAM,OAAOG,UAAQ,EAAAb,SAAA,OAC3BS,MAACpC,KAAI,CAACwC,UAAQ,EAAAb,SAAA,CAAEO,EAAI,IAAGX,KACvBE,KAACzB,KAAI,CAACqC,MAAgB,YAATpB,EAAqB,QAAU,OAAQuB,UAAQ,EAAAb,SAChD,YAATV,EAAqB,uBAAyB,uBAInD,CAAAU,SAAA,CACES,MAACpC,KAAI,CAACqC,MAAOP,EAAuB,YAATb,EAAqB,QAAU,MAAS,OAAMU,SAAA,CACtEG,EAAa,IAAM,IAAK,OAE3BM,MAACpC,KAAI,CACHqC,MAAOP,EAAuB,YAATb,EAAqB,QAAU,MAASgB,EAAW,aAAUK,EAClFG,KAAMX,GAAcG,EAAQN,SAAA,CAE3BO,EAAI,IAAGX,UArBNA,EA0BX,KAIT","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Header(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Box,Text}from"ink";export function Header(){return _jsxs(Box,{flexDirection:"column",marginBottom:1,children:[_jsxs(Box,{children:[_jsx(Text,{color:"cyan",bold:!0,children:"⚡ IMCP"}),_jsx(Text,{dimColor:!0,children:" — "}),_jsx(Text,{color:"white",children:"Install Model Context Protocol"})]}),_jsx(Box,{children:_jsx(Text,{dimColor:!0,children:" Browse, search, and install MCP servers interactively"})}),_jsx(Box,{marginTop:0,children:_jsx(Text,{color:"gray",children:"─".repeat(60)})})]})}
|
|
2
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Box","Text","Header","_jsxs","flexDirection","marginBottom","children","_jsx","color","bold","dimColor","marginTop","repeat"],"sources":["../../../../src/cli/tui/components/Header.tsx"],"mappings":"gEACSA,IAAKC,SAAY,aAEpB,SAAUC,SACd,OACEC,MAACH,IAAG,CAACI,cAAc,SAASC,aAAc,EAACC,SAAA,CACzCH,MAACH,IAAG,CAAAM,SAAA,CACFC,KAACN,KAAI,CAACO,MAAM,OAAOC,MAAI,EAAAH,SAAA,WACvBC,KAACN,KAAI,CAACS,UAAQ,EAAAJ,SAAA,QACdC,KAACN,KAAI,CAACO,MAAM,QAAOF,SAAA,sCAErBC,KAACP,IAAG,CAAAM,SACFC,KAACN,KAAI,CAACS,UAAQ,EAAAJ,SAAA,8DAEhBC,KAACP,IAAG,CAACW,UAAW,EAACL,SACfC,KAACN,KAAI,CAACO,MAAM,OAAMF,SAAE,IAAIM,OAAO,UAIvC","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InstallProgress as ProgressType } from '../hooks/useInstall.js';
|
|
2
|
+
interface Props {
|
|
3
|
+
progress: ProgressType[];
|
|
4
|
+
completed: boolean;
|
|
5
|
+
operation: 'install' | 'uninstall';
|
|
6
|
+
}
|
|
7
|
+
export declare function InstallProgress({ progress, completed, operation }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Box,Text}from"ink";import Spinner from"ink-spinner";export function InstallProgress({progress:s,completed:e,operation:l}){const r=s.filter((s=>"success"===s.status)).length,t=s.filter((s=>"failed"===s.status)).length,n="install"===l?"installed":"uninstalled";return _jsxs(Box,{flexDirection:"column",children:[_jsx(Box,{marginBottom:1,children:_jsx(Text,{color:"cyan",bold:!0,children:"install"===l?"Installing":"Uninstalling"})}),s.map((s=>_jsxs(Box,{children:[_jsx(Text,{children:" "}),"installing"===s.status?_jsx(Text,{color:"cyan",children:_jsx(Spinner,{type:"dots"})}):"success"===s.status?_jsx(Text,{color:"green",children:"✓"}):"failed"===s.status?_jsx(Text,{color:"red",children:"✗"}):_jsx(Text,{dimColor:!0,children:"○"}),_jsx(Text,{children:" "}),_jsx(Text,{color:"success"===s.status?"green":"failed"===s.status?"red":void 0,bold:"installing"===s.status,children:s.serverName}),s.message&&"failed"===s.status&&_jsxs(Text,{dimColor:!0,children:[" — ",s.message]})]},s.serverName))),e&&_jsx(Box,{marginTop:1,children:_jsxs(Text,0===t?{color:"green",bold:!0,children:["✨ All ",r," server(s) ",n,"!"]}:{color:"yellow",bold:!0,children:["⚠ ",r," ok, ",t," failed"]})})]})}
|
|
2
|
+
//# sourceMappingURL=InstallProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Box","Text","Spinner","InstallProgress","progress","completed","operation","successCount","filter","p","status","length","failedCount","opDone","_jsxs","flexDirection","children","_jsx","marginBottom","color","bold","map","item","type","dimColor","undefined","serverName","message","marginTop"],"sources":["../../../../src/cli/tui/components/InstallProgress.tsx"],"mappings":"gEACSA,IAAKC,SAAY,aACnBC,YAAa,qBASd,SAAUC,iBAAgBC,SAAEA,EAAQC,UAAEA,EAASC,UAAEA,IACrD,MAAMC,EAAeH,EAASI,QAAOC,GAAkB,YAAbA,EAAEC,SAAsBC,OAC5DC,EAAcR,EAASI,QAAOC,GAAkB,WAAbA,EAAEC,SAAqBC,OAE1DE,EAAuB,YAAdP,EAA0B,YAAc,cAEvD,OACEQ,MAACd,IAAG,CAACe,cAAc,SAAQC,SAAA,CACzBC,KAACjB,IAAG,CAACkB,aAAc,EAACF,SAClBC,KAAChB,KAAI,CAACkB,MAAM,OAAOC,MAAI,EAAAJ,SANC,YAAdV,EAA0B,aAAe,mBASpDF,EAASiB,KAAKC,GACbR,MAACd,IAAG,CAAAgB,SAAA,CACFC,KAAChB,KAAI,CAAAe,SAAA,OACY,eAAhBM,EAAKZ,OACJO,KAAChB,KAAI,CAACkB,MAAM,OAAMH,SAACC,KAACf,QAAO,CAACqB,KAAK,WACf,YAAhBD,EAAKZ,OACPO,KAAChB,KAAI,CAACkB,MAAM,QAAOH,SAAA,MACD,WAAhBM,EAAKZ,OACPO,KAAChB,KAAI,CAACkB,MAAM,MAAKH,SAAA,MAEjBC,KAAChB,KAAI,CAACuB,UAAQ,EAAAR,SAAA,MAEhBC,KAAChB,KAAI,CAAAe,SAAA,MACLC,KAAChB,KAAI,CACHkB,MAAuB,YAAhBG,EAAKZ,OAAuB,QAA0B,WAAhBY,EAAKZ,OAAsB,WAAQe,EAChFL,KAAsB,eAAhBE,EAAKZ,OAAuBM,SAEjCM,EAAKI,aAEPJ,EAAKK,SAA2B,WAAhBL,EAAKZ,QACpBI,MAACb,KAAI,CAACuB,UAAQ,EAAAR,SAAA,OAAKM,EAAKK,aAnBlBL,EAAKI,cAwBhBrB,GACCY,KAACjB,IAAG,CAAC4B,UAAW,EAACZ,SAEbF,MAACb,KADc,IAAhBW,EACM,CAACO,MAAM,QAAQC,MAAI,EAAAJ,SAAA,UAAQT,EAAY,cAAaM,EAAM,MAE1D,CAACM,MAAM,SAASC,MAAI,EAAAJ,SAAA,MAAIT,EAAY,QAAOK,EAAW,iBAMvE","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Box,Text}from"ink";export function Panel({title:e,children:i,dimTitle:r=!1}){return _jsxs(Box,{flexDirection:"column",children:[_jsx(Box,{children:_jsx(Text,{color:r?"gray":"cyan",bold:!r,children:e})}),_jsx(Box,{flexDirection:"column",paddingLeft:1,children:i})]})}
|
|
2
|
+
//# sourceMappingURL=Panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Box","Text","Panel","title","children","dimTitle","_jsxs","flexDirection","_jsx","color","bold","paddingLeft"],"sources":["../../../../src/cli/tui/components/Panel.tsx"],"mappings":"gEACSA,IAAKC,SAAY,aAQpB,SAAUC,OAAMC,MAAEA,EAAKC,SAAEA,EAAQC,SAAEA,GAAW,IAClD,OACEC,MAACN,IAAG,CAACO,cAAc,SAAQH,SAAA,CACzBI,KAACR,IAAG,CAAAI,SACFI,KAACP,KAAI,CAACQ,MAAOJ,EAAW,OAAS,OAAQK,MAAOL,EAAQD,SACrDD,MAGLK,KAACR,IAAG,CAACO,cAAc,SAASI,YAAa,EAACP,SACvCA,MAIT","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
step: 1 | 2 | 3;
|
|
3
|
+
}
|
|
4
|
+
export declare function HelpBar({ step }: Props): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare function SearchBar({ value, onChange, focus, hint, }: {
|
|
6
|
+
value: string;
|
|
7
|
+
onChange: (v: string) => void;
|
|
8
|
+
focus: boolean;
|
|
9
|
+
hint: string;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Box,Text}from"ink";export function HelpBar({step:e}){return _jsx(Box,{children:_jsx(Text,{color:"gray",children:"─".repeat(60)})})}export function SearchBar({value:e,onChange:r,focus:o,hint:x}){return _jsxs(Box,{flexDirection:"column",children:[_jsx(Box,{children:_jsx(Text,{color:"gray",children:"─".repeat(60)})}),_jsxs(Box,{justifyContent:"space-between",children:[_jsxs(Box,{children:[_jsx(Text,{color:"yellow",children:"🔍 "}),_jsx(Text,e?{color:"white",children:e}:{dimColor:!0,children:"Search servers..."}),o&&_jsx(Text,{color:"cyan",children:"▎"})]}),_jsx(Box,{children:_jsx(Text,{dimColor:!0,children:x})})]})]})}
|
|
2
|
+
//# sourceMappingURL=SearchBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Box","Text","HelpBar","step","_jsx","children","color","repeat","SearchBar","value","onChange","focus","hint","_jsxs","flexDirection","justifyContent","dimColor"],"sources":["../../../../src/cli/tui/components/SearchBar.tsx"],"mappings":"gEACSA,IAAKC,SAAY,aAMpB,SAAUC,SAAQC,KAAEA,IAOxB,OACEC,KAACJ,IAAG,CAAAK,SACFD,KAACH,KAAI,CAACK,MAAM,OAAMD,SAAE,IAAIE,OAAO,OAGrC,QAEM,SAAUC,WAAUC,MACxBA,EAAKC,SACLA,EAAQC,MACRA,EAAKC,KACLA,IAOA,OACEC,MAACb,IAAG,CAACc,cAAc,SAAQT,SAAA,CACzBD,KAACJ,IAAG,CAAAK,SACFD,KAACH,KAAI,CAACK,MAAM,OAAMD,SAAE,IAAIE,OAAO,QAEjCM,MAACb,IAAG,CAACe,eAAe,gBAAeV,SAAA,CACjCQ,MAACb,IAAG,CAAAK,SAAA,CACFD,KAACH,KAAI,CAACK,MAAM,SAAQD,SAAA,QAElBD,KAACH,KADFQ,EACM,CAACH,MAAM,QAAOD,SAAEI,GAEhB,CAACO,UAAQ,EAAAX,SAAA,sBAEfM,GAASP,KAACH,KAAI,CAACK,MAAM,OAAMD,SAAA,SAE9BD,KAACJ,IAAG,CAAAK,SACFD,KAACH,KAAI,CAACe,UAAQ,EAAAX,SAAEO,WAK1B","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SearchableServer } from '../utils/fuzzySearch.js';
|
|
2
|
+
import type { CategoryGroup, InstalledInfo } from '../hooks/useServers.js';
|
|
3
|
+
interface Props {
|
|
4
|
+
categories: CategoryGroup[];
|
|
5
|
+
filteredServers: SearchableServer[];
|
|
6
|
+
selectedServers: Set<string>;
|
|
7
|
+
installedInfo: InstalledInfo;
|
|
8
|
+
cursorIndex: number;
|
|
9
|
+
onToggle: (serverKey: string) => void;
|
|
10
|
+
onCursorMove: (delta: number) => void;
|
|
11
|
+
focus?: boolean;
|
|
12
|
+
height: number;
|
|
13
|
+
}
|
|
14
|
+
declare function getServerKey(server: SearchableServer): string;
|
|
15
|
+
export declare function ServerList({ categories, filteredServers, selectedServers, installedInfo, cursorIndex, onToggle, onCursorMove, focus, height, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export { getServerKey };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import React from"react";import{Box,Text,useInput}from"ink";function getServerKey(e){return`${e.category}:${e.name}`}export function ServerList({categories:e,filteredServers:r,selectedServers:o,installedInfo:s,cursorIndex:t,onToggle:n,onCursorMove:i,focus:c=!0,height:l}){const x=new Set(r.map((e=>getServerKey(e)))),a=[];for(const r of e)for(const e of r.servers)x.has(getServerKey(e))&&a.push({category:r,server:e});if(useInput(((e,r)=>{if(c)if(r.upArrow)i(-1);else if(r.downArrow)i(1);else if(" "===e){const e=a[t];e&&n(getServerKey(e.server))}}),{isActive:c}),0===a.length)return _jsx(Box,{paddingY:1,children:_jsx(Text,{dimColor:!0,italic:!0,children:"No servers match your search"})});const h=Math.max(3,l-2),d=Math.floor(h/2);let m=Math.max(0,t-d),g=Math.min(a.length,m+h);g-m<h&&(m=Math.max(0,g-h));const j=a.slice(m,g),v=m>0,f=g<a.length;let u="";return _jsxs(Box,{flexDirection:"column",children:[v&&_jsx(Box,{children:_jsxs(Text,{dimColor:!0,children:[" ↑ ",m," more above"]})}),j.map(((e,r)=>{const n=m+r,i=getServerKey(e.server),c=o.has(i),l=n===t,x=e.category.name!==u;u=e.category.name;const a=s[i],h=!!a,d=a?.clients||[];return _jsxs(React.Fragment,{children:[x&&_jsx(Box,{marginTop:0===r?0:1,children:_jsxs(Text,{color:"blue",bold:!0,children:["┌ ",e.category.displayName]})}),_jsxs(Box,{children:[_jsx(Text,{color:l?"cyan":"white",children:l?"│❯":"│ "}),_jsx(Text,{color:c?"green":"gray",children:c?" ●":" ○"}),_jsxs(Text,{color:l?"white":void 0,bold:l||c,children:[" ",e.server.name]}),h&&_jsxs(Text,{color:"green",dimColor:!0,children:[" ✓",d.length>0?` [${d.join(",")}]`:""]}),_jsxs(Text,{dimColor:!0,children:[" ","— ",e.server.description.length>40?e.server.description.slice(0,40)+"…":e.server.description]})]})]},i)})),f&&_jsx(Box,{children:_jsxs(Text,{dimColor:!0,children:[" ↓ ",a.length-g," more below"]})})]})}export{getServerKey};
|
|
2
|
+
//# sourceMappingURL=ServerList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Box","Text","useInput","getServerKey","server","category","name","ServerList","categories","filteredServers","selectedServers","installedInfo","cursorIndex","onToggle","onCursorMove","focus","height","filteredSet","Set","map","s","visibleItems","servers","has","push","input","key","upArrow","downArrow","item","isActive","length","_jsx","paddingY","children","dimColor","italic","maxHeight","Math","max","halfWindow","floor","startIdx","endIdx","min","visibleSlice","slice","showTopIndicator","showBottomIndicator","currentCategory","_jsxs","flexDirection","displayIdx","actualIdx","isSelected","isCursor","showCategory","installInfo","isInstalled","installedClients","clients","Fragment","marginTop","color","bold","displayName","undefined","join","description"],"sources":["../../../../src/cli/tui/components/ServerList.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as _jsxs,jsx as _jsx}from"react/jsx-runtime";import{Box,Text}from"ink";export function StepIndicator({step:e,selectedServerCount:r,selectedClientCount:o}){return _jsxs(Box,{marginBottom:1,children:[_jsxs(Text,{color:1===e?"cyan":"green",bold:1===e,children:[e>1?"✓":"1"," Select Servers"]}),r>0&&e>1&&_jsxs(Text,{dimColor:!0,children:[" (",r,")"]}),_jsx(Text,{dimColor:!0,children:" → "}),_jsxs(Text,{color:2===e?"cyan":e>2?"green":"gray",bold:2===e,children:[e>2?"✓":"2"," Choose Clients"]}),o>0&&e>2&&_jsxs(Text,{dimColor:!0,children:[" (",o,")"]}),_jsx(Text,{dimColor:!0,children:" → "}),_jsx(Text,{color:3===e?"cyan":"gray",bold:3===e,children:"3 Install"})]})}
|
|
2
|
+
//# sourceMappingURL=StepIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Box","Text","StepIndicator","step","selectedServerCount","selectedClientCount","_jsxs","marginBottom","children","color","bold","dimColor","_jsx"],"sources":["../../../../src/cli/tui/components/StepIndicator.tsx"],"mappings":"gEACSA,IAAKC,SAAY,aAQpB,SAAUC,eAAcC,KAAEA,EAAIC,oBAAEA,EAAmBC,oBAAEA,IACzD,OACEC,MAACN,IAAG,CAACO,aAAc,EAACC,SAAA,CAClBF,MAACL,KAAI,CAACQ,MAAgB,IAATN,EAAa,OAAS,QAASO,KAAe,IAATP,EAAUK,SAAA,CACzDL,EAAO,EAAI,IAAM,IAAG,qBAEtBC,EAAsB,GAAKD,EAAO,GACjCG,MAACL,KAAI,CAACU,UAAQ,EAAAH,SAAA,MAAIJ,EAAmB,OAEvCQ,KAACX,KAAI,CAACU,UAAQ,EAAAH,SAAA,QACdF,MAACL,KAAI,CAACQ,MAAgB,IAATN,EAAa,OAASA,EAAO,EAAI,QAAU,OAAQO,KAAe,IAATP,EAAUK,SAAA,CAC7EL,EAAO,EAAI,IAAM,IAAG,qBAEtBE,EAAsB,GAAKF,EAAO,GACjCG,MAACL,KAAI,CAACU,UAAQ,EAAAH,SAAA,MAAIH,EAAmB,OAEvCO,KAACX,KAAI,CAACU,UAAQ,EAAAH,SAAA,QACdI,KAACX,KAAI,CAACQ,MAAgB,IAATN,EAAa,OAAS,OAAQO,KAAe,IAATP,EAAUK,SAAA,gBAKjE","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface InstallItem {
|
|
2
|
+
category: string;
|
|
3
|
+
serverName: string;
|
|
4
|
+
}
|
|
5
|
+
export interface InstallProgress {
|
|
6
|
+
serverName: string;
|
|
7
|
+
status: 'pending' | 'installing' | 'success' | 'failed';
|
|
8
|
+
message?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function useInstall(): {
|
|
11
|
+
installing: boolean;
|
|
12
|
+
progress: InstallProgress[];
|
|
13
|
+
completed: boolean;
|
|
14
|
+
operation: "install" | "uninstall";
|
|
15
|
+
install: (items: InstallItem[], clients: string[]) => Promise<void>;
|
|
16
|
+
uninstall: (items: InstallItem[], clients: string[]) => Promise<void>;
|
|
17
|
+
reset: () => void;
|
|
18
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useState,useCallback}from"react";import{serverService}from"../../../services/ServerService.js";export function useInstall(){const[e,s]=useState(!1),[a,t]=useState([]),[r,n]=useState(!1),[l,c]=useState("install");return{installing:e,progress:a,completed:r,operation:l,install:useCallback((async(e,a)=>{s(!0),n(!1),c("install"),t(e.map((e=>({serverName:e.serverName,status:"pending"}))));for(let s=0;s<e.length;s++){const r=e[s];t((e=>e.map(((e,a)=>a===s?{...e,status:"installing"}:e))));try{const e=await serverService.installMcpServer(r.category,r.serverName,{targetClients:a,blockUntilComplete:!0});t((a=>a.map(((a,t)=>t===s?{...a,status:e.success?"success":"failed",message:e.message}:a))))}catch(e){t((a=>a.map(((a,t)=>t===s?{...a,status:"failed",message:e instanceof Error?e.message:"Unknown error"}:a))))}}s(!1),n(!0)}),[]),uninstall:useCallback((async(e,a)=>{s(!0),n(!1),c("uninstall"),t(e.map((e=>({serverName:e.serverName,status:"pending"}))));for(let s=0;s<e.length;s++){const r=e[s];t((e=>e.map(((e,a)=>a===s?{...e,status:"installing"}:e))));try{const e=await serverService.uninstallMcpServer(r.category,r.serverName,{targets:a,removeData:!0});t((a=>a.map(((a,t)=>t===s?{...a,status:e.success?"success":"failed",message:e.message}:a))))}catch(e){t((a=>a.map(((a,t)=>t===s?{...a,status:"failed",message:e instanceof Error?e.message:"Unknown error"}:a))))}}s(!1),n(!0)}),[]),reset:useCallback((()=>{s(!1),t([]),n(!1),c("install")}),[])}}
|
|
2
|
+
//# sourceMappingURL=useInstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useCallback","serverService","useInstall","installing","setInstalling","progress","setProgress","completed","setCompleted","operation","setOperation","install","async","items","clients","map","item","serverName","status","i","length","prev","p","idx","result","installMcpServer","category","targetClients","blockUntilComplete","success","message","err","Error","uninstall","uninstallMcpServer","targets","removeData","reset"],"sources":["../../../../src/cli/tui/hooks/useInstall.ts"],"mappings":"OAASA,SAAUC,gBAAmB,eAC7BC,kBAAqB,4CAcxB,SAAUC,aACd,MAAOC,EAAYC,GAAiBL,UAAS,IACtCM,EAAUC,GAAeP,SAA4B,KACrDQ,EAAWC,GAAgBT,UAAS,IACpCU,EAAWC,GAAgBX,SAAkC,WAyGpE,MAAO,CAAEI,aAAYE,WAAUE,YAAWE,YAAWE,QAvGrCX,aAAYY,MAAOC,EAAsBC,KACvDV,GAAc,GACdI,GAAa,GACbE,EAAa,WACbJ,EAAYO,EAAME,KAAIC,IAAQ,CAC5BC,WAAYD,EAAKC,WACjBC,OAAQ,eAGV,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAMO,OAAQD,IAAK,CACrC,MAAMH,EAAOH,EAAMM,GAEnBb,GAAYe,GAAQA,EAAKN,KAAI,CAACO,EAAGC,IAC/BA,IAAQJ,EAAI,IAAKG,EAAGJ,OAAQ,cAAiBI,MAG/C,IACE,MAAME,QAAsCvB,cAAcwB,iBACxDT,EAAKU,SACLV,EAAKC,WACL,CACEU,cAAeb,EACfc,oBAAoB,IAIxBtB,GAAYe,GAAQA,EAAKN,KAAI,CAACO,EAAGC,IAC/BA,IAAQJ,EAAI,IACPG,EACHJ,OAAQM,EAAOK,QAAU,UAAY,SACrCC,QAASN,EAAOM,SACdR,KAER,CAAE,MAAOS,GACPzB,GAAYe,GAAQA,EAAKN,KAAI,CAACO,EAAGC,IAC/BA,IAAQJ,EAAI,IACPG,EACHJ,OAAQ,SACRY,QAASC,aAAeC,MAAQD,EAAID,QAAU,iBAC5CR,KAER,CACF,CAEAlB,GAAc,GACdI,GAAa,EAAK,GACjB,IAyD2DyB,UAvD5CjC,aAAYY,MAAOC,EAAsBC,KACzDV,GAAc,GACdI,GAAa,GACbE,EAAa,aACbJ,EAAYO,EAAME,KAAIC,IAAQ,CAC5BC,WAAYD,EAAKC,WACjBC,OAAQ,eAGV,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAMO,OAAQD,IAAK,CACrC,MAAMH,EAAOH,EAAMM,GAEnBb,GAAYe,GAAQA,EAAKN,KAAI,CAACO,EAAGC,IAC/BA,IAAQJ,EAAI,IAAKG,EAAGJ,OAAQ,cAAiBI,MAG/C,IACE,MAAME,QAAsCvB,cAAciC,mBACxDlB,EAAKU,SACLV,EAAKC,WACL,CACEkB,QAASrB,EACTsB,YAAY,IAIhB9B,GAAYe,GAAQA,EAAKN,KAAI,CAACO,EAAGC,IAC/BA,IAAQJ,EAAI,IACPG,EACHJ,OAAQM,EAAOK,QAAU,UAAY,SACrCC,QAASN,EAAOM,SACdR,KAER,CAAE,MAAOS,GACPzB,GAAYe,GAAQA,EAAKN,KAAI,CAACO,EAAGC,IAC/BA,IAAQJ,EAAI,IACPG,EACHJ,OAAQ,SACRY,QAASC,aAAeC,MAAQD,EAAID,QAAU,iBAC5CR,KAER,CACF,CAEAlB,GAAc,GACdI,GAAa,EAAK,GACjB,IASsE6B,MAP3DrC,aAAY,KACxBI,GAAc,GACdE,EAAY,IACZE,GAAa,GACbE,EAAa,UAAU,GACtB,IAGL","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SearchableServer } from '../utils/fuzzySearch.js';
|
|
2
|
+
export interface CategoryGroup {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
servers: SearchableServer[];
|
|
6
|
+
}
|
|
7
|
+
export interface InstalledInfo {
|
|
8
|
+
[serverKey: string]: {
|
|
9
|
+
clients: string[];
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare function useServers(): {
|
|
13
|
+
loading: boolean;
|
|
14
|
+
error: string | null;
|
|
15
|
+
servers: SearchableServer[];
|
|
16
|
+
categories: CategoryGroup[];
|
|
17
|
+
installedInfo: InstalledInfo;
|
|
18
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useState,useEffect}from"react";import{serverService}from"../../../services/ServerService.js";import{mcpManager}from"../../../services/MCPManager.js";import{hasLocalFeeds}from"../../../utils/feedUtils.js";export function useServers(){const[e,s]=useState(!0),[t,a]=useState(null),[r,i]=useState([]),[n,o]=useState([]),[c,l]=useState({});return useEffect((()=>{!async function load(){try{await hasLocalFeeds()||await serverService.syncFeeds(),await mcpManager.initialize();const e=await serverService.listServerCategories(),t=[],a=[],r={};for(const s of e){const e=s.feedConfiguration?.mcpServers??[],i=s.installationStatus,n=e.map((e=>({name:e.name,description:e.description,category:s.name,categoryDisplayName:s.displayName||s.name})));if(t.push(...n),n.length>0&&a.push({name:s.name,displayName:s.displayName||s.name,servers:n}),i?.serversStatus)for(const[e,t]of Object.entries(i.serversStatus)){const a=`${s.name}:${e}`,i=[];if(t.installedStatus)for(const[e,s]of Object.entries(t.installedStatus))"completed"===s.status&&i.push(e);i.length>0&&(r[a]={clients:i})}}i(t),o(a),l(r),s(!1)}catch(e){a(e instanceof Error?e.message:"Failed to load servers"),s(!1)}}()}),[]),{loading:e,error:t,servers:r,categories:n,installedInfo:c}}
|
|
2
|
+
//# sourceMappingURL=useServers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useEffect","serverService","mcpManager","hasLocalFeeds","useServers","loading","setLoading","error","setError","servers","setServers","categories","setCategories","installedInfo","setInstalledInfo","async","load","syncFeeds","initialize","serverCategories","listServerCategories","allServers","categoryGroups","installed","category","mcpServers","feedConfiguration","installationStatus","categoryServers","map","server","name","description","categoryDisplayName","displayName","push","length","serversStatus","serverName","serverStatus","Object","entries","key","installedClients","installedStatus","client","status","clients","err","Error","message"],"sources":["../../../../src/cli/tui/hooks/useServers.ts"],"mappings":"OAASA,SAAUC,cAAiB,eAC3BC,kBAAqB,4CACrBC,eAAkB,yCAClBC,kBAAqB,qCAgBxB,SAAUC,aACd,MAAOC,EAASC,GAAcP,UAAS,IAChCQ,EAAOC,GAAYT,SAAwB,OAC3CU,EAASC,GAAcX,SAA6B,KACpDY,EAAYC,GAAiBb,SAA0B,KACvDc,EAAeC,GAAoBf,SAAwB,IAwElE,OAtEAC,WAAU,MACRe,eAAeC,OACb,UAE2Bb,uBAEjBF,cAAcgB,kBAEhBf,WAAWgB,aAEjB,MAAMC,QAAyBlB,cAAcmB,uBACvCC,EAAiC,GACjCC,EAAkC,GAClCC,EAA2B,GAEjC,IAAK,MAAMC,KAAYL,EAAkB,CACvC,MAAMM,EAAaD,EAASE,mBAAmBD,YAAc,GACvDE,EAAqBH,EAASG,mBAE9BC,EAAsCH,EAAWI,KAAIC,IAAU,CACnEC,KAAMD,EAAOC,KACbC,YAAaF,EAAOE,YACpBR,SAAUA,EAASO,KACnBE,oBAAqBT,EAASU,aAAeV,EAASO,SAcxD,GAXAV,EAAWc,QAAQP,GAEfA,EAAgBQ,OAAS,GAC3Bd,EAAea,KAAK,CAClBJ,KAAMP,EAASO,KACfG,YAAaV,EAASU,aAAeV,EAASO,KAC9CtB,QAASmB,IAKTD,GAAoBU,cACtB,IAAK,MAAOC,EAAYC,KAAiBC,OAAOC,QAAQd,EAAmBU,eAAgB,CACzF,MAAMK,EAAM,GAAGlB,EAASO,QAAQO,IAC1BK,EAA6B,GAEnC,GAAIJ,EAAaK,gBACf,IAAK,MAAOC,EAAQC,KAAWN,OAAOC,QAAQF,EAAaK,iBACnC,cAAlBE,EAAOA,QACTH,EAAiBR,KAAKU,GAKxBF,EAAiBP,OAAS,IAC5Bb,EAAUmB,GAAO,CAAEK,QAASJ,GAEhC,CAEJ,CAEAjC,EAAWW,GACXT,EAAcU,GACdR,EAAiBS,GACjBjB,GAAW,EACb,CAAE,MAAO0C,GACPxC,EAASwC,aAAeC,MAAQD,EAAIE,QAAU,0BAC9C5C,GAAW,EACb,CACF,CAEAU,EAAM,GACL,IAEI,CAAEX,UAASE,QAAOE,UAASE,aAAYE,gBAChD","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Fuse from 'fuse.js';
|
|
2
|
+
export interface SearchableServer {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
category: string;
|
|
6
|
+
categoryDisplayName: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function createServerSearcher(servers: SearchableServer[]): Fuse<SearchableServer>;
|
|
9
|
+
export declare function filterServers(servers: SearchableServer[], query: string, searcher: Fuse<SearchableServer>): SearchableServer[];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import Fuse from"fuse.js";export function createServerSearcher(e){return new Fuse(e,{keys:["name","description","category"],threshold:.4,ignoreLocation:!0})}export function filterServers(e,r,t){return r.trim()?t.search(r).map((e=>e.item)):e}
|
|
2
|
+
//# sourceMappingURL=fuzzySearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Fuse","createServerSearcher","servers","keys","threshold","ignoreLocation","filterServers","query","searcher","trim","search","map","result","item"],"sources":["../../../../src/cli/tui/utils/fuzzySearch.ts"],"mappings":"OAAOA,SAAU,iBASX,SAAUC,qBAAqBC,GACnC,OAAO,IAAIF,KAAKE,EAAS,CACvBC,KAAM,CAAC,OAAQ,cAAe,YAC9BC,UAAW,GACXC,gBAAgB,GAEpB,QAEM,SAAUC,cACdJ,EACAK,EACAC,GAEA,OAAKD,EAAME,OAGJD,EAASE,OAAOH,GAAOI,KAAIC,GAAUA,EAAOC,OAF1CX,CAGX","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{SUPPORTED_CLIENT_NAMES}from"../../core/metadatas/constants.js";export const SUPPORTED_CLIENTS_TEXT=SUPPORTED_CLIENT_NAMES.join(", ");function formatContextSuffix(t){return t?` for ${t}`:""}export function normalizeTargetClients(t,e){const n=formatContextSuffix(e);if(!t||0===t.length)throw new Error(`No clients specified${n}. At least one client is required. Supported clients: ${SUPPORTED_CLIENTS_TEXT}`);const r=Array.from(new Set(t.map((t=>t.trim())).filter(Boolean).map((t=>{const e=SUPPORTED_CLIENT_NAMES.find((e=>e.toLowerCase()===t.toLowerCase()));if(!e)throw new Error(`Invalid client name "${t}"${n}. Supported clients: ${SUPPORTED_CLIENTS_TEXT}`);return e}))));if(0===r.length)throw new Error(`No valid clients specified${n}. Supported clients: ${SUPPORTED_CLIENTS_TEXT}`);return r}export function parseClientsOption(t,e="the --clients option"){if(!t)throw new Error(`At least one client must be specified using --clients. Supported clients: ${SUPPORTED_CLIENTS_TEXT}`);return normalizeTargetClients(t.split(";"),e)}
|
|
2
|
+
//# sourceMappingURL=clientOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SUPPORTED_CLIENT_NAMES","SUPPORTED_CLIENTS_TEXT","join","formatContextSuffix","context","normalizeTargetClients","targets","contextSuffix","length","Error","normalized","Array","from","Set","map","target","trim","filter","Boolean","match","find","name","toLowerCase","parseClientsOption","clientsOption","split"],"sources":["../../../src/cli/utils/clientOptions.ts"],"mappings":"OAASA,2BAA8B,2CAEhC,MAAMC,uBAAyBD,uBAAuBE,KAAK,MAElE,SAASC,oBAAoBC,GAC3B,OAAOA,EAAU,QAAQA,IAAY,EACvC,QAEM,SAAUC,uBAAuBC,EAA+BF,GACpE,MAAMG,EAAgBJ,oBAAoBC,GAE1C,IAAKE,GAA8B,IAAnBA,EAAQE,OACtB,MAAM,IAAIC,MAAM,uBAAuBF,0DAAsEN,0BAG/G,MAAMS,EAAaC,MAAMC,KAAK,IAAIC,IAChCP,EACGQ,KAAIC,GAAUA,EAAOC,SACrBC,OAAOC,SACPJ,KAAIC,IACH,MAAMI,EAAQnB,uBAAuBoB,MAAKC,GAAQA,EAAKC,gBAAkBP,EAAOO,gBAChF,IAAKH,EACH,MAAM,IAAIV,MAAM,wBAAwBM,KAAUR,yBAAqCN,0BAEzF,OAAOkB,CAAK,MAIlB,GAA0B,IAAtBT,EAAWF,OACb,MAAM,IAAIC,MAAM,6BAA6BF,yBAAqCN,0BAGpF,OAAOS,CACT,QAEM,SAAUa,mBACdC,EACApB,EAAU,wBAEV,IAAKoB,EACH,MAAM,IAAIf,MAAM,6EAA6ER,0BAI/F,OAAOI,uBADYmB,EAAcC,MAAM,KACGrB,EAC5C","ignoreList":[]}
|
|
@@ -30,6 +30,14 @@ export declare abstract class BaseClientInstaller {
|
|
|
30
30
|
* Override in child classes to provide custom initialization
|
|
31
31
|
*/
|
|
32
32
|
protected initializeSettings(settings: any): void;
|
|
33
|
+
/**
|
|
34
|
+
* Normalize server names for consistent comparisons (e.g., coding-flow vs coding_flow)
|
|
35
|
+
*/
|
|
36
|
+
private normalizeServerName;
|
|
37
|
+
/**
|
|
38
|
+
* Adds SOURCE env metadata for coding-flow installations so clients know their origin.
|
|
39
|
+
*/
|
|
40
|
+
protected applySourceEnv(target: Record<string, any> | undefined, serverName: string): void;
|
|
33
41
|
/**
|
|
34
42
|
* Set up client settings in the provided settings object
|
|
35
43
|
* Override in child classes to provide custom client settings setup
|