@kwonye/mcpx 0.1.67 → 0.1.73

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 (144) hide show
  1. package/dist/adapters/claude-desktop.d.ts +1 -0
  2. package/dist/adapters/claude-desktop.d.ts.map +1 -0
  3. package/dist/adapters/claude.d.ts +1 -0
  4. package/dist/adapters/claude.d.ts.map +1 -0
  5. package/dist/adapters/cline.d.ts +1 -0
  6. package/dist/adapters/cline.d.ts.map +1 -0
  7. package/dist/adapters/codex.d.ts +1 -0
  8. package/dist/adapters/codex.d.ts.map +1 -0
  9. package/dist/adapters/cursor.d.ts +1 -0
  10. package/dist/adapters/cursor.d.ts.map +1 -0
  11. package/dist/adapters/index.d.ts +1 -0
  12. package/dist/adapters/index.d.ts.map +1 -0
  13. package/dist/adapters/kiro.d.ts +1 -0
  14. package/dist/adapters/kiro.d.ts.map +1 -0
  15. package/dist/adapters/opencode.d.ts +1 -0
  16. package/dist/adapters/opencode.d.ts.map +1 -0
  17. package/dist/adapters/qwen.d.ts +1 -0
  18. package/dist/adapters/qwen.d.ts.map +1 -0
  19. package/dist/adapters/utils/index.d.ts +2 -0
  20. package/dist/adapters/utils/index.d.ts.map +1 -0
  21. package/dist/adapters/vscode.d.ts +1 -0
  22. package/dist/adapters/vscode.d.ts.map +1 -0
  23. package/dist/cli-7rggq938.js +3292 -0
  24. package/dist/cli-ezvj44tr.js +3292 -0
  25. package/dist/cli-q8de7zb0.js +12 -0
  26. package/dist/cli.d.ts +1 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +1880 -1131
  29. package/dist/compat/claude.d.ts +1 -0
  30. package/dist/compat/claude.d.ts.map +1 -0
  31. package/dist/compat/codex.d.ts +1 -0
  32. package/dist/compat/codex.d.ts.map +1 -0
  33. package/dist/compat/index.d.ts +1 -0
  34. package/dist/compat/index.d.ts.map +1 -0
  35. package/dist/compat/qwen.d.ts +1 -0
  36. package/dist/compat/qwen.d.ts.map +1 -0
  37. package/dist/compat/unsupported.d.ts +1 -0
  38. package/dist/compat/unsupported.d.ts.map +1 -0
  39. package/dist/compat/vscode.d.ts +1 -0
  40. package/dist/compat/vscode.d.ts.map +1 -0
  41. package/dist/core/auth-probe.d.ts +1 -0
  42. package/dist/core/auth-probe.d.ts.map +1 -0
  43. package/dist/core/config.d.ts +1 -0
  44. package/dist/core/config.d.ts.map +1 -0
  45. package/dist/core/daemon.d.ts +1 -0
  46. package/dist/core/daemon.d.ts.map +1 -0
  47. package/dist/core/index.d.ts +1 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +81 -24
  50. package/dist/core/managed-index.d.ts +1 -0
  51. package/dist/core/managed-index.d.ts.map +1 -0
  52. package/dist/core/paths.d.ts +2 -0
  53. package/dist/core/paths.d.ts.map +1 -0
  54. package/dist/core/registry.d.ts +1 -0
  55. package/dist/core/registry.d.ts.map +1 -0
  56. package/dist/core/secrets.d.ts +1 -0
  57. package/dist/core/secrets.d.ts.map +1 -0
  58. package/dist/core/server-auth.d.ts +1 -0
  59. package/dist/core/server-auth.d.ts.map +1 -0
  60. package/dist/core/status.d.ts +1 -0
  61. package/dist/core/status.d.ts.map +1 -0
  62. package/dist/core/sync.d.ts +1 -0
  63. package/dist/core/sync.d.ts.map +1 -0
  64. package/dist/core/update-manager.d.ts +1 -0
  65. package/dist/core/update-manager.d.ts.map +1 -0
  66. package/dist/core/update.d.ts +1 -0
  67. package/dist/core/update.d.ts.map +1 -0
  68. package/dist/gateway/server.d.ts +1 -0
  69. package/dist/gateway/server.d.ts.map +1 -0
  70. package/dist/types.d.ts +1 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +8 -10
  73. package/dist/util/fs.d.ts +1 -0
  74. package/dist/util/fs.d.ts.map +1 -0
  75. package/dist/version.d.ts +2 -1
  76. package/dist/version.d.ts.map +1 -0
  77. package/package.json +10 -11
  78. package/dist/adapters/claude-desktop.js +0 -115
  79. package/dist/adapters/claude-desktop.js.map +0 -1
  80. package/dist/adapters/claude.js +0 -131
  81. package/dist/adapters/claude.js.map +0 -1
  82. package/dist/adapters/cline.js +0 -135
  83. package/dist/adapters/cline.js.map +0 -1
  84. package/dist/adapters/codex.js +0 -125
  85. package/dist/adapters/codex.js.map +0 -1
  86. package/dist/adapters/cursor.js +0 -122
  87. package/dist/adapters/cursor.js.map +0 -1
  88. package/dist/adapters/index.js +0 -23
  89. package/dist/adapters/index.js.map +0 -1
  90. package/dist/adapters/kiro.js +0 -120
  91. package/dist/adapters/kiro.js.map +0 -1
  92. package/dist/adapters/opencode.js +0 -122
  93. package/dist/adapters/opencode.js.map +0 -1
  94. package/dist/adapters/qwen.js +0 -113
  95. package/dist/adapters/qwen.js.map +0 -1
  96. package/dist/adapters/utils/index.js +0 -134
  97. package/dist/adapters/utils/index.js.map +0 -1
  98. package/dist/adapters/vscode.js +0 -122
  99. package/dist/adapters/vscode.js.map +0 -1
  100. package/dist/cli.js.map +0 -1
  101. package/dist/compat/claude.js +0 -252
  102. package/dist/compat/claude.js.map +0 -1
  103. package/dist/compat/codex.js +0 -179
  104. package/dist/compat/codex.js.map +0 -1
  105. package/dist/compat/index.js +0 -108
  106. package/dist/compat/index.js.map +0 -1
  107. package/dist/compat/qwen.js +0 -316
  108. package/dist/compat/qwen.js.map +0 -1
  109. package/dist/compat/unsupported.js +0 -47
  110. package/dist/compat/unsupported.js.map +0 -1
  111. package/dist/compat/vscode.js +0 -164
  112. package/dist/compat/vscode.js.map +0 -1
  113. package/dist/core/auth-probe.js +0 -54
  114. package/dist/core/auth-probe.js.map +0 -1
  115. package/dist/core/config.js +0 -76
  116. package/dist/core/config.js.map +0 -1
  117. package/dist/core/daemon.js +0 -176
  118. package/dist/core/daemon.js.map +0 -1
  119. package/dist/core/index.js.map +0 -1
  120. package/dist/core/managed-index.js +0 -22
  121. package/dist/core/managed-index.js.map +0 -1
  122. package/dist/core/paths.js +0 -55
  123. package/dist/core/paths.js.map +0 -1
  124. package/dist/core/registry.js +0 -51
  125. package/dist/core/registry.js.map +0 -1
  126. package/dist/core/secrets.js +0 -108
  127. package/dist/core/secrets.js.map +0 -1
  128. package/dist/core/server-auth.js +0 -112
  129. package/dist/core/server-auth.js.map +0 -1
  130. package/dist/core/status.js +0 -65
  131. package/dist/core/status.js.map +0 -1
  132. package/dist/core/sync.js +0 -128
  133. package/dist/core/sync.js.map +0 -1
  134. package/dist/core/update-manager.js +0 -170
  135. package/dist/core/update-manager.js.map +0 -1
  136. package/dist/core/update.js +0 -111
  137. package/dist/core/update.js.map +0 -1
  138. package/dist/gateway/server.js +0 -995
  139. package/dist/gateway/server.js.map +0 -1
  140. package/dist/types.js.map +0 -1
  141. package/dist/util/fs.js +0 -34
  142. package/dist/util/fs.js.map +0 -1
  143. package/dist/version.js +0 -2
  144. package/dist/version.js.map +0 -1
@@ -1,112 +0,0 @@
1
- function normalizeNamePart(value) {
2
- return value
3
- .trim()
4
- .toLowerCase()
5
- .replace(/[^a-z0-9._-]+/g, "_")
6
- .replace(/^_+|_+$/g, "") || "value";
7
- }
8
- function requireNonEmpty(value, label) {
9
- const normalized = value?.trim();
10
- if (!normalized) {
11
- throw new Error(`${label} must be non-empty.`);
12
- }
13
- return normalized;
14
- }
15
- export function toSecretRef(secretName) {
16
- return `secret://${secretName}`;
17
- }
18
- export function secretRefName(ref) {
19
- if (!ref.startsWith("secret://")) {
20
- return null;
21
- }
22
- const name = ref.slice("secret://".length).trim();
23
- return name.length > 0 ? name : null;
24
- }
25
- export function defaultAuthSecretName(serverName, target) {
26
- return `auth_${normalizeNamePart(serverName)}_${target.kind}_${normalizeNamePart(target.key)}`;
27
- }
28
- export function resolveAuthTarget(spec, header, env) {
29
- if (spec.transport === "http") {
30
- if (env) {
31
- throw new Error("--env is only valid for stdio upstreams.");
32
- }
33
- return {
34
- kind: "header",
35
- key: requireNonEmpty(header ?? "Authorization", "Header name")
36
- };
37
- }
38
- if (header) {
39
- throw new Error("--header is only valid for HTTP upstreams.");
40
- }
41
- return {
42
- kind: "env",
43
- key: requireNonEmpty(env, "Env var name")
44
- };
45
- }
46
- export function applyAuthReference(spec, target, secretRef) {
47
- if (target.kind === "header") {
48
- if (spec.transport !== "http") {
49
- throw new Error(`Cannot set header auth on ${spec.transport} upstream.`);
50
- }
51
- const headers = { ...(spec.headers ?? {}) };
52
- headers[target.key] = secretRef;
53
- spec.headers = headers;
54
- return;
55
- }
56
- if (spec.transport !== "stdio") {
57
- throw new Error(`Cannot set env auth on ${spec.transport} upstream.`);
58
- }
59
- const env = { ...(spec.env ?? {}) };
60
- env[target.key] = secretRef;
61
- spec.env = env;
62
- }
63
- export function removeAuthReference(spec, target) {
64
- if (target.kind === "header") {
65
- if (spec.transport !== "http") {
66
- throw new Error(`Cannot remove header auth from ${spec.transport} upstream.`);
67
- }
68
- if (!spec.headers || !(target.key in spec.headers)) {
69
- return null;
70
- }
71
- const previous = spec.headers[target.key] ?? null;
72
- const next = { ...spec.headers };
73
- delete next[target.key];
74
- spec.headers = Object.keys(next).length > 0 ? next : undefined;
75
- return previous;
76
- }
77
- if (spec.transport !== "stdio") {
78
- throw new Error(`Cannot remove env auth from ${spec.transport} upstream.`);
79
- }
80
- if (!spec.env || !(target.key in spec.env)) {
81
- return null;
82
- }
83
- const previous = spec.env[target.key] ?? null;
84
- const next = { ...spec.env };
85
- delete next[target.key];
86
- spec.env = Object.keys(next).length > 0 ? next : undefined;
87
- return previous;
88
- }
89
- export function listAuthBindings(spec) {
90
- if (spec.transport === "http") {
91
- return Object.entries(spec.headers ?? {}).map(([key, value]) => ({
92
- kind: "header",
93
- key,
94
- value
95
- }));
96
- }
97
- return Object.entries(spec.env ?? {}).map(([key, value]) => ({
98
- kind: "env",
99
- key,
100
- value
101
- }));
102
- }
103
- export function maybePrefixBearer(target, value, raw = false) {
104
- if (raw || target.kind !== "header" || target.key.toLowerCase() !== "authorization") {
105
- return value;
106
- }
107
- if (/^\S+\s+\S+/.test(value)) {
108
- return value;
109
- }
110
- return `Bearer ${value}`;
111
- }
112
- //# sourceMappingURL=server-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-auth.js","sourceRoot":"","sources":["../../src/core/server-auth.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { getDaemonStatus } from "./daemon.js";
2
- import { getGatewayUrl } from "./sync.js";
3
- import { listAuthBindings, secretRefName } from "./server-auth.js";
4
- import { isServerEnabled } from "../types.js";
5
- export const STATUS_CLIENTS = ["claude", "claude-desktop", "codex", "cursor", "cline", "opencode", "kiro", "vscode", "qwen"];
6
- function describeServerTarget(spec) {
7
- if (spec.transport === "http") {
8
- return spec.url;
9
- }
10
- const args = (spec.args ?? []).join(" ");
11
- const command = `${spec.command}${args ? ` ${args}` : ""}`;
12
- return spec.cwd ? `${command} (cwd: ${spec.cwd})` : command;
13
- }
14
- function deriveClientStatus(managed, configured) {
15
- if (configured) {
16
- return configured;
17
- }
18
- return managed ? "SYNCED" : "SKIPPED";
19
- }
20
- function buildClientMappings(config, managedIndex, serverName) {
21
- return STATUS_CLIENTS.map((clientId) => {
22
- const configState = config.clients[clientId];
23
- const managedClient = managedIndex.managed[clientId];
24
- const managedEntry = managedClient?.entries?.[`${serverName} (mcpx)`];
25
- const managed = Boolean(managedEntry);
26
- return {
27
- clientId,
28
- managed,
29
- status: deriveClientStatus(managed, configState?.status),
30
- configPath: managedClient?.configPath ?? configState?.configPath,
31
- message: configState?.message,
32
- lastSyncAt: managedEntry?.lastSyncedAt ?? configState?.lastSyncAt
33
- };
34
- });
35
- }
36
- function buildAuthBindings(spec) {
37
- return listAuthBindings(spec).map((binding) => ({
38
- kind: binding.kind,
39
- key: binding.key,
40
- value: binding.value,
41
- secretName: secretRefName(binding.value) ?? undefined
42
- }));
43
- }
44
- export function buildStatusReport(config, managedIndex, daemon = getDaemonStatus(config)) {
45
- const serverNames = Object.keys(config.servers).sort((left, right) => left.localeCompare(right));
46
- const servers = serverNames.map((name) => {
47
- const spec = config.servers[name];
48
- return {
49
- name,
50
- enabled: isServerEnabled(spec),
51
- transport: spec.transport,
52
- target: describeServerTarget(spec),
53
- authBindings: buildAuthBindings(spec),
54
- clients: buildClientMappings(config, managedIndex, name)
55
- };
56
- });
57
- return {
58
- gatewayUrl: getGatewayUrl(config),
59
- daemon,
60
- upstreamCount: servers.length,
61
- servers,
62
- clients: config.clients
63
- };
64
- }
65
- //# sourceMappingURL=status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/core/status.ts"],"names":[],"mappings":"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"}
package/dist/core/sync.js DELETED
@@ -1,128 +0,0 @@
1
- import { isServerEnabled } from "../types.js";
2
- import { getAdapters } from "../adapters/index.js";
3
- import { serverSpecsEqual } from "../adapters/utils/index.js";
4
- import { loadManagedIndex, saveManagedIndex } from "./managed-index.js";
5
- import { getManagedIndexPath } from "./paths.js";
6
- import { ensureGatewayToken } from "./registry.js";
7
- import { saveConfig } from "./config.js";
8
- export function getGatewayUrl(config) {
9
- return `http://127.0.0.1:${config.gateway.port}/mcp`;
10
- }
11
- function buildManagedEntries(config, gatewayUrl, localToken) {
12
- const entries = Object.entries(config.servers);
13
- return entries.map(([name, spec]) => ({
14
- name: `${name} (mcpx)`,
15
- url: `${gatewayUrl}?upstream=${encodeURIComponent(name)}`,
16
- headers: {
17
- Authorization: `Bearer ${localToken}`
18
- },
19
- enabled: isServerEnabled(spec)
20
- }));
21
- }
22
- export function syncAllClients(config, secrets, targetClients) {
23
- const adapters = getAdapters();
24
- const managedIndexPath = getManagedIndexPath();
25
- const managedIndex = loadManagedIndex(managedIndexPath);
26
- const filteredAdapters = targetClients && targetClients.length > 0
27
- ? adapters.filter((adapter) => targetClients.includes(adapter.id))
28
- : adapters;
29
- const imports = {
30
- imported: [],
31
- duplicates: [],
32
- skipped: [],
33
- conflicts: [],
34
- errors: []
35
- };
36
- const sourceEntriesToRemove = new Map();
37
- for (const adapter of filteredAdapters) {
38
- try {
39
- const scan = adapter.scanForImports(config, managedIndex);
40
- imports.skipped.push(...scan.skipped);
41
- for (const candidate of scan.candidates) {
42
- const existing = config.servers[candidate.serverName];
43
- if (!existing) {
44
- config.servers[candidate.serverName] = candidate.spec;
45
- imports.imported.push({
46
- clientId: candidate.clientId,
47
- configPath: candidate.configPath,
48
- sourceEntryName: candidate.sourceEntryName,
49
- serverName: candidate.serverName
50
- });
51
- if (!sourceEntriesToRemove.has(candidate.clientId)) {
52
- sourceEntriesToRemove.set(candidate.clientId, new Set());
53
- }
54
- sourceEntriesToRemove.get(candidate.clientId)?.add(candidate.sourceEntryName);
55
- continue;
56
- }
57
- if (serverSpecsEqual(existing, candidate.spec)) {
58
- imports.duplicates.push({
59
- clientId: candidate.clientId,
60
- configPath: candidate.configPath,
61
- sourceEntryName: candidate.sourceEntryName,
62
- serverName: candidate.serverName
63
- });
64
- if (!sourceEntriesToRemove.has(candidate.clientId)) {
65
- sourceEntriesToRemove.set(candidate.clientId, new Set());
66
- }
67
- sourceEntriesToRemove.get(candidate.clientId)?.add(candidate.sourceEntryName);
68
- continue;
69
- }
70
- imports.conflicts.push({
71
- clientId: candidate.clientId,
72
- configPath: candidate.configPath,
73
- sourceEntryName: candidate.sourceEntryName,
74
- serverName: candidate.serverName,
75
- message: `Server "${candidate.serverName}" already exists in mcpx with a different configuration.`
76
- });
77
- }
78
- }
79
- catch (error) {
80
- imports.errors.push({
81
- clientId: adapter.id,
82
- configPath: adapter.detectConfigPath() ?? undefined,
83
- message: error instanceof Error ? error.message : String(error)
84
- });
85
- }
86
- }
87
- const localToken = ensureGatewayToken(config, secrets);
88
- const gatewayUrl = getGatewayUrl(config);
89
- const managedEntries = buildManagedEntries(config, gatewayUrl, localToken);
90
- const results = [];
91
- for (const adapter of filteredAdapters) {
92
- if (!adapter.supportsHttp()) {
93
- results.push({
94
- clientId: adapter.id,
95
- status: "UNSUPPORTED_HTTP",
96
- message: "Client adapter does not support MCP over HTTP."
97
- });
98
- continue;
99
- }
100
- const result = adapter.syncGateway(config, {
101
- managedEntries,
102
- managedIndex,
103
- managedIndexPath,
104
- sourceEntriesToRemove: Array.from(sourceEntriesToRemove.get(adapter.id) ?? [])
105
- });
106
- results.push(result);
107
- }
108
- for (const result of results) {
109
- config.clients[result.clientId] = {
110
- status: result.status,
111
- configPath: result.configPath,
112
- message: result.message,
113
- lastSyncAt: new Date().toISOString()
114
- };
115
- }
116
- saveManagedIndex(managedIndex, managedIndexPath);
117
- saveConfig(config);
118
- const hasErrors = results.some((result) => result.status === "ERROR")
119
- || imports.conflicts.length > 0
120
- || imports.errors.length > 0;
121
- return {
122
- gatewayUrl,
123
- imports,
124
- results,
125
- hasErrors
126
- };
127
- }
128
- //# sourceMappingURL=sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}
@@ -1,170 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { execSync, spawn } from "node:child_process";
4
- import { getUpdatesDir, getUpdateLockPath, ensureDir } from "./paths.js";
5
- import { checkForUpdates, stageUpdate, clearStagedUpdate, getStagedUpdate, removeOldVersions } from "./update.js";
6
- function acquireLock() {
7
- const lockPath = getUpdateLockPath();
8
- try {
9
- ensureDir(path.dirname(lockPath));
10
- fs.writeFileSync(lockPath, `${process.pid}\n`, { flag: "wx" });
11
- return true;
12
- }
13
- catch {
14
- return false;
15
- }
16
- }
17
- function releaseLock() {
18
- const lockPath = getUpdateLockPath();
19
- try {
20
- fs.unlinkSync(lockPath);
21
- }
22
- catch {
23
- // Ignore cleanup failures
24
- }
25
- }
26
- function isUpdateInProgress() {
27
- const lockPath = getUpdateLockPath();
28
- if (!fs.existsSync(lockPath)) {
29
- return false;
30
- }
31
- try {
32
- const raw = fs.readFileSync(lockPath, "utf8").trim();
33
- const pid = Number(raw);
34
- if (!Number.isFinite(pid) || pid <= 0) {
35
- fs.unlinkSync(lockPath);
36
- return false;
37
- }
38
- process.kill(pid, 0);
39
- return true;
40
- }
41
- catch {
42
- fs.unlinkSync(lockPath);
43
- return false;
44
- }
45
- }
46
- async function downloadAndStageUpdate() {
47
- const updateStatus = await checkForUpdates();
48
- if (!updateStatus.latestVersion || !updateStatus.updateAvailable) {
49
- return { success: false, error: "No update available" };
50
- }
51
- const targetVersion = updateStatus.latestVersion;
52
- const updatesDir = getUpdatesDir();
53
- const versionDir = path.join(updatesDir, `v${targetVersion}`);
54
- if (fs.existsSync(versionDir)) {
55
- const existingStaged = getStagedUpdate();
56
- if (existingStaged?.version === targetVersion) {
57
- return { success: false, error: `Version ${targetVersion} already staged` };
58
- }
59
- }
60
- try {
61
- ensureDir(versionDir);
62
- execSync(`npm pack @kwonye/mcpx@${targetVersion} --json`, {
63
- cwd: versionDir,
64
- stdio: ["pipe", "pipe", "pipe"]
65
- });
66
- const tarballPath = path.join(versionDir, `kwonye-mcpx-${targetVersion}.tgz`);
67
- if (!fs.existsSync(tarballPath)) {
68
- throw new Error("Downloaded tarball not found");
69
- }
70
- execSync(`tar -xzf ${tarballPath} --strip-components=1`, {
71
- cwd: versionDir,
72
- stdio: ["pipe", "pipe", "pipe"]
73
- });
74
- execSync("npm install --production --ignore-scripts", {
75
- cwd: versionDir,
76
- stdio: ["pipe", "pipe", "pipe"]
77
- });
78
- const cliPath = path.join(versionDir, "dist", "cli.js");
79
- if (!fs.existsSync(cliPath)) {
80
- throw new Error("CLI entry point not found in downloaded package");
81
- }
82
- stageUpdate(targetVersion, cliPath);
83
- removeOldVersions(2);
84
- return { success: true, version: targetVersion };
85
- }
86
- catch (error) {
87
- try {
88
- fs.rmSync(versionDir, { recursive: true, force: true });
89
- }
90
- catch {
91
- // Ignore cleanup failures
92
- }
93
- return {
94
- success: false,
95
- error: error instanceof Error ? error.message : String(error)
96
- };
97
- }
98
- }
99
- export function startBackgroundUpdateCheck() {
100
- if (isUpdateInProgress()) {
101
- return;
102
- }
103
- if (!acquireLock()) {
104
- return;
105
- }
106
- const child = spawn(process.execPath, [
107
- process.argv[1] ?? "",
108
- "update",
109
- "--background"
110
- ], {
111
- detached: true,
112
- stdio: ["ignore", "ignore", "ignore"],
113
- env: {
114
- ...process.env,
115
- MCPX_UPDATE_CHILD: "1"
116
- }
117
- });
118
- child.unref();
119
- setTimeout(() => {
120
- releaseLock();
121
- }, 60000);
122
- }
123
- export async function runBackgroundUpdate() {
124
- try {
125
- const result = await downloadAndStageUpdate();
126
- if (result.success && result.version) {
127
- console.error(`[update-manager] Update staged: v${result.version}. Will activate on next run.`);
128
- }
129
- else if (result.error && result.error !== "No update available") {
130
- console.error(`[update-manager] Update check failed: ${result.error}`);
131
- }
132
- }
133
- catch (error) {
134
- console.error(`[update-manager] Background update failed: ${error instanceof Error ? error.message : String(error)}`);
135
- }
136
- finally {
137
- releaseLock();
138
- }
139
- }
140
- export async function performUpdate() {
141
- if (isUpdateInProgress()) {
142
- return { success: false, message: "Another update is already in progress." };
143
- }
144
- const result = await downloadAndStageUpdate();
145
- if (result.success && result.version) {
146
- return {
147
- success: true,
148
- message: `Update to v${result.version} ready! Will activate on next run.`
149
- };
150
- }
151
- if (result.error === "No update available") {
152
- return { success: true, message: "Already on latest version." };
153
- }
154
- return {
155
- success: false,
156
- message: result.error ?? "Update failed"
157
- };
158
- }
159
- export function performRollback() {
160
- const currentStaged = getStagedUpdate();
161
- if (!currentStaged) {
162
- return { success: false, message: "No staged update to roll back." };
163
- }
164
- clearStagedUpdate();
165
- return {
166
- success: true,
167
- message: `Rolled back from v${currentStaged.version}. Using installed version.`
168
- };
169
- }
170
- //# sourceMappingURL=update-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-manager.js","sourceRoot":"","sources":["../../src/core/update-manager.ts"],"names":[],"mappings":"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"}
@@ -1,111 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { execFileSync } from "node:child_process";
4
- import { APP_VERSION } from "../version.js";
5
- import { getUpdatesDir, getStagedVersionPath, ensureDir } from "./paths.js";
6
- export function compareVersions(a, b) {
7
- const partsA = a.split(".").map(Number);
8
- const partsB = b.split(".").map(Number);
9
- for (let i = 0; i < 3; i += 1) {
10
- const numA = partsA[i] ?? 0;
11
- const numB = partsB[i] ?? 0;
12
- if (numA > numB)
13
- return 1;
14
- if (numA < numB)
15
- return -1;
16
- }
17
- return 0;
18
- }
19
- export async function checkForUpdates() {
20
- try {
21
- const output = execFileSync("npm", ["view", "@kwonye/mcpx", "version"], {
22
- encoding: "utf8",
23
- stdio: ["pipe", "pipe", "pipe"]
24
- }).trim();
25
- const latestVersion = output;
26
- const updateAvailable = compareVersions(latestVersion, APP_VERSION) > 0;
27
- return {
28
- currentVersion: APP_VERSION,
29
- latestVersion,
30
- updateAvailable
31
- };
32
- }
33
- catch (error) {
34
- return {
35
- currentVersion: APP_VERSION,
36
- latestVersion: null,
37
- updateAvailable: false,
38
- error: error instanceof Error ? error.message : String(error)
39
- };
40
- }
41
- }
42
- export function getStagedUpdate() {
43
- const stagedPath = getStagedVersionPath();
44
- if (!fs.existsSync(stagedPath)) {
45
- return null;
46
- }
47
- try {
48
- const raw = fs.readFileSync(stagedPath, "utf8");
49
- const info = JSON.parse(raw);
50
- if (!info.version || !info.cliPath) {
51
- return null;
52
- }
53
- const absoluteCliPath = path.isAbsolute(info.cliPath)
54
- ? info.cliPath
55
- : path.join(getUpdatesDir(), info.cliPath);
56
- if (!fs.existsSync(absoluteCliPath)) {
57
- return null;
58
- }
59
- return {
60
- ...info,
61
- cliPath: absoluteCliPath
62
- };
63
- }
64
- catch {
65
- return null;
66
- }
67
- }
68
- export function stageUpdate(version, cliPath) {
69
- const updatesDir = getUpdatesDir();
70
- ensureDir(updatesDir);
71
- const stagedInfo = {
72
- version,
73
- cliPath: path.isAbsolute(cliPath) ? path.relative(updatesDir, cliPath) : cliPath,
74
- stagedAt: new Date().toISOString()
75
- };
76
- fs.writeFileSync(getStagedVersionPath(), JSON.stringify(stagedInfo, null, 2), "utf8");
77
- }
78
- export function clearStagedUpdate() {
79
- const stagedPath = getStagedVersionPath();
80
- if (fs.existsSync(stagedPath)) {
81
- fs.unlinkSync(stagedPath);
82
- }
83
- }
84
- export function getStagedCliPath() {
85
- const staged = getStagedUpdate();
86
- return staged?.cliPath ?? null;
87
- }
88
- export function removeOldVersions(keepCount = 2) {
89
- const updatesDir = getUpdatesDir();
90
- if (!fs.existsSync(updatesDir)) {
91
- return;
92
- }
93
- const entries = fs.readdirSync(updatesDir, { withFileTypes: true });
94
- const versionDirs = entries
95
- .filter((entry) => entry.isDirectory() && entry.name.startsWith("v"))
96
- .map((entry) => entry.name)
97
- .sort((a, b) => compareVersions(b.slice(1), a.slice(1)));
98
- if (versionDirs.length <= keepCount) {
99
- return;
100
- }
101
- for (const oldVersion of versionDirs.slice(keepCount)) {
102
- const oldPath = path.join(updatesDir, oldVersion);
103
- try {
104
- fs.rmSync(oldPath, { recursive: true, force: true });
105
- }
106
- catch {
107
- // Ignore cleanup failures
108
- }
109
- }
110
- }
111
- //# sourceMappingURL=update.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"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"}