agent-switchboard 0.4.2 → 0.4.4

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 (115) hide show
  1. package/README.md +45 -0
  2. package/dist/agents/codex.d.ts +2 -2
  3. package/dist/agents/codex.js +13 -7
  4. package/dist/agents/codex.js.map +1 -1
  5. package/dist/agents/cursor.js +5 -17
  6. package/dist/agents/cursor.js.map +1 -1
  7. package/dist/agents/gemini.js +10 -50
  8. package/dist/agents/gemini.js.map +1 -1
  9. package/dist/agents/json-utils.d.ts +12 -0
  10. package/dist/agents/json-utils.js +27 -1
  11. package/dist/agents/json-utils.js.map +1 -1
  12. package/dist/agents/opencode.js +3 -3
  13. package/dist/agents/opencode.js.map +1 -1
  14. package/dist/agents/trae.js +5 -17
  15. package/dist/agents/trae.js.map +1 -1
  16. package/dist/commands/distribution.js +6 -1
  17. package/dist/commands/distribution.js.map +1 -1
  18. package/dist/config/application-config.d.ts +1 -0
  19. package/dist/config/application-config.js +36 -4
  20. package/dist/config/application-config.js.map +1 -1
  21. package/dist/config/layered-config.js +1 -5
  22. package/dist/config/layered-config.js.map +1 -1
  23. package/dist/config/mcp-config.d.ts +2 -3
  24. package/dist/config/mcp-config.js +2 -7
  25. package/dist/config/mcp-config.js.map +1 -1
  26. package/dist/config/schemas.js +1 -1
  27. package/dist/config/schemas.js.map +1 -1
  28. package/dist/extensions/api.d.ts +9 -0
  29. package/dist/extensions/api.js +40 -16
  30. package/dist/extensions/api.js.map +1 -1
  31. package/dist/extensions/loader.d.ts +2 -0
  32. package/dist/extensions/loader.js +9 -5
  33. package/dist/extensions/loader.js.map +1 -1
  34. package/dist/hooks/distribution.d.ts +3 -1
  35. package/dist/hooks/distribution.js +32 -13
  36. package/dist/hooks/distribution.js.map +1 -1
  37. package/dist/index.js +150 -37
  38. package/dist/index.js.map +1 -1
  39. package/dist/library/distribute-bundle.js +89 -28
  40. package/dist/library/distribute-bundle.js.map +1 -1
  41. package/dist/library/distribute.d.ts +2 -2
  42. package/dist/library/distribute.js +40 -16
  43. package/dist/library/distribute.js.map +1 -1
  44. package/dist/library/state.js +12 -4
  45. package/dist/library/state.js.map +1 -1
  46. package/dist/manifest/store.d.ts +12 -1
  47. package/dist/manifest/store.js +63 -8
  48. package/dist/manifest/store.js.map +1 -1
  49. package/dist/marketplace/plugin-loader.d.ts +2 -2
  50. package/dist/marketplace/plugin-loader.js +8 -6
  51. package/dist/marketplace/plugin-loader.js.map +1 -1
  52. package/dist/marketplace/source-loader.js +3 -1
  53. package/dist/marketplace/source-loader.js.map +1 -1
  54. package/dist/mcp/distribution.js +109 -41
  55. package/dist/mcp/distribution.js.map +1 -1
  56. package/dist/plugins/identity.d.ts +8 -0
  57. package/dist/plugins/identity.js +22 -0
  58. package/dist/plugins/identity.js.map +1 -0
  59. package/dist/plugins/index.d.ts +4 -0
  60. package/dist/plugins/index.js +59 -35
  61. package/dist/plugins/index.js.map +1 -1
  62. package/dist/rules/block-merge.d.ts +0 -7
  63. package/dist/rules/block-merge.js +2 -1
  64. package/dist/rules/block-merge.js.map +1 -1
  65. package/dist/rules/distribution.js +18 -5
  66. package/dist/rules/distribution.js.map +1 -1
  67. package/dist/rules/state.js +11 -2
  68. package/dist/rules/state.js.map +1 -1
  69. package/dist/skills/distribution.js +39 -9
  70. package/dist/skills/distribution.js.map +1 -1
  71. package/dist/subagents/distribution.js +6 -1
  72. package/dist/subagents/distribution.js.map +1 -1
  73. package/dist/subagents/inventory.js +3 -3
  74. package/dist/subagents/inventory.js.map +1 -1
  75. package/dist/sync/command.js +23 -5
  76. package/dist/sync/command.js.map +1 -1
  77. package/dist/targets/builtin/claude-code.js +3 -1
  78. package/dist/targets/builtin/claude-code.js.map +1 -1
  79. package/dist/targets/builtin/common.d.ts +4 -1
  80. package/dist/targets/builtin/common.js +11 -1
  81. package/dist/targets/builtin/common.js.map +1 -1
  82. package/dist/targets/builtin/cursor.js +2 -7
  83. package/dist/targets/builtin/cursor.js.map +1 -1
  84. package/dist/targets/builtin/opencode.js +3 -1
  85. package/dist/targets/builtin/opencode.js.map +1 -1
  86. package/dist/targets/dsl/compiler.js +60 -26
  87. package/dist/targets/dsl/compiler.js.map +1 -1
  88. package/dist/targets/init.d.ts +1 -1
  89. package/dist/targets/init.js +3 -2
  90. package/dist/targets/init.js.map +1 -1
  91. package/dist/ui/fuzzy-multi-select.js +2 -1
  92. package/dist/ui/fuzzy-multi-select.js.map +1 -1
  93. package/dist/ui/library-selector.js +8 -9
  94. package/dist/ui/library-selector.js.map +1 -1
  95. package/dist/ui/mcp-ui.d.ts +2 -0
  96. package/dist/ui/mcp-ui.js +4 -4
  97. package/dist/ui/mcp-ui.js.map +1 -1
  98. package/dist/ui/plugin-ui.js +2 -2
  99. package/dist/ui/plugin-ui.js.map +1 -1
  100. package/dist/ui/rule-ui.js +4 -5
  101. package/dist/ui/rule-ui.js.map +1 -1
  102. package/dist/ui/selection-state.d.ts +0 -1
  103. package/dist/ui/selection-state.js +2 -5
  104. package/dist/ui/selection-state.js.map +1 -1
  105. package/dist/ui/subagent-ui.js +2 -16
  106. package/dist/ui/subagent-ui.js.map +1 -1
  107. package/dist/util/cli.d.ts +1 -0
  108. package/dist/util/cli.js +14 -3
  109. package/dist/util/cli.js.map +1 -1
  110. package/dist/util/extras.d.ts +2 -0
  111. package/dist/util/extras.js +3 -1
  112. package/dist/util/extras.js.map +1 -1
  113. package/dist/util/markdown.js +8 -2
  114. package/dist/util/markdown.js.map +1 -1
  115. package/package.json +1 -1
package/README.md CHANGED
@@ -183,6 +183,41 @@ asb agent -p team --project /path/to/repo # both
183
183
 
184
184
  When `--project` is used, outputs target the project directory (e.g. `<project>/AGENTS.md`, `<project>/.claude/commands/`).
185
185
 
186
+ Interactive selectors follow the writable layer you target:
187
+
188
+ - User scope shows and edits the merged user selection.
189
+ - `-p/--profile` shows only that profile layer's explicit selection.
190
+ - `-P/--project` shows only that project layer's explicit selection.
191
+
192
+ Inherited entries from higher-priority layers do not participate in scoped sync until you write them into that profile or project layer. Saving an empty scoped selection creates an explicit empty override for that layer.
193
+
194
+ ### Project Distribution Modes
195
+
196
+ Project-scoped sync supports three modes under `[distribution.project]`:
197
+
198
+ ```toml
199
+ [distribution.project]
200
+ mode = "managed" # or: "exclusive", "none"
201
+ collision = "warn-skip" # managed only: "warn-skip", "error", "takeover"
202
+
203
+ [distribution.project.rules]
204
+ placement = "prepend" # or: "append"
205
+ ```
206
+
207
+ | Mode | Behavior |
208
+ |:------------|:---------|
209
+ | `exclusive` | ASB writes project-scoped outputs directly and cleans up inactive entries in target directories. |
210
+ | `managed` | Default. Uses a manifest at `<project>/.asb/state/distribution.json` so cleanup only removes files and directories previously written by ASB. Shared rule files use block merge instead of full replacement. |
211
+ | `none` | Disables all project-scoped writes. Selections can still be edited in `.asb.toml`, but project distribution commands and `asb sync -P <project>` skip output generation. |
212
+
213
+ Managed-mode collision policy controls what happens when ASB encounters a foreign file or directory at a target path:
214
+
215
+ | Policy | Behavior |
216
+ |:------------|:---------|
217
+ | `warn-skip` | Report a conflict and leave the foreign path untouched. |
218
+ | `error` | Report a hard error and fail the affected distribution step. |
219
+ | `takeover` | Treat the path as ASB-managed and overwrite it. |
220
+
186
221
  ## Libraries
187
222
 
188
223
  All library types follow the same pattern:
@@ -345,8 +380,12 @@ asb plugin list # show all discovered plugins
345
380
  asb plugin info context7 # show plugin details + components
346
381
  ```
347
382
 
383
+ Discovered plugin MCP servers appear in the MCP picker alongside locally-defined servers and can be enabled per user, profile, or project scope.
384
+
348
385
  Enabled plugin components are expanded into entry-level `enabled` arrays during `asb sync`. Components appear with a namespace prefix (e.g. `context7:docs-researcher`) and can be individually controlled via per-application overrides.
349
386
 
387
+ Plugin MCP servers are also addressable directly through `[mcp].enabled` and the `asb mcp` selector. As long as the plugin source is discoverable, a plugin MCP server can be enabled directly without adding its parent plugin to `[plugins].enabled`.
388
+
350
389
  ## Sync
351
390
 
352
391
  Push all libraries and MCP config to every active application in one step:
@@ -357,6 +396,12 @@ asb sync [-p <profile>] [-P <path>]
357
396
 
358
397
  This merges layered config, applies per-application overrides, and writes target files in place. Files are only rewritten when content changes.
359
398
 
399
+ For project scope, sync honors `[distribution.project].mode`:
400
+
401
+ - `managed` keeps a manifest and cleans up only ASB-owned project outputs
402
+ - `exclusive` writes directly to the project targets
403
+ - `none` skips project writes entirely
404
+
360
405
  ## Environment
361
406
 
362
407
  | Variable | Default | Purpose |
@@ -37,11 +37,11 @@ export declare class CodexAgent implements AgentAdapter {
37
37
  * Preserves unrelated top-level tables/keys; rewrites mcp_servers in canonical form
38
38
  * Note: SSE servers are filtered out as Codex only supports stdio and http
39
39
  */
40
- export declare function mergeConfig(content: string, mcpServers: Record<string, Omit<McpServer, 'enabled'>>): string;
40
+ export declare function mergeConfig(content: string, mcpServers: Record<string, Omit<McpServer, 'enabled'>>): string | null;
41
41
  /**
42
42
  * Managed merge for TOML: preserve foreign servers, only upsert/remove ASB-owned.
43
43
  */
44
- export declare function managedMergeConfig(content: string, mcpServers: Record<string, Omit<McpServer, 'enabled'>>, previouslyOwned: ReadonlySet<string>): string;
44
+ export declare function managedMergeConfig(content: string, mcpServers: Record<string, Omit<McpServer, 'enabled'>>, previouslyOwned: ReadonlySet<string>): string | null;
45
45
  /**
46
46
  * Ensure a project trust entry exists in the global config TOML content.
47
47
  * Returns the (possibly updated) content and whether it changed.
@@ -23,9 +23,12 @@ export class CodexAgent {
23
23
  return path.join(path.resolve(projectRoot), '.codex', 'config.toml');
24
24
  }
25
25
  applyConfig(config) {
26
- const content = this._loadConfig(this.configPath());
26
+ const configPath = this.configPath();
27
+ const content = this._loadConfig(configPath);
27
28
  const updated = mergeConfig(content, sanitizeServerKeys(config.mcpServers));
28
- this._saveConfig(this.configPath(), updated);
29
+ if (updated === null)
30
+ return;
31
+ this._saveConfig(configPath, updated);
29
32
  }
30
33
  applyProjectConfig(projectRoot, config, options) {
31
34
  const configPath = this.projectConfigPath(projectRoot);
@@ -33,6 +36,8 @@ export class CodexAgent {
33
36
  const updated = options?.previouslyOwned
34
37
  ? managedMergeConfig(content, sanitizeServerKeys(config.mcpServers), options.previouslyOwned)
35
38
  : mergeConfig(content, sanitizeServerKeys(config.mcpServers));
39
+ if (updated === null)
40
+ return;
36
41
  this._saveConfig(configPath, updated);
37
42
  this._ensureProjectTrusted(projectRoot);
38
43
  }
@@ -82,9 +87,9 @@ export function mergeConfig(content, mcpServers) {
82
87
  otherTopLevel = rest;
83
88
  }
84
89
  }
85
- catch {
86
- // If parsing fails, drop old content entirely to avoid propagating bad state
87
- otherTopLevel = {};
90
+ catch (error) {
91
+ console.warn(`[codex] Failed to parse existing config: ${error instanceof Error ? error.message : error}; skipping write to avoid data loss`);
92
+ return null;
88
93
  }
89
94
  // Filter out SSE servers - Codex only supports stdio and http
90
95
  const filteredServers = {};
@@ -130,8 +135,9 @@ export function managedMergeConfig(content, mcpServers, previouslyOwned) {
130
135
  parsed = parseToml(content);
131
136
  }
132
137
  }
133
- catch {
134
- parsed = {};
138
+ catch (error) {
139
+ console.warn(`[codex] Failed to parse existing config: ${error instanceof Error ? error.message : error}; skipping write to avoid data loss`);
140
+ return null;
135
141
  }
136
142
  const { mcp_servers: existingMcp, ...rest } = parsed;
137
143
  const existingServers = existingMcp ?? {};
@@ -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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"}
@@ -2,10 +2,9 @@
2
2
  * Cursor agent adapter
3
3
  * Manages MCP server configuration for Cursor IDE/CLI
4
4
  */
5
- import fs from 'node:fs';
6
5
  import path from 'node:path';
7
6
  import { getCursorDir, getProjectCursorDir } from '../config/paths.js';
8
- import { loadJsonFile, managedMergeMcp, mergeMcpIntoAgent, sanitizeServerKeys, saveJsonFile, } from './json-utils.js';
7
+ import { applyJsonMcpConfig } from './json-utils.js';
9
8
  /**
10
9
  * Cursor agent adapter
11
10
  * Config location: ~/.cursor/mcp.json
@@ -22,23 +21,12 @@ export class CursorAgent {
22
21
  return path.join(getProjectCursorDir(projectRoot), 'mcp.json');
23
22
  }
24
23
  applyConfig(config) {
25
- const configPath = this.configPath();
26
- const agentConfig = loadJsonFile(configPath, { mcpServers: {} });
27
- const servers = sanitizeServerKeys(config.mcpServers);
28
- const merged = mergeMcpIntoAgent(agentConfig, servers);
29
- saveJsonFile(configPath, merged);
24
+ applyJsonMcpConfig(this.configPath(), config.mcpServers);
30
25
  }
31
26
  applyProjectConfig(projectRoot, config, options) {
32
- const configPath = this.projectConfigPath(projectRoot);
33
- const existing = loadJsonFile(configPath, { mcpServers: {} });
34
- const servers = sanitizeServerKeys(config.mcpServers);
35
- const merged = options?.previouslyOwned
36
- ? managedMergeMcp(existing, servers, options.previouslyOwned)
37
- : mergeMcpIntoAgent(existing, servers);
38
- const dir = path.dirname(configPath);
39
- if (!fs.existsSync(dir))
40
- fs.mkdirSync(dir, { recursive: true });
41
- saveJsonFile(configPath, merged);
27
+ applyJsonMcpConfig(this.projectConfigPath(projectRoot), config.mcpServers, {
28
+ previouslyOwned: options?.previouslyOwned,
29
+ });
42
30
  }
43
31
  }
44
32
  //# sourceMappingURL=cursor.js.map
@@ -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;AAC7B,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAEL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,OAAiC,CAAC,CAAC;QACjF,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE,EAClE,OAAmD;QAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,EAAE,eAAe;YACrC,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAiC,EAAE,OAAO,CAAC,eAAe,CAAC;YACvF,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAiC,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;IACrF,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE,EAClE,OAAmD;QAEnD,kBAAkB,CAChB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EACnC,MAAM,CAAC,UAAoC,EAC3C;YACE,eAAe,EAAE,OAAO,EAAE,eAAe;SAC1C,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -2,10 +2,9 @@
2
2
  * Gemini CLI agent adapter
3
3
  * Manages MCP server configuration for Gemini CLI
4
4
  */
5
- import fs from 'node:fs';
6
5
  import path from 'node:path';
7
6
  import { getGeminiSettingsPath } from '../config/paths.js';
8
- import { loadJsonFile, saveJsonFile } from './json-utils.js';
7
+ import { applyJsonMcpConfig } from './json-utils.js';
9
8
  /**
10
9
  * Map MCP server config to Gemini format
11
10
  * - stdio: {command, args, env} (no type field)
@@ -15,48 +14,13 @@ import { loadJsonFile, saveJsonFile } from './json-utils.js';
15
14
  function mapServerForGemini(server) {
16
15
  const { type, url, command, args, env, ...rest } = server;
17
16
  if (type === 'http' && typeof url === 'string') {
18
- // HTTP transport uses httpUrl field in Gemini
19
17
  return { httpUrl: url, ...rest };
20
18
  }
21
19
  if ((type === 'sse' || type === undefined) && typeof url === 'string' && !command) {
22
- // SSE transport (or inferred remote) uses url field
23
20
  return { url, ...rest };
24
21
  }
25
- // stdio transport
26
22
  return { command, args, env, ...rest };
27
23
  }
28
- /**
29
- * Merge MCP servers into Gemini config with proper field mapping
30
- */
31
- function mergeMcpForGemini(agentConfig, mcpServers) {
32
- const merged = { ...agentConfig };
33
- merged.mcpServers = {};
34
- for (const [name, server] of Object.entries(mcpServers)) {
35
- const existing = agentConfig.mcpServers?.[name] ?? {};
36
- const mapped = mapServerForGemini(server);
37
- merged.mcpServers[name] = { ...existing, ...mapped };
38
- }
39
- return merged;
40
- }
41
- /**
42
- * Managed merge for Gemini: preserve foreign servers, only upsert/remove ASB-owned.
43
- */
44
- function managedMergeMcpForGemini(agentConfig, mcpServers, previouslyOwned) {
45
- const merged = { ...agentConfig };
46
- const existing = { ...(agentConfig.mcpServers ?? {}) };
47
- for (const name of previouslyOwned) {
48
- if (!(name in mcpServers)) {
49
- delete existing[name];
50
- }
51
- }
52
- for (const [name, server] of Object.entries(mcpServers)) {
53
- const prev = existing[name] ?? {};
54
- const mapped = mapServerForGemini(server);
55
- existing[name] = { ...prev, ...mapped };
56
- }
57
- merged.mcpServers = existing;
58
- return merged;
59
- }
60
24
  /**
61
25
  * Gemini CLI agent adapter
62
26
  * Config location: ~/.gemini/settings.json
@@ -73,21 +37,17 @@ export class GeminiAgent {
73
37
  return path.join(path.resolve(projectRoot), '.gemini', 'settings.json');
74
38
  }
75
39
  applyConfig(config) {
76
- const configPath = this.configPath();
77
- const agentConfig = loadJsonFile(configPath, { mcpServers: {} });
78
- const merged = mergeMcpForGemini(agentConfig, config.mcpServers);
79
- saveJsonFile(configPath, merged);
40
+ applyJsonMcpConfig(this.configPath(), config.mcpServers, {
41
+ sanitize: false,
42
+ serverMapper: mapServerForGemini,
43
+ });
80
44
  }
81
45
  applyProjectConfig(projectRoot, config, options) {
82
- const configPath = this.projectConfigPath(projectRoot);
83
- const existing = loadJsonFile(configPath, { mcpServers: {} });
84
- const merged = options?.previouslyOwned
85
- ? managedMergeMcpForGemini(existing, config.mcpServers, options.previouslyOwned)
86
- : mergeMcpForGemini(existing, config.mcpServers);
87
- const dir = path.dirname(configPath);
88
- if (!fs.existsSync(dir))
89
- fs.mkdirSync(dir, { recursive: true });
90
- saveJsonFile(configPath, merged);
46
+ applyJsonMcpConfig(this.projectConfigPath(projectRoot), config.mcpServers, {
47
+ sanitize: false,
48
+ serverMapper: mapServerForGemini,
49
+ previouslyOwned: options?.previouslyOwned,
50
+ });
91
51
  }
92
52
  }
93
53
  //# sourceMappingURL=gemini.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAiC,CAAC;IAErF,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAClF,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,OAAO,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,UAAoC,EAAE;YACjF,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,kBAAkB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE,EAClE,OAAmD;QAEnD,kBAAkB,CAChB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EACnC,MAAM,CAAC,UAAoC,EAC3C;YACE,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,kBAAkB;YAChC,eAAe,EAAE,OAAO,EAAE,eAAe;SAC1C,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -16,6 +16,18 @@ export declare function sanitizeMcpName(name: string): string;
16
16
  * Warns on collision (e.g. `foo:bar` and `foo-bar` both map to `foo-bar`).
17
17
  */
18
18
  export declare function sanitizeServerKeys<T>(servers: Record<string, T>): Record<string, T>;
19
+ /**
20
+ * Common apply flow for JSON-based agent adapters.
21
+ * Handles: load -> sanitize -> merge (exclusive or managed) -> mkdir -> save.
22
+ *
23
+ * @param serverMapper Optional per-server transform (e.g., Gemini httpUrl mapping).
24
+ * When omitted, servers are passed through as-is.
25
+ */
26
+ export declare function applyJsonMcpConfig(configPath: string, mcpServers: Record<string, object>, options?: {
27
+ previouslyOwned?: ReadonlySet<string>;
28
+ serverMapper?: (server: object) => Record<string, unknown>;
29
+ sanitize?: boolean;
30
+ }): void;
19
31
  export declare function mergeMcpIntoAgent(agentConfig: JsonAgentConfig, mcpServers: Record<string, object>): JsonAgentConfig;
20
32
  /**
21
33
  * Managed merge: preserve foreign servers, only upsert/remove ASB-owned servers.
@@ -2,6 +2,7 @@
2
2
  * Shared JSON file helpers for agent adapters
3
3
  */
4
4
  import fs from 'node:fs';
5
+ import path from 'node:path';
5
6
  export function loadJsonFile(filePath, fallback) {
6
7
  if (!fs.existsSync(filePath))
7
8
  return fallback;
@@ -30,13 +31,38 @@ export function sanitizeServerKeys(servers) {
30
31
  const key = sanitizeMcpName(name);
31
32
  const prev = seen.get(key);
32
33
  if (prev !== undefined && prev !== name) {
33
- console.warn(`[asb] MCP name collision: "${prev}" and "${name}" both map to "${key}"`);
34
+ throw new Error(`MCP name collision: "${prev}" and "${name}" both sanitize to "${key}". Rename one of the servers to avoid data loss.`);
34
35
  }
35
36
  seen.set(key, name);
36
37
  result[key] = server;
37
38
  }
38
39
  return result;
39
40
  }
41
+ /**
42
+ * Common apply flow for JSON-based agent adapters.
43
+ * Handles: load -> sanitize -> merge (exclusive or managed) -> mkdir -> save.
44
+ *
45
+ * @param serverMapper Optional per-server transform (e.g., Gemini httpUrl mapping).
46
+ * When omitted, servers are passed through as-is.
47
+ */
48
+ export function applyJsonMcpConfig(configPath, mcpServers, options) {
49
+ const existing = loadJsonFile(configPath, { mcpServers: {} });
50
+ const sanitize = options?.sanitize !== false;
51
+ const servers = sanitize
52
+ ? sanitizeServerKeys(mcpServers)
53
+ : mcpServers;
54
+ const serverMapper = options?.serverMapper;
55
+ const mapped = serverMapper
56
+ ? Object.fromEntries(Object.entries(servers).map(([name, server]) => [name, serverMapper(server)]))
57
+ : servers;
58
+ const merged = options?.previouslyOwned
59
+ ? managedMergeMcp(existing, mapped, options.previouslyOwned)
60
+ : mergeMcpIntoAgent(existing, mapped);
61
+ const dir = path.dirname(configPath);
62
+ if (!fs.existsSync(dir))
63
+ fs.mkdirSync(dir, { recursive: true });
64
+ saveJsonFile(configPath, merged);
65
+ }
40
66
  export function mergeMcpIntoAgent(agentConfig, mcpServers) {
41
67
  const merged = { ...agentConfig };
42
68
  // Replace mcpServers entirely - only keep servers in the new config
@@ -1 +1 @@
1
- {"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/agents/json-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/agents/json-utils.ts"],"names":[],"mappings":"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"}
@@ -57,9 +57,9 @@ export class OpencodeAgent {
57
57
  const raw = fs.readFileSync(filePath, 'utf-8');
58
58
  current = parseConfigContent(raw, isJsonc);
59
59
  }
60
- catch {
61
- // If unreadable, start fresh but do not throw to avoid blocking apply on one agent
62
- current = {};
60
+ catch (error) {
61
+ console.warn(`[opencode] Failed to parse ${filePath}: ${error instanceof Error ? error.message : error}; skipping write to avoid data loss`);
62
+ return;
63
63
  }
64
64
  }
65
65
  const out = { ...current };
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import fs from 'node:fs';
2
1
  import path from 'node:path';
3
2
  import { getProjectTraeDir, getTraeConfigPath } from '../config/paths.js';
4
- import { loadJsonFile, managedMergeMcp, mergeMcpIntoAgent, sanitizeServerKeys, saveJsonFile, } from './json-utils.js';
3
+ import { applyJsonMcpConfig } from './json-utils.js';
5
4
  export class TraeAgent {
6
5
  id;
7
6
  variant;
@@ -16,23 +15,12 @@ export class TraeAgent {
16
15
  return path.join(getProjectTraeDir(projectRoot), 'mcp.json');
17
16
  }
18
17
  applyConfig(config) {
19
- const configPath = this.configPath();
20
- const agentConfig = loadJsonFile(configPath, { mcpServers: {} });
21
- const servers = sanitizeServerKeys(config.mcpServers);
22
- const merged = mergeMcpIntoAgent(agentConfig, servers);
23
- saveJsonFile(configPath, merged);
18
+ applyJsonMcpConfig(this.configPath(), config.mcpServers);
24
19
  }
25
20
  applyProjectConfig(projectRoot, config, options) {
26
- const configPath = this.projectConfigPath(projectRoot);
27
- const existing = loadJsonFile(configPath, { mcpServers: {} });
28
- const servers = sanitizeServerKeys(config.mcpServers);
29
- const merged = options?.previouslyOwned
30
- ? managedMergeMcp(existing, servers, options.previouslyOwned)
31
- : mergeMcpIntoAgent(existing, servers);
32
- const dir = path.dirname(configPath);
33
- if (!fs.existsSync(dir))
34
- fs.mkdirSync(dir, { recursive: true });
35
- saveJsonFile(configPath, merged);
21
+ applyJsonMcpConfig(this.projectConfigPath(projectRoot), config.mcpServers, {
22
+ previouslyOwned: options?.previouslyOwned,
23
+ });
36
24
  }
37
25
  }
38
26
  //# sourceMappingURL=trae.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trae.js","sourceRoot":"","sources":["../../src/agents/trae.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAG5F,OAAO,EAEL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,MAAM,OAAO,SAAS;IACX,EAAE,CAAS;IACH,OAAO,CAAc;IAEtC,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;IACpB,CAAC;IAED,UAAU;QACR,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,OAAiC,CAAC,CAAC;QACjF,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE,EAClE,OAAmD;QAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,EAAE,eAAe;YACrC,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAiC,EAAE,OAAO,CAAC,eAAe,CAAC;YACvF,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAiC,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"trae.js","sourceRoot":"","sources":["../../src/agents/trae.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAG5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,OAAO,SAAS;IACX,EAAE,CAAS;IACH,OAAO,CAAc;IAEtC,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;IACpB,CAAC;IAED,UAAU;QACR,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;IACrF,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE,EAClE,OAAmD;QAEnD,kBAAkB,CAChB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EACnC,MAAM,CAAC,UAAoC,EAC3C;YACE,eAAe,EAAE,OAAO,EAAE,eAAe;SAC1C,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -27,7 +27,12 @@ export function distributeCommands(scope, activeAppIds, assumeInstalled, managed
27
27
  };
28
28
  const cleanup = {
29
29
  resolveTargetDir: (p) => getHandler(p).resolveTargetDir(scope),
30
- extractId: (filename) => {
30
+ extractId: (filename, platform) => {
31
+ if (platform) {
32
+ const h = handlerMap.get(platform);
33
+ if (h)
34
+ return h.extractIdFromFilename(filename);
35
+ }
31
36
  if (filename.endsWith('.toml'))
32
37
  return filename.slice(0, -5);
33
38
  if (filename.endsWith('.md'))
@@ -1 +1 @@
1
- {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/commands/distribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/commands/distribution.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ export declare function mergeIncrementalSelection(base: string[], override?: Inc
22
22
  * Get per-application override configuration for a specific section
23
23
  */
24
24
  export declare function getApplicationOverride(config: SwitchboardConfig, appId: string, section: ConfigSection): IncrementalSelection | undefined;
25
+ export declare function normalizeSectionEntryIds(_section: ConfigSection, ids: string[], scope?: ConfigScope): string[];
25
26
  /**
26
27
  * Resolve effective configuration for a specific application and section.
27
28
  * Applies per-application overrides to the global section config.
@@ -56,6 +56,23 @@ function getGlobalEnabled(config, section) {
56
56
  const sectionConfig = config[section];
57
57
  return Array.isArray(sectionConfig?.enabled) ? [...sectionConfig.enabled] : [];
58
58
  }
59
+ function dedupeIds(ids) {
60
+ const seen = new Set();
61
+ const result = [];
62
+ for (const id of ids) {
63
+ if (seen.has(id))
64
+ continue;
65
+ seen.add(id);
66
+ result.push(id);
67
+ }
68
+ return result;
69
+ }
70
+ export function normalizeSectionEntryIds(_section, ids, scope) {
71
+ if (ids.length === 0)
72
+ return [];
73
+ const index = buildPluginIndex(scope);
74
+ return dedupeIds(ids.map((id) => index.normalizeComponentId(id)));
75
+ }
59
76
  function getPluginEnabledRefs(config) {
60
77
  return Array.isArray(config.plugins?.enabled) ? [...config.plugins.enabled] : [];
61
78
  }
@@ -64,12 +81,27 @@ function getPluginExcludeList(config, section) {
64
81
  const excludeList = exclude?.[section];
65
82
  return Array.isArray(excludeList) ? [...excludeList] : [];
66
83
  }
84
+ function normalizeIncrementalSelection(section, override, scope) {
85
+ if (!override)
86
+ return undefined;
87
+ const normalized = {};
88
+ if (override.enabled) {
89
+ normalized.enabled = normalizeSectionEntryIds(section, override.enabled, scope);
90
+ }
91
+ if (override.add) {
92
+ normalized.add = normalizeSectionEntryIds(section, override.add, scope);
93
+ }
94
+ if (override.remove) {
95
+ normalized.remove = normalizeSectionEntryIds(section, override.remove, scope);
96
+ }
97
+ return normalized;
98
+ }
67
99
  function resolveSectionConfigFromConfig(config, section, appId, scope) {
68
- const globalEnabled = getGlobalEnabled(config, section);
100
+ const globalEnabled = normalizeSectionEntryIds(section, getGlobalEnabled(config, section), scope);
69
101
  const enabledPluginRefs = getPluginEnabledRefs(config);
102
+ const index = buildPluginIndex(scope);
70
103
  let merged;
71
104
  if (enabledPluginRefs.length > 0) {
72
- const index = buildPluginIndex(scope);
73
105
  const expanded = index.expand(enabledPluginRefs);
74
106
  const pluginSection = section;
75
107
  const pluginEntryIds = expanded[pluginSection] ?? [];
@@ -81,7 +113,7 @@ function resolveSectionConfigFromConfig(config, section, appId, scope) {
81
113
  seen.add(id);
82
114
  }
83
115
  }
84
- const excludeList = getPluginExcludeList(config, pluginSection);
116
+ const excludeList = normalizeSectionEntryIds(section, getPluginExcludeList(config, pluginSection), scope);
85
117
  if (excludeList.length > 0) {
86
118
  const excludeSet = new Set(excludeList);
87
119
  merged = merged.filter((id) => !excludeSet.has(id));
@@ -90,7 +122,7 @@ function resolveSectionConfigFromConfig(config, section, appId, scope) {
90
122
  else {
91
123
  merged = globalEnabled;
92
124
  }
93
- const override = getApplicationOverrideFromConfig(config, appId, section);
125
+ const override = normalizeIncrementalSelection(section, getApplicationOverrideFromConfig(config, appId, section), scope);
94
126
  return {
95
127
  enabled: mergeIncrementalSelection(merged, override),
96
128
  };