@kwonye/mcpx 0.1.91 → 0.1.94

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 (73) hide show
  1. package/dist/adapters/claude-desktop.d.ts +2 -1
  2. package/dist/adapters/claude-desktop.d.ts.map +1 -1
  3. package/dist/adapters/claude.d.ts +2 -1
  4. package/dist/adapters/claude.d.ts.map +1 -1
  5. package/dist/adapters/cline.d.ts.map +1 -1
  6. package/dist/adapters/codex.d.ts +2 -1
  7. package/dist/adapters/codex.d.ts.map +1 -1
  8. package/dist/adapters/cursor.d.ts +2 -1
  9. package/dist/adapters/cursor.d.ts.map +1 -1
  10. package/dist/adapters/kiro.d.ts +2 -1
  11. package/dist/adapters/kiro.d.ts.map +1 -1
  12. package/dist/adapters/opencode.d.ts.map +1 -1
  13. package/dist/adapters/qwen.d.ts +2 -1
  14. package/dist/adapters/qwen.d.ts.map +1 -1
  15. package/dist/adapters/utils/index.d.ts +11 -3
  16. package/dist/adapters/utils/index.d.ts.map +1 -1
  17. package/dist/adapters/vscode.d.ts +2 -1
  18. package/dist/adapters/vscode.d.ts.map +1 -1
  19. package/dist/{cli-b83jnbz7.js → cli-154shqmt.js} +180 -1717
  20. package/dist/cli-9fmn9y72.js +923 -0
  21. package/dist/{cli-btx8jwra.js → cli-csfsg1yf.js} +136 -8
  22. package/dist/{cli-grafmdtc.js → cli-mxmgxdm2.js} +181 -1718
  23. package/dist/cli-n8vt375e.js +2082 -0
  24. package/dist/{cli-qfvawh8e.js → cli-tk8bggg5.js} +82 -9
  25. package/dist/{cli-zbbeadz8.js → cli-zjepj3sj.js} +7 -1
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +172 -20
  28. package/dist/{config-nkgc4c4n.js → config-dtc3c79c.js} +7 -3
  29. package/dist/core/config-repair.d.ts.map +1 -1
  30. package/dist/core/config-store.d.ts +3 -0
  31. package/dist/core/config-store.d.ts.map +1 -0
  32. package/dist/core/config.d.ts +13 -1
  33. package/dist/core/config.d.ts.map +1 -1
  34. package/dist/core/daemon.d.ts +1 -1
  35. package/dist/core/daemon.d.ts.map +1 -1
  36. package/dist/core/errors.d.ts +18 -0
  37. package/dist/core/errors.d.ts.map +1 -0
  38. package/dist/core/index.d.ts +14 -3
  39. package/dist/core/index.d.ts.map +1 -1
  40. package/dist/core/index.js +133 -12
  41. package/dist/core/oauth.d.ts.map +1 -1
  42. package/dist/core/paths.d.ts +4 -0
  43. package/dist/core/paths.d.ts.map +1 -1
  44. package/dist/core/plugin-cache.d.ts +21 -0
  45. package/dist/core/plugin-cache.d.ts.map +1 -0
  46. package/dist/core/plugin-data.d.ts +29 -0
  47. package/dist/core/plugin-data.d.ts.map +1 -0
  48. package/dist/core/plugin-lifecycle.d.ts +8 -0
  49. package/dist/core/plugin-lifecycle.d.ts.map +1 -0
  50. package/dist/core/plugin-manager.d.ts +52 -0
  51. package/dist/core/plugin-manager.d.ts.map +1 -0
  52. package/dist/core/plugin-parse.d.ts +6 -0
  53. package/dist/core/plugin-parse.d.ts.map +1 -0
  54. package/dist/core/plugin-projections.d.ts +9 -0
  55. package/dist/core/plugin-projections.d.ts.map +1 -0
  56. package/dist/core/plugin-source.d.ts +5 -0
  57. package/dist/core/plugin-source.d.ts.map +1 -0
  58. package/dist/core/registry.d.ts +4 -1
  59. package/dist/core/registry.d.ts.map +1 -1
  60. package/dist/core/secrets.d.ts.map +1 -1
  61. package/dist/core/server-auth.d.ts.map +1 -1
  62. package/dist/core/status.d.ts +1 -0
  63. package/dist/core/status.d.ts.map +1 -1
  64. package/dist/core/sync.d.ts +19 -2
  65. package/dist/core/sync.d.ts.map +1 -1
  66. package/dist/gateway/server.d.ts +4 -1
  67. package/dist/gateway/server.d.ts.map +1 -1
  68. package/dist/plugin-manager-1sjwfnah.js +31 -0
  69. package/dist/{registry-vykv33et.js → registry-n12thgf2.js} +2 -2
  70. package/dist/types.d.ts +85 -0
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/version.d.ts +1 -1
  73. package/package.json +3 -2
@@ -5,7 +5,7 @@ import {
5
5
  getSecretsStorePath,
6
6
  readJsonFile,
7
7
  writeJsonAtomic
8
- } from "./cli-zbbeadz8.js";
8
+ } from "./cli-zjepj3sj.js";
9
9
  import {
10
10
  isServerEnabled,
11
11
  normalizeServerSpecEnabled
@@ -32,6 +32,13 @@ function removeServer(config, name, force = false) {
32
32
  throw new Error(`Server "${name}" does not exist.`);
33
33
  }
34
34
  delete config.servers[name];
35
+ if (config.projects) {
36
+ for (const project of Object.values(config.projects)) {
37
+ if (project.disabledServers) {
38
+ project.disabledServers = project.disabledServers.filter((s) => s !== name);
39
+ }
40
+ }
41
+ }
35
42
  }
36
43
  function updateServer(config, name, spec) {
37
44
  validateServerName(name);
@@ -66,14 +73,18 @@ function ensureGatewayToken(config, secrets) {
66
73
  try {
67
74
  const fileValue = fs.readFileSync(tokenPath, "utf8").trim();
68
75
  if (fileValue) {
69
- secrets.setSecret(secretName, fileValue);
70
76
  return fileValue;
71
77
  }
72
78
  } catch {}
79
+ const storeValue = secrets.getSecret(secretName);
80
+ if (storeValue) {
81
+ ensureParentDir(tokenPath);
82
+ fs.writeFileSync(tokenPath, storeValue, { mode: 384 });
83
+ return storeValue;
84
+ }
73
85
  const token = crypto.randomBytes(32).toString("base64url");
74
86
  ensureParentDir(tokenPath);
75
87
  fs.writeFileSync(tokenPath, token, { mode: 384 });
76
- secrets.setSecret(secretName, token);
77
88
  return token;
78
89
  }
79
90
  function rotateGatewayToken(config, secrets) {
@@ -82,7 +93,7 @@ function rotateGatewayToken(config, secrets) {
82
93
  const tokenPath = getGatewayTokenPath(secretName);
83
94
  ensureParentDir(tokenPath);
84
95
  fs.writeFileSync(tokenPath, token, { mode: 384 });
85
- secrets.setSecret(secretName, token);
96
+ secrets.removeSecret(secretName);
86
97
  return token;
87
98
  }
88
99
  function registerProject(globalConfig, projectPath, name) {
@@ -111,20 +122,82 @@ function setProjectServerEnabled(globalConfig, projectPath, serverName, enabled)
111
122
  if (!project) {
112
123
  throw new Error(`Project "${resolvedPath}" is not registered.`);
113
124
  }
125
+ const serverSpec = globalConfig.servers[serverName];
126
+ if (!serverSpec) {
127
+ throw new Error(`Server "${serverName}" does not exist.`);
128
+ }
114
129
  if (!project.disabledServers) {
115
130
  project.disabledServers = [];
116
131
  }
117
132
  if (enabled) {
118
133
  project.disabledServers = project.disabledServers.filter((s) => s !== serverName);
119
- const serverSpec = globalConfig.servers[serverName];
120
- if (serverSpec && !isServerEnabled(serverSpec)) {
121
- globalConfig.servers[serverName] = { ...serverSpec, enabled: true };
134
+ if (!isServerEnabled(serverSpec)) {
135
+ return { effective: false, reason: "globally_disabled" };
122
136
  }
123
137
  } else {
124
138
  if (!project.disabledServers.includes(serverName)) {
125
139
  project.disabledServers.push(serverName);
126
140
  }
127
141
  }
142
+ return { effective: true };
143
+ }
144
+
145
+ // src/core/errors.ts
146
+ class UpstreamError extends Error {
147
+ code;
148
+ upstream;
149
+ status;
150
+ wwwAuthenticate;
151
+ constructor(upstream, code, message, options) {
152
+ super(message);
153
+ this.name = "UpstreamError";
154
+ this.code = code;
155
+ this.upstream = upstream;
156
+ this.status = options?.status;
157
+ this.wwwAuthenticate = options?.wwwAuthenticate;
158
+ }
159
+ }
160
+
161
+ class SecretNotFoundError extends Error {
162
+ code = "secret_missing";
163
+ secretName;
164
+ constructor(secretName) {
165
+ super(`Secret not found: ${secretName}. Run: mcpx secret set ${secretName}`);
166
+ this.name = "SecretNotFoundError";
167
+ this.secretName = secretName;
168
+ }
169
+ }
170
+ var TIMEOUT_RE = /timed out after \d+ms/;
171
+ var UNREACHABLE_PATTERNS = [
172
+ /fetch failed/i,
173
+ /ECONNREFUSED/,
174
+ /ENOTFOUND/,
175
+ /EAI_AGAIN/,
176
+ /socket hang up/,
177
+ /ENOENT/,
178
+ /connect econnrefused/i
179
+ ];
180
+ function classifyUpstreamError(upstream, error, wwwAuthenticate) {
181
+ if (error instanceof UpstreamError)
182
+ return error;
183
+ if (error instanceof SecretNotFoundError) {
184
+ return new UpstreamError(upstream, "secret_missing", error.message);
185
+ }
186
+ const message = error instanceof Error ? error.message : String(error);
187
+ const maybeHttpError = error;
188
+ if (maybeHttpError?.code && (maybeHttpError.code === 401 || maybeHttpError.code === 403)) {
189
+ return new UpstreamError(upstream, "auth_required", message, {
190
+ status: maybeHttpError.code,
191
+ wwwAuthenticate
192
+ });
193
+ }
194
+ if (TIMEOUT_RE.test(message)) {
195
+ return new UpstreamError(upstream, "timeout", message);
196
+ }
197
+ if (UNREACHABLE_PATTERNS.some((p) => p.test(message))) {
198
+ return new UpstreamError(upstream, "unreachable", message);
199
+ }
200
+ return new UpstreamError(upstream, "upstream_error", message);
128
201
  }
129
202
 
130
203
  // src/core/secrets.ts
@@ -240,7 +313,7 @@ class SecretsManager {
240
313
  return value;
241
314
  const secret = this.getSecret(secretName);
242
315
  if (!secret)
243
- throw new Error(`Secret not found: ${secretName}`);
316
+ throw new SecretNotFoundError(secretName);
244
317
  return secret;
245
318
  }
246
319
  rotateLocalToken(secretName = "local_gateway_token") {
@@ -260,4 +333,4 @@ function readSecretValueFromStdin() {
260
333
  return content;
261
334
  }
262
335
 
263
- export { SecretsManager, readSecretValueFromStdin, validateServerName, addServer, removeServer, updateServer, setServerEnabled, getGatewayTokenSecretName, ensureGatewayToken, rotateGatewayToken, registerProject, unregisterProject, setProjectServerEnabled };
336
+ export { UpstreamError, SecretNotFoundError, classifyUpstreamError, SecretsManager, readSecretValueFromStdin, validateServerName, addServer, removeServer, updateServer, setServerEnabled, getGatewayTokenSecretName, ensureGatewayToken, rotateGatewayToken, registerProject, unregisterProject, setProjectServerEnabled };
@@ -59,6 +59,12 @@ function getStagedVersionPath() {
59
59
  function getUpdateLockPath() {
60
60
  return path.join(getUpdatesDir(), ".update.lock");
61
61
  }
62
+ function getPluginCacheRoot() {
63
+ return path.join(getDataRoot(), "mcpx", "plugins", "cache");
64
+ }
65
+ function getPluginDataRoot() {
66
+ return path.join(getDataRoot(), "mcpx", "plugins", "data");
67
+ }
62
68
  function ensureDir(dirPath) {
63
69
  fs.mkdirSync(dirPath, { recursive: true });
64
70
  }
@@ -108,4 +114,4 @@ function sha256(value) {
108
114
  return crypto.createHash("sha256").update(value).digest("hex");
109
115
  }
110
116
 
111
- export { homeDir, getConfigPath, getSkillsDir, getManagedIndexPath, getSecretsStorePath, getSecretsKeyPath, getPidPath, getLogPath, getGatewayTokenPath, getUpdatesDir, getStagedVersionPath, getUpdateLockPath, ensureDir, ensureParentDir, findProjectConfigPath, readJsonFile, writeJsonAtomic, sha256 };
117
+ export { homeDir, getConfigPath, getSkillsDir, getManagedIndexPath, getSecretsStorePath, getSecretsKeyPath, getPidPath, getLogPath, getGatewayTokenPath, getUpdatesDir, getStagedVersionPath, getUpdateLockPath, getPluginCacheRoot, getPluginDataRoot, ensureDir, ensureParentDir, findProjectConfigPath, readJsonFile, writeJsonAtomic, sha256 };
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA80DA,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE/D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAq+DA,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE/D"}
package/dist/cli.js CHANGED
@@ -6,18 +6,12 @@ import {
6
6
  buildStatusReport,
7
7
  checkForUpdates,
8
8
  defaultAuthSecretName,
9
- deleteSkill,
10
9
  extractRequiredInputs,
11
10
  fetchRegistryServerDetail,
12
- getAdapters,
13
11
  getDaemonStatus,
14
- getGatewayUrl,
15
- getSkill,
16
12
  getStagedCliPath,
17
13
  getStagedUpdate,
18
14
  listAuthBindings,
19
- listSkills,
20
- loadManagedIndex,
21
15
  mapRegistryToSpec,
22
16
  maybePrefixBearer,
23
17
  performRollback,
@@ -30,23 +24,33 @@ import {
30
24
  runBackgroundUpdate,
31
25
  runDaemonForeground,
32
26
  runOAuthLogin,
33
- saveSkill,
34
27
  secretRefName,
35
28
  selectBestPackage,
36
29
  shouldUseStagedCli,
37
30
  startDaemon,
38
31
  stopDaemon,
39
- syncAllClients,
40
32
  toSecretRef
41
- } from "./cli-grafmdtc.js";
33
+ } from "./cli-mxmgxdm2.js";
42
34
  import {
35
+ deleteSkill,
36
+ getAdapters,
37
+ getGatewayUrl,
38
+ getSkill,
39
+ listSkills,
40
+ loadManagedIndex,
41
+ persistSyncState,
42
+ saveSkill,
43
+ syncAllClients
44
+ } from "./cli-n8vt375e.js";
45
+ import {
46
+ ConfigLoadError,
43
47
  loadConfig,
44
48
  loadMergedConfig,
45
49
  loadProjectConfig,
46
50
  resolveActiveConfig,
47
51
  saveConfig,
48
52
  saveProjectConfig
49
- } from "./cli-btx8jwra.js";
53
+ } from "./cli-csfsg1yf.js";
50
54
  import {
51
55
  SecretsManager,
52
56
  addServer,
@@ -56,12 +60,12 @@ import {
56
60
  removeServer,
57
61
  rotateGatewayToken,
58
62
  setServerEnabled
59
- } from "./cli-qfvawh8e.js";
63
+ } from "./cli-tk8bggg5.js";
60
64
  import {
61
65
  getConfigPath,
62
66
  getManagedIndexPath,
63
67
  getSecretsStorePath
64
- } from "./cli-zbbeadz8.js";
68
+ } from "./cli-zjepj3sj.js";
65
69
  import {
66
70
  __require,
67
71
  isServerEnabled
@@ -1070,8 +1074,9 @@ async function ensureDaemonIfEnabled(cliPath, secrets) {
1070
1074
  async function autoSyncManagedEntries(config, cliPath) {
1071
1075
  const secrets = new SecretsManager;
1072
1076
  await ensureDaemonIfEnabled(cliPath, secrets);
1073
- const mergedConfig = loadMergedConfig();
1074
- const summary = syncAllClients(mergedConfig, secrets);
1077
+ const summary = syncAllClients(config, secrets);
1078
+ persistSyncState(summary, config);
1079
+ saveConfig(config);
1075
1080
  printSyncSummary(summary, false);
1076
1081
  ensureExitCodeForSyncFailures(summary.hasErrors);
1077
1082
  }
@@ -1565,6 +1570,8 @@ async function reconnectGatewayAndSync(cliPath) {
1565
1570
  process.stdout.write(`${restart.message} pid=${restart.pid} port=${restart.port}
1566
1571
  `);
1567
1572
  const summary = syncAllClients(config, secrets);
1573
+ persistSyncState(summary, config);
1574
+ saveConfig(config);
1568
1575
  printSyncSummary(summary, false);
1569
1576
  }
1570
1577
  async function setServerEnabledInteractively(rl, serverName, enabled, cliPath) {
@@ -1913,11 +1920,13 @@ function registerListCommand(parent) {
1913
1920
  }
1914
1921
  function registerSyncCommand(program, cliPath) {
1915
1922
  program.command("sync [clients...]").option("--client <id>", "Limit sync to specific client(s), comma-separated or repeated", (value, prev = []) => [...prev, value], []).option("--json", "Output JSON").description("Sync gateway configuration to supported clients (e.g. `mcpx sync claude`)").action(async (clients, options) => {
1916
- const config = loadMergedConfig();
1923
+ const config = loadConfig();
1917
1924
  const targetClients = parseClientList([...clients ?? [], ...options.client ?? []]);
1918
1925
  const secrets = new SecretsManager;
1919
1926
  await ensureDaemonIfEnabled(cliPath, secrets);
1920
- const summary = syncAllClients(config, secrets, targetClients);
1927
+ const summary = syncAllClients(config, secrets, { targetClients });
1928
+ persistSyncState(summary, config);
1929
+ saveConfig(config);
1921
1930
  printSyncSummary(summary, options.json ?? false);
1922
1931
  ensureExitCodeForSyncFailures(summary.hasErrors);
1923
1932
  });
@@ -2307,11 +2316,11 @@ function registerProjectCommands(program, cliPath) {
2307
2316
  name: projectName,
2308
2317
  servers: {}
2309
2318
  };
2310
- const { saveProjectConfig: saveProjectConfig2 } = await import("./config-nkgc4c4n.js");
2319
+ const { saveProjectConfig: saveProjectConfig2 } = await import("./config-dtc3c79c.js");
2311
2320
  saveProjectConfig2(localConfig, targetPath);
2312
2321
  process.stdout.write(`Initialized project configuration at: ${targetPath}
2313
2322
  `);
2314
- const { registerProject: registerProject2 } = await import("./registry-vykv33et.js");
2323
+ const { registerProject: registerProject2 } = await import("./registry-n12thgf2.js");
2315
2324
  const globalConfig = loadConfig();
2316
2325
  registerProject2(globalConfig, process.cwd(), projectName);
2317
2326
  saveConfig(globalConfig);
@@ -2342,7 +2351,7 @@ function registerProjectCommands(program, cliPath) {
2342
2351
  process.exit(1);
2343
2352
  }
2344
2353
  const entry = globalConfig.projects[resolvedPath];
2345
- const { unregisterProject: unregisterProject2 } = await import("./registry-vykv33et.js");
2354
+ const { unregisterProject: unregisterProject2 } = await import("./registry-n12thgf2.js");
2346
2355
  unregisterProject2(globalConfig, resolvedPath);
2347
2356
  saveConfig(globalConfig);
2348
2357
  process.stdout.write(`Unregistered project "${entry.name}" (${resolvedPath}) from the global configuration.
@@ -2353,6 +2362,131 @@ function registerProjectCommands(program, cliPath) {
2353
2362
  await autoSyncManagedEntries(mergedConfig, cliPath);
2354
2363
  });
2355
2364
  }
2365
+ function registerPluginCommands(program, _cliPath) {
2366
+ const plugin = program.command("plugin").description("Manage plugins");
2367
+ plugin.command("inspect <source>").description("Inspect plugin manifest and components").action(async (source) => {
2368
+ const { inspectPlugin } = await import("./plugin-manager-1sjwfnah.js");
2369
+ try {
2370
+ const info = await inspectPlugin(source);
2371
+ process.stdout.write(JSON.stringify(info, null, 2) + `
2372
+ `);
2373
+ } catch (e) {
2374
+ process.stderr.write(`Error: ${e.message}
2375
+ `);
2376
+ process.exit(1);
2377
+ }
2378
+ });
2379
+ plugin.command("install <source>").option("--name <name>", "Plugin name").option("--no-enable", "Don't enable plugin after install").description("Install plugin").action(async (source, options) => {
2380
+ const { installPlugin } = await import("./plugin-manager-1sjwfnah.js");
2381
+ try {
2382
+ const p = await installPlugin(source, {
2383
+ name: options.name,
2384
+ enabled: !options.noEnable
2385
+ });
2386
+ process.stdout.write(`Plugin installed: ${p.id}
2387
+ `);
2388
+ } catch (e) {
2389
+ process.stderr.write(`Error: ${e.message}
2390
+ `);
2391
+ process.exit(1);
2392
+ }
2393
+ });
2394
+ plugin.command("approve <name> <component>").description("Approve a plugin component (hooks, mcpServers)").action(async (name, component) => {
2395
+ const { approvePluginComponent } = await import("./plugin-manager-1sjwfnah.js");
2396
+ try {
2397
+ await approvePluginComponent(name, component);
2398
+ process.stdout.write(`Approved ${component} for plugin ${name}
2399
+ `);
2400
+ } catch (e) {
2401
+ process.stderr.write(`Error: ${e.message}
2402
+ `);
2403
+ process.exit(1);
2404
+ }
2405
+ });
2406
+ plugin.command("prepare <name>").description("Install plugin dependencies").action(async (name) => {
2407
+ const { preparePlugin } = await import("./plugin-manager-1sjwfnah.js");
2408
+ try {
2409
+ await preparePlugin(name);
2410
+ process.stdout.write(`Plugin ${name} prepared
2411
+ `);
2412
+ } catch (e) {
2413
+ process.stderr.write(`Error: ${e.message}
2414
+ `);
2415
+ process.exit(1);
2416
+ }
2417
+ });
2418
+ plugin.command("update <name>").description("Update plugin to latest version").action(async (name) => {
2419
+ const { updatePlugin } = await import("./plugin-manager-1sjwfnah.js");
2420
+ try {
2421
+ const p = await updatePlugin(name);
2422
+ process.stdout.write(`Plugin ${name} updated to ${p.version}
2423
+ `);
2424
+ } catch (e) {
2425
+ process.stderr.write(`Error: ${e.message}
2426
+ `);
2427
+ process.exit(1);
2428
+ }
2429
+ });
2430
+ plugin.command("uninstall <name>").option("--keep-data", "Keep plugin data after uninstall").description("Uninstall plugin").action(async (name, options) => {
2431
+ const { uninstallPlugin } = await import("./plugin-manager-1sjwfnah.js");
2432
+ try {
2433
+ await uninstallPlugin(name, options.keepData || false);
2434
+ process.stdout.write(`Plugin ${name} uninstalled
2435
+ `);
2436
+ } catch (e) {
2437
+ process.stderr.write(`Error: ${e.message}
2438
+ `);
2439
+ process.exit(1);
2440
+ }
2441
+ });
2442
+ plugin.command("enable <name>").description("Enable plugin").action(async (name) => {
2443
+ const { enablePlugin } = await import("./plugin-manager-1sjwfnah.js");
2444
+ try {
2445
+ await enablePlugin(name);
2446
+ process.stdout.write(`Plugin ${name} enabled
2447
+ `);
2448
+ } catch (e) {
2449
+ process.stderr.write(`Error: ${e.message}
2450
+ `);
2451
+ process.exit(1);
2452
+ }
2453
+ });
2454
+ plugin.command("disable <name>").description("Disable plugin").action(async (name) => {
2455
+ const { disablePlugin } = await import("./plugin-manager-1sjwfnah.js");
2456
+ try {
2457
+ await disablePlugin(name);
2458
+ process.stdout.write(`Plugin ${name} disabled
2459
+ `);
2460
+ } catch (e) {
2461
+ process.stderr.write(`Error: ${e.message}
2462
+ `);
2463
+ process.exit(1);
2464
+ }
2465
+ });
2466
+ plugin.command("status [name]").description("Show plugin status").action(async (name) => {
2467
+ const { getPluginStatus, listPlugins } = await import("./plugin-manager-1sjwfnah.js");
2468
+ try {
2469
+ if (name) {
2470
+ const p = await getPluginStatus(name);
2471
+ if (!p) {
2472
+ process.stderr.write(`Error: Plugin ${name} not found
2473
+ `);
2474
+ process.exit(1);
2475
+ }
2476
+ process.stdout.write(JSON.stringify(p, null, 2) + `
2477
+ `);
2478
+ } else {
2479
+ const plugins = await listPlugins();
2480
+ process.stdout.write(JSON.stringify(plugins, null, 2) + `
2481
+ `);
2482
+ }
2483
+ } catch (e) {
2484
+ process.stderr.write(`Error: ${e.message}
2485
+ `);
2486
+ process.exit(1);
2487
+ }
2488
+ });
2489
+ }
2356
2490
  function registerProxyCommand(program) {
2357
2491
  program.command("proxy <name>").description("Run a stdio MCP proxy bridging to the local mcpx HTTP gateway for the given upstream server").action(async (name) => {
2358
2492
  await runStdioProxy(name);
@@ -2418,12 +2552,30 @@ async function runCli(argv = process.argv) {
2418
2552
  registerMcpCompat(program, cliPath);
2419
2553
  registerUpdateCommand(program);
2420
2554
  registerProjectCommands(program, cliPath);
2555
+ registerPluginCommands(program, cliPath);
2421
2556
  await program.parseAsync(argv);
2422
2557
  }
2423
2558
  if (process.argv[1] && import.meta.url === pathToFileURL(fs.realpathSync(process.argv[1])).href) {
2424
2559
  runCli().catch((error) => {
2425
- process.stderr.write(`${error.message}
2560
+ if (error instanceof ConfigLoadError) {
2561
+ process.stderr.write(`Config error: ${error.message}
2562
+ `);
2563
+ if (error.backupPath) {
2564
+ process.stderr.write(`Backup saved to: ${error.backupPath}
2426
2565
  `);
2566
+ }
2567
+ if (error.issues && error.issues.length > 0) {
2568
+ for (const issue of error.issues.slice(0, 5)) {
2569
+ process.stderr.write(` - ${issue}
2570
+ `);
2571
+ }
2572
+ }
2573
+ process.stderr.write(`Fix the config file or restore from backup.
2574
+ `);
2575
+ } else {
2576
+ process.stderr.write(`${error.message}
2577
+ `);
2578
+ }
2427
2579
  process.exit(1);
2428
2580
  });
2429
2581
  }
@@ -1,20 +1,24 @@
1
1
  import {
2
+ ConfigLoadError,
2
3
  defaultConfig,
3
4
  loadConfig,
4
5
  loadMergedConfig,
5
6
  loadProjectConfig,
7
+ migrateProjectServers,
6
8
  resolveActiveConfig,
7
9
  saveConfig,
8
10
  saveProjectConfig
9
- } from "./cli-btx8jwra.js";
10
- import"./cli-zbbeadz8.js";
11
+ } from "./cli-csfsg1yf.js";
12
+ import"./cli-zjepj3sj.js";
11
13
  import"./cli-s4gspqdf.js";
12
14
  export {
13
15
  saveProjectConfig,
14
16
  saveConfig,
15
17
  resolveActiveConfig,
18
+ migrateProjectServers,
16
19
  loadProjectConfig,
17
20
  loadMergedConfig,
18
21
  loadConfig,
19
- defaultConfig
22
+ defaultConfig,
23
+ ConfigLoadError
20
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config-repair.d.ts","sourceRoot":"","sources":["../../src/core/config-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAsDlE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAc3D"}
1
+ {"version":3,"file":"config-repair.d.ts","sourceRoot":"","sources":["../../src/core/config-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAsDlE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwB3D"}
@@ -0,0 +1,3 @@
1
+ import type { McpxConfig } from "../types.js";
2
+ export declare function mutateConfig<T>(fn: (config: McpxConfig) => T | Promise<T>, configPath?: string): Promise<T>;
3
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/core/config-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA+C9C,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC1C,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,CAAC,CAQZ"}
@@ -1,4 +1,10 @@
1
1
  import { type McpxConfig, type UpstreamServerSpec } from "../types.js";
2
+ export declare class ConfigLoadError extends Error {
3
+ readonly configPath: string;
4
+ readonly backupPath?: string;
5
+ readonly issues?: string[];
6
+ constructor(configPath: string, message: string, issues?: string[]);
7
+ }
2
8
  export interface ProjectLocalConfig {
3
9
  name?: string;
4
10
  servers: Record<string, UpstreamServerSpec>;
@@ -6,7 +12,9 @@ export interface ProjectLocalConfig {
6
12
  export declare function defaultConfig(): McpxConfig;
7
13
  export declare function loadConfig(configPath?: string): McpxConfig;
8
14
  export declare function saveConfig(config: McpxConfig, configPath?: string): void;
9
- export declare function loadProjectConfig(projectConfigPath: string): ProjectLocalConfig;
15
+ export declare function loadProjectConfig(projectConfigPath: string, options?: {
16
+ strict?: boolean;
17
+ }): ProjectLocalConfig;
10
18
  export declare function saveProjectConfig(config: ProjectLocalConfig, projectConfigPath: string): void;
11
19
  export declare function loadMergedConfig(configPath?: string): McpxConfig;
12
20
  export interface ActiveConfigContext {
@@ -16,6 +24,10 @@ export interface ActiveConfigContext {
16
24
  config: McpxConfig;
17
25
  save: () => void;
18
26
  }
27
+ export declare function migrateProjectServers(config: McpxConfig, projectPath: string): {
28
+ migrated: string[];
29
+ conflicts: string[];
30
+ };
19
31
  export declare function resolveActiveConfig(options?: {
20
32
  global?: boolean;
21
33
  local?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6C,KAAK,UAAU,EAAwB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAoDxI,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC7C;AAOD,wBAAgB,aAAa,IAAI,UAAU,CAY1C;AAED,wBAAgB,UAAU,CAAC,UAAU,SAAkB,GAAG,UAAU,CAyBnE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,SAAkB,GAAG,IAAI,CAMjF;AAED,wBAAgB,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,GAAG,kBAAkB,CAO/E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAK7F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,SAAkB,GAAG,UAAU,CA+BzE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,mBAAmB,CAyB5G"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6C,KAAK,UAAU,EAAwB,KAAK,kBAAkB,EAAuE,MAAM,aAAa,CAAC;AAK7M,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEf,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;CAMnE;AA0GD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC7C;AAOD,wBAAgB,aAAa,IAAI,UAAU,CAa1C;AAED,wBAAgB,UAAU,CAAC,UAAU,SAAkB,GAAG,UAAU,CAyDnE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,SAAkB,GAAG,IAAI,CAMjF;AAED,wBAAgB,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,kBAAkB,CAmB/G;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAK7F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,SAAkB,GAAG,UAAU,CA+BzE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CA0B1H;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,mBAAmB,CAyB5G"}
@@ -13,7 +13,7 @@ export interface DaemonStartResult {
13
13
  port: number;
14
14
  message: string;
15
15
  }
16
- export declare function resolveGatewayPort(config: McpxConfig): Promise<number>;
16
+ export declare function resolveGatewayPort(config: McpxConfig, secrets?: SecretsManager): Promise<number>;
17
17
  export declare function getDaemonStatus(config: McpxConfig): DaemonStatus;
18
18
  export declare function startDaemon(config: McpxConfig, cliPath: string, secrets: SecretsManager): Promise<DaemonStartResult>;
19
19
  export declare function stopDaemon(): {
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/core/daemon.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA6CD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB5E;AA6BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAmBhE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+C1H;AAED,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA2BlE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG5H;AAED,wBAAgB,cAAc,CAAC,QAAQ,SAAM,GAAG,MAAM,CAQrD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5G"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/core/daemon.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA6CD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCtG;AA6BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAmBhE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+C1H;AAED,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8ClE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG5H;AAED,wBAAgB,cAAc,CAAC,QAAQ,SAAM,GAAG,MAAM,CAQrD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5G"}
@@ -0,0 +1,18 @@
1
+ export type UpstreamErrorCode = "auth_required" | "auth_expired" | "secret_missing" | "unreachable" | "timeout" | "upstream_error";
2
+ export declare class UpstreamError extends Error {
3
+ readonly code: UpstreamErrorCode;
4
+ readonly upstream: string;
5
+ readonly status?: number;
6
+ readonly wwwAuthenticate?: string;
7
+ constructor(upstream: string, code: UpstreamErrorCode, message: string, options?: {
8
+ status?: number;
9
+ wwwAuthenticate?: string;
10
+ });
11
+ }
12
+ export declare class SecretNotFoundError extends Error {
13
+ readonly code: UpstreamErrorCode;
14
+ readonly secretName: string;
15
+ constructor(secretName: string);
16
+ }
17
+ export declare function classifyUpstreamError(upstream: string, error: unknown, wwwAuthenticate?: string): UpstreamError;
18
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,SAAS,GACT,gBAAgB,CAAC;AAErB,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;gBAEtB,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;CAQhI;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAoB;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM;CAK/B;AAaD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,aAAa,CA0Bf"}
@@ -1,11 +1,14 @@
1
- export { loadConfig, saveConfig, defaultConfig, loadMergedConfig, loadProjectConfig, saveProjectConfig } from "./config.js";
1
+ export { loadConfig, saveConfig, defaultConfig, loadMergedConfig, loadProjectConfig, saveProjectConfig, ConfigLoadError, migrateProjectServers } from "./config.js";
2
+ export { mutateConfig } from "./config-store.js";
3
+ export { UpstreamError, SecretNotFoundError, classifyUpstreamError } from "./errors.js";
4
+ export type { UpstreamErrorCode } from "./errors.js";
2
5
  export { parseCliAddCommand, tokenizeCommandLine } from "./add-command.js";
3
6
  export { buildEnrichedPath } from "./spawn-env.js";
4
7
  export { runOAuthLogin, getOAuthAccessToken, isOAuthReference, oauthReferenceServerName } from "./oauth.js";
5
8
  export type { OAuthCodeReceiver } from "./oauth.js";
6
9
  export { getDaemonStatus, startDaemon, stopDaemon, restartDaemon, readDaemonLogs, runDaemonForeground } from "./daemon.js";
7
10
  export type { DaemonStatus, DaemonStartResult } from "./daemon.js";
8
- export { syncAllClients, getGatewayUrl } from "./sync.js";
11
+ export { syncAllClients, getGatewayUrl, persistSyncState } from "./sync.js";
9
12
  export type { SyncSummary } from "./sync.js";
10
13
  export { addServer, removeServer, updateServer, setServerEnabled, setProjectServerEnabled, registerProject, unregisterProject, ensureGatewayToken, rotateGatewayToken } from "./registry.js";
11
14
  export { listSkills, getSkill, saveSkill, deleteSkill } from "./skills.js";
@@ -16,11 +19,19 @@ export type { StatusReport, StatusServerEntry, StatusClientMapping, StatusAuthBi
16
19
  export { probeHttpAuthRequirement } from "./auth-probe.js";
17
20
  export type { HttpAuthProbeResult } from "./auth-probe.js";
18
21
  export { loadManagedIndex } from "./managed-index.js";
22
+ export { PluginManager } from "./plugin-manager.js";
23
+ export { PluginCache } from "./plugin-cache.js";
24
+ export { PluginDataManager } from "./plugin-data.js";
25
+ export { syncPluginsToClient, prunePluginProjections, pruneAllPluginProjections } from "./plugin-projections.js";
26
+ export { PluginLifecycle } from "./plugin-lifecycle.js";
27
+ export { parseSource } from "./plugin-source.js";
28
+ export { readManifest, discoverComponents, hasManifest } from "./plugin-parse.js";
29
+ export { inspectPlugin, installPlugin, preparePlugin, updatePlugin, uninstallPlugin, enablePlugin, disablePlugin, approvePluginComponent, getPluginStatus, listPlugins } from "./plugin-manager.js";
19
30
  export { getConfigPath, getManagedIndexPath } from "./paths.js";
20
31
  export { checkForUpdates, getStagedUpdate, getStagedCliPath, clearStagedUpdate, compareVersions, shouldUseStagedCli } from "./update.js";
21
32
  export type { UpdateStatus, StagedUpdateInfo } from "./update.js";
22
33
  export { startBackgroundUpdateCheck, performUpdate, performRollback } from "./update-manager.js";
23
34
  export { fetchRegistryServerDetail, selectBestPackage, extractRequiredInputs, mapRegistryToSpec } from "./registry-client.js";
24
35
  export type { RequiredInput } from "./registry-client.js";
25
- export type { McpxConfig, ClientId, ClientStatus, UpstreamServerSpec, HttpServerSpec, StdioServerSpec, GatewayConfig, ClientSyncState, ManagedIndex, ManagedEntry, ManagedClientState, ClientImportCandidate, ClientImportScanResult, ClientImportSkippedEntry, SyncImportReport, SyncImportedEntry, SyncDuplicateImportEntry, SyncImportConflictEntry, SyncImportErrorEntry, SyncResult, ManagedGatewayEntry, ProjectConfig, ProjectScope } from "../types.js";
36
+ export type { McpxConfig, ClientId, ClientStatus, UpstreamServerSpec, HttpServerSpec, StdioServerSpec, GatewayConfig, ClientSyncState, ManagedIndex, ManagedEntry, ManagedClientState, ClientImportCandidate, ClientImportScanResult, ClientImportSkippedEntry, SyncImportReport, SyncImportedEntry, SyncDuplicateImportEntry, SyncImportConflictEntry, SyncImportErrorEntry, SyncResult, ManagedGatewayEntry, ProjectConfig, ProjectScope, ManagedPlugin, PluginManifest, PluginComponent, PluginSource, DiscoveredComponents, DiscoveredComponent, PluginSyncInput, PluginSyncResult } from "../types.js";
26
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5H,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC5G,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAG7L,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAG3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACzI,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGjG,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,YAAY,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}