@switchboard-mcp/core 0.1.0

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 (74) hide show
  1. package/README.md +9 -0
  2. package/dist/approvals/approval-requests.d.ts +151 -0
  3. package/dist/approvals/approval-requests.d.ts.map +1 -0
  4. package/dist/approvals/approval-requests.js +393 -0
  5. package/dist/approvals/approval-requests.js.map +1 -0
  6. package/dist/audit/audit-log.d.ts +45 -0
  7. package/dist/audit/audit-log.d.ts.map +1 -0
  8. package/dist/audit/audit-log.js +88 -0
  9. package/dist/audit/audit-log.js.map +1 -0
  10. package/dist/config/gitignore.d.ts +9 -0
  11. package/dist/config/gitignore.d.ts.map +1 -0
  12. package/dist/config/gitignore.js +90 -0
  13. package/dist/config/gitignore.js.map +1 -0
  14. package/dist/config/load-config.d.ts +28 -0
  15. package/dist/config/load-config.d.ts.map +1 -0
  16. package/dist/config/load-config.js +138 -0
  17. package/dist/config/load-config.js.map +1 -0
  18. package/dist/config/paths.d.ts +13 -0
  19. package/dist/config/paths.d.ts.map +1 -0
  20. package/dist/config/paths.js +38 -0
  21. package/dist/config/paths.js.map +1 -0
  22. package/dist/daemon/daemon-state.d.ts +44 -0
  23. package/dist/daemon/daemon-state.d.ts.map +1 -0
  24. package/dist/daemon/daemon-state.js +110 -0
  25. package/dist/daemon/daemon-state.js.map +1 -0
  26. package/dist/import/import-plan.d.ts +92 -0
  27. package/dist/import/import-plan.d.ts.map +1 -0
  28. package/dist/import/import-plan.js +677 -0
  29. package/dist/import/import-plan.js.map +1 -0
  30. package/dist/index.d.ts +18 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +18 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/install/client-config.d.ts +73 -0
  35. package/dist/install/client-config.d.ts.map +1 -0
  36. package/dist/install/client-config.js +514 -0
  37. package/dist/install/client-config.js.map +1 -0
  38. package/dist/mandates/mandates.d.ts +244 -0
  39. package/dist/mandates/mandates.d.ts.map +1 -0
  40. package/dist/mandates/mandates.js +690 -0
  41. package/dist/mandates/mandates.js.map +1 -0
  42. package/dist/namespaces/namespaces.d.ts +16 -0
  43. package/dist/namespaces/namespaces.d.ts.map +1 -0
  44. package/dist/namespaces/namespaces.js +49 -0
  45. package/dist/namespaces/namespaces.js.map +1 -0
  46. package/dist/onboarding/init-config.d.ts +19 -0
  47. package/dist/onboarding/init-config.d.ts.map +1 -0
  48. package/dist/onboarding/init-config.js +85 -0
  49. package/dist/onboarding/init-config.js.map +1 -0
  50. package/dist/providers/provider-add.d.ts +25 -0
  51. package/dist/providers/provider-add.d.ts.map +1 -0
  52. package/dist/providers/provider-add.js +179 -0
  53. package/dist/providers/provider-add.js.map +1 -0
  54. package/dist/providers/provider-templates.d.ts +96 -0
  55. package/dist/providers/provider-templates.d.ts.map +1 -0
  56. package/dist/providers/provider-templates.js +556 -0
  57. package/dist/providers/provider-templates.js.map +1 -0
  58. package/dist/scan/scan.d.ts +67 -0
  59. package/dist/scan/scan.d.ts.map +1 -0
  60. package/dist/scan/scan.js +389 -0
  61. package/dist/scan/scan.js.map +1 -0
  62. package/dist/schemas/config.d.ts +197 -0
  63. package/dist/schemas/config.d.ts.map +1 -0
  64. package/dist/schemas/config.js +133 -0
  65. package/dist/schemas/config.js.map +1 -0
  66. package/dist/secrets/secret-refs.d.ts +10 -0
  67. package/dist/secrets/secret-refs.d.ts.map +1 -0
  68. package/dist/secrets/secret-refs.js +32 -0
  69. package/dist/secrets/secret-refs.js.map +1 -0
  70. package/dist/secrets/secrets.d.ts +63 -0
  71. package/dist/secrets/secrets.d.ts.map +1 -0
  72. package/dist/secrets/secrets.js +301 -0
  73. package/dist/secrets/secrets.js.map +1 -0
  74. package/package.json +42 -0
@@ -0,0 +1,514 @@
1
+ import { constants } from "node:fs";
2
+ import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { delimiter, dirname, isAbsolute, join } from "node:path";
4
+ const defaultServerName = "switchboard";
5
+ const defaultCommand = "switchboard";
6
+ export function renderSwitchboardClientConfig(options) {
7
+ const serverName = options.serverName ?? defaultServerName;
8
+ const command = options.command ?? defaultCommand;
9
+ const commandArgs = options.commandArgs ?? [];
10
+ const args = [...commandArgs, "--cwd", options.cwd, "mcp"];
11
+ const validation = validateSwitchboardClientConfigOptions({
12
+ ...options,
13
+ serverName,
14
+ command,
15
+ commandArgs
16
+ });
17
+ if (!validation.ok) {
18
+ throw new Error(validation.errors.join("\n"));
19
+ }
20
+ if (options.client === "codex") {
21
+ return {
22
+ client: "codex",
23
+ serverName,
24
+ target: "~/.codex/config.toml or .codex/config.toml",
25
+ content: renderCodexConfig({ serverName, command, args, cwd: options.cwd })
26
+ };
27
+ }
28
+ return {
29
+ client: "claude",
30
+ serverName,
31
+ target: ".mcp.json for project scope or ~/.claude.json for local/user scope",
32
+ content: JSON.stringify({
33
+ mcpServers: {
34
+ [serverName]: {
35
+ command,
36
+ args,
37
+ env: {}
38
+ }
39
+ }
40
+ }, null, 2)
41
+ };
42
+ }
43
+ export async function writeSwitchboardClientConfig(options) {
44
+ const rendered = renderSwitchboardClientConfig(options);
45
+ const targetPath = resolveProjectClientConfigPath(options.client, options.cwd);
46
+ const existing = await readOptionalTextFile(targetPath);
47
+ const nextContent = mergeClientConfigContent({
48
+ client: options.client,
49
+ existing,
50
+ renderedContent: rendered.content,
51
+ serverName: rendered.serverName
52
+ });
53
+ await mkdir(dirname(targetPath), { recursive: true });
54
+ const backupPath = existing
55
+ ? await backupExistingFile(targetPath, options.now)
56
+ : null;
57
+ await writeFile(targetPath, nextContent, "utf8");
58
+ return {
59
+ client: options.client,
60
+ serverName: rendered.serverName,
61
+ targetPath,
62
+ backupPath,
63
+ action: existing ? "updated" : "created"
64
+ };
65
+ }
66
+ export async function rollbackSwitchboardClientConfig(options) {
67
+ const targetPath = resolveProjectClientConfigPath(options.client, options.cwd);
68
+ const backupContent = await readFile(options.backupPath, "utf8");
69
+ const existing = await readOptionalTextFile(targetPath);
70
+ await mkdir(dirname(targetPath), { recursive: true });
71
+ const currentBackupPath = existing
72
+ ? await backupExistingFile(targetPath, options.now)
73
+ : null;
74
+ await writeFile(targetPath, backupContent, "utf8");
75
+ return {
76
+ client: options.client,
77
+ targetPath,
78
+ restoredFrom: options.backupPath,
79
+ backupPath: currentBackupPath
80
+ };
81
+ }
82
+ export function resolveProjectClientConfigPath(client, cwd) {
83
+ if (client === "codex") {
84
+ return join(cwd, ".codex", "config.toml");
85
+ }
86
+ return join(cwd, ".mcp.json");
87
+ }
88
+ export async function inspectProjectClientConfig(options) {
89
+ const rendered = renderSwitchboardClientConfig(options);
90
+ const targetPath = resolveProjectClientConfigPath(options.client, options.cwd);
91
+ const existing = await readOptionalTextFile(targetPath);
92
+ if (existing === null) {
93
+ return {
94
+ client: options.client,
95
+ serverName: rendered.serverName,
96
+ targetPath,
97
+ status: "missing",
98
+ message: "Project client config file was not found.",
99
+ otherServerNames: [],
100
+ launch: null
101
+ };
102
+ }
103
+ try {
104
+ if (options.client === "claude") {
105
+ return inspectClaudeProjectConfig({
106
+ existing,
107
+ renderedContent: rendered.content,
108
+ targetPath,
109
+ serverName: rendered.serverName
110
+ });
111
+ }
112
+ return inspectCodexProjectConfig({
113
+ existing,
114
+ targetPath,
115
+ serverName: rendered.serverName,
116
+ command: options.command ?? defaultCommand,
117
+ commandArgs: options.commandArgs ?? [],
118
+ cwd: options.cwd
119
+ });
120
+ }
121
+ catch (error) {
122
+ return {
123
+ client: options.client,
124
+ serverName: rendered.serverName,
125
+ targetPath,
126
+ status: "invalid",
127
+ message: messageFromError(error),
128
+ otherServerNames: [],
129
+ launch: null
130
+ };
131
+ }
132
+ }
133
+ export async function inspectProjectClientConfigs(options) {
134
+ return Promise.all([
135
+ inspectProjectClientConfig({ ...options, client: "codex" }),
136
+ inspectProjectClientConfig({ ...options, client: "claude" })
137
+ ]);
138
+ }
139
+ export function validateSwitchboardClientConfigOptions(options) {
140
+ const serverName = options.serverName ?? defaultServerName;
141
+ const command = options.command ?? defaultCommand;
142
+ const commandArgs = options.commandArgs ?? [];
143
+ const errors = [];
144
+ if (serverName.trim().length === 0) {
145
+ errors.push("server name must not be empty");
146
+ }
147
+ if (containsControlCharacter(serverName)) {
148
+ errors.push("server name must not contain control characters");
149
+ }
150
+ if (command.trim().length === 0) {
151
+ errors.push("command must not be empty");
152
+ }
153
+ if (containsControlCharacter(command)) {
154
+ errors.push("command must not contain control characters");
155
+ }
156
+ for (const [index, arg] of commandArgs.entries()) {
157
+ if (containsControlCharacter(arg)) {
158
+ errors.push(`command arg ${index + 1} must not contain control characters`);
159
+ }
160
+ }
161
+ return { ok: errors.length === 0, errors };
162
+ }
163
+ export async function checkInstalledClientLaunches(inspections, env = process.env) {
164
+ return Promise.all(inspections
165
+ .filter((inspection) => inspection.status === "installed")
166
+ .map(async (inspection) => {
167
+ const launch = inspection.launch;
168
+ if (!launch) {
169
+ return {
170
+ client: inspection.client,
171
+ serverName: inspection.serverName,
172
+ command: "",
173
+ args: [],
174
+ ok: false,
175
+ message: `${inspection.client} config is installed, but the launch command could not be read.`
176
+ };
177
+ }
178
+ const resolved = await resolveExecutable(launch.command, env);
179
+ return {
180
+ client: inspection.client,
181
+ serverName: inspection.serverName,
182
+ command: launch.command,
183
+ args: launch.args,
184
+ ok: resolved !== null,
185
+ message: resolved === null
186
+ ? launchCommandMissingMessage(inspection.client, launch.command)
187
+ : `${inspection.client} launch command is available: ${launch.command}`
188
+ };
189
+ }));
190
+ }
191
+ function launchCommandMissingMessage(client, command) {
192
+ if (isAbsolute(command)) {
193
+ return `${client} config points to "${command}", but that executable is missing or not executable.`;
194
+ }
195
+ return `${client} config points to "${command}", but that executable is not available on PATH.`;
196
+ }
197
+ function containsControlCharacter(value) {
198
+ return [...value].some((character) => {
199
+ const codePoint = character.codePointAt(0);
200
+ return codePoint !== undefined && (codePoint < 32 || codePoint === 127);
201
+ });
202
+ }
203
+ async function readOptionalTextFile(path) {
204
+ try {
205
+ return await readFile(path, "utf8");
206
+ }
207
+ catch (error) {
208
+ if (error instanceof Error &&
209
+ "code" in error &&
210
+ error.code === "ENOENT") {
211
+ return null;
212
+ }
213
+ throw error;
214
+ }
215
+ }
216
+ async function backupExistingFile(path, now) {
217
+ const baseBackupPath = `${path}.switchboard-backup-${backupTimestamp(now)}`;
218
+ for (let attempt = 0; attempt < 100; attempt += 1) {
219
+ const backupPath = attempt === 0 ? baseBackupPath : `${baseBackupPath}-${attempt}`;
220
+ try {
221
+ await copyFile(path, backupPath, constants.COPYFILE_EXCL);
222
+ return backupPath;
223
+ }
224
+ catch (error) {
225
+ if (error instanceof Error &&
226
+ "code" in error &&
227
+ error.code === "EEXIST") {
228
+ continue;
229
+ }
230
+ throw error;
231
+ }
232
+ }
233
+ throw new Error(`could not create a unique backup path for ${path}`);
234
+ }
235
+ function backupTimestamp(now = new Date()) {
236
+ return now.toISOString().replaceAll(/[-:.]/g, "").replace("T", "-");
237
+ }
238
+ function mergeClientConfigContent(options) {
239
+ if (options.client === "claude") {
240
+ return mergeClaudeConfigContent(options.existing, options.renderedContent);
241
+ }
242
+ return mergeCodexConfigContent(options.existing, options.renderedContent, options.serverName);
243
+ }
244
+ function mergeClaudeConfigContent(existing, renderedContent) {
245
+ const rendered = JSON.parse(renderedContent);
246
+ const parsed = existing?.trim()
247
+ ? JSON.parse(existing)
248
+ : {};
249
+ const existingServers = isRecord(parsed.mcpServers) && !Array.isArray(parsed.mcpServers)
250
+ ? parsed.mcpServers
251
+ : {};
252
+ return `${JSON.stringify({
253
+ ...parsed,
254
+ mcpServers: {
255
+ ...existingServers,
256
+ ...rendered.mcpServers
257
+ }
258
+ }, null, 2)}\n`;
259
+ }
260
+ function mergeCodexConfigContent(existing, renderedContent, serverName) {
261
+ if (!existing?.trim()) {
262
+ return `${renderedContent}\n`;
263
+ }
264
+ const lines = existing.split(/\r?\n/);
265
+ const start = lines.findIndex((line) => codexMcpServerNameFromHeader(line) === serverName);
266
+ const renderedLines = renderedContent.split("\n");
267
+ if (start === -1) {
268
+ const separator = existing.endsWith("\n") ? "\n" : "\n\n";
269
+ return `${existing}${separator}${renderedContent}\n`;
270
+ }
271
+ let end = start + 1;
272
+ while (end < lines.length && !lines[end]?.trim().startsWith("[")) {
273
+ end += 1;
274
+ }
275
+ lines.splice(start, end - start, ...renderedLines);
276
+ return `${lines.join("\n").replace(/\n*$/, "")}\n`;
277
+ }
278
+ function inspectClaudeProjectConfig(options) {
279
+ const parsed = JSON.parse(options.existing);
280
+ const rendered = JSON.parse(options.renderedContent);
281
+ const existingServers = isRecord(parsed.mcpServers) && !Array.isArray(parsed.mcpServers)
282
+ ? parsed.mcpServers
283
+ : {};
284
+ const otherServerNames = Object.keys(existingServers).filter((name) => name !== options.serverName);
285
+ const actual = existingServers[options.serverName];
286
+ const expected = rendered.mcpServers[options.serverName];
287
+ if (actual === undefined) {
288
+ return {
289
+ client: "claude",
290
+ serverName: options.serverName,
291
+ targetPath: options.targetPath,
292
+ status: "missing",
293
+ message: "Claude project config does not include the Switchboard MCP server.",
294
+ otherServerNames,
295
+ launch: null
296
+ };
297
+ }
298
+ if (!clientServerEntryRoutesThroughSwitchboard(actual, expected)) {
299
+ return {
300
+ client: "claude",
301
+ serverName: options.serverName,
302
+ targetPath: options.targetPath,
303
+ status: "stale",
304
+ message: "Claude project config has a different Switchboard MCP server entry.",
305
+ otherServerNames,
306
+ launch: clientServerEntryLaunch(actual)
307
+ };
308
+ }
309
+ return {
310
+ client: "claude",
311
+ serverName: options.serverName,
312
+ targetPath: options.targetPath,
313
+ status: "installed",
314
+ message: "Claude project config routes through switchboard mcp.",
315
+ otherServerNames,
316
+ launch: clientServerEntryLaunch(actual)
317
+ };
318
+ }
319
+ function inspectCodexProjectConfig(options) {
320
+ const section = codexMcpServerSection(options.existing, options.serverName);
321
+ const otherServerNames = codexMcpServerNames(options.existing).filter((name) => name !== options.serverName);
322
+ if (section === null) {
323
+ return {
324
+ client: "codex",
325
+ serverName: options.serverName,
326
+ targetPath: options.targetPath,
327
+ status: "missing",
328
+ message: "Codex project config does not include the Switchboard MCP server.",
329
+ otherServerNames,
330
+ launch: null
331
+ };
332
+ }
333
+ const values = parseSimpleTomlAssignments(section);
334
+ const command = parseTomlString(values.command);
335
+ const args = parseTomlStringArray(values.args);
336
+ const cwd = parseTomlString(values.cwd);
337
+ const expectedArgs = [...options.commandArgs, "--cwd", options.cwd, "mcp"];
338
+ if (!command ||
339
+ (cwd !== undefined && cwd !== options.cwd) ||
340
+ !args ||
341
+ !launchArgsRouteThroughSwitchboard(args, expectedArgs)) {
342
+ return {
343
+ client: "codex",
344
+ serverName: options.serverName,
345
+ targetPath: options.targetPath,
346
+ status: "stale",
347
+ message: "Codex project config has a different Switchboard MCP server entry.",
348
+ otherServerNames,
349
+ launch: command && args ? { command, args } : null
350
+ };
351
+ }
352
+ return {
353
+ client: "codex",
354
+ serverName: options.serverName,
355
+ targetPath: options.targetPath,
356
+ status: "installed",
357
+ message: "Codex project config routes through switchboard mcp.",
358
+ otherServerNames,
359
+ launch: { command, args }
360
+ };
361
+ }
362
+ function codexMcpServerNames(content) {
363
+ return content
364
+ .split(/\r?\n/)
365
+ .map(codexMcpServerNameFromHeader)
366
+ .filter((name) => name !== null);
367
+ }
368
+ function clientServerEntryRoutesThroughSwitchboard(actual, expected) {
369
+ if (!isRecord(actual) || !isRecord(expected)) {
370
+ return false;
371
+ }
372
+ if (typeof actual.command !== "string" || actual.command.trim().length === 0) {
373
+ return false;
374
+ }
375
+ if (!Array.isArray(actual.args) || !Array.isArray(expected.args)) {
376
+ return false;
377
+ }
378
+ return (actual.args.every((arg) => typeof arg === "string") &&
379
+ expected.args.every((arg) => typeof arg === "string") &&
380
+ launchArgsRouteThroughSwitchboard(actual.args, expected.args));
381
+ }
382
+ function launchArgsRouteThroughSwitchboard(actual, expected) {
383
+ const expectedPrefixLength = Math.max(0, expected.length - 3);
384
+ if (expectedPrefixLength > 0) {
385
+ return JSON.stringify(actual) === JSON.stringify(expected);
386
+ }
387
+ if (actual.length < 3) {
388
+ return false;
389
+ }
390
+ const suffix = actual.slice(-3);
391
+ return JSON.stringify(suffix) === JSON.stringify(expected.slice(-3));
392
+ }
393
+ function clientServerEntryLaunch(entry) {
394
+ if (!isRecord(entry) || typeof entry.command !== "string") {
395
+ return null;
396
+ }
397
+ if (entry.args !== undefined &&
398
+ (!Array.isArray(entry.args) ||
399
+ !entry.args.every((arg) => typeof arg === "string"))) {
400
+ return null;
401
+ }
402
+ return {
403
+ command: entry.command,
404
+ args: Array.isArray(entry.args) ? entry.args : []
405
+ };
406
+ }
407
+ function codexMcpServerSection(content, serverName) {
408
+ const lines = content.split(/\r?\n/);
409
+ const start = lines.findIndex((line) => codexMcpServerNameFromHeader(line) === serverName);
410
+ if (start === -1) {
411
+ return null;
412
+ }
413
+ let end = start + 1;
414
+ while (end < lines.length && !lines[end]?.trim().startsWith("[")) {
415
+ end += 1;
416
+ }
417
+ return lines.slice(start + 1, end);
418
+ }
419
+ function parseSimpleTomlAssignments(lines) {
420
+ const values = {};
421
+ for (const line of lines) {
422
+ const trimmed = line.trim();
423
+ const separator = trimmed.indexOf("=");
424
+ if (separator === -1 || trimmed.startsWith("#")) {
425
+ continue;
426
+ }
427
+ values[trimmed.slice(0, separator).trim()] = trimmed
428
+ .slice(separator + 1)
429
+ .trim();
430
+ }
431
+ return values;
432
+ }
433
+ function parseTomlString(value) {
434
+ if (!value?.startsWith('"')) {
435
+ return undefined;
436
+ }
437
+ return JSON.parse(value);
438
+ }
439
+ function parseTomlStringArray(value) {
440
+ if (!value?.startsWith("[")) {
441
+ return undefined;
442
+ }
443
+ const parsed = JSON.parse(value);
444
+ return Array.isArray(parsed) && parsed.every((item) => typeof item === "string")
445
+ ? parsed
446
+ : undefined;
447
+ }
448
+ function messageFromError(error) {
449
+ return error instanceof Error ? error.message : String(error);
450
+ }
451
+ function codexMcpServerNameFromHeader(line) {
452
+ const trimmed = line.trim();
453
+ if (!trimmed.startsWith("[mcp_servers.") || !trimmed.endsWith("]")) {
454
+ return null;
455
+ }
456
+ const rawKey = trimmed.slice("[mcp_servers.".length, -1).trim();
457
+ if (rawKey.startsWith('"') && rawKey.endsWith('"')) {
458
+ try {
459
+ return JSON.parse(rawKey);
460
+ }
461
+ catch {
462
+ return null;
463
+ }
464
+ }
465
+ return rawKey;
466
+ }
467
+ function isRecord(value) {
468
+ return typeof value === "object" && value !== null;
469
+ }
470
+ function renderCodexConfig(options) {
471
+ return [
472
+ `[mcp_servers.${tomlKey(options.serverName)}]`,
473
+ `command = ${tomlString(options.command)}`,
474
+ `args = ${tomlArray(options.args)}`,
475
+ `cwd = ${tomlString(options.cwd)}`,
476
+ "startup_timeout_sec = 20",
477
+ "tool_timeout_sec = 60"
478
+ ].join("\n");
479
+ }
480
+ function tomlArray(values) {
481
+ return `[${values.map(tomlString).join(", ")}]`;
482
+ }
483
+ function tomlKey(value) {
484
+ return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
485
+ }
486
+ function tomlString(value) {
487
+ return JSON.stringify(value);
488
+ }
489
+ async function resolveExecutable(command, env) {
490
+ if (isAbsolute(command)) {
491
+ return (await isExecutable(command)) ? command : null;
492
+ }
493
+ const path = env.PATH ?? "";
494
+ for (const directory of path.split(delimiter)) {
495
+ if (directory.length === 0) {
496
+ continue;
497
+ }
498
+ const candidate = join(directory, command);
499
+ if (await isExecutable(candidate)) {
500
+ return candidate;
501
+ }
502
+ }
503
+ return null;
504
+ }
505
+ async function isExecutable(path) {
506
+ try {
507
+ await access(path, constants.X_OK);
508
+ return true;
509
+ }
510
+ catch {
511
+ return false;
512
+ }
513
+ }
514
+ //# sourceMappingURL=client-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-config.js","sourceRoot":"","sources":["../../src/install/client-config.ts"],"names":[],"mappings":"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"}