@kwonye/mcpx 0.1.93 → 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 (47) hide show
  1. package/dist/adapters/cline.d.ts.map +1 -1
  2. package/dist/adapters/codex.d.ts.map +1 -1
  3. package/dist/adapters/kiro.d.ts.map +1 -1
  4. package/dist/adapters/opencode.d.ts.map +1 -1
  5. package/dist/adapters/utils/index.d.ts +11 -3
  6. package/dist/adapters/utils/index.d.ts.map +1 -1
  7. package/dist/{cli-y7ba5qvr.js → cli-154shqmt.js} +126 -68
  8. package/dist/{cli-qvkpwy9w.js → cli-9fmn9y72.js} +36 -17
  9. package/dist/{cli-np0wwh6m.js → cli-csfsg1yf.js} +78 -4
  10. package/dist/{cli-m2645syd.js → cli-mxmgxdm2.js} +127 -69
  11. package/dist/{cli-kwyp9ywh.js → cli-n8vt375e.js} +306 -172
  12. package/dist/{cli-8vxva0cb.js → cli-tk8bggg5.js} +81 -8
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +45 -21
  15. package/dist/{config-2s5nsm2g.js → config-dtc3c79c.js} +6 -2
  16. package/dist/core/config-repair.d.ts.map +1 -1
  17. package/dist/core/config-store.d.ts +3 -0
  18. package/dist/core/config-store.d.ts.map +1 -0
  19. package/dist/core/config.d.ts +13 -1
  20. package/dist/core/config.d.ts.map +1 -1
  21. package/dist/core/daemon.d.ts +1 -1
  22. package/dist/core/daemon.d.ts.map +1 -1
  23. package/dist/core/errors.d.ts +18 -0
  24. package/dist/core/errors.d.ts.map +1 -0
  25. package/dist/core/index.d.ts +5 -2
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/index.js +81 -6
  28. package/dist/core/oauth.d.ts.map +1 -1
  29. package/dist/core/plugin-manager.d.ts.map +1 -1
  30. package/dist/core/plugin-projections.d.ts +6 -2
  31. package/dist/core/plugin-projections.d.ts.map +1 -1
  32. package/dist/core/registry.d.ts +4 -1
  33. package/dist/core/registry.d.ts.map +1 -1
  34. package/dist/core/secrets.d.ts.map +1 -1
  35. package/dist/core/server-auth.d.ts.map +1 -1
  36. package/dist/core/status.d.ts +1 -0
  37. package/dist/core/status.d.ts.map +1 -1
  38. package/dist/core/sync.d.ts +19 -2
  39. package/dist/core/sync.d.ts.map +1 -1
  40. package/dist/gateway/server.d.ts +4 -1
  41. package/dist/gateway/server.d.ts.map +1 -1
  42. package/dist/{plugin-manager-1sc4b6am.js → plugin-manager-1sjwfnah.js} +4 -4
  43. package/dist/{registry-mztfy0cz.js → registry-n12thgf2.js} +1 -1
  44. package/dist/types.d.ts +2 -0
  45. package/dist/types.d.ts.map +1 -1
  46. package/dist/version.d.ts +1 -1
  47. package/package.json +1 -1
@@ -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 };
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAg+DA,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE/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
@@ -30,7 +30,7 @@ import {
30
30
  startDaemon,
31
31
  stopDaemon,
32
32
  toSecretRef
33
- } from "./cli-m2645syd.js";
33
+ } from "./cli-mxmgxdm2.js";
34
34
  import {
35
35
  deleteSkill,
36
36
  getAdapters,
@@ -38,17 +38,19 @@ import {
38
38
  getSkill,
39
39
  listSkills,
40
40
  loadManagedIndex,
41
+ persistSyncState,
41
42
  saveSkill,
42
43
  syncAllClients
43
- } from "./cli-kwyp9ywh.js";
44
+ } from "./cli-n8vt375e.js";
44
45
  import {
46
+ ConfigLoadError,
45
47
  loadConfig,
46
48
  loadMergedConfig,
47
49
  loadProjectConfig,
48
50
  resolveActiveConfig,
49
51
  saveConfig,
50
52
  saveProjectConfig
51
- } from "./cli-np0wwh6m.js";
53
+ } from "./cli-csfsg1yf.js";
52
54
  import {
53
55
  SecretsManager,
54
56
  addServer,
@@ -58,7 +60,7 @@ import {
58
60
  removeServer,
59
61
  rotateGatewayToken,
60
62
  setServerEnabled
61
- } from "./cli-8vxva0cb.js";
63
+ } from "./cli-tk8bggg5.js";
62
64
  import {
63
65
  getConfigPath,
64
66
  getManagedIndexPath,
@@ -1072,8 +1074,9 @@ async function ensureDaemonIfEnabled(cliPath, secrets) {
1072
1074
  async function autoSyncManagedEntries(config, cliPath) {
1073
1075
  const secrets = new SecretsManager;
1074
1076
  await ensureDaemonIfEnabled(cliPath, secrets);
1075
- const mergedConfig = loadMergedConfig();
1076
- const summary = syncAllClients(mergedConfig, secrets);
1077
+ const summary = syncAllClients(config, secrets);
1078
+ persistSyncState(summary, config);
1079
+ saveConfig(config);
1077
1080
  printSyncSummary(summary, false);
1078
1081
  ensureExitCodeForSyncFailures(summary.hasErrors);
1079
1082
  }
@@ -1567,6 +1570,8 @@ async function reconnectGatewayAndSync(cliPath) {
1567
1570
  process.stdout.write(`${restart.message} pid=${restart.pid} port=${restart.port}
1568
1571
  `);
1569
1572
  const summary = syncAllClients(config, secrets);
1573
+ persistSyncState(summary, config);
1574
+ saveConfig(config);
1570
1575
  printSyncSummary(summary, false);
1571
1576
  }
1572
1577
  async function setServerEnabledInteractively(rl, serverName, enabled, cliPath) {
@@ -1915,11 +1920,13 @@ function registerListCommand(parent) {
1915
1920
  }
1916
1921
  function registerSyncCommand(program, cliPath) {
1917
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) => {
1918
- const config = loadMergedConfig();
1923
+ const config = loadConfig();
1919
1924
  const targetClients = parseClientList([...clients ?? [], ...options.client ?? []]);
1920
1925
  const secrets = new SecretsManager;
1921
1926
  await ensureDaemonIfEnabled(cliPath, secrets);
1922
- const summary = syncAllClients(config, secrets, targetClients);
1927
+ const summary = syncAllClients(config, secrets, { targetClients });
1928
+ persistSyncState(summary, config);
1929
+ saveConfig(config);
1923
1930
  printSyncSummary(summary, options.json ?? false);
1924
1931
  ensureExitCodeForSyncFailures(summary.hasErrors);
1925
1932
  });
@@ -2309,11 +2316,11 @@ function registerProjectCommands(program, cliPath) {
2309
2316
  name: projectName,
2310
2317
  servers: {}
2311
2318
  };
2312
- const { saveProjectConfig: saveProjectConfig2 } = await import("./config-2s5nsm2g.js");
2319
+ const { saveProjectConfig: saveProjectConfig2 } = await import("./config-dtc3c79c.js");
2313
2320
  saveProjectConfig2(localConfig, targetPath);
2314
2321
  process.stdout.write(`Initialized project configuration at: ${targetPath}
2315
2322
  `);
2316
- const { registerProject: registerProject2 } = await import("./registry-mztfy0cz.js");
2323
+ const { registerProject: registerProject2 } = await import("./registry-n12thgf2.js");
2317
2324
  const globalConfig = loadConfig();
2318
2325
  registerProject2(globalConfig, process.cwd(), projectName);
2319
2326
  saveConfig(globalConfig);
@@ -2344,7 +2351,7 @@ function registerProjectCommands(program, cliPath) {
2344
2351
  process.exit(1);
2345
2352
  }
2346
2353
  const entry = globalConfig.projects[resolvedPath];
2347
- const { unregisterProject: unregisterProject2 } = await import("./registry-mztfy0cz.js");
2354
+ const { unregisterProject: unregisterProject2 } = await import("./registry-n12thgf2.js");
2348
2355
  unregisterProject2(globalConfig, resolvedPath);
2349
2356
  saveConfig(globalConfig);
2350
2357
  process.stdout.write(`Unregistered project "${entry.name}" (${resolvedPath}) from the global configuration.
@@ -2358,7 +2365,7 @@ function registerProjectCommands(program, cliPath) {
2358
2365
  function registerPluginCommands(program, _cliPath) {
2359
2366
  const plugin = program.command("plugin").description("Manage plugins");
2360
2367
  plugin.command("inspect <source>").description("Inspect plugin manifest and components").action(async (source) => {
2361
- const { inspectPlugin } = await import("./plugin-manager-1sc4b6am.js");
2368
+ const { inspectPlugin } = await import("./plugin-manager-1sjwfnah.js");
2362
2369
  try {
2363
2370
  const info = await inspectPlugin(source);
2364
2371
  process.stdout.write(JSON.stringify(info, null, 2) + `
@@ -2370,7 +2377,7 @@ function registerPluginCommands(program, _cliPath) {
2370
2377
  }
2371
2378
  });
2372
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) => {
2373
- const { installPlugin } = await import("./plugin-manager-1sc4b6am.js");
2380
+ const { installPlugin } = await import("./plugin-manager-1sjwfnah.js");
2374
2381
  try {
2375
2382
  const p = await installPlugin(source, {
2376
2383
  name: options.name,
@@ -2385,7 +2392,7 @@ function registerPluginCommands(program, _cliPath) {
2385
2392
  }
2386
2393
  });
2387
2394
  plugin.command("approve <name> <component>").description("Approve a plugin component (hooks, mcpServers)").action(async (name, component) => {
2388
- const { approvePluginComponent } = await import("./plugin-manager-1sc4b6am.js");
2395
+ const { approvePluginComponent } = await import("./plugin-manager-1sjwfnah.js");
2389
2396
  try {
2390
2397
  await approvePluginComponent(name, component);
2391
2398
  process.stdout.write(`Approved ${component} for plugin ${name}
@@ -2397,7 +2404,7 @@ function registerPluginCommands(program, _cliPath) {
2397
2404
  }
2398
2405
  });
2399
2406
  plugin.command("prepare <name>").description("Install plugin dependencies").action(async (name) => {
2400
- const { preparePlugin } = await import("./plugin-manager-1sc4b6am.js");
2407
+ const { preparePlugin } = await import("./plugin-manager-1sjwfnah.js");
2401
2408
  try {
2402
2409
  await preparePlugin(name);
2403
2410
  process.stdout.write(`Plugin ${name} prepared
@@ -2409,7 +2416,7 @@ function registerPluginCommands(program, _cliPath) {
2409
2416
  }
2410
2417
  });
2411
2418
  plugin.command("update <name>").description("Update plugin to latest version").action(async (name) => {
2412
- const { updatePlugin } = await import("./plugin-manager-1sc4b6am.js");
2419
+ const { updatePlugin } = await import("./plugin-manager-1sjwfnah.js");
2413
2420
  try {
2414
2421
  const p = await updatePlugin(name);
2415
2422
  process.stdout.write(`Plugin ${name} updated to ${p.version}
@@ -2421,7 +2428,7 @@ function registerPluginCommands(program, _cliPath) {
2421
2428
  }
2422
2429
  });
2423
2430
  plugin.command("uninstall <name>").option("--keep-data", "Keep plugin data after uninstall").description("Uninstall plugin").action(async (name, options) => {
2424
- const { uninstallPlugin } = await import("./plugin-manager-1sc4b6am.js");
2431
+ const { uninstallPlugin } = await import("./plugin-manager-1sjwfnah.js");
2425
2432
  try {
2426
2433
  await uninstallPlugin(name, options.keepData || false);
2427
2434
  process.stdout.write(`Plugin ${name} uninstalled
@@ -2433,7 +2440,7 @@ function registerPluginCommands(program, _cliPath) {
2433
2440
  }
2434
2441
  });
2435
2442
  plugin.command("enable <name>").description("Enable plugin").action(async (name) => {
2436
- const { enablePlugin } = await import("./plugin-manager-1sc4b6am.js");
2443
+ const { enablePlugin } = await import("./plugin-manager-1sjwfnah.js");
2437
2444
  try {
2438
2445
  await enablePlugin(name);
2439
2446
  process.stdout.write(`Plugin ${name} enabled
@@ -2445,7 +2452,7 @@ function registerPluginCommands(program, _cliPath) {
2445
2452
  }
2446
2453
  });
2447
2454
  plugin.command("disable <name>").description("Disable plugin").action(async (name) => {
2448
- const { disablePlugin } = await import("./plugin-manager-1sc4b6am.js");
2455
+ const { disablePlugin } = await import("./plugin-manager-1sjwfnah.js");
2449
2456
  try {
2450
2457
  await disablePlugin(name);
2451
2458
  process.stdout.write(`Plugin ${name} disabled
@@ -2457,7 +2464,7 @@ function registerPluginCommands(program, _cliPath) {
2457
2464
  }
2458
2465
  });
2459
2466
  plugin.command("status [name]").description("Show plugin status").action(async (name) => {
2460
- const { getPluginStatus, listPlugins } = await import("./plugin-manager-1sc4b6am.js");
2467
+ const { getPluginStatus, listPlugins } = await import("./plugin-manager-1sjwfnah.js");
2461
2468
  try {
2462
2469
  if (name) {
2463
2470
  const p = await getPluginStatus(name);
@@ -2550,8 +2557,25 @@ async function runCli(argv = process.argv) {
2550
2557
  }
2551
2558
  if (process.argv[1] && import.meta.url === pathToFileURL(fs.realpathSync(process.argv[1])).href) {
2552
2559
  runCli().catch((error) => {
2553
- 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}
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.
2554
2574
  `);
2575
+ } else {
2576
+ process.stderr.write(`${error.message}
2577
+ `);
2578
+ }
2555
2579
  process.exit(1);
2556
2580
  });
2557
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-np0wwh6m.js";
11
+ } from "./cli-csfsg1yf.js";
10
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,EAAuE,MAAM,aAAa,CAAC;AA6G7M,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,CA0BnE;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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}