agent-switchboard 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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/dist/agents/adapter.d.ts +32 -0
  4. package/dist/agents/adapter.js +6 -0
  5. package/dist/agents/adapter.js.map +1 -0
  6. package/dist/agents/claude-code.d.ts +17 -0
  7. package/dist/agents/claude-code.js +27 -0
  8. package/dist/agents/claude-code.js.map +1 -0
  9. package/dist/agents/claude-desktop.d.ts +23 -0
  10. package/dist/agents/claude-desktop.js +44 -0
  11. package/dist/agents/claude-desktop.js.map +1 -0
  12. package/dist/agents/codex.d.ts +42 -0
  13. package/dist/agents/codex.js +135 -0
  14. package/dist/agents/codex.js.map +1 -0
  15. package/dist/agents/cursor.d.ts +20 -0
  16. package/dist/agents/cursor.js +31 -0
  17. package/dist/agents/cursor.js.map +1 -0
  18. package/dist/agents/gemini.d.ts +20 -0
  19. package/dist/agents/gemini.js +31 -0
  20. package/dist/agents/gemini.js.map +1 -0
  21. package/dist/agents/json-utils.d.ts +9 -0
  22. package/dist/agents/json-utils.js +26 -0
  23. package/dist/agents/json-utils.js.map +1 -0
  24. package/dist/agents/registry.d.ts +23 -0
  25. package/dist/agents/registry.js +54 -0
  26. package/dist/agents/registry.js.map +1 -0
  27. package/dist/config/abs-config.d.ts +21 -0
  28. package/dist/config/abs-config.js +67 -0
  29. package/dist/config/abs-config.js.map +1 -0
  30. package/dist/config/mcp-config.d.ts +31 -0
  31. package/dist/config/mcp-config.js +98 -0
  32. package/dist/config/mcp-config.js.map +1 -0
  33. package/dist/config/paths.d.ts +28 -0
  34. package/dist/config/paths.js +43 -0
  35. package/dist/config/paths.js.map +1 -0
  36. package/dist/config/schemas.d.ts +84 -0
  37. package/dist/config/schemas.js +31 -0
  38. package/dist/config/schemas.js.map +1 -0
  39. package/dist/config/switchboard-config.d.ts +21 -0
  40. package/dist/config/switchboard-config.js +67 -0
  41. package/dist/config/switchboard-config.js.map +1 -0
  42. package/dist/index.d.ts +6 -0
  43. package/dist/index.js +116 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/types.d.ts +19 -0
  46. package/dist/types.js +6 -0
  47. package/dist/types.js.map +1 -0
  48. package/dist/ui/mcp-ui.d.ts +16 -0
  49. package/dist/ui/mcp-ui.js +65 -0
  50. package/dist/ui/mcp-ui.js.map +1 -0
  51. package/package.json +47 -0
package/dist/index.js ADDED
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Agent Switchboard CLI Entry Point
4
+ * Unified MCP server manager for AI coding agents
5
+ */
6
+ import chalk from "chalk";
7
+ import { Command } from "commander";
8
+ import ora from "ora";
9
+ import { getAgentById } from "./agents/registry.js";
10
+ import { loadMcpConfig, updateEnableFlags } from "./config/mcp-config.js";
11
+ import { loadSwitchboardConfig } from "./config/switchboard-config.js";
12
+ import { showMcpServerUI } from "./ui/mcp-ui.js";
13
+ const program = new Command();
14
+ program.name("asb").description("Unified MCP server manager for AI coding agents").version("0.1.0");
15
+ program
16
+ .command("mcp")
17
+ .description("Interactive UI to enable/disable MCP servers")
18
+ .action(async () => {
19
+ try {
20
+ // Step 1: Show UI and get selected servers
21
+ const selectedServers = await showMcpServerUI();
22
+ if (selectedServers.length === 0 && loadMcpConfig().mcpServers) {
23
+ console.log(chalk.yellow("\n⚠ No servers selected. Exiting without changes."));
24
+ return;
25
+ }
26
+ // Step 2: Update enable flags in mcp.json
27
+ const spinner = ora("Updating MCP configuration...").start();
28
+ updateEnableFlags(selectedServers);
29
+ spinner.succeed(chalk.green("✓ Updated ~/.agent-switchboard/mcp.json"));
30
+ // Step 3: Apply to registered agents
31
+ await applyToAgents();
32
+ // Step 4: Show summary
33
+ showSummary(selectedServers);
34
+ }
35
+ catch (error) {
36
+ if (error instanceof Error) {
37
+ console.error(chalk.red(`\n✗ Error: ${error.message}`));
38
+ }
39
+ process.exit(1);
40
+ }
41
+ });
42
+ /**
43
+ * Apply enabled MCP servers to all registered agents
44
+ */
45
+ async function applyToAgents() {
46
+ const mcpConfig = loadMcpConfig();
47
+ const switchboardConfig = loadSwitchboardConfig();
48
+ // Check if any agents are registered
49
+ if (switchboardConfig.agents.length === 0) {
50
+ console.log(chalk.yellow("\n⚠ No agents found in ~/.agent-switchboard/config.toml"));
51
+ console.log();
52
+ console.log("Please add agents to:");
53
+ console.log(chalk.dim(" ~/.agent-switchboard/config.toml"));
54
+ console.log();
55
+ console.log("Example:");
56
+ console.log(chalk.dim(' agents = ["claude-code", "cursor"]'));
57
+ return;
58
+ }
59
+ // Filter enabled servers and remove 'enable' field
60
+ const enabledServers = Object.fromEntries(Object.entries(mcpConfig.mcpServers)
61
+ .filter(([_, server]) => server.enable === true)
62
+ .map(([name, server]) => {
63
+ // Remove 'enable' field before applying to agents
64
+ const { enable: _enable, ...rest } = server;
65
+ return [name, rest];
66
+ }));
67
+ const configToApply = { mcpServers: enabledServers };
68
+ console.log();
69
+ // Apply to each registered agent
70
+ for (const agentId of switchboardConfig.agents) {
71
+ const spinner = ora().start(`Applying to ${agentId}...`);
72
+ try {
73
+ const agent = getAgentById(agentId);
74
+ agent.applyConfig(configToApply);
75
+ spinner.succeed(`${chalk.green("✓")} ${agentId} ${chalk.dim(agent.configPath())}`);
76
+ }
77
+ catch (error) {
78
+ if (error instanceof Error) {
79
+ spinner.warn(`${chalk.yellow("⚠")} ${agentId} - ${error.message} (skipped)`);
80
+ }
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Show summary of enabled/disabled servers and applied agents
86
+ */
87
+ function showSummary(selectedServers) {
88
+ const mcpConfig = loadMcpConfig();
89
+ const allServers = Object.keys(mcpConfig.mcpServers);
90
+ const enabledServers = selectedServers;
91
+ const disabledServers = allServers.filter((s) => !selectedServers.includes(s));
92
+ console.log();
93
+ console.log(chalk.blue("Summary:"));
94
+ if (enabledServers.length > 0) {
95
+ console.log(chalk.green(`\nEnabled servers (${enabledServers.length}):`));
96
+ for (const server of enabledServers) {
97
+ console.log(` ${chalk.green("✓")} ${server}`);
98
+ }
99
+ }
100
+ if (disabledServers.length > 0) {
101
+ console.log(chalk.gray(`\nDisabled servers (${disabledServers.length}):`));
102
+ for (const server of disabledServers) {
103
+ console.log(` ${chalk.gray("✗")} ${server}`);
104
+ }
105
+ }
106
+ const switchboardConfig = loadSwitchboardConfig();
107
+ if (switchboardConfig.agents.length > 0) {
108
+ console.log(chalk.blue(`\nApplied to agents (${switchboardConfig.agents.length}):`));
109
+ for (const agent of switchboardConfig.agents) {
110
+ console.log(` ${chalk.dim("•")} ${agent}`);
111
+ }
112
+ }
113
+ console.log();
114
+ }
115
+ program.parse(process.argv);
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Core type definitions for Agent Switchboard
3
+ */
4
+ /**
5
+ * Re-export config types from schemas
6
+ * These are inferred from Zod schemas to maintain single source of truth
7
+ */
8
+ export type { McpConfig, McpServer, SwitchboardConfig, } from "./config/schemas.js";
9
+ /**
10
+ * Checkbox item for interactive UI
11
+ */
12
+ export interface CheckboxItem {
13
+ /** Display name with status indicators */
14
+ name: string;
15
+ /** Actual server name (value returned when selected) */
16
+ value: string;
17
+ /** Initial checkbox state */
18
+ checked: boolean;
19
+ }
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core type definitions for Agent Switchboard
3
+ */
4
+ export {};
5
+ // AgentAdapter is defined in src/agents/adapter.ts; keep a single source of truth.
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;;AA0BH,mFAAmF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Interactive UI for managing MCP servers
3
+ * Based on claude-ext UI patterns
4
+ */
5
+ import type { CheckboxItem } from "../types.js";
6
+ /**
7
+ * Create checkbox items for MCP servers
8
+ * Displays servers with status icons and pre-selects enabled servers
9
+ * @returns Array of checkbox items sorted alphabetically
10
+ */
11
+ export declare function createMcpServerItems(): CheckboxItem[];
12
+ /**
13
+ * Show interactive checkbox UI for MCP server selection
14
+ * @returns Array of selected server names
15
+ */
16
+ export declare function showMcpServerUI(): Promise<string[]>;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Interactive UI for managing MCP servers
3
+ * Based on claude-ext UI patterns
4
+ */
5
+ import { checkbox } from "@inquirer/prompts";
6
+ import chalk from "chalk";
7
+ import { loadMcpConfig } from "../config/mcp-config.js";
8
+ /**
9
+ * Create checkbox items for MCP servers
10
+ * Displays servers with status icons and pre-selects enabled servers
11
+ * @returns Array of checkbox items sorted alphabetically
12
+ */
13
+ export function createMcpServerItems() {
14
+ const config = loadMcpConfig();
15
+ const items = [];
16
+ // Create items for all servers
17
+ for (const [name, server] of Object.entries(config.mcpServers)) {
18
+ const isEnabled = server.enable === true;
19
+ const icon = isEnabled ? chalk.green("✓") : chalk.red("✗");
20
+ const status = isEnabled ? chalk.gray("(enabled)") : chalk.gray("(disabled)");
21
+ items.push({
22
+ name: `${icon} ${name} ${status}`,
23
+ value: name,
24
+ checked: isEnabled,
25
+ });
26
+ }
27
+ // Sort alphabetically by server name
28
+ return items.sort((a, b) => a.value.localeCompare(b.value));
29
+ }
30
+ /**
31
+ * Show interactive checkbox UI for MCP server selection
32
+ * @returns Array of selected server names
33
+ */
34
+ export async function showMcpServerUI() {
35
+ const items = createMcpServerItems();
36
+ if (items.length === 0) {
37
+ console.log(chalk.yellow("⚠ No MCP servers found in ~/.agent-switchboard/mcp.json"));
38
+ console.log();
39
+ console.log("Please add servers manually to the config file:");
40
+ console.log(chalk.dim(" ~/.agent-switchboard/mcp.json"));
41
+ console.log();
42
+ console.log("Example:");
43
+ console.log(chalk.dim(` {
44
+ "mcpServers": {
45
+ "my-server": {
46
+ "command": "npx",
47
+ "args": ["-y", "package"],
48
+ "env": {},
49
+ "enable": true
50
+ }
51
+ }
52
+ }`));
53
+ return [];
54
+ }
55
+ console.log(chalk.blue("MCP Server Management"));
56
+ console.log(chalk.gray("Select which MCP servers should be enabled:"));
57
+ console.log();
58
+ const selectedServers = await checkbox({
59
+ message: "Toggle MCP servers (Space: toggle, a: all, i: invert, Enter: confirm):",
60
+ choices: items,
61
+ pageSize: 15,
62
+ });
63
+ return selectedServers;
64
+ }
65
+ //# sourceMappingURL=mcp-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-ui.js","sourceRoot":"","sources":["../../src/ui/mcp-ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IACnC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,+BAA+B;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9E,KAAK,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE;YACjC,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,SAAS;SAClB,CAAC,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACpC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CAAC;;;;;;;;;IAST,CAAC,CACF,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC;QACtC,OAAO,EAAE,wEAAwE;QACjF,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACxB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "agent-switchboard",
3
+ "version": "0.1.0",
4
+ "description": "Unified MCP server manager for AI coding agents",
5
+ "type": "module",
6
+ "bin": {
7
+ "asb": "./dist/index.js",
8
+ "agent-switchboard": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "dev": "tsx src/index.ts",
12
+ "build": "tsc && chmod +x dist/index.js",
13
+ "typecheck": "tsc --noEmit",
14
+ "lint": "biome check src/",
15
+ "lint:fix": "biome check --write src/",
16
+ "format": "biome format --write src/",
17
+ "test": "tsx tests/smoke/*.smoke.ts",
18
+ "prepublishOnly": "pnpm run build"
19
+ },
20
+ "keywords": ["mcp", "agent", "claude", "codex", "cursor", "cli"],
21
+ "author": "",
22
+ "license": "MIT",
23
+ "engines": {
24
+ "node": ">=16"
25
+ },
26
+ "packageManager": "pnpm@10.18.0",
27
+ "files": [
28
+ "dist/",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
32
+ "devDependencies": {
33
+ "@biomejs/biome": "^2.2.5",
34
+ "@types/node": "^24.6.2",
35
+ "tsx": "^4.20.6",
36
+ "typescript": "^5.9.3"
37
+ },
38
+ "dependencies": {
39
+ "@iarna/toml": "^2.2.5",
40
+ "@inquirer/prompts": "^7.8.6",
41
+ "chalk": "^5.6.2",
42
+ "commander": "^14.0.1",
43
+ "jsonc-parser": "^3.3.1",
44
+ "ora": "^9.0.0",
45
+ "zod": "^3.25.76"
46
+ }
47
+ }