@agents-dev/cli 0.7.7

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 (152) hide show
  1. package/AGENTS.md +400 -0
  2. package/CHANGELOG.md +297 -0
  3. package/CONTRIBUTING.md +164 -0
  4. package/LICENSE +21 -0
  5. package/README.md +117 -0
  6. package/bin/agents +24 -0
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +282 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/connect.d.ts +7 -0
  11. package/dist/commands/connect.js +48 -0
  12. package/dist/commands/connect.js.map +1 -0
  13. package/dist/commands/disconnect.d.ts +7 -0
  14. package/dist/commands/disconnect.js +47 -0
  15. package/dist/commands/disconnect.js.map +1 -0
  16. package/dist/commands/doctor.d.ts +6 -0
  17. package/dist/commands/doctor.js +430 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/init.d.ts +5 -0
  20. package/dist/commands/init.js +24 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/mcp-add.d.ts +20 -0
  23. package/dist/commands/mcp-add.js +250 -0
  24. package/dist/commands/mcp-add.js.map +1 -0
  25. package/dist/commands/mcp-import.d.ts +13 -0
  26. package/dist/commands/mcp-import.js +207 -0
  27. package/dist/commands/mcp-import.js.map +1 -0
  28. package/dist/commands/mcp-list.d.ts +5 -0
  29. package/dist/commands/mcp-list.js +34 -0
  30. package/dist/commands/mcp-list.js.map +1 -0
  31. package/dist/commands/mcp-remove.d.ts +7 -0
  32. package/dist/commands/mcp-remove.js +34 -0
  33. package/dist/commands/mcp-remove.js.map +1 -0
  34. package/dist/commands/mcp-test.d.ts +8 -0
  35. package/dist/commands/mcp-test.js +402 -0
  36. package/dist/commands/mcp-test.js.map +1 -0
  37. package/dist/commands/reset.d.ts +6 -0
  38. package/dist/commands/reset.js +76 -0
  39. package/dist/commands/reset.js.map +1 -0
  40. package/dist/commands/start.d.ts +6 -0
  41. package/dist/commands/start.js +292 -0
  42. package/dist/commands/start.js.map +1 -0
  43. package/dist/commands/status.d.ts +7 -0
  44. package/dist/commands/status.js +278 -0
  45. package/dist/commands/status.js.map +1 -0
  46. package/dist/commands/sync.d.ts +6 -0
  47. package/dist/commands/sync.js +22 -0
  48. package/dist/commands/sync.js.map +1 -0
  49. package/dist/commands/watch.d.ts +7 -0
  50. package/dist/commands/watch.js +117 -0
  51. package/dist/commands/watch.js.map +1 -0
  52. package/dist/core/claudeCli.d.ts +7 -0
  53. package/dist/core/claudeCli.js +35 -0
  54. package/dist/core/claudeCli.js.map +1 -0
  55. package/dist/core/config.d.ts +17 -0
  56. package/dist/core/config.js +121 -0
  57. package/dist/core/config.js.map +1 -0
  58. package/dist/core/cursorCli.d.ts +9 -0
  59. package/dist/core/cursorCli.js +60 -0
  60. package/dist/core/cursorCli.js.map +1 -0
  61. package/dist/core/fs.d.ts +11 -0
  62. package/dist/core/fs.js +76 -0
  63. package/dist/core/fs.js.map +1 -0
  64. package/dist/core/gitignore.d.ts +3 -0
  65. package/dist/core/gitignore.js +54 -0
  66. package/dist/core/gitignore.js.map +1 -0
  67. package/dist/core/mcp.d.ts +8 -0
  68. package/dist/core/mcp.js +134 -0
  69. package/dist/core/mcp.js.map +1 -0
  70. package/dist/core/mcpCrud.d.ts +34 -0
  71. package/dist/core/mcpCrud.js +105 -0
  72. package/dist/core/mcpCrud.js.map +1 -0
  73. package/dist/core/mcpImport.d.ts +14 -0
  74. package/dist/core/mcpImport.js +507 -0
  75. package/dist/core/mcpImport.js.map +1 -0
  76. package/dist/core/mcpSecrets.d.ts +27 -0
  77. package/dist/core/mcpSecrets.js +144 -0
  78. package/dist/core/mcpSecrets.js.map +1 -0
  79. package/dist/core/mcpValidation.d.ts +19 -0
  80. package/dist/core/mcpValidation.js +78 -0
  81. package/dist/core/mcpValidation.js.map +1 -0
  82. package/dist/core/paths.d.ts +37 -0
  83. package/dist/core/paths.js +43 -0
  84. package/dist/core/paths.js.map +1 -0
  85. package/dist/core/project.d.ts +16 -0
  86. package/dist/core/project.js +34 -0
  87. package/dist/core/project.js.map +1 -0
  88. package/dist/core/renderers.d.ts +14 -0
  89. package/dist/core/renderers.js +113 -0
  90. package/dist/core/renderers.js.map +1 -0
  91. package/dist/core/shell.d.ts +8 -0
  92. package/dist/core/shell.js +21 -0
  93. package/dist/core/shell.js.map +1 -0
  94. package/dist/core/shellWords.d.ts +1 -0
  95. package/dist/core/shellWords.js +84 -0
  96. package/dist/core/shellWords.js.map +1 -0
  97. package/dist/core/skills.d.ts +8 -0
  98. package/dist/core/skills.js +150 -0
  99. package/dist/core/skills.js.map +1 -0
  100. package/dist/core/skillsValidation.d.ts +1 -0
  101. package/dist/core/skillsValidation.js +68 -0
  102. package/dist/core/skillsValidation.js.map +1 -0
  103. package/dist/core/sync.d.ts +2 -0
  104. package/dist/core/sync.js +427 -0
  105. package/dist/core/sync.js.map +1 -0
  106. package/dist/core/syncLock.d.ts +1 -0
  107. package/dist/core/syncLock.js +84 -0
  108. package/dist/core/syncLock.js.map +1 -0
  109. package/dist/core/templates.d.ts +1 -0
  110. package/dist/core/templates.js +38 -0
  111. package/dist/core/templates.js.map +1 -0
  112. package/dist/core/trust.d.ts +7 -0
  113. package/dist/core/trust.js +51 -0
  114. package/dist/core/trust.js.map +1 -0
  115. package/dist/core/vscodeSettings.d.ts +17 -0
  116. package/dist/core/vscodeSettings.js +212 -0
  117. package/dist/core/vscodeSettings.js.map +1 -0
  118. package/dist/core/warnings.d.ts +2 -0
  119. package/dist/core/warnings.js +26 -0
  120. package/dist/core/warnings.js.map +1 -0
  121. package/dist/integrations/antigravity.d.ts +9 -0
  122. package/dist/integrations/antigravity.js +13 -0
  123. package/dist/integrations/antigravity.js.map +1 -0
  124. package/dist/integrations/claude.d.ts +1 -0
  125. package/dist/integrations/claude.js +4 -0
  126. package/dist/integrations/claude.js.map +1 -0
  127. package/dist/integrations/codex.d.ts +5 -0
  128. package/dist/integrations/codex.js +5 -0
  129. package/dist/integrations/codex.js.map +1 -0
  130. package/dist/integrations/copilotVscode.d.ts +7 -0
  131. package/dist/integrations/copilotVscode.js +9 -0
  132. package/dist/integrations/copilotVscode.js.map +1 -0
  133. package/dist/integrations/cursor.d.ts +7 -0
  134. package/dist/integrations/cursor.js +9 -0
  135. package/dist/integrations/cursor.js.map +1 -0
  136. package/dist/integrations/gemini.d.ts +12 -0
  137. package/dist/integrations/gemini.js +15 -0
  138. package/dist/integrations/gemini.js.map +1 -0
  139. package/dist/integrations/registry.d.ts +9 -0
  140. package/dist/integrations/registry.js +21 -0
  141. package/dist/integrations/registry.js.map +1 -0
  142. package/dist/types.d.ts +85 -0
  143. package/dist/types.js +2 -0
  144. package/dist/types.js.map +1 -0
  145. package/docs/EXAMPLES.md +211 -0
  146. package/docs/README.md +26 -0
  147. package/docs/agents-system.md +178 -0
  148. package/package.json +77 -0
  149. package/templates/agents/AGENTS.md +23 -0
  150. package/templates/agents/README.md +25 -0
  151. package/templates/agents/skills/README.md +27 -0
  152. package/templates/agents/skills/skill-guide/SKILL.md +29 -0
@@ -0,0 +1,507 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { parse } from 'jsonc-parser';
3
+ import { parseTargetOptions, validateEnvKey, validateHeaderKey, validateTransport } from './mcpValidation.js';
4
+ const IMPORT_FETCH_TIMEOUT_MS = 12_000;
5
+ const IMPORT_FETCH_RETRIES = 1;
6
+ const SERVER_FIELD_HINTS = new Set([
7
+ 'transport',
8
+ 'type',
9
+ 'command',
10
+ 'args',
11
+ 'arguments',
12
+ 'url',
13
+ 'headers',
14
+ 'env',
15
+ 'cwd',
16
+ 'requiredEnv',
17
+ 'targets',
18
+ 'enabled',
19
+ 'description',
20
+ 'label'
21
+ ]);
22
+ export async function readImportInput(args) {
23
+ const provided = [args.filePath, args.jsonText, args.url].filter(Boolean).length;
24
+ if (provided > 1) {
25
+ throw new Error('Use only one input source: --file, --json, or --url.');
26
+ }
27
+ if (args.filePath) {
28
+ if (isHttpUrl(args.filePath)) {
29
+ throw new Error('Option --file expects a local file path. For web pages use --url.');
30
+ }
31
+ return readFile(args.filePath, 'utf8');
32
+ }
33
+ if (args.jsonText) {
34
+ return args.jsonText;
35
+ }
36
+ if (args.url) {
37
+ return readImportInputFromUrl(args.url);
38
+ }
39
+ if (process.stdin.isTTY) {
40
+ throw new Error('No import payload provided. Use --file, --json, --url, or pipe JSON/JSONC via stdin.');
41
+ }
42
+ return readStdinAll();
43
+ }
44
+ export function parseImportedServers(rawInput, explicitName) {
45
+ const raw = parseJsonc(rawInput);
46
+ const serversFromContainer = extractServerContainer(raw);
47
+ let imported;
48
+ if (serversFromContainer) {
49
+ imported = Object.entries(serversFromContainer).map(([name, value]) => ({
50
+ name,
51
+ server: normalizeServerDefinition(value, name)
52
+ }));
53
+ }
54
+ else if (isObject(raw) && looksLikeServerDefinition(raw)) {
55
+ const nameFromPayload = typeof raw.name === 'string' ? raw.name : undefined;
56
+ const resolvedName = explicitName ?? nameFromPayload;
57
+ if (!resolvedName) {
58
+ throw new Error('Single-server import requires --name when payload does not include "name".');
59
+ }
60
+ imported = [
61
+ {
62
+ name: resolvedName,
63
+ server: normalizeServerDefinition(raw, resolvedName)
64
+ }
65
+ ];
66
+ }
67
+ else {
68
+ throw new Error('Unsupported import shape. Allowed: {mcp:{servers}}, {mcpServers}, {servers}, {<name>:{...server...}}, or single server object.');
69
+ }
70
+ if (imported.length === 0) {
71
+ throw new Error('Import payload contains no MCP servers.');
72
+ }
73
+ if (explicitName) {
74
+ if (imported.length !== 1) {
75
+ throw new Error('--name can only be used when importing exactly one server.');
76
+ }
77
+ imported[0].name = explicitName;
78
+ }
79
+ return imported;
80
+ }
81
+ function normalizeServerDefinition(value, serverName) {
82
+ if (!isObject(value)) {
83
+ throw new Error(`Server "${serverName}" must be a JSON object.`);
84
+ }
85
+ const commandOrArray = value.command;
86
+ const args = readStringArray(value.args ?? value.arguments, `${serverName}.args`);
87
+ let command;
88
+ let normalizedArgs = args;
89
+ if (typeof commandOrArray === 'string') {
90
+ command = commandOrArray;
91
+ }
92
+ else if (Array.isArray(commandOrArray)) {
93
+ const commandArray = readStringArray(commandOrArray, `${serverName}.command`) ?? [];
94
+ if (commandArray.length === 0) {
95
+ throw new Error(`Server "${serverName}" command array cannot be empty.`);
96
+ }
97
+ command = commandArray[0];
98
+ normalizedArgs = normalizedArgs ?? commandArray.slice(1);
99
+ }
100
+ else if (commandOrArray !== undefined) {
101
+ throw new Error(`Server "${serverName}" command must be a string or string array.`);
102
+ }
103
+ const url = readOptionalString(value.url, `${serverName}.url`);
104
+ const transportRaw = readOptionalString(value.transport, `${serverName}.transport`)
105
+ ?? readOptionalString(value.type, `${serverName}.type`)
106
+ ?? inferTransport(command, url);
107
+ const transport = validateTransport(transportRaw);
108
+ const out = {
109
+ transport
110
+ };
111
+ if (typeof value.label === 'string')
112
+ out.label = value.label;
113
+ if (typeof value.description === 'string')
114
+ out.description = value.description;
115
+ if (typeof value.enabled === 'boolean')
116
+ out.enabled = value.enabled;
117
+ if (typeof value.cwd === 'string')
118
+ out.cwd = value.cwd;
119
+ const targetsRaw = value.targets;
120
+ if (Array.isArray(targetsRaw)) {
121
+ out.targets = parseTargetOptions(targetsRaw.map((entry) => String(entry)));
122
+ }
123
+ else if (typeof targetsRaw === 'string') {
124
+ out.targets = parseTargetOptions([targetsRaw]);
125
+ }
126
+ else if (targetsRaw !== undefined) {
127
+ throw new Error(`Server "${serverName}" targets must be an array or comma-separated string.`);
128
+ }
129
+ const requiredEnv = readStringArray(value.requiredEnv, `${serverName}.requiredEnv`);
130
+ if (requiredEnv && requiredEnv.length > 0) {
131
+ out.requiredEnv = requiredEnv;
132
+ }
133
+ if (transport === 'stdio') {
134
+ if (!command) {
135
+ throw new Error(`Server "${serverName}" must include command for stdio transport.`);
136
+ }
137
+ out.command = command;
138
+ if (normalizedArgs && normalizedArgs.length > 0)
139
+ out.args = normalizedArgs;
140
+ }
141
+ else {
142
+ if (!url) {
143
+ throw new Error(`Server "${serverName}" must include url for ${transport} transport.`);
144
+ }
145
+ out.url = url;
146
+ }
147
+ const env = readStringMap(value.env, `${serverName}.env`, (key) => validateEnvKey(key, 'environment variable'));
148
+ if (Object.keys(env).length > 0)
149
+ out.env = env;
150
+ const headers = readStringMap(value.headers, `${serverName}.headers`, (key) => validateHeaderKey(key, 'header'));
151
+ if (Object.keys(headers).length > 0)
152
+ out.headers = headers;
153
+ return out;
154
+ }
155
+ function inferTransport(command, url) {
156
+ if (command)
157
+ return 'stdio';
158
+ if (url)
159
+ return 'http';
160
+ throw new Error('Cannot infer transport: provide transport/type, command, or url.');
161
+ }
162
+ function extractServerContainer(value) {
163
+ if (!isObject(value))
164
+ return null;
165
+ if (isObject(value.mcp) && isObject(value.mcp.servers)) {
166
+ return value.mcp.servers;
167
+ }
168
+ if (isObject(value.mcpServers)) {
169
+ return value.mcpServers;
170
+ }
171
+ if (isObject(value.servers)) {
172
+ return value.servers;
173
+ }
174
+ // Also support plain map style: { "<name>": { ...server fields... } }
175
+ const entries = Object.entries(value);
176
+ if (entries.length > 0
177
+ && entries.every(([, entryValue]) => isObject(entryValue) && looksLikeServerDefinition(entryValue))) {
178
+ return value;
179
+ }
180
+ return null;
181
+ }
182
+ function parseJsonc(rawInput) {
183
+ const errors = [];
184
+ const parsed = parse(rawInput, errors, {
185
+ allowTrailingComma: true,
186
+ disallowComments: false
187
+ });
188
+ if (errors.length > 0) {
189
+ throw new Error(`Invalid JSON/JSONC import payload (${errors.length} parse error(s)).`);
190
+ }
191
+ return parsed;
192
+ }
193
+ function looksLikeServerDefinition(value) {
194
+ return Object.keys(value).some((key) => SERVER_FIELD_HINTS.has(key));
195
+ }
196
+ function readOptionalString(value, label) {
197
+ if (value === undefined || value === null)
198
+ return undefined;
199
+ if (typeof value !== 'string') {
200
+ throw new Error(`Field "${label}" must be a string.`);
201
+ }
202
+ return value;
203
+ }
204
+ function readStringArray(value, label) {
205
+ if (value === undefined || value === null)
206
+ return undefined;
207
+ if (!Array.isArray(value)) {
208
+ throw new Error(`Field "${label}" must be an array of strings.`);
209
+ }
210
+ for (const item of value) {
211
+ if (typeof item !== 'string') {
212
+ throw new Error(`Field "${label}" must be an array of strings.`);
213
+ }
214
+ }
215
+ return [...value];
216
+ }
217
+ function readStringMap(value, label, validateKey) {
218
+ if (value === undefined || value === null)
219
+ return {};
220
+ if (!isObject(value)) {
221
+ throw new Error(`Field "${label}" must be an object of string values.`);
222
+ }
223
+ const out = {};
224
+ for (const [key, entry] of Object.entries(value)) {
225
+ validateKey?.(key);
226
+ if (typeof entry !== 'string') {
227
+ throw new Error(`Field "${label}.${key}" must be a string.`);
228
+ }
229
+ out[key] = entry;
230
+ }
231
+ return out;
232
+ }
233
+ function isObject(value) {
234
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
235
+ }
236
+ async function readStdinAll() {
237
+ return new Promise((resolve, reject) => {
238
+ const chunks = [];
239
+ process.stdin.on('data', (chunk) => {
240
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
241
+ });
242
+ process.stdin.on('end', () => {
243
+ resolve(Buffer.concat(chunks).toString('utf8'));
244
+ });
245
+ process.stdin.on('error', reject);
246
+ });
247
+ }
248
+ async function readImportInputFromUrl(url) {
249
+ let parsedUrl;
250
+ try {
251
+ parsedUrl = new URL(url);
252
+ }
253
+ catch {
254
+ throw new Error(`Invalid URL: ${url}`);
255
+ }
256
+ const response = await fetchWithRetry(parsedUrl, {
257
+ headers: {
258
+ Accept: 'application/json,text/html,application/xhtml+xml'
259
+ }
260
+ });
261
+ if (!response.ok) {
262
+ throw new Error(`Failed to fetch import URL (${response.status}): ${url}`);
263
+ }
264
+ const text = await response.text();
265
+ const contentType = response.headers.get('content-type') ?? '';
266
+ const trimmed = text.trim();
267
+ if (contentType.includes('application/json') || trimmed.startsWith('{') || trimmed.startsWith('[')) {
268
+ return text;
269
+ }
270
+ const extracted = extractImportPayloadFromHtml(text);
271
+ if (extracted) {
272
+ return extracted;
273
+ }
274
+ const markdownFallback = await extractImportPayloadFromUrlFallback(parsedUrl, text);
275
+ if (markdownFallback) {
276
+ return markdownFallback;
277
+ }
278
+ // Check if it's a GitHub repo URL
279
+ const isGitHub = parsedUrl.hostname === 'github.com';
280
+ if (isGitHub) {
281
+ throw new Error(`Cannot import MCP config directly from GitHub repository.\n\n` +
282
+ `To add this MCP server, check the repository README for installation instructions, then use:\n` +
283
+ ` agents mcp add <name> --transport stdio --command <cmd> --arg <arg>\n\n` +
284
+ `Example:\n` +
285
+ ` agents mcp add figma-mcp --command npx --arg "@figma/mcp-server"\n\n` +
286
+ `Or try finding it on https://mcpservers.org/`);
287
+ }
288
+ throw new Error('Could not extract MCP JSON payload from URL. Use "agents mcp import --url <url>" for JSON pages, or --json/--file with an explicit snippet.');
289
+ }
290
+ export function extractImportPayloadFromHtml(html) {
291
+ const candidates = [...extractJsonCodeBlocks(html), ...extractNextFlightJsonBlocks(html)];
292
+ for (const candidate of candidates) {
293
+ try {
294
+ parseImportedServers(candidate);
295
+ return candidate;
296
+ }
297
+ catch {
298
+ // try next candidate
299
+ }
300
+ }
301
+ return null;
302
+ }
303
+ function extractJsonCodeBlocks(html) {
304
+ const blocks = [];
305
+ const seen = new Set();
306
+ const jsonRegex = /<code[^>]*class="[^"]*language-jsonc?[^"]*"[^>]*>([\s\S]*?)<\/code>/gi;
307
+ for (const match of html.matchAll(jsonRegex)) {
308
+ const raw = match[1];
309
+ if (!raw)
310
+ continue;
311
+ const decoded = decodeHtmlEntities(stripHtmlTags(raw)).trim();
312
+ if (!decoded || seen.has(decoded))
313
+ continue;
314
+ seen.add(decoded);
315
+ blocks.push(decoded);
316
+ }
317
+ // Some pages publish JSON snippets in plain <pre><code> blocks without language class.
318
+ const genericRegex = /<pre[^>]*>\s*<code[^>]*>([\s\S]*?)<\/code>\s*<\/pre>/gi;
319
+ for (const match of html.matchAll(genericRegex)) {
320
+ const raw = match[1];
321
+ if (!raw)
322
+ continue;
323
+ const decoded = decodeHtmlEntities(stripHtmlTags(raw)).trim();
324
+ if (!decoded || seen.has(decoded))
325
+ continue;
326
+ seen.add(decoded);
327
+ blocks.push(decoded);
328
+ }
329
+ return blocks;
330
+ }
331
+ function extractNextFlightJsonBlocks(html) {
332
+ const blocks = [];
333
+ const regex = /"children":"((?:\\.|[^"\\])*)"/g;
334
+ for (const match of html.matchAll(regex)) {
335
+ const encoded = match[1];
336
+ if (!encoded)
337
+ continue;
338
+ let decoded = '';
339
+ try {
340
+ decoded = JSON.parse(`"${encoded}"`);
341
+ }
342
+ catch {
343
+ continue;
344
+ }
345
+ const trimmed = decoded.trim();
346
+ if (!trimmed.startsWith('{') || !trimmed.endsWith('}'))
347
+ continue;
348
+ blocks.push(trimmed);
349
+ }
350
+ return blocks;
351
+ }
352
+ function stripHtmlTags(value) {
353
+ return value.replace(/<[^>]+>/g, '');
354
+ }
355
+ function decodeHtmlEntities(value) {
356
+ return value
357
+ .replace(/&quot;/g, '"')
358
+ .replace(/&#34;/g, '"')
359
+ .replace(/&#39;/g, "'")
360
+ .replace(/&apos;/g, "'")
361
+ .replace(/&lt;/g, '<')
362
+ .replace(/&gt;/g, '>')
363
+ .replace(/&amp;/g, '&')
364
+ .replace(/&#x([0-9a-fA-F]+);/g, (_full, hex) => String.fromCodePoint(Number.parseInt(hex, 16)))
365
+ .replace(/&#([0-9]+);/g, (_full, dec) => String.fromCodePoint(Number.parseInt(dec, 10)));
366
+ }
367
+ async function extractImportPayloadFromUrlFallback(url, html) {
368
+ if (!isMcpServersUrl(url))
369
+ return null;
370
+ const repos = extractGithubReposFromHtml(url, html);
371
+ for (const repo of repos) {
372
+ const markdown = await fetchGithubReadme(repo);
373
+ if (!markdown)
374
+ continue;
375
+ const extracted = extractImportPayloadFromMarkdown(markdown);
376
+ if (extracted)
377
+ return extracted;
378
+ }
379
+ return null;
380
+ }
381
+ export function extractImportPayloadFromMarkdown(markdown) {
382
+ const candidates = extractMarkdownJsonCodeBlocks(markdown);
383
+ for (const candidate of candidates) {
384
+ try {
385
+ parseImportedServers(candidate);
386
+ return candidate;
387
+ }
388
+ catch {
389
+ // try next candidate
390
+ }
391
+ }
392
+ return null;
393
+ }
394
+ function extractMarkdownJsonCodeBlocks(markdown) {
395
+ const blocks = [];
396
+ const regex = /```([a-zA-Z0-9_-]*)[^\n]*\n([\s\S]*?)```/g;
397
+ for (const match of markdown.matchAll(regex)) {
398
+ const lang = (match[1] ?? '').trim().toLowerCase();
399
+ const body = (match[2] ?? '').trim();
400
+ if (!body)
401
+ continue;
402
+ const isJsonLang = lang === 'json' || lang === 'jsonc';
403
+ const isLikelyJsonWithoutLang = lang.length === 0 && body.startsWith('{') && body.endsWith('}');
404
+ if (!isJsonLang && !isLikelyJsonWithoutLang)
405
+ continue;
406
+ blocks.push(body);
407
+ }
408
+ return blocks;
409
+ }
410
+ function extractGithubReposFromHtml(url, html) {
411
+ const match = /^\/servers\/([^/]+)\/([^/]+)/.exec(url.pathname);
412
+ const expectedOwner = match?.[1]?.toLowerCase();
413
+ const expectedRepo = normalizeRepoToken(match?.[2] ?? '');
414
+ const unique = new Map();
415
+ const regex = /https:\/\/github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)/g;
416
+ for (const found of html.matchAll(regex)) {
417
+ const owner = found[1];
418
+ const repo = found[2];
419
+ if (!owner || !repo)
420
+ continue;
421
+ const key = `${owner.toLowerCase()}/${repo.toLowerCase()}`;
422
+ if (unique.has(key))
423
+ continue;
424
+ let score = 0;
425
+ if (expectedOwner && owner.toLowerCase() === expectedOwner)
426
+ score += 2;
427
+ if (expectedRepo && normalizeRepoToken(repo) === expectedRepo)
428
+ score += 3;
429
+ unique.set(key, { owner, repo, score });
430
+ }
431
+ return [...unique.values()]
432
+ .sort((a, b) => b.score - a.score || a.owner.localeCompare(b.owner) || a.repo.localeCompare(b.repo))
433
+ .map(({ owner, repo }) => ({ owner, repo }));
434
+ }
435
+ async function fetchGithubReadme(repo) {
436
+ const apiUrl = `https://api.github.com/repos/${repo.owner}/${repo.repo}/readme`;
437
+ const response = await fetchWithRetry(apiUrl, {
438
+ headers: {
439
+ Accept: 'application/vnd.github.raw+json'
440
+ }
441
+ });
442
+ if (!response.ok)
443
+ return null;
444
+ return response.text();
445
+ }
446
+ async function fetchWithRetry(input, init) {
447
+ const maxAttempts = IMPORT_FETCH_RETRIES + 1;
448
+ let lastError = null;
449
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
450
+ try {
451
+ const response = await fetch(input, {
452
+ ...init,
453
+ signal: AbortSignal.timeout(IMPORT_FETCH_TIMEOUT_MS)
454
+ });
455
+ if (response.ok) {
456
+ return response;
457
+ }
458
+ if (!shouldRetryStatus(response.status) || attempt === maxAttempts) {
459
+ return response;
460
+ }
461
+ }
462
+ catch (error) {
463
+ lastError = error;
464
+ if (!isRetryableFetchError(error) || attempt === maxAttempts) {
465
+ throw formatFetchError(input, error);
466
+ }
467
+ }
468
+ }
469
+ throw formatFetchError(input, lastError);
470
+ }
471
+ function shouldRetryStatus(status) {
472
+ return status === 408 || status === 425 || status === 429 || status >= 500;
473
+ }
474
+ function isRetryableFetchError(error) {
475
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
476
+ const name = error instanceof Error ? error.name.toLowerCase() : '';
477
+ return (name.includes('abort')
478
+ || name.includes('timeout')
479
+ || message.includes('timed out')
480
+ || message.includes('timeout')
481
+ || message.includes('network')
482
+ || message.includes('fetch failed'));
483
+ }
484
+ function formatFetchError(input, error) {
485
+ const raw = error instanceof Error ? error.message : String(error);
486
+ const hint = `Request timed out or failed for ${String(input)} (timeout ${String(IMPORT_FETCH_TIMEOUT_MS)}ms).`;
487
+ if (!raw) {
488
+ return new Error(hint);
489
+ }
490
+ return new Error(`${hint} ${raw}`);
491
+ }
492
+ function isMcpServersUrl(url) {
493
+ return url.hostname === 'mcpservers.org' || url.hostname.endsWith('.mcpservers.org');
494
+ }
495
+ function normalizeRepoToken(value) {
496
+ return value.replace(/\.git$/i, '').replace(/[^a-z0-9]+/gi, '').toLowerCase();
497
+ }
498
+ function isHttpUrl(value) {
499
+ try {
500
+ const parsed = new URL(value);
501
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:';
502
+ }
503
+ catch {
504
+ return false;
505
+ }
506
+ }
507
+ //# sourceMappingURL=mcpImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpImport.js","sourceRoot":"","sources":["../../src/core/mcpImport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { McpServerDefinition } from '../types.js';
2
+ interface SecretArg {
3
+ index: number;
4
+ value: string;
5
+ }
6
+ export interface SecretSplitResult {
7
+ publicServer: McpServerDefinition;
8
+ localOverride: Partial<McpServerDefinition>;
9
+ }
10
+ export declare function isPlaceholderValue(value: string): boolean;
11
+ export declare function isSecretLikeKey(key: string): boolean;
12
+ export declare function isSecretLikeLiteral(value: string): boolean;
13
+ export declare function isLikelyTemplateSecretValue(value: string): boolean;
14
+ export declare function isSecretArgFlag(flag: string): boolean;
15
+ export declare function inferSecretArgs(args: string[]): number[];
16
+ export declare function inferSecretKeyValues(values: Record<string, string> | undefined): Record<string, string>;
17
+ export declare function splitServerSecrets(input: {
18
+ name: string;
19
+ server: McpServerDefinition;
20
+ secretEnv?: Record<string, string>;
21
+ secretHeaders?: Record<string, string>;
22
+ secretArgs?: SecretArg[];
23
+ secretEnvKeys?: string[];
24
+ secretHeaderKeys?: string[];
25
+ secretArgIndexes?: number[];
26
+ }): SecretSplitResult;
27
+ export {};