agent-switchboard 0.1.0 → 0.1.1

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 (41) hide show
  1. package/README.md +8 -9
  2. package/dist/agents/adapter.d.ts +3 -3
  3. package/dist/agents/claude-code.d.ts +1 -1
  4. package/dist/agents/claude-code.js +2 -2
  5. package/dist/agents/claude-code.js.map +1 -1
  6. package/dist/agents/claude-desktop.d.ts +1 -1
  7. package/dist/agents/claude-desktop.js +2 -2
  8. package/dist/agents/claude-desktop.js.map +1 -1
  9. package/dist/agents/codex.d.ts +3 -3
  10. package/dist/agents/codex.js +6 -11
  11. package/dist/agents/codex.js.map +1 -1
  12. package/dist/agents/cursor.d.ts +1 -1
  13. package/dist/agents/cursor.js +2 -2
  14. package/dist/agents/cursor.js.map +1 -1
  15. package/dist/agents/gemini.d.ts +1 -1
  16. package/dist/agents/gemini.js +2 -2
  17. package/dist/agents/gemini.js.map +1 -1
  18. package/dist/agents/json-utils.js +3 -1
  19. package/dist/agents/json-utils.js.map +1 -1
  20. package/dist/agents/opencode.d.ts +13 -0
  21. package/dist/agents/opencode.js +80 -0
  22. package/dist/agents/opencode.js.map +1 -0
  23. package/dist/agents/registry.js +2 -0
  24. package/dist/agents/registry.js.map +1 -1
  25. package/dist/config/mcp-config.d.ts +4 -4
  26. package/dist/config/mcp-config.js +33 -12
  27. package/dist/config/mcp-config.js.map +1 -1
  28. package/dist/config/paths.d.ts +1 -1
  29. package/dist/config/paths.js +1 -1
  30. package/dist/config/paths.js.map +1 -1
  31. package/dist/config/schemas.d.ts +16 -8
  32. package/dist/config/schemas.js +2 -1
  33. package/dist/config/schemas.js.map +1 -1
  34. package/dist/index.js +9 -7
  35. package/dist/index.js.map +1 -1
  36. package/dist/ui/mcp-ui.js +3 -2
  37. package/dist/ui/mcp-ui.js.map +1 -1
  38. package/package.json +10 -3
  39. package/dist/config/abs-config.d.ts +0 -21
  40. package/dist/config/abs-config.js +0 -67
  41. package/dist/config/abs-config.js.map +0 -1
package/README.md CHANGED
@@ -1,11 +1,9 @@
1
- # Agent Switchboard (WIP)
1
+ # Agent Switchboard
2
2
 
3
- Minimal tool to manage MCP servers in one place and apply them to local agents (e.g., Codex, Cursor).
3
+ Manage MCP servers in one place and apply them to local agents (Codex, Claude Code/Desktop, Gemini) and opencode.
4
4
 
5
5
  ## Installation
6
6
 
7
- Requirements: Node.js >= 16
8
-
9
7
  Global install:
10
8
 
11
9
  ```bash
@@ -43,11 +41,12 @@ agents = ["codex", "cursor"]
43
41
  ```
44
42
 
45
43
  Supported agent IDs:
46
- - `codex` — Codex CLI (~/.codex/config.toml)
47
- - `cursor` — Cursor IDE (~/.cursor/mcp.json)
48
- - `claude-code` — Claude Code CLI (~/.claude.json)
49
- - `claude-desktop` — Claude Desktop app (platform-specific path)
50
- - `gemini` — Gemini CLI (~/.gemini/settings.json)
44
+ - `codex` — Codex CLI
45
+ - `cursor` — Cursor IDE
46
+ - `claude-code` — Claude Code CLI
47
+ - `claude-desktop` — Claude Desktop app
48
+ - `gemini` — Gemini CLI
49
+ - `opencode` — opencode global config
51
50
 
52
51
  Run `agent-switchboard mcp` again after updating the list.
53
52
 
@@ -23,10 +23,10 @@ export interface AgentAdapter {
23
23
  /**
24
24
  * Applies MCP config to the agent's config file
25
25
  * - Merges with existing config (preserves unknown fields)
26
- * - The 'enable' field is excluded from the input
27
- * @param config - MCP servers to apply (without 'enable')
26
+ * - The 'enabled' field is excluded from the input
27
+ * @param config - MCP servers to apply (without 'enabled')
28
28
  */
29
29
  applyConfig(config: {
30
- mcpServers: Record<string, Omit<McpServer, "enable">>;
30
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
31
31
  }): void;
32
32
  }
@@ -12,6 +12,6 @@ export declare class ClaudeCodeAgent implements AgentAdapter {
12
12
  readonly id: "claude-code";
13
13
  configPath(): string;
14
14
  applyConfig(config: {
15
- mcpServers: Record<string, Omit<McpServer, "enable">>;
15
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
16
16
  }): void;
17
17
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
- import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
7
+ import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from "./json-utils.js";
8
8
  /**
9
9
  * Claude Code agent adapter
10
10
  * Config location: ~/.claude.json
@@ -12,7 +12,7 @@ import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
12
12
  export class ClaudeCodeAgent {
13
13
  id = "claude-code";
14
14
  configPath() {
15
- const base = (process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0)
15
+ const base = process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0
16
16
  ? process.env.ASB_AGENTS_HOME
17
17
  : os.homedir();
18
18
  return path.join(base, ".claude.json");
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAEtG;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,EAAE,GAAG,aAAsB,CAAC;IAErC,UAAU;QACT,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1F,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,MAAiE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAEN,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACZ,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,EAAE,GAAG,aAAsB,CAAC;IAErC,UAAU;QACT,MAAM,IAAI,GACT,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,MAAkE;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
@@ -18,6 +18,6 @@ export declare class ClaudeDesktopAgent implements AgentAdapter {
18
18
  readonly id: "claude-desktop";
19
19
  configPath(): string;
20
20
  applyConfig(config: {
21
- mcpServers: Record<string, Omit<McpServer, "enable">>;
21
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
22
22
  }): void;
23
23
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
- import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
7
+ import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from "./json-utils.js";
8
8
  /**
9
9
  * Claude Desktop config file structure
10
10
  */
@@ -20,7 +20,7 @@ export class ClaudeDesktopAgent {
20
20
  id = "claude-desktop";
21
21
  configPath() {
22
22
  const platform = os.platform();
23
- const home = (process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0)
23
+ const home = process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0
24
24
  ? process.env.ASB_AGENTS_HOME
25
25
  : os.homedir();
26
26
  switch (platform) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/agents/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAGtG;;GAEG;AACH,8BAA8B;AAE9B;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACrB,EAAE,GAAG,gBAAyB,CAAC;IAExC,UAAU;QACT,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1F,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAEhB,QAAQ,QAAQ,EAAE,CAAC;YAClB,KAAK,QAAQ,EAAE,QAAQ;gBACtB,OAAO,IAAI,CAAC,IAAI,CACf,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,QAAQ,EACR,4BAA4B,CAC5B,CAAC;YACH,KAAK,OAAO,EAAE,UAAU;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtF,KAAK,OAAO,EAAE,QAAQ;gBACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YAC3E;gBACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;IAED,WAAW,CAAC,MAAiE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/agents/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAEN,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACZ,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACrB,EAAE,GAAG,gBAAyB,CAAC;IAExC,UAAU;QACT,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GACT,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAEjB,QAAQ,QAAQ,EAAE,CAAC;YAClB,KAAK,QAAQ,EAAE,QAAQ;gBACtB,OAAO,IAAI,CAAC,IAAI,CACf,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,QAAQ,EACR,4BAA4B,CAC5B,CAAC;YACH,KAAK,OAAO,EAAE,UAAU;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtF,KAAK,OAAO,EAAE,QAAQ;gBACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YAC3E;gBACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;IAED,WAAW,CAAC,MAAkE;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
@@ -12,7 +12,7 @@ export declare class CodexAgent implements AgentAdapter {
12
12
  readonly id: "codex";
13
13
  configPath(): string;
14
14
  applyConfig(config: {
15
- mcpServers: Record<string, Omit<McpServer, "enable">>;
15
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
16
16
  }): void;
17
17
  private _loadConfig;
18
18
  private _saveConfig;
@@ -21,7 +21,7 @@ export declare class CodexAgent implements AgentAdapter {
21
21
  * Merge MCP server config into TOML content
22
22
  * Preserves unrelated top-level tables/keys; rewrites mcp_servers in canonical form
23
23
  */
24
- export declare function mergeConfig(content: string, mcpServers: Record<string, Omit<McpServer, "enable">>): string;
24
+ export declare function mergeConfig(content: string, mcpServers: Record<string, Omit<McpServer, "enabled">>): string;
25
25
  /**
26
26
  * Minimal shape for a Codex MCP server entry used by the renderer
27
27
  */
@@ -39,4 +39,4 @@ export type McpServerLike = Record<string, unknown> & {
39
39
  * Key order per server: command, args, url, type, env_file, env.* (alpha), unknown (alpha)
40
40
  * Exactly one blank line between server tables; final newline added by caller
41
41
  */
42
- export declare function buildNestedToml(mcpServers: Record<string, Omit<McpServerLike, "enable">>): string;
42
+ export declare function buildNestedToml(mcpServers: Record<string, Omit<McpServerLike, "enabled">>): string;
@@ -13,7 +13,7 @@ import { parse as parseToml, stringify as tomlStringify } from "@iarna/toml";
13
13
  export class CodexAgent {
14
14
  id = "codex";
15
15
  configPath() {
16
- const base = (process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0)
16
+ const base = process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0
17
17
  ? process.env.ASB_AGENTS_HOME
18
18
  : os.homedir();
19
19
  return path.join(base, ".codex", "config.toml");
@@ -75,7 +75,7 @@ export function mergeConfig(content, mcpServers) {
75
75
  parts.push(otherToml.trimEnd());
76
76
  if (mcpToml.trim().length > 0)
77
77
  parts.push(mcpToml.trimEnd());
78
- return parts.join("\n\n") + "\n";
78
+ return `${parts.join("\n\n")}\n`;
79
79
  }
80
80
  /**
81
81
  * Build canonical TOML: one table per server [mcp_servers.<name>]
@@ -90,13 +90,7 @@ export function buildNestedToml(mcpServers) {
90
90
  const name = serverNames[idx];
91
91
  const server = (mcpServers[name] ?? {});
92
92
  lines.push(`[mcp_servers.${name}]`);
93
- const KNOWN_ORDER = [
94
- "command",
95
- "args",
96
- "url",
97
- "type",
98
- "env_file",
99
- ];
93
+ const KNOWN_ORDER = ["command", "args", "url", "type", "env_file"];
100
94
  const emit = (k, v) => {
101
95
  if (v === undefined || v === null)
102
96
  return;
@@ -106,8 +100,9 @@ export function buildNestedToml(mcpServers) {
106
100
  if (!isPrim(v) && !isPrimArr(v))
107
101
  return;
108
102
  // @iarna/toml value formatting for RHS
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
- const rhs = tomlStringify.value ? tomlStringify.value(v) : JSON.stringify(v);
103
+ const rhs = tomlStringify.value
104
+ ? tomlStringify.value(v)
105
+ : JSON.stringify(v);
111
106
  lines.push(`${k} = ${rhs}`);
112
107
  };
113
108
  // Known keys
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,6 @@ export declare class CursorAgent implements AgentAdapter {
15
15
  readonly id: "cursor";
16
16
  configPath(): string;
17
17
  applyConfig(config: {
18
- mcpServers: Record<string, Omit<McpServer, "enable">>;
18
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
19
19
  }): void;
20
20
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
- import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
7
+ import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from "./json-utils.js";
8
8
  /**
9
9
  * Cursor config file structure
10
10
  */
@@ -16,7 +16,7 @@ import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
16
16
  export class CursorAgent {
17
17
  id = "cursor";
18
18
  configPath() {
19
- const base = (process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0)
19
+ const base = process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0
20
20
  ? process.env.ASB_AGENTS_HOME
21
21
  : os.homedir();
22
22
  return path.join(base, ".cursor", "mcp.json");
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAGtG;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACT,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1F,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,MAAiE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAEN,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACZ,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACT,MAAM,IAAI,GACT,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,MAAkE;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
@@ -15,6 +15,6 @@ export declare class GeminiAgent implements AgentAdapter {
15
15
  readonly id: "gemini";
16
16
  configPath(): string;
17
17
  applyConfig(config: {
18
- mcpServers: Record<string, Omit<McpServer, "enable">>;
18
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
19
19
  }): void;
20
20
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
- import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
7
+ import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from "./json-utils.js";
8
8
  /**
9
9
  * Gemini CLI config file structure
10
10
  */
@@ -16,7 +16,7 @@ import { loadJsonFile, saveJsonFile, mergeMcpIntoAgent } from "./json-utils.js";
16
16
  export class GeminiAgent {
17
17
  id = "gemini";
18
18
  configPath() {
19
- const base = (process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0)
19
+ const base = process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0
20
20
  ? process.env.ASB_AGENTS_HOME
21
21
  : os.homedir();
22
22
  return path.join(base, ".gemini", "settings.json");
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAGtG;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACT,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1F,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CAAC,MAAiE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAEN,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACZ,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACT,MAAM,IAAI,GACT,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CAAC,MAAkE;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACD"}
@@ -16,7 +16,9 @@ export function mergeMcpIntoAgent(agentConfig, mcpServers) {
16
16
  if (Object.keys(mcpServers).length === 0)
17
17
  return agentConfig;
18
18
  const merged = { ...agentConfig };
19
- const target = (merged.mcpServers ??= {});
19
+ if (!merged.mcpServers)
20
+ merged.mcpServers = {};
21
+ const target = merged.mcpServers;
20
22
  for (const [name, server] of Object.entries(mcpServers)) {
21
23
  const existing = target[name] ?? {};
22
24
  target[name] = { ...existing, ...server };
@@ -1 +1 @@
1
- {"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/agents/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,MAAM,UAAU,YAAY,CAAmB,QAAgB,EAAE,QAAW;IAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAA4B,EAC5B,UAAkC;IAElC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE7D,MAAM,MAAM,GAAoB,EAAE,GAAG,WAAW,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAI,MAAM,CAAC,IAAI,CAA6B,IAAI,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/agents/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,MAAM,UAAU,YAAY,CAAmB,QAAgB,EAAE,QAAW;IAC3E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IAC1D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,WAA4B,EAC5B,UAAkC;IAElC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE7D,MAAM,MAAM,GAAoB,EAAE,GAAG,WAAW,EAAE,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IAEjC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAI,MAAM,CAAC,IAAI,CAA6B,IAAI,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * opencode agent adapter
3
+ * Synchronizes MCP servers into ~/.config/opencode/opencode.json
4
+ */
5
+ import type { McpServer } from "../config/schemas.js";
6
+ import type { AgentAdapter } from "./adapter.js";
7
+ export declare class OpencodeAgent implements AgentAdapter {
8
+ readonly id: "opencode";
9
+ configPath(): string;
10
+ applyConfig(config: {
11
+ mcpServers: Record<string, Omit<McpServer, "enabled">>;
12
+ }): void;
13
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * opencode agent adapter
3
+ * Synchronizes MCP servers into ~/.config/opencode/opencode.json
4
+ */
5
+ import fs from "node:fs";
6
+ import os from "node:os";
7
+ import path from "node:path";
8
+ export class OpencodeAgent {
9
+ id = "opencode";
10
+ configPath() {
11
+ const home = process.env.ASB_AGENTS_HOME && process.env.ASB_AGENTS_HOME.trim().length > 0
12
+ ? process.env.ASB_AGENTS_HOME
13
+ : os.homedir();
14
+ if (process.platform === "win32") {
15
+ return path.join(home, "AppData", "Roaming", "opencode", "opencode.json");
16
+ }
17
+ return path.join(home, ".config", "opencode", "opencode.json");
18
+ }
19
+ applyConfig(config) {
20
+ const filePath = this.configPath();
21
+ // Load existing
22
+ let current = {};
23
+ if (fs.existsSync(filePath)) {
24
+ try {
25
+ const raw = fs.readFileSync(filePath, "utf-8");
26
+ current = JSON.parse(raw);
27
+ }
28
+ catch {
29
+ // If unreadable, start fresh but do not throw to avoid blocking apply on one agent
30
+ current = {};
31
+ }
32
+ }
33
+ const out = { ...current };
34
+ const mcpOut = { ...(current.mcp ?? {}) };
35
+ for (const [name, server] of Object.entries(config.mcpServers)) {
36
+ const prev = { ...(mcpOut[name] ?? {}) };
37
+ // Map stdio/local vs http/remote
38
+ const isRemote = server.type === "http" || typeof server.url === "string";
39
+ const next = { ...prev };
40
+ if (isRemote) {
41
+ next.type = "remote";
42
+ if (typeof server.url === "string")
43
+ next.url = server.url;
44
+ // Preserve headers if present in source
45
+ if (server.headers && typeof server.headers === "object") {
46
+ next.headers = server.headers;
47
+ }
48
+ // command/args/env are not applicable to remote; drop stale keys if present
49
+ delete next.command;
50
+ delete next.environment;
51
+ }
52
+ else {
53
+ next.type = "local";
54
+ const cmd = server.command;
55
+ const args = Array.isArray(server.args) ? server.args : [];
56
+ if (typeof cmd === "string" && cmd.length > 0) {
57
+ next.command = [cmd, ...args];
58
+ }
59
+ // environment from env
60
+ if (server.env && typeof server.env === "object") {
61
+ next.environment = server.env;
62
+ }
63
+ // Drop remote-only keys
64
+ delete next.url;
65
+ delete next.headers;
66
+ }
67
+ // Entries written by ASB are always enabled (we only apply enabled ones)
68
+ next.enabled = true;
69
+ mcpOut[name] = next;
70
+ }
71
+ out.mcp = mcpOut;
72
+ // Ensure dir exists
73
+ const dir = path.dirname(filePath);
74
+ if (!fs.existsSync(dir))
75
+ fs.mkdirSync(dir, { recursive: true });
76
+ const json = `${JSON.stringify(out, null, 2)}\n`;
77
+ fs.writeFileSync(filePath, json, "utf-8");
78
+ }
79
+ }
80
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,OAAO,aAAa;IAChB,EAAE,GAAG,UAAmB,CAAC;IAElC,UAAU;QACT,MAAM,IAAI,GACT,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAEjB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAED,WAAW,CAAC,MAAkE;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEnC,gBAAgB;QAChB,IAAI,OAAO,GAAmB,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACR,mFAAmF;gBACnF,OAAO,GAAG,EAAE,CAAC;YACd,CAAC;QACF,CAAC;QAED,MAAM,GAAG,GAAmB,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,MAAM,MAAM,GAA4C,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAEnF,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAEzC,iCAAiC;YACjC,MAAM,QAAQ,GAAI,MAAc,CAAC,IAAI,KAAK,MAAM,IAAI,OAAQ,MAAc,CAAC,GAAG,KAAK,QAAQ,CAAC;YAC5F,MAAM,IAAI,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;YAElD,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,IAAI,OAAQ,MAAc,CAAC,GAAG,KAAK,QAAQ;oBAAE,IAAI,CAAC,GAAG,GAAI,MAAc,CAAC,GAAG,CAAC;gBAC5E,wCAAwC;gBACxC,IAAK,MAAc,CAAC,OAAO,IAAI,OAAQ,MAAc,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC5E,IAAI,CAAC,OAAO,GAAI,MAAc,CAAC,OAAO,CAAC;gBACxC,CAAC;gBACD,4EAA4E;gBAC5E,OAAO,IAAI,CAAC,OAAO,CAAC;gBACpB,OAAQ,IAAY,CAAC,WAAW,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,MAAM,GAAG,GAAI,MAAc,CAAC,OAA6B,CAAC;gBAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAG,MAAc,CAAC,IAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5F,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC/B,CAAC;gBACD,uBAAuB;gBACvB,IAAK,MAAc,CAAC,GAAG,IAAI,OAAQ,MAAc,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACpE,IAAI,CAAC,WAAW,GAAI,MAAc,CAAC,GAAG,CAAC;gBACxC,CAAC;gBACD,wBAAwB;gBACxB,OAAO,IAAI,CAAC,GAAG,CAAC;gBAChB,OAAO,IAAI,CAAC,OAAO,CAAC;YACrB,CAAC;YAED,yEAAyE;YACzE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;QAEjB,oBAAoB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACjD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;CACD"}
@@ -7,6 +7,7 @@ import { ClaudeDesktopAgent } from "./claude-desktop.js";
7
7
  import { CodexAgent } from "./codex.js";
8
8
  import { CursorAgent } from "./cursor.js";
9
9
  import { GeminiAgent } from "./gemini.js";
10
+ import { OpencodeAgent } from "./opencode.js";
10
11
  /**
11
12
  * Registry of all available agent adapters
12
13
  * Add new adapters here when implemented
@@ -17,6 +18,7 @@ const agents = [
17
18
  new CodexAgent(),
18
19
  new CursorAgent(),
19
20
  new GeminiAgent(),
21
+ new OpencodeAgent(),
20
22
  ];
21
23
  /**
22
24
  * Get an agent adapter by its ID
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,GAAmB;IAC9B,IAAI,eAAe,EAAE;IACrB,IAAI,kBAAkB,EAAE;IACxB,IAAI,UAAU,EAAE;IAChB,IAAI,WAAW,EAAE;IACjB,IAAI,WAAW,EAAE;CACjB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,sBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,uBAAuB,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IAClD,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,GAAmB;IAC9B,IAAI,eAAe,EAAE;IACrB,IAAI,kBAAkB,EAAE;IACxB,IAAI,UAAU,EAAE;IAChB,IAAI,WAAW,EAAE;IACjB,IAAI,WAAW,EAAE;IACjB,IAAI,aAAa,EAAE;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,sBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,uBAAuB,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IAClD,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC"}
@@ -7,7 +7,7 @@ import { type McpConfig } from "./schemas.js";
7
7
  * Loads the MCP configuration from ~/.agent-switchboard/mcp.json
8
8
  * Parses JSONC (JSON with comments) format
9
9
  * Returns default empty config if file doesn't exist
10
- * Auto-adds missing enable flags and saves the file
10
+ * Auto-adds missing enabled flags and saves the file
11
11
  *
12
12
  * @returns {McpConfig} Parsed and validated MCP configuration
13
13
  * @throws {Error} If file exists but contains invalid JSON or fails schema validation
@@ -23,9 +23,9 @@ export declare function loadMcpConfig(): McpConfig;
23
23
  */
24
24
  export declare function saveMcpConfig(config: McpConfig): void;
25
25
  /**
26
- * Updates enable flags for MCP servers based on selection
26
+ * Updates enabled flags for MCP servers based on selection
27
27
  * Preserves comments and unknown fields
28
28
  *
29
- * @param {string[]} enabledServerNames - Array of server names to enable
29
+ * @param {string[]} enabledServerNames - Array of server names to set enabled=true
30
30
  */
31
- export declare function updateEnableFlags(enabledServerNames: string[]): void;
31
+ export declare function updateEnabledFlags(enabledServerNames: string[]): void;
@@ -10,7 +10,7 @@ import { mcpConfigSchema } from "./schemas.js";
10
10
  * Loads the MCP configuration from ~/.agent-switchboard/mcp.json
11
11
  * Parses JSONC (JSON with comments) format
12
12
  * Returns default empty config if file doesn't exist
13
- * Auto-adds missing enable flags and saves the file
13
+ * Auto-adds missing enabled flags and saves the file
14
14
  *
15
15
  * @returns {McpConfig} Parsed and validated MCP configuration
16
16
  * @throws {Error} If file exists but contains invalid JSON or fails schema validation
@@ -26,16 +26,30 @@ export function loadMcpConfig() {
26
26
  const content = fs.readFileSync(configPath, "utf-8");
27
27
  // Parse JSONC (preserves comments in the parser's internal state)
28
28
  const parsed = parse(content);
29
- // Validate against Zod schema (adds default enable: true if missing)
29
+ // Validate against Zod schema (adds default enabled: true if missing)
30
30
  const validated = mcpConfigSchema.parse(parsed);
31
- // Check if any server was missing enable flag
31
+ // Ensure defaults: enabled flag and type inference
32
32
  let needsSave = false;
33
33
  if (parsed.mcpServers) {
34
- for (const [_, server] of Object.entries(parsed.mcpServers)) {
35
- if (typeof server?.enable === "undefined") {
34
+ for (const [name, server] of Object.entries(parsed.mcpServers)) {
35
+ const target = validated.mcpServers[name] ?? {};
36
+ // enabled default
37
+ if (typeof server?.enabled === "undefined") {
38
+ target.enabled = true;
36
39
  needsSave = true;
37
- break;
38
40
  }
41
+ // type inference: url -> http; else if command -> stdio; url wins if both present
42
+ if (typeof server?.type === "undefined") {
43
+ if (typeof server?.url === "string" && server.url.length > 0) {
44
+ target.type = "http";
45
+ needsSave = true;
46
+ }
47
+ else if (typeof server?.command === "string" && server.command.length > 0) {
48
+ target.type = "stdio";
49
+ needsSave = true;
50
+ }
51
+ }
52
+ validated.mcpServers[name] = { ...target };
39
53
  }
40
54
  }
41
55
  // Save back if defaults were added
@@ -65,12 +79,19 @@ export function saveMcpConfig(config) {
65
79
  try {
66
80
  // Validate config against schema before saving
67
81
  const validated = mcpConfigSchema.parse(config);
82
+ // Sanitize legacy fields: explicitly drop old 'enable' if present while preserving other unknown keys
83
+ const out = { mcpServers: {} };
84
+ for (const [name, server] of Object.entries(validated.mcpServers)) {
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ const { enable: _legacyEnable, ...rest } = server;
87
+ out.mcpServers[name] = rest;
88
+ }
68
89
  // Ensure directory exists
69
90
  if (!fs.existsSync(configDir)) {
70
91
  fs.mkdirSync(configDir, { recursive: true });
71
92
  }
72
93
  // Pretty print with 4 spaces; do not preserve comments; ensure trailing newline
73
- const json = JSON.stringify(validated, null, 4) + "\n";
94
+ const json = `${JSON.stringify(out, null, 4)}\n`;
74
95
  fs.writeFileSync(configPath, json, "utf-8");
75
96
  }
76
97
  catch (error) {
@@ -81,17 +102,17 @@ export function saveMcpConfig(config) {
81
102
  }
82
103
  }
83
104
  /**
84
- * Updates enable flags for MCP servers based on selection
105
+ * Updates enabled flags for MCP servers based on selection
85
106
  * Preserves comments and unknown fields
86
107
  *
87
- * @param {string[]} enabledServerNames - Array of server names to enable
108
+ * @param {string[]} enabledServerNames - Array of server names to set enabled=true
88
109
  */
89
- export function updateEnableFlags(enabledServerNames) {
110
+ export function updateEnabledFlags(enabledServerNames) {
90
111
  const config = loadMcpConfig();
91
112
  const enabledSet = new Set(enabledServerNames);
92
- // Update enable flag for each server
113
+ // Update enabled flag for each server
93
114
  for (const [name, server] of Object.entries(config.mcpServers)) {
94
- server.enable = enabledSet.has(name);
115
+ server.enabled = enabledSet.has(name);
95
116
  }
96
117
  saveMcpConfig(config);
97
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/config/mcp-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/config/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  export declare function getConfigDir(): string;
15
15
  /**
16
16
  * Returns the absolute path to the MCP config file (mcp.json)
17
- * This file stores all MCP server configurations with enable flags
17
+ * This file stores all MCP server configurations with enabled flags
18
18
  *
19
19
  * @returns {string} Absolute path to ~/.agent-switchboard/mcp.json
20
20
  */
@@ -24,7 +24,7 @@ export function getConfigDir() {
24
24
  }
25
25
  /**
26
26
  * Returns the absolute path to the MCP config file (mcp.json)
27
- * This file stores all MCP server configurations with enable flags
27
+ * This file stores all MCP server configurations with enabled flags
28
28
  *
29
29
  * @returns {string} Absolute path to ~/.agent-switchboard/mcp.json
30
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY;IACxB,wBAAwB;IACxB,2GAA2G;IAC3G,2DAA2D;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY;IAC3B,wBAAwB;IACxB,2GAA2G;IAC3G,2DAA2D;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC"}
@@ -12,19 +12,22 @@ export declare const mcpServerSchema: z.ZodObject<{
12
12
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
13
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
14
14
  url: z.ZodOptional<z.ZodString>;
15
- enable: z.ZodDefault<z.ZodBoolean>;
15
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
16
+ enabled: z.ZodDefault<z.ZodBoolean>;
16
17
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
17
18
  command: z.ZodOptional<z.ZodString>;
18
19
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19
20
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
21
  url: z.ZodOptional<z.ZodString>;
21
- enable: z.ZodDefault<z.ZodBoolean>;
22
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
23
+ enabled: z.ZodDefault<z.ZodBoolean>;
22
24
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
23
25
  command: z.ZodOptional<z.ZodString>;
24
26
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
25
27
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
26
28
  url: z.ZodOptional<z.ZodString>;
27
- enable: z.ZodDefault<z.ZodBoolean>;
29
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
30
+ enabled: z.ZodDefault<z.ZodBoolean>;
28
31
  }, z.ZodTypeAny, "passthrough">>;
29
32
  /**
30
33
  * Schema for MCP configuration file (~/.agent-switchboard/mcp.json)
@@ -35,19 +38,22 @@ export declare const mcpConfigSchema: z.ZodObject<{
35
38
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
36
39
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
37
40
  url: z.ZodOptional<z.ZodString>;
38
- enable: z.ZodDefault<z.ZodBoolean>;
41
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
42
+ enabled: z.ZodDefault<z.ZodBoolean>;
39
43
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
40
44
  command: z.ZodOptional<z.ZodString>;
41
45
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
42
46
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
43
47
  url: z.ZodOptional<z.ZodString>;
44
- enable: z.ZodDefault<z.ZodBoolean>;
48
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
49
+ enabled: z.ZodDefault<z.ZodBoolean>;
45
50
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
46
51
  command: z.ZodOptional<z.ZodString>;
47
52
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
48
53
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
49
54
  url: z.ZodOptional<z.ZodString>;
50
- enable: z.ZodDefault<z.ZodBoolean>;
55
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
56
+ enabled: z.ZodDefault<z.ZodBoolean>;
51
57
  }, z.ZodTypeAny, "passthrough">>>>;
52
58
  }, "strip", z.ZodTypeAny, {
53
59
  mcpServers: Record<string, z.objectOutputType<{
@@ -55,7 +61,8 @@ export declare const mcpConfigSchema: z.ZodObject<{
55
61
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
56
62
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
57
63
  url: z.ZodOptional<z.ZodString>;
58
- enable: z.ZodDefault<z.ZodBoolean>;
64
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
65
+ enabled: z.ZodDefault<z.ZodBoolean>;
59
66
  }, z.ZodTypeAny, "passthrough">>;
60
67
  }, {
61
68
  mcpServers?: Record<string, z.objectInputType<{
@@ -63,7 +70,8 @@ export declare const mcpConfigSchema: z.ZodObject<{
63
70
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
64
71
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
65
72
  url: z.ZodOptional<z.ZodString>;
66
- enable: z.ZodDefault<z.ZodBoolean>;
73
+ type: z.ZodOptional<z.ZodEnum<["stdio", "http"]>>;
74
+ enabled: z.ZodDefault<z.ZodBoolean>;
67
75
  }, z.ZodTypeAny, "passthrough">> | undefined;
68
76
  }>;
69
77
  /**
@@ -13,7 +13,8 @@ export const mcpServerSchema = z
13
13
  args: z.array(z.string()).optional(),
14
14
  env: z.record(z.string()).optional(),
15
15
  url: z.string().url().optional(),
16
- enable: z.boolean().default(true),
16
+ type: z.enum(["stdio", "http"]).optional(),
17
+ enabled: z.boolean().default(true),
17
18
  })
18
19
  .passthrough(); // Allow unknown fields
19
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC9B,MAAM,CAAC;IACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACjC,CAAC;KACD,WAAW,EAAE,CAAC,CAAC,uBAAuB;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC9B,MAAM,CAAC;IACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAClC,CAAC;KACD,WAAW,EAAE,CAAC,CAAC,uBAAuB;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import chalk from "chalk";
7
7
  import { Command } from "commander";
8
8
  import ora from "ora";
9
9
  import { getAgentById } from "./agents/registry.js";
10
- import { loadMcpConfig, updateEnableFlags } from "./config/mcp-config.js";
10
+ import { loadMcpConfig, updateEnabledFlags } from "./config/mcp-config.js";
11
11
  import { loadSwitchboardConfig } from "./config/switchboard-config.js";
12
12
  import { showMcpServerUI } from "./ui/mcp-ui.js";
13
13
  const program = new Command();
@@ -23,9 +23,9 @@ program
23
23
  console.log(chalk.yellow("\n⚠ No servers selected. Exiting without changes."));
24
24
  return;
25
25
  }
26
- // Step 2: Update enable flags in mcp.json
26
+ // Step 2: Update enabled flags in mcp.json
27
27
  const spinner = ora("Updating MCP configuration...").start();
28
- updateEnableFlags(selectedServers);
28
+ updateEnabledFlags(selectedServers);
29
29
  spinner.succeed(chalk.green("✓ Updated ~/.agent-switchboard/mcp.json"));
30
30
  // Step 3: Apply to registered agents
31
31
  await applyToAgents();
@@ -56,12 +56,14 @@ async function applyToAgents() {
56
56
  console.log(chalk.dim(' agents = ["claude-code", "cursor"]'));
57
57
  return;
58
58
  }
59
- // Filter enabled servers and remove 'enable' field
59
+ // Filter enabled servers and remove 'enabled' field
60
60
  const enabledServers = Object.fromEntries(Object.entries(mcpConfig.mcpServers)
61
- .filter(([_, server]) => server.enable === true)
61
+ // biome-ignore lint/suspicious/noExplicitAny: McpServer passthrough schema allows additional fields
62
+ .filter(([_, server]) => server.enabled === true)
62
63
  .map(([name, server]) => {
63
- // Remove 'enable' field before applying to agents
64
- const { enable: _enable, ...rest } = server;
64
+ // Remove 'enabled' field before applying to agents
65
+ // biome-ignore lint/suspicious/noExplicitAny: McpServer passthrough schema allows additional fields
66
+ const { enabled: _enabled, ...rest } = server;
65
67
  return [name, rest];
66
68
  }));
67
69
  const configToApply = { mcpServers: enabledServers };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/ui/mcp-ui.js CHANGED
@@ -15,7 +15,8 @@ export function createMcpServerItems() {
15
15
  const items = [];
16
16
  // Create items for all servers
17
17
  for (const [name, server] of Object.entries(config.mcpServers)) {
18
- const isEnabled = server.enable === true;
18
+ // biome-ignore lint/suspicious/noExplicitAny: McpServer passthrough schema allows additional fields
19
+ const isEnabled = server.enabled === true;
19
20
  const icon = isEnabled ? chalk.green("✓") : chalk.red("✗");
20
21
  const status = isEnabled ? chalk.gray("(enabled)") : chalk.gray("(disabled)");
21
22
  items.push({
@@ -46,7 +47,7 @@ export async function showMcpServerUI() {
46
47
  "command": "npx",
47
48
  "args": ["-y", "package"],
48
49
  "env": {},
49
- "enable": true
50
+ "enabled": true
50
51
  }
51
52
  }
52
53
  }`));
@@ -1 +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"}
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,oGAAoG;QACpG,MAAM,SAAS,GAAI,MAAc,CAAC,OAAO,KAAK,IAAI,CAAC;QACnD,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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-switchboard",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Unified MCP server manager for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,10 +14,17 @@
14
14
  "lint": "biome check src/",
15
15
  "lint:fix": "biome check --write src/",
16
16
  "format": "biome format --write src/",
17
- "test": "tsx tests/smoke/*.smoke.ts",
17
+ "test": "tsx --test tests/*.test.ts",
18
18
  "prepublishOnly": "pnpm run build"
19
19
  },
20
- "keywords": ["mcp", "agent", "claude", "codex", "cursor", "cli"],
20
+ "keywords": [
21
+ "mcp",
22
+ "agent",
23
+ "claude",
24
+ "codex",
25
+ "cursor",
26
+ "cli"
27
+ ],
21
28
  "author": "",
22
29
  "license": "MIT",
23
30
  "engines": {
@@ -1,21 +0,0 @@
1
- /**
2
- * Agent Switchboard configuration loader and saver (TOML format)
3
- * Manages the list of agents to apply MCP configs to
4
- */
5
- import { type AbsConfig } from "./schemas.js";
6
- /**
7
- * Loads the ABS configuration from ~/.agent-switchboard/config.toml
8
- * Returns default empty agents list if file doesn't exist
9
- *
10
- * @returns {AbsConfig} Parsed and validated ABS configuration
11
- * @throws {Error} If file exists but contains invalid TOML or fails schema validation
12
- */
13
- export declare function loadAbsConfig(): AbsConfig;
14
- /**
15
- * Saves the ABS configuration to ~/.agent-switchboard/config.toml
16
- * Creates directory and file if they don't exist
17
- *
18
- * @param {AbsConfig} config - Configuration to save
19
- * @throws {Error} If config fails schema validation or write operation fails
20
- */
21
- export declare function saveAbsConfig(config: AbsConfig): void;
@@ -1,67 +0,0 @@
1
- /**
2
- * Agent Switchboard configuration loader and saver (TOML format)
3
- * Manages the list of agents to apply MCP configs to
4
- */
5
- import fs from "node:fs";
6
- import { parse, stringify } from "@iarna/toml";
7
- import { absConfigSchema } from "./schemas.js";
8
- import { getAbsConfigPath, getConfigDir } from "./paths.js";
9
- /**
10
- * Loads the ABS configuration from ~/.agent-switchboard/config.toml
11
- * Returns default empty agents list if file doesn't exist
12
- *
13
- * @returns {AbsConfig} Parsed and validated ABS configuration
14
- * @throws {Error} If file exists but contains invalid TOML or fails schema validation
15
- */
16
- export function loadAbsConfig() {
17
- const configPath = getAbsConfigPath();
18
- // Return default config if file doesn't exist
19
- if (!fs.existsSync(configPath)) {
20
- return { agents: [] };
21
- }
22
- try {
23
- // Read file content
24
- const content = fs.readFileSync(configPath, "utf-8");
25
- // Parse TOML
26
- const parsed = parse(content);
27
- // Validate against Zod schema
28
- const validated = absConfigSchema.parse(parsed);
29
- return validated;
30
- }
31
- catch (error) {
32
- if (error instanceof Error) {
33
- throw new Error(`Failed to load ABS config from ${configPath}: ${error.message}`);
34
- }
35
- throw error;
36
- }
37
- }
38
- /**
39
- * Saves the ABS configuration to ~/.agent-switchboard/config.toml
40
- * Creates directory and file if they don't exist
41
- *
42
- * @param {AbsConfig} config - Configuration to save
43
- * @throws {Error} If config fails schema validation or write operation fails
44
- */
45
- export function saveAbsConfig(config) {
46
- const configPath = getAbsConfigPath();
47
- const configDir = getConfigDir();
48
- try {
49
- // Validate config against schema before saving
50
- const validated = absConfigSchema.parse(config);
51
- // Ensure directory exists
52
- if (!fs.existsSync(configDir)) {
53
- fs.mkdirSync(configDir, { recursive: true });
54
- }
55
- // Stringify to TOML format
56
- const content = stringify(validated);
57
- // Write to file
58
- fs.writeFileSync(configPath, content, "utf-8");
59
- }
60
- catch (error) {
61
- if (error instanceof Error) {
62
- throw new Error(`Failed to save ABS config to ${configPath}: ${error.message}`);
63
- }
64
- throw error;
65
- }
66
- }
67
- //# sourceMappingURL=abs-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"abs-config.js","sourceRoot":"","sources":["../../src/config/abs-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAkB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa;IAC5B,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAEtC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACJ,oBAAoB;QACpB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErD,aAAa;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9B,8BAA8B;QAC9B,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC9C,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,IAAI,CAAC;QACJ,+CAA+C;QAC/C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,2BAA2B;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAErC,gBAAgB;QAChB,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC"}