@kwonye/mcpx 0.1.68 → 0.1.74

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 +1 -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-33pamqwn.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 -118
  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 -125
  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 -117
  95. package/dist/adapters/qwen.js.map +0 -1
  96. package/dist/adapters/utils/index.js +0 -144
  97. package/dist/adapters/utils/index.js.map +0 -1
  98. package/dist/adapters/vscode.js +0 -125
  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,47 +0,0 @@
1
- /**
2
- * Unsupported client detection.
3
- *
4
- * Detects client-native patterns that are not supported in compatibility mode
5
- * and provides helpful guidance to use `mcpx add` instead.
6
- *
7
- * Unsupported clients:
8
- * - cursor-agent (Cursor uses different MCP management)
9
- * - cline (Cline uses config-based setup)
10
- * - kiro (Kiro uses one-click/config-based setup)
11
- * - opencode (OpenCode uses generic mcpx add)
12
- */
13
- /**
14
- * Map of unsupported client names to their guidance messages.
15
- */
16
- const UNSUPPORTED_CLIENTS = {
17
- "cursor-agent": "Cursor MCP management uses a different interface. Use `mcpx add <name> <url|command>` directly to add MCP servers to mcpx.",
18
- "cline": "Cline uses config-based MCP setup. Use `mcpx add <name> <url|command>` to add servers to mcpx, then sync to Cline.",
19
- "kiro": "Kiro uses one-click/config-based MCP setup. Use `mcpx add <name> <url|command>` to add servers to mcpx, then sync to Kiro.",
20
- "opencode": "OpenCode uses generic mcpx integration. Use `mcpx add <name> <url|command>` to add servers directly."
21
- };
22
- /**
23
- * List of unsupported client prefixes to detect.
24
- */
25
- const UNSUPPORTED_PREFIXES = Object.keys(UNSUPPORTED_CLIENTS);
26
- /**
27
- * Detects if argv matches an unsupported client pattern.
28
- *
29
- * @param argv - The command-line arguments
30
- * @returns Unsupported client info if detected, null otherwise
31
- */
32
- export function detectUnsupportedClient(argv) {
33
- if (argv.length === 0) {
34
- return null;
35
- }
36
- const firstArg = argv[0];
37
- for (const prefix of UNSUPPORTED_PREFIXES) {
38
- if (firstArg === prefix || firstArg.startsWith(`${prefix}-`) || firstArg.startsWith(`${prefix}_`)) {
39
- return {
40
- client: firstArg,
41
- error: `${UNSUPPORTED_CLIENTS[prefix]}\n\nExample: mcpx add my-server https://example.com/mcp`
42
- };
43
- }
44
- }
45
- return null;
46
- }
47
- //# sourceMappingURL=unsupported.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unsupported.js","sourceRoot":"","sources":["../../src/compat/unsupported.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;GAEG;AACH,MAAM,mBAAmB,GAA2B;IAClD,cAAc,EAAE,4HAA4H;IAC5I,OAAO,EAAE,oHAAoH;IAC7H,MAAM,EAAE,4HAA4H;IACpI,UAAU,EAAE,sGAAsG;CACnH,CAAC;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,KAAK,MAAM,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAC1C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;YAClG,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,yDAAyD;aAC/F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,164 +0,0 @@
1
- /**
2
- * VS Code MCP compatibility layer.
3
- *
4
- * Supports:
5
- * - code --add-mcp '<json>' with single-server JSON
6
- * - Fields: name, type, url, command, args, env, headers
7
- *
8
- * Rejects:
9
- * - VS Code-only fields: sandbox, scope, container-specific config
10
- * - Multi-server JSON arrays
11
- * - Invalid JSON
12
- */
13
- /**
14
- * VS Code-only fields that cannot be mapped to mcpx.
15
- */
16
- const VS_CODE_ONLY_FIELDS = [
17
- "sandbox",
18
- "scope",
19
- "container",
20
- "containerId",
21
- "workspaceFolder",
22
- "lifecycle",
23
- "alwaysAllow",
24
- "disabled"
25
- ];
26
- /**
27
- * Validates VS Code server config and rejects unsupported fields.
28
- */
29
- function validateVSCodeConfig(config) {
30
- // Check for VS Code-only fields
31
- for (const field of VS_CODE_ONLY_FIELDS) {
32
- if (config[field] !== undefined) {
33
- return `VS Code field "${field}" is not supported. Use global \`mcpx add\` for advanced configuration.`;
34
- }
35
- }
36
- // Validate required fields
37
- if (!config.name) {
38
- return "VS Code config must include 'name' field.";
39
- }
40
- // Must have either url (HTTP) or command (stdio)
41
- if (!config.url && !config.command) {
42
- return "VS Code config must include either 'url' (HTTP) or 'command' (stdio) field.";
43
- }
44
- // Cannot have both url and command
45
- if (config.url && config.command) {
46
- return "VS Code config cannot have both 'url' and 'command'. Specify one transport type.";
47
- }
48
- // Validate type field if present
49
- if (config.type !== undefined && config.type !== "http" && config.type !== "stdio") {
50
- return `Invalid 'type' value: ${config.type}. Must be 'http' or 'stdio'.`;
51
- }
52
- // Validate env is a simple string map
53
- if (config.env !== undefined) {
54
- if (typeof config.env !== "object" || config.env === null || Array.isArray(config.env)) {
55
- return "'env' must be a key-value object.";
56
- }
57
- for (const [key, value] of Object.entries(config.env)) {
58
- if (typeof value !== "string") {
59
- return `'env["${key}"]' must be a string value.`;
60
- }
61
- }
62
- }
63
- // Validate headers is a simple string map
64
- if (config.headers !== undefined) {
65
- if (typeof config.headers !== "object" || config.headers === null || Array.isArray(config.headers)) {
66
- return "'headers' must be a key-value object.";
67
- }
68
- for (const [key, value] of Object.entries(config.headers)) {
69
- if (typeof value !== "string") {
70
- return `'headers["${key}"]' must be a string value.`;
71
- }
72
- }
73
- }
74
- // Validate args is an array of strings
75
- if (config.args !== undefined) {
76
- if (!Array.isArray(config.args)) {
77
- return "'args' must be an array.";
78
- }
79
- for (let i = 0; i < config.args.length; i++) {
80
- if (typeof config.args[i] !== "string") {
81
- return `'args[${i}]' must be a string.`;
82
- }
83
- }
84
- }
85
- return null;
86
- }
87
- /**
88
- * Normalizes VS Code JSON config to canonical mcpx add format.
89
- *
90
- * VS Code HTTP: { name, url, headers? }
91
- * -> mcpx add <name> <url> --header "Key=Value"...
92
- *
93
- * VS Code stdio: { name, command, args?, env? }
94
- * -> mcpx add <name> <command> [args...] --env KEY=VALUE...
95
- */
96
- function normalizeVSCodeConfig(config) {
97
- const normalized = [config.name];
98
- if (config.url) {
99
- // HTTP mode
100
- normalized.push(config.url);
101
- // Add headers
102
- if (config.headers) {
103
- for (const [key, value] of Object.entries(config.headers)) {
104
- normalized.push("--header", `${key}=${value}`);
105
- }
106
- }
107
- }
108
- else if (config.command) {
109
- // stdio mode
110
- normalized.push(config.command);
111
- // Add args
112
- if (config.args && config.args.length > 0) {
113
- normalized.push(...config.args);
114
- }
115
- // Add env vars
116
- if (config.env) {
117
- for (const [key, value] of Object.entries(config.env)) {
118
- normalized.push("--env", `${key}=${value}`);
119
- }
120
- }
121
- }
122
- return normalized;
123
- }
124
- /**
125
- * Parses VS Code --add-mcp JSON payload and normalizes to mcpx add format.
126
- */
127
- export function parseVSCodeArgs(jsonPayload) {
128
- if (!jsonPayload) {
129
- return {
130
- normalizedArgs: [],
131
- error: "Usage: mcpx code --add-mcp '<json>'"
132
- };
133
- }
134
- // Parse JSON
135
- let config;
136
- try {
137
- config = JSON.parse(jsonPayload);
138
- }
139
- catch (parseError) {
140
- return {
141
- normalizedArgs: [],
142
- error: `Invalid JSON: ${parseError.message}`
143
- };
144
- }
145
- // Reject arrays - we only support single-server config
146
- if (Array.isArray(config)) {
147
- return {
148
- normalizedArgs: [],
149
- error: "Array of servers not supported. Use `mcpx add` for each server individually."
150
- };
151
- }
152
- // Validate config
153
- const validationError = validateVSCodeConfig(config);
154
- if (validationError) {
155
- return {
156
- normalizedArgs: [],
157
- error: validationError
158
- };
159
- }
160
- // Normalize to mcpx add format
161
- const normalized = normalizeVSCodeConfig(config);
162
- return { normalizedArgs: normalized };
163
- }
164
- //# sourceMappingURL=vscode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/compat/vscode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsBH;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,SAAS;IACT,OAAO;IACP,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,UAAU;CACX,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAA0B;IACtD,gCAAgC;IAChC,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,kBAAkB,KAAK,yEAAyE,CAAC;QAC1G,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,2CAA2C,CAAC;IACrD,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,6EAA6E,CAAC;IACvF,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,kFAAkF,CAAC;IAC5F,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACnF,OAAO,yBAAyB,MAAM,CAAC,IAAI,8BAA8B,CAAC;IAC5E,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvF,OAAO,mCAAmC,CAAC;QAC7C,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,SAAS,GAAG,6BAA6B,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACnG,OAAO,uCAAuC,CAAC;QACjD,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,aAAa,GAAG,6BAA6B,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,0BAA0B,CAAC;QACpC,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,SAAS,CAAC,sBAAsB,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAAC,MAA0B;IACvD,MAAM,UAAU,GAAa,CAAC,MAAM,CAAC,IAAK,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,YAAY;QACZ,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE5B,cAAc;QACd,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,aAAa;QACb,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhC,WAAW;QACX,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,eAAe;QACf,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAA+B;IAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,qCAAqC;SAC7C,CAAC;IACJ,CAAC;IAED,aAAa;IACb,IAAI,MAAiD,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,OAAO;YACL,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,iBAAkB,UAAoB,CAAC,OAAO,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,8EAA8E;SACtF,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO;YACL,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,eAAe;SACvB,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC"}
@@ -1,54 +0,0 @@
1
- const JSON_RPC_VERSION = "2.0";
2
- const DEFAULT_AUTH_PROBE_TIMEOUT_MS = 8000;
3
- function resolveHeaders(spec, secrets) {
4
- const headers = {
5
- "content-type": "application/json",
6
- accept: "application/json, text/event-stream"
7
- };
8
- for (const [key, value] of Object.entries(spec.headers ?? {})) {
9
- headers[key] = secrets.resolveMaybeSecret(value);
10
- }
11
- return headers;
12
- }
13
- export async function probeHttpAuthRequirement(spec, secrets, timeoutMs = DEFAULT_AUTH_PROBE_TIMEOUT_MS) {
14
- const timeoutController = new AbortController();
15
- const timeoutHandle = setTimeout(() => timeoutController.abort(), timeoutMs);
16
- try {
17
- const headers = resolveHeaders(spec, secrets);
18
- const response = await fetch(spec.url, {
19
- method: "POST",
20
- headers,
21
- body: JSON.stringify({
22
- jsonrpc: JSON_RPC_VERSION,
23
- id: "mcpx-auth-probe",
24
- method: "tools/list",
25
- params: {}
26
- }),
27
- signal: timeoutController.signal
28
- });
29
- if (response.status === 401 || response.status === 403) {
30
- return {
31
- authRequired: true,
32
- status: response.status,
33
- wwwAuthenticate: response.headers.get("www-authenticate") ?? undefined
34
- };
35
- }
36
- return {
37
- authRequired: false,
38
- status: response.status
39
- };
40
- }
41
- catch (error) {
42
- const isAbort = error.name === "AbortError";
43
- return {
44
- authRequired: false,
45
- error: isAbort
46
- ? `Auth probe timed out after ${timeoutMs}ms.`
47
- : error.message
48
- };
49
- }
50
- finally {
51
- clearTimeout(timeoutHandle);
52
- }
53
- }
54
- //# sourceMappingURL=auth-probe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-probe.js","sourceRoot":"","sources":["../../src/core/auth-probe.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAS3C,SAAS,cAAc,CAAC,IAAoB,EAAE,OAAuB;IACnE,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,qCAAqC;KAC9C,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAoB,EACpB,OAAuB,EACvB,SAAS,GAAG,6BAA6B;IAEzC,MAAM,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,gBAAgB;gBACzB,EAAE,EAAE,iBAAiB;gBACrB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,EAAE;aACX,CAAC;YACF,MAAM,EAAE,iBAAiB,CAAC,MAAM;SACjC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,SAAS;aACvE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAI,KAA2B,CAAC,IAAI,KAAK,YAAY,CAAC;QACnE,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,OAAO;gBACZ,CAAC,CAAC,8BAA8B,SAAS,KAAK;gBAC9C,CAAC,CAAE,KAAe,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -1,76 +0,0 @@
1
- import { z } from "zod";
2
- import { normalizeServerSpecEnabled } from "../types.js";
3
- import { getConfigPath } from "./paths.js";
4
- import { readJsonFile, writeJsonAtomic } from "../util/fs.js";
5
- const clientStateSchema = z.object({
6
- status: z.enum(["SYNCED", "UNSUPPORTED_HTTP", "ERROR", "SKIPPED"]),
7
- lastSyncAt: z.string().optional(),
8
- message: z.string().optional(),
9
- configPath: z.string().optional()
10
- });
11
- const httpServerSchema = z.object({
12
- transport: z.literal("http"),
13
- url: z.url(),
14
- headers: z.record(z.string(), z.string()).optional(),
15
- enabled: z.boolean().default(true)
16
- });
17
- const stdioServerSchema = z.object({
18
- transport: z.literal("stdio"),
19
- command: z.string().min(1),
20
- args: z.array(z.string()).optional(),
21
- env: z.record(z.string(), z.string()).optional(),
22
- cwd: z.string().min(1).optional(),
23
- enabled: z.boolean().default(true)
24
- });
25
- const serverSchema = z.discriminatedUnion("transport", [httpServerSchema, stdioServerSchema]);
26
- const configSchema = z.object({
27
- schemaVersion: z.literal(1).default(1),
28
- gateway: z.object({
29
- port: z.number().int().min(1).max(65535).default(37373),
30
- tokenRef: z.string().default("secret://local_gateway_token"),
31
- autoStart: z.boolean().default(true)
32
- }).default({
33
- port: 37373,
34
- tokenRef: "secret://local_gateway_token",
35
- autoStart: true
36
- }),
37
- servers: z.record(z.string(), serverSchema).default({}),
38
- clients: z.record(z.string(), clientStateSchema).default({})
39
- });
40
- export function defaultConfig() {
41
- return {
42
- schemaVersion: 1,
43
- gateway: {
44
- port: 37373,
45
- tokenRef: "secret://local_gateway_token",
46
- autoStart: true
47
- },
48
- servers: {},
49
- clients: {}
50
- };
51
- }
52
- export function loadConfig(configPath = getConfigPath()) {
53
- const raw = readJsonFile(configPath, defaultConfig());
54
- const parsed = configSchema.safeParse(raw);
55
- if (!parsed.success) {
56
- return defaultConfig();
57
- }
58
- const clientEntries = {};
59
- for (const [key, value] of Object.entries(parsed.data.clients)) {
60
- if (["claude", "claude-desktop", "codex", "cursor", "cline", "opencode", "kiro", "vscode", "qwen"].includes(key)) {
61
- clientEntries[key] = value;
62
- }
63
- }
64
- const servers = Object.fromEntries(Object.entries(parsed.data.servers).map(([name, spec]) => [name, normalizeServerSpecEnabled(spec)]));
65
- return {
66
- schemaVersion: 1,
67
- gateway: parsed.data.gateway,
68
- servers,
69
- clients: clientEntries
70
- };
71
- }
72
- export function saveConfig(config, configPath = getConfigPath()) {
73
- config.servers = Object.fromEntries(Object.entries(config.servers).map(([name, spec]) => [name, normalizeServerSpecEnabled(spec)]));
74
- writeJsonAtomic(configPath, config);
75
- }
76
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -1,176 +0,0 @@
1
- import fs from "node:fs";
2
- import net from "node:net";
3
- import { spawn } from "node:child_process";
4
- import { getLogPath, getPidPath, ensureParentDir } from "./paths.js";
5
- import { createGatewayServer } from "../gateway/server.js";
6
- import { ensureGatewayToken, getGatewayTokenSecretName } from "./registry.js";
7
- import { saveConfig } from "./config.js";
8
- import { startBackgroundUpdateCheck } from "./update-manager.js";
9
- function readPidFromFile(pidPath = getPidPath()) {
10
- if (!fs.existsSync(pidPath)) {
11
- return null;
12
- }
13
- const raw = fs.readFileSync(pidPath, "utf8").trim();
14
- if (!raw) {
15
- return null;
16
- }
17
- const pid = Number(raw);
18
- if (!Number.isFinite(pid) || pid <= 0) {
19
- return null;
20
- }
21
- return pid;
22
- }
23
- function processExists(pid) {
24
- try {
25
- process.kill(pid, 0);
26
- return true;
27
- }
28
- catch {
29
- return false;
30
- }
31
- }
32
- async function isPortAvailable(port) {
33
- return new Promise((resolve) => {
34
- const tester = net.createServer();
35
- tester.once("error", () => {
36
- resolve(false);
37
- });
38
- tester.once("listening", () => {
39
- tester.close(() => resolve(true));
40
- });
41
- tester.listen(port, "127.0.0.1");
42
- });
43
- }
44
- export async function resolveGatewayPort(config) {
45
- if (await isPortAvailable(config.gateway.port)) {
46
- return config.gateway.port;
47
- }
48
- for (let offset = 1; offset <= 20; offset += 1) {
49
- const candidate = config.gateway.port + offset;
50
- if (candidate > 65535) {
51
- break;
52
- }
53
- if (await isPortAvailable(candidate)) {
54
- config.gateway.port = candidate;
55
- saveConfig(config);
56
- return candidate;
57
- }
58
- }
59
- throw new Error(`No available local port found near ${config.gateway.port}.`);
60
- }
61
- export function getDaemonStatus(config) {
62
- const pidPath = getPidPath();
63
- const pid = readPidFromFile(pidPath);
64
- if (!pid) {
65
- return {
66
- running: false,
67
- pidFile: pidPath,
68
- logFile: getLogPath(),
69
- port: config.gateway.port
70
- };
71
- }
72
- return {
73
- running: processExists(pid),
74
- pid,
75
- pidFile: pidPath,
76
- logFile: getLogPath(),
77
- port: config.gateway.port
78
- };
79
- }
80
- export async function startDaemon(config, cliPath, secrets) {
81
- const existingStatus = getDaemonStatus(config);
82
- if (existingStatus.running && existingStatus.pid) {
83
- return {
84
- started: false,
85
- pid: existingStatus.pid,
86
- port: config.gateway.port,
87
- message: "mcpx daemon already running."
88
- };
89
- }
90
- const port = await resolveGatewayPort(config);
91
- ensureGatewayToken(config, secrets);
92
- const pidPath = getPidPath();
93
- const logPath = getLogPath();
94
- ensureParentDir(pidPath);
95
- ensureParentDir(logPath);
96
- const logFd = fs.openSync(logPath, "a", 0o600);
97
- const child = spawn(process.execPath, [cliPath, "daemon", "run", "--port", String(port)], {
98
- detached: true,
99
- stdio: ["ignore", logFd, logFd],
100
- env: {
101
- ...process.env,
102
- MCPX_DAEMON_CHILD: "1"
103
- }
104
- });
105
- child.unref();
106
- fs.writeFileSync(pidPath, `${child.pid}\n`, { mode: 0o600 });
107
- startBackgroundUpdateCheck();
108
- return {
109
- started: true,
110
- pid: child.pid ?? -1,
111
- port,
112
- message: "mcpx daemon started."
113
- };
114
- }
115
- export function stopDaemon() {
116
- const pidPath = getPidPath();
117
- const pid = readPidFromFile(pidPath);
118
- if (!pid) {
119
- return {
120
- stopped: false,
121
- message: "mcpx daemon is not running."
122
- };
123
- }
124
- try {
125
- process.kill(pid, "SIGTERM");
126
- }
127
- catch {
128
- // Ignore already dead process.
129
- }
130
- try {
131
- fs.unlinkSync(pidPath);
132
- }
133
- catch {
134
- // Ignore cleanup failure.
135
- }
136
- return {
137
- stopped: true,
138
- message: `Stopped mcpx daemon (pid ${pid}).`
139
- };
140
- }
141
- export async function restartDaemon(config, cliPath, secrets) {
142
- stopDaemon();
143
- return startDaemon(config, cliPath, secrets);
144
- }
145
- export function readDaemonLogs(maxLines = 200) {
146
- const logPath = getLogPath();
147
- if (!fs.existsSync(logPath)) {
148
- return "";
149
- }
150
- const lines = fs.readFileSync(logPath, "utf8").split("\n");
151
- return lines.slice(Math.max(lines.length - maxLines, 0)).join("\n");
152
- }
153
- export function runDaemonForeground(config, port, secrets) {
154
- return new Promise((resolve, reject) => {
155
- const tokenName = getGatewayTokenSecretName(config);
156
- const token = secrets.getSecret(tokenName);
157
- if (!token) {
158
- reject(new Error(`Local gateway token not found: ${tokenName}`));
159
- return;
160
- }
161
- const server = createGatewayServer({
162
- port,
163
- expectedToken: token,
164
- secrets
165
- });
166
- const cleanup = () => {
167
- server.close(() => resolve());
168
- };
169
- process.on("SIGINT", cleanup);
170
- process.on("SIGTERM", cleanup);
171
- server.on("error", (error) => {
172
- reject(error);
173
- });
174
- });
175
- }
176
- //# sourceMappingURL=daemon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/core/daemon.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpE,SAAS;AACT,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAGrB,OAAO;AACP,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1D,+BAA+B;AAC/B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAExF,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,cAAc;AACd,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhE,aAAa;AACb,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhE,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErH,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,22 +0,0 @@
1
- import { getManagedIndexPath } from "./paths.js";
2
- import { readJsonFile, writeJsonAtomic } from "../util/fs.js";
3
- export function defaultManagedIndex() {
4
- return {
5
- schemaVersion: 1,
6
- managed: {}
7
- };
8
- }
9
- export function loadManagedIndex(filePath = getManagedIndexPath()) {
10
- const raw = readJsonFile(filePath, defaultManagedIndex());
11
- if (!raw || typeof raw !== "object") {
12
- return defaultManagedIndex();
13
- }
14
- if (raw.schemaVersion !== 1) {
15
- return defaultManagedIndex();
16
- }
17
- return raw;
18
- }
19
- export function saveManagedIndex(index, filePath = getManagedIndexPath()) {
20
- writeJsonAtomic(filePath, index);
21
- }
22
- //# sourceMappingURL=managed-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-index.js","sourceRoot":"","sources":["../../src/core/managed-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAQ,GAAG,mBAAmB,EAAE;IAC/D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE1D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,IAAK,GAAkC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,GAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAmB,EAAE,QAAQ,GAAG,mBAAmB,EAAE;IACpF,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC"}
@@ -1,55 +0,0 @@
1
- import os from "node:os";
2
- import path from "node:path";
3
- import fs from "node:fs";
4
- function envOrDefault(value, fallback) {
5
- if (value && value.trim().length > 0) {
6
- return value;
7
- }
8
- return fallback;
9
- }
10
- export function getConfigRoot() {
11
- return envOrDefault(process.env.MCPX_CONFIG_HOME ?? process.env.XDG_CONFIG_HOME, path.join(os.homedir(), ".config"));
12
- }
13
- export function getDataRoot() {
14
- return envOrDefault(process.env.MCPX_DATA_HOME ?? process.env.XDG_DATA_HOME, path.join(os.homedir(), ".local", "share"));
15
- }
16
- export function getStateRoot() {
17
- return envOrDefault(process.env.MCPX_STATE_HOME ?? process.env.XDG_STATE_HOME, path.join(os.homedir(), ".local", "state"));
18
- }
19
- export function getConfigPath() {
20
- return path.join(getConfigRoot(), "mcpx", "config.json");
21
- }
22
- export function getManagedIndexPath() {
23
- return path.join(getDataRoot(), "mcpx", "managed-index.json");
24
- }
25
- export function getSecretNamesPath() {
26
- return path.join(getDataRoot(), "mcpx", "secret-names.json");
27
- }
28
- export function getRuntimeDir() {
29
- return path.join(getStateRoot(), "mcpx", "runtime");
30
- }
31
- export function getLogDir() {
32
- return path.join(getStateRoot(), "mcpx", "logs");
33
- }
34
- export function getPidPath() {
35
- return path.join(getRuntimeDir(), "daemon.pid");
36
- }
37
- export function getLogPath() {
38
- return path.join(getLogDir(), "daemon.log");
39
- }
40
- export function getUpdatesDir() {
41
- return path.join(getDataRoot(), "mcpx", "updates");
42
- }
43
- export function getStagedVersionPath() {
44
- return path.join(getUpdatesDir(), "staged-version.json");
45
- }
46
- export function getUpdateLockPath() {
47
- return path.join(getUpdatesDir(), ".update.lock");
48
- }
49
- export function ensureDir(dirPath) {
50
- fs.mkdirSync(dirPath, { recursive: true });
51
- }
52
- export function ensureParentDir(filePath) {
53
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
54
- }
55
- //# sourceMappingURL=paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"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"}