aicodeman 1.33.3 → 1.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/cli-registry/schema.d.ts +18 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -1
- package/dist/config/cli-registry/schema.js +27 -0
- package/dist/config/cli-registry/schema.js.map +1 -1
- package/dist/config/cli-registry/stock.d.ts.map +1 -1
- package/dist/config/cli-registry/stock.js +35 -0
- package/dist/config/cli-registry/stock.js.map +1 -1
- package/dist/config/cli-registry/types.d.ts +33 -0
- package/dist/config/cli-registry/types.d.ts.map +1 -1
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +5 -1
- package/dist/hooks-config.js.map +1 -1
- package/dist/mcp-sync.d.ts +105 -0
- package/dist/mcp-sync.d.ts.map +1 -0
- package/dist/mcp-sync.js +619 -0
- package/dist/mcp-sync.js.map +1 -0
- package/dist/mux-interface.d.ts +4 -0
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/session-cli-builder.d.ts +20 -1
- package/dist/session-cli-builder.d.ts.map +1 -1
- package/dist/session-cli-builder.js +33 -3
- package/dist/session-cli-builder.js.map +1 -1
- package/dist/session-cli-registry-bridge.d.ts +2 -0
- package/dist/session-cli-registry-bridge.d.ts.map +1 -1
- package/dist/session-cli-registry-bridge.js +15 -8
- package/dist/session-cli-registry-bridge.js.map +1 -1
- package/dist/session.d.ts +19 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +29 -2
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +2 -0
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +4 -2
- package/dist/tmux-manager.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/mcp-sync.d.ts +40 -0
- package/dist/types/mcp-sync.d.ts.map +1 -0
- package/dist/types/mcp-sync.js +8 -0
- package/dist/types/mcp-sync.js.map +1 -0
- package/dist/types/push.d.ts +37 -2
- package/dist/types/push.d.ts.map +1 -1
- package/dist/types/push.js +10 -3
- package/dist/types/push.js.map +1 -1
- package/dist/types/session.d.ts +34 -1
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +25 -1
- package/dist/types/session.js.map +1 -1
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/app.cf0db8ce.js +43 -0
- package/dist/web/public/app.cf0db8ce.js.br +0 -0
- package/dist/web/public/app.cf0db8ce.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/constants.d95fade9.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/home-sessions.js.gz +0 -0
- package/dist/web/public/host-wake-ui.js.gz +0 -0
- package/dist/web/public/i18n.398b8331.js +1 -0
- package/dist/web/public/i18n.398b8331.js.br +0 -0
- package/dist/web/public/i18n.398b8331.js.gz +0 -0
- package/dist/web/public/image-input.a216cf9e.js.gz +0 -0
- package/dist/web/public/index.html +118 -10
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.c1e7c7b7.js.gz +0 -0
- package/dist/web/public/mobile-handlers.23a85db1.js.gz +0 -0
- package/dist/web/public/mobile-ime-preview.2dbaf262.js +1 -0
- package/dist/web/public/mobile-ime-preview.2dbaf262.js.br +0 -0
- package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.1aa4952d.css.gz +0 -0
- package/dist/web/public/notification-manager.50bb87d8.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/panels-ui.6a5898d9.js.gz +0 -0
- package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
- package/dist/web/public/{ralph-wizard.13a1831e.js → ralph-wizard.b6c0dd19.js} +2 -0
- package/dist/web/public/ralph-wizard.b6c0dd19.js.br +0 -0
- package/dist/web/public/{ralph-wizard.13a1831e.js.gz → ralph-wizard.b6c0dd19.js.gz} +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/reboot-restore-ui.js.gz +0 -0
- package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
- package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
- package/dist/web/public/session-lineage.js +27 -11
- package/dist/web/public/session-lineage.js.br +0 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/{session-ui.7575a231.js → session-ui.bf66c13b.js} +4 -4
- package/dist/web/public/session-ui.bf66c13b.js.br +0 -0
- package/dist/web/public/session-ui.bf66c13b.js.gz +0 -0
- package/dist/web/public/{settings-ui.c68e7f59.js → settings-ui.331d3b1d.js} +12 -10
- package/dist/web/public/settings-ui.331d3b1d.js.br +0 -0
- package/dist/web/public/settings-ui.331d3b1d.js.gz +0 -0
- package/dist/web/public/styles.8c485d26.css +1 -0
- package/dist/web/public/styles.8c485d26.css.br +0 -0
- package/dist/web/public/styles.8c485d26.css.gz +0 -0
- package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
- package/dist/web/public/sw.js +2 -2
- package/dist/web/public/sw.js.br +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-layout-browser.4e0ed50c.js +1 -0
- package/dist/web/public/tab-layout-browser.4e0ed50c.js.br +0 -0
- package/dist/web/public/tab-layout-browser.4e0ed50c.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.dcdc5772.js.gz +0 -0
- package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.gz +0 -0
- package/dist/web/public/terminal-split.js +82 -34
- package/dist/web/public/terminal-split.js.br +0 -0
- package/dist/web/public/terminal-split.js.gz +0 -0
- package/dist/web/public/terminal-ui.a4535311.js +2 -0
- package/dist/web/public/terminal-ui.a4535311.js.br +0 -0
- package/dist/web/public/terminal-ui.a4535311.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/{xterm-predictive-echo.bd6882b8.js → xterm-predictive-echo.ae5e3d5d.js} +1 -1
- package/dist/web/public/vendor/{xterm-predictive-echo.bd6882b8.js.br → xterm-predictive-echo.ae5e3d5d.js.br} +0 -0
- package/dist/web/public/vendor/{xterm-predictive-echo.bd6882b8.js.gz → xterm-predictive-echo.ae5e3d5d.js.gz} +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js +4 -0
- package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js.br +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.c4b51eb6.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js +21 -10
- package/dist/web/public/webview-tabs.js.br +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/reboot-restore-registry.d.ts +2 -1
- package/dist/web/reboot-restore-registry.d.ts.map +1 -1
- package/dist/web/reboot-restore-registry.js +2 -1
- package/dist/web/reboot-restore-registry.js.map +1 -1
- package/dist/web/routes/index.d.ts +2 -0
- package/dist/web/routes/index.d.ts.map +1 -1
- package/dist/web/routes/index.js +2 -0
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/mcp-sync-routes.d.ts +29 -0
- package/dist/web/routes/mcp-sync-routes.d.ts.map +1 -0
- package/dist/web/routes/mcp-sync-routes.js +83 -0
- package/dist/web/routes/mcp-sync-routes.js.map +1 -0
- package/dist/web/routes/ralph-routes.d.ts.map +1 -1
- package/dist/web/routes/ralph-routes.js +2 -1
- package/dist/web/routes/ralph-routes.js.map +1 -1
- package/dist/web/routes/reboot-restore-routes.d.ts.map +1 -1
- package/dist/web/routes/reboot-restore-routes.js +2 -0
- package/dist/web/routes/reboot-restore-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +40 -17
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/webhook-routes.d.ts +21 -0
- package/dist/web/routes/webhook-routes.d.ts.map +1 -0
- package/dist/web/routes/webhook-routes.js +87 -0
- package/dist/web/routes/webhook-routes.js.map +1 -0
- package/dist/web/schemas.d.ts +47 -2
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +64 -0
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +4 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +55 -25
- package/dist/web/server.js.map +1 -1
- package/dist/webhook-notify.d.ts +71 -0
- package/dist/webhook-notify.d.ts.map +1 -0
- package/dist/webhook-notify.js +282 -0
- package/dist/webhook-notify.js.map +1 -0
- package/package.json +2 -1
- package/skills/codeman/SKILL.md +26 -8
- package/skills/codeman/preamble.sh +16 -4
- package/skills/codeman/reference/endpoints.md +11 -3
- package/skills/codeman/reference/recipes.md +1 -1
- package/dist/web/public/app.0879466b.js +0 -43
- package/dist/web/public/app.0879466b.js.br +0 -0
- package/dist/web/public/app.0879466b.js.gz +0 -0
- package/dist/web/public/i18n.7f8be985.js +0 -1
- package/dist/web/public/i18n.7f8be985.js.br +0 -0
- package/dist/web/public/i18n.7f8be985.js.gz +0 -0
- package/dist/web/public/ralph-wizard.13a1831e.js.br +0 -0
- package/dist/web/public/session-ui.7575a231.js.br +0 -0
- package/dist/web/public/session-ui.7575a231.js.gz +0 -0
- package/dist/web/public/settings-ui.c68e7f59.js.br +0 -0
- package/dist/web/public/settings-ui.c68e7f59.js.gz +0 -0
- package/dist/web/public/styles.f2b78b86.css +0 -1
- package/dist/web/public/styles.f2b78b86.css.br +0 -0
- package/dist/web/public/styles.f2b78b86.css.gz +0 -0
- package/dist/web/public/terminal-ui.d5223c0e.js +0 -2
- package/dist/web/public/terminal-ui.d5223c0e.js.br +0 -0
- package/dist/web/public/terminal-ui.d5223c0e.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js +0 -4
- package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.br +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.gz +0 -0
package/dist/mcp-sync.js
ADDED
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview MCP server sync between the enabled agent CLIs.
|
|
3
|
+
*
|
|
4
|
+
* Each CLI keeps its own user-level MCP list in its own dialect (`CliEntry.capabilities.mcpConfig`
|
|
5
|
+
* names the file and the dialect). This module reads every participating CLI's list into one
|
|
6
|
+
* neutral shape, and adds any server a CLI is missing from the others. The whole feature is
|
|
7
|
+
* opt-in (`mcpSyncEnabled`, default OFF; the route enforces it) because it writes OTHER tools'
|
|
8
|
+
* own user config.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately conservative:
|
|
11
|
+
* - ADDITIVE only. A server already present under a name (in ANY shape, even one this module
|
|
12
|
+
* does not understand) is never rewritten and nothing is ever removed. Same name with a
|
|
13
|
+
* different definition is reported as a conflict and left alone.
|
|
14
|
+
* - A server the user has switched off in its own CLI (codex `enabled = false`, opencode
|
|
15
|
+
* `enabled: false`, antigravity `disabled: true`) is not propagated: copying it would
|
|
16
|
+
* switch it on in every other CLI.
|
|
17
|
+
* - A file that does not parse (e.g. opencode JSONC with comments, a TOML file with a
|
|
18
|
+
* duplicate table) is never written, and a write is only made after the NEW text has been
|
|
19
|
+
* parsed again and every added server comes back as intended.
|
|
20
|
+
* - Only the MCP table is touched; every other key in the file is preserved. Files are
|
|
21
|
+
* re-read immediately before the write and replaced via tmp+rename next to the REAL target
|
|
22
|
+
* (a symlinked dotfile stays a symlink), with the old file kept as `<file>.codeman-bak`
|
|
23
|
+
* (overwritten by each sync).
|
|
24
|
+
* - Copied servers can carry secrets in `env`/`headers`: a file that receives any is left
|
|
25
|
+
* readable by its owner only.
|
|
26
|
+
* - Servers a dialect cannot express (SSE for codex) are skipped and reported.
|
|
27
|
+
* - Only one apply runs at a time.
|
|
28
|
+
* - A CLI whose file was moved by its own env var (`mcpConfig.relocation`: `CODEX_HOME`,
|
|
29
|
+
* `CLAUDE_CONFIG_DIR`, ...) is followed there, as the SERVER env sets it; a relative value
|
|
30
|
+
* cannot be located safely, so that target is reported `skipped` and never written.
|
|
31
|
+
*
|
|
32
|
+
* The result types (src/types/mcp-sync.ts) never carry env values or headers: those commonly
|
|
33
|
+
* hold secrets and the result is returned over HTTP. For the same reason a parse failure is
|
|
34
|
+
* reported by position only (`describeMcpSyncError`): parsers quote the offending source.
|
|
35
|
+
*
|
|
36
|
+
* @module mcp-sync
|
|
37
|
+
*/
|
|
38
|
+
import { promises as fs } from 'node:fs';
|
|
39
|
+
import { randomBytes } from 'node:crypto';
|
|
40
|
+
import { homedir } from 'node:os';
|
|
41
|
+
import { dirname, isAbsolute, join } from 'node:path';
|
|
42
|
+
import { parse as parseToml, TomlError } from 'smol-toml';
|
|
43
|
+
/** A second apply was requested while one was running. */
|
|
44
|
+
export class McpSyncBusyError extends Error {
|
|
45
|
+
constructor() {
|
|
46
|
+
super('An MCP sync is already running');
|
|
47
|
+
this.name = 'McpSyncBusyError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* An error whose message this module wrote itself. It names keys Codeman chose and server names
|
|
52
|
+
* (which the result reports anyway), never a value from the file, so it may be shown as is.
|
|
53
|
+
*/
|
|
54
|
+
class McpConfigError extends Error {
|
|
55
|
+
constructor(message) {
|
|
56
|
+
super(message);
|
|
57
|
+
this.name = 'McpConfigError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* What a target's `error` may say. A parser's own message can quote the file: smol-toml's
|
|
62
|
+
* `TomlError` carries a code frame of the offending line and the one before it, and V8's JSON
|
|
63
|
+
* "Unexpected token" errors quote about ten characters of source. These files hold env values
|
|
64
|
+
* and headers and the result goes over HTTP, so a parse failure is reported by position only,
|
|
65
|
+
* an errno failure by Node's own message (code, syscall and path: no file content), and anything
|
|
66
|
+
* else by a fixed category.
|
|
67
|
+
*/
|
|
68
|
+
function describeMcpSyncError(err) {
|
|
69
|
+
if (err instanceof McpConfigError)
|
|
70
|
+
return err.message;
|
|
71
|
+
if (err instanceof TomlError)
|
|
72
|
+
return `not valid TOML (line ${err.line}, column ${err.column})`;
|
|
73
|
+
if (err instanceof SyntaxError) {
|
|
74
|
+
const lc = /\(line (\d+) column (\d+)\)/.exec(err.message);
|
|
75
|
+
if (lc)
|
|
76
|
+
return `not valid JSON (line ${lc[1]}, column ${lc[2]})`;
|
|
77
|
+
const pos = /at position (\d+)/.exec(err.message);
|
|
78
|
+
return pos ? `not valid JSON (position ${pos[1]})` : 'not valid JSON';
|
|
79
|
+
}
|
|
80
|
+
const code = err?.code;
|
|
81
|
+
if (err instanceof Error && typeof code === 'string' && /^E[A-Z0-9]+$/.test(code))
|
|
82
|
+
return err.message;
|
|
83
|
+
return 'unexpected error';
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Helpers
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
89
|
+
/** Names that would reach Object.prototype through a plain-object table (`out[name] = ...`). */
|
|
90
|
+
const UNSAFE_NAMES = new Set(['__proto__', 'constructor', 'prototype']);
|
|
91
|
+
/** A table keyed by untrusted names: no prototype, so `toString`/`hasOwnProperty` are ordinary keys. */
|
|
92
|
+
function dict() {
|
|
93
|
+
return Object.create(null);
|
|
94
|
+
}
|
|
95
|
+
/** Own, safe keys of an untrusted table. */
|
|
96
|
+
function safeKeys(table) {
|
|
97
|
+
return Object.keys(table).filter((k) => !UNSAFE_NAMES.has(k));
|
|
98
|
+
}
|
|
99
|
+
function strMap(v) {
|
|
100
|
+
if (!isRecord(v))
|
|
101
|
+
return undefined;
|
|
102
|
+
const out = dict();
|
|
103
|
+
for (const k of safeKeys(v))
|
|
104
|
+
if (typeof v[k] === 'string')
|
|
105
|
+
out[k] = v[k];
|
|
106
|
+
return Object.keys(out).length ? out : undefined;
|
|
107
|
+
}
|
|
108
|
+
function strArr(v) {
|
|
109
|
+
return Array.isArray(v) && v.every((x) => typeof x === 'string') ? v : undefined;
|
|
110
|
+
}
|
|
111
|
+
/** Drop undefined/empty fields so equal servers compare equal. */
|
|
112
|
+
function clean(s) {
|
|
113
|
+
const out = { transport: s.transport };
|
|
114
|
+
if (s.command)
|
|
115
|
+
out.command = s.command;
|
|
116
|
+
if (s.args?.length)
|
|
117
|
+
out.args = s.args;
|
|
118
|
+
if (s.env && Object.keys(s.env).length)
|
|
119
|
+
out.env = s.env;
|
|
120
|
+
if (s.cwd)
|
|
121
|
+
out.cwd = s.cwd;
|
|
122
|
+
if (s.url)
|
|
123
|
+
out.url = s.url;
|
|
124
|
+
if (s.headers && Object.keys(s.headers).length)
|
|
125
|
+
out.headers = s.headers;
|
|
126
|
+
if (s.disabled)
|
|
127
|
+
out.disabled = true;
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
const sortedEntries = (m) => Object.entries(m ?? {}).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
131
|
+
/** Identity for conflict detection: what the server runs/connects to, not how it is spelled. */
|
|
132
|
+
function fingerprint(s) {
|
|
133
|
+
const t = s.transport === 'stdio' ? 'stdio' : 'url';
|
|
134
|
+
return JSON.stringify([t, s.command ?? null, s.args ?? [], s.url ?? null]);
|
|
135
|
+
}
|
|
136
|
+
/** Fingerprint plus the secrets-bearing maps: what must survive a write unchanged. */
|
|
137
|
+
function fullIdentity(s) {
|
|
138
|
+
return JSON.stringify([fingerprint(s), sortedEntries(s.env), sortedEntries(s.headers)]);
|
|
139
|
+
}
|
|
140
|
+
const carriesSecrets = (m) => Object.values(m).some((s) => s.env || s.headers);
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// JSON dialects
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
function fromClaude(raw) {
|
|
145
|
+
if (!isRecord(raw))
|
|
146
|
+
return null;
|
|
147
|
+
const type = raw.type;
|
|
148
|
+
if ((type === 'http' || type === 'sse') && typeof raw.url === 'string') {
|
|
149
|
+
return clean({ transport: type, url: raw.url, headers: strMap(raw.headers) });
|
|
150
|
+
}
|
|
151
|
+
if (typeof raw.command === 'string') {
|
|
152
|
+
return clean({ transport: 'stdio', command: raw.command, args: strArr(raw.args), env: strMap(raw.env) });
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
function toClaude(s) {
|
|
157
|
+
if (s.transport === 'stdio')
|
|
158
|
+
return { type: 'stdio', command: s.command, args: s.args ?? [], env: s.env ?? {} };
|
|
159
|
+
return { type: s.transport, url: s.url, ...(s.headers ? { headers: s.headers } : {}) };
|
|
160
|
+
}
|
|
161
|
+
function fromGemini(raw) {
|
|
162
|
+
if (!isRecord(raw))
|
|
163
|
+
return null;
|
|
164
|
+
// `httpUrl` is the legacy streamable-http key; `url` + `type` is what `gemini mcp add` writes
|
|
165
|
+
// today, and a bare `url` with no type is the legacy SSE form.
|
|
166
|
+
if (typeof raw.httpUrl === 'string')
|
|
167
|
+
return clean({ transport: 'http', url: raw.httpUrl, headers: strMap(raw.headers) });
|
|
168
|
+
if (typeof raw.url === 'string') {
|
|
169
|
+
return clean({ transport: raw.type === 'http' ? 'http' : 'sse', url: raw.url, headers: strMap(raw.headers) });
|
|
170
|
+
}
|
|
171
|
+
if (typeof raw.command === 'string') {
|
|
172
|
+
return clean({
|
|
173
|
+
transport: 'stdio',
|
|
174
|
+
command: raw.command,
|
|
175
|
+
args: strArr(raw.args),
|
|
176
|
+
env: strMap(raw.env),
|
|
177
|
+
cwd: typeof raw.cwd === 'string' ? raw.cwd : undefined,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
function toGemini(s) {
|
|
183
|
+
if (s.transport === 'stdio') {
|
|
184
|
+
return {
|
|
185
|
+
command: s.command,
|
|
186
|
+
args: s.args ?? [],
|
|
187
|
+
...(s.env ? { env: s.env } : {}),
|
|
188
|
+
...(s.cwd ? { cwd: s.cwd } : {}),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return { url: s.url, type: s.transport, ...(s.headers ? { headers: s.headers } : {}) };
|
|
192
|
+
}
|
|
193
|
+
/** Antigravity (`agy mcp add`): stdio or http only; http servers use `serverUrl`. */
|
|
194
|
+
function fromAntigravity(raw) {
|
|
195
|
+
if (!isRecord(raw))
|
|
196
|
+
return null;
|
|
197
|
+
const disabled = raw.disabled === true;
|
|
198
|
+
if (typeof raw.serverUrl === 'string')
|
|
199
|
+
return clean({ transport: 'http', url: raw.serverUrl, headers: strMap(raw.headers), disabled });
|
|
200
|
+
if (typeof raw.command === 'string') {
|
|
201
|
+
return clean({
|
|
202
|
+
transport: 'stdio',
|
|
203
|
+
command: raw.command,
|
|
204
|
+
args: strArr(raw.args),
|
|
205
|
+
env: strMap(raw.env),
|
|
206
|
+
disabled,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
function toAntigravity(s) {
|
|
212
|
+
if (s.transport === 'sse')
|
|
213
|
+
return null;
|
|
214
|
+
if (s.transport === 'stdio') {
|
|
215
|
+
return { command: s.command, args: s.args ?? [], ...(s.env ? { env: s.env } : {}), disabled: false };
|
|
216
|
+
}
|
|
217
|
+
return { serverUrl: s.url, ...(s.headers ? { headers: s.headers } : {}), disabled: false };
|
|
218
|
+
}
|
|
219
|
+
function fromOpencode(raw) {
|
|
220
|
+
if (!isRecord(raw))
|
|
221
|
+
return null;
|
|
222
|
+
const disabled = raw.enabled === false;
|
|
223
|
+
if (raw.type === 'remote' && typeof raw.url === 'string') {
|
|
224
|
+
return clean({ transport: 'http', url: raw.url, headers: strMap(raw.headers), disabled });
|
|
225
|
+
}
|
|
226
|
+
if (raw.type === 'local') {
|
|
227
|
+
const cmd = strArr(raw.command);
|
|
228
|
+
if (!cmd?.length)
|
|
229
|
+
return null;
|
|
230
|
+
return clean({
|
|
231
|
+
transport: 'stdio',
|
|
232
|
+
command: cmd[0],
|
|
233
|
+
args: cmd.slice(1),
|
|
234
|
+
env: strMap(raw.environment),
|
|
235
|
+
disabled,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
function toOpencode(s) {
|
|
241
|
+
if (s.transport === 'stdio') {
|
|
242
|
+
return {
|
|
243
|
+
type: 'local',
|
|
244
|
+
command: [s.command, ...(s.args ?? [])],
|
|
245
|
+
...(s.env ? { environment: s.env } : {}),
|
|
246
|
+
enabled: true,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
return { type: 'remote', url: s.url, ...(s.headers ? { headers: s.headers } : {}), enabled: true };
|
|
250
|
+
}
|
|
251
|
+
const JSON_DIALECTS = {
|
|
252
|
+
'claude-json': { key: 'mcpServers', from: fromClaude, to: toClaude },
|
|
253
|
+
'gemini-json': { key: 'mcpServers', from: fromGemini, to: toGemini },
|
|
254
|
+
'antigravity-json': { key: 'mcpServers', from: fromAntigravity, to: toAntigravity },
|
|
255
|
+
'opencode-json': {
|
|
256
|
+
key: 'mcp',
|
|
257
|
+
from: fromOpencode,
|
|
258
|
+
to: toOpencode,
|
|
259
|
+
seed: { $schema: 'https://opencode.ai/config.json' },
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
// ---------------------------------------------------------------------------
|
|
263
|
+
// Codex TOML (the `[mcp_servers.*]` tables only)
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
function fromCodex(t) {
|
|
266
|
+
const disabled = t.enabled === false;
|
|
267
|
+
if (typeof t.url === 'string') {
|
|
268
|
+
return clean({ transport: 'http', url: t.url, headers: strMap(t.http_headers), disabled });
|
|
269
|
+
}
|
|
270
|
+
if (typeof t.command === 'string') {
|
|
271
|
+
return clean({ transport: 'stdio', command: t.command, args: strArr(t.args), env: strMap(t.env), disabled });
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
const tomlStr = (v) => JSON.stringify(v);
|
|
276
|
+
const tomlKey = (k) => (/^[A-Za-z0-9_-]+$/.test(k) ? k : tomlStr(k));
|
|
277
|
+
function toCodexToml(name, s) {
|
|
278
|
+
const head = `[mcp_servers.${tomlKey(name)}]`;
|
|
279
|
+
const lines = [head];
|
|
280
|
+
if (s.transport === 'stdio') {
|
|
281
|
+
lines.push(`command = ${tomlStr(s.command ?? '')}`);
|
|
282
|
+
lines.push(`args = [${(s.args ?? []).map(tomlStr).join(', ')}]`);
|
|
283
|
+
if (s.env) {
|
|
284
|
+
lines.push('', `[mcp_servers.${tomlKey(name)}.env]`);
|
|
285
|
+
for (const [k, v] of Object.entries(s.env))
|
|
286
|
+
lines.push(`${tomlKey(k)} = ${tomlStr(v)}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
lines.push(`url = ${tomlStr(s.url ?? '')}`);
|
|
291
|
+
if (s.headers) {
|
|
292
|
+
lines.push('', `[mcp_servers.${tomlKey(name)}.http_headers]`);
|
|
293
|
+
for (const [k, v] of Object.entries(s.headers))
|
|
294
|
+
lines.push(`${tomlKey(k)} = ${tomlStr(v)}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return lines.join('\n') + '\n';
|
|
298
|
+
}
|
|
299
|
+
/** The MCP table of a config file's text (null = file absent). Throws if it cannot be read safely. */
|
|
300
|
+
function mcpTable(format, text) {
|
|
301
|
+
if (text === null || !text.trim())
|
|
302
|
+
return dict();
|
|
303
|
+
if (format === 'codex-toml') {
|
|
304
|
+
const doc = parseToml(text);
|
|
305
|
+
const table = doc.mcp_servers;
|
|
306
|
+
if (table === undefined)
|
|
307
|
+
return dict();
|
|
308
|
+
if (!isRecord(table))
|
|
309
|
+
throw new McpConfigError('"mcp_servers" is not a table');
|
|
310
|
+
return table;
|
|
311
|
+
}
|
|
312
|
+
const dialect = JSON_DIALECTS[format];
|
|
313
|
+
const doc = JSON.parse(text);
|
|
314
|
+
if (!isRecord(doc))
|
|
315
|
+
throw new McpConfigError('top level is not a JSON object');
|
|
316
|
+
const table = doc[dialect.key];
|
|
317
|
+
if (table === undefined)
|
|
318
|
+
return dict();
|
|
319
|
+
if (!isRecord(table))
|
|
320
|
+
throw new McpConfigError(`"${dialect.key}" is not an object`);
|
|
321
|
+
return table;
|
|
322
|
+
}
|
|
323
|
+
/** Parse a config file's text (null = file absent). Throws if it cannot be read safely. */
|
|
324
|
+
export function parseConfig(format, text) {
|
|
325
|
+
const table = mcpTable(format, text);
|
|
326
|
+
const servers = dict();
|
|
327
|
+
const names = new Set();
|
|
328
|
+
for (const name of safeKeys(table)) {
|
|
329
|
+
names.add(name);
|
|
330
|
+
const raw = table[name];
|
|
331
|
+
const s = format === 'codex-toml'
|
|
332
|
+
? isRecord(raw)
|
|
333
|
+
? fromCodex(raw)
|
|
334
|
+
: null
|
|
335
|
+
: JSON_DIALECTS[format].from(raw);
|
|
336
|
+
if (s)
|
|
337
|
+
servers[name] = s;
|
|
338
|
+
}
|
|
339
|
+
return { servers, names };
|
|
340
|
+
}
|
|
341
|
+
/** The servers of a config file's text. */
|
|
342
|
+
export function parseServers(format, text) {
|
|
343
|
+
return parseConfig(format, text).servers;
|
|
344
|
+
}
|
|
345
|
+
/** Whether this dialect can express the server. */
|
|
346
|
+
function canExpress(format, s) {
|
|
347
|
+
if (format === 'codex-toml' || format === 'antigravity-json')
|
|
348
|
+
return s.transport !== 'sse';
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Add servers to a config file's text and return the new text. A name already defined under the
|
|
353
|
+
* MCP table (in any shape) is skipped; the new text is parsed again and every added server must
|
|
354
|
+
* come back as intended, otherwise this throws and nothing should be written.
|
|
355
|
+
*/
|
|
356
|
+
export function addServers(format, text, add) {
|
|
357
|
+
const before = parseConfig(format, text);
|
|
358
|
+
const todo = dict();
|
|
359
|
+
for (const n of safeKeys(add))
|
|
360
|
+
if (!before.names.has(n) && canExpress(format, add[n]))
|
|
361
|
+
todo[n] = add[n];
|
|
362
|
+
const names = Object.keys(todo);
|
|
363
|
+
if (names.length === 0)
|
|
364
|
+
return text ?? '';
|
|
365
|
+
let out;
|
|
366
|
+
if (format === 'codex-toml') {
|
|
367
|
+
const base = text ?? '';
|
|
368
|
+
const eol = base.includes('\r\n') ? '\r\n' : '\n';
|
|
369
|
+
const sep = base.length === 0
|
|
370
|
+
? ''
|
|
371
|
+
: base.endsWith('\n\n') || base.endsWith('\r\n\r\n')
|
|
372
|
+
? ''
|
|
373
|
+
: base.endsWith('\n')
|
|
374
|
+
? eol
|
|
375
|
+
: eol + eol;
|
|
376
|
+
const blocks = names.map((n) => toCodexToml(n, todo[n]).replace(/\n/g, eol));
|
|
377
|
+
out = base + sep + blocks.join(eol);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
const dialect = JSON_DIALECTS[format];
|
|
381
|
+
const doc = text && text.trim() ? JSON.parse(text) : { ...dialect.seed };
|
|
382
|
+
const existing = doc[dialect.key];
|
|
383
|
+
const table = isRecord(existing) ? existing : {};
|
|
384
|
+
for (const n of names) {
|
|
385
|
+
const entry = dialect.to(todo[n]);
|
|
386
|
+
if (entry)
|
|
387
|
+
table[n] = entry;
|
|
388
|
+
}
|
|
389
|
+
doc[dialect.key] = table;
|
|
390
|
+
out = JSON.stringify(doc, null, 2) + '\n';
|
|
391
|
+
}
|
|
392
|
+
// Re-read what we are about to write.
|
|
393
|
+
const after = parseConfig(format, out);
|
|
394
|
+
for (const n of before.names) {
|
|
395
|
+
if (!after.names.has(n))
|
|
396
|
+
throw new McpConfigError(`refusing to write: "${n}" would be lost`);
|
|
397
|
+
}
|
|
398
|
+
for (const n of names) {
|
|
399
|
+
const got = after.servers[n];
|
|
400
|
+
if (!got || fullIdentity(got) !== fullIdentity(todo[n])) {
|
|
401
|
+
throw new McpConfigError(`refusing to write: "${n}" does not read back as written`);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return out;
|
|
405
|
+
}
|
|
406
|
+
// ---------------------------------------------------------------------------
|
|
407
|
+
// Orchestration
|
|
408
|
+
// ---------------------------------------------------------------------------
|
|
409
|
+
async function readText(file) {
|
|
410
|
+
try {
|
|
411
|
+
return await fs.readFile(file, 'utf8');
|
|
412
|
+
}
|
|
413
|
+
catch (err) {
|
|
414
|
+
if (err.code === 'ENOENT')
|
|
415
|
+
return null;
|
|
416
|
+
throw err;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
async function exists(file) {
|
|
420
|
+
try {
|
|
421
|
+
await fs.access(file);
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Write `text` over `file`, keeping the old content as `<file>.codeman-bak`. Follows a symlink
|
|
430
|
+
* to the real file so a symlinked dotfile stays a symlink. When `secret` is set the result is
|
|
431
|
+
* readable by its owner only.
|
|
432
|
+
*/
|
|
433
|
+
async function writeAtomic(file, text, secret) {
|
|
434
|
+
let target = file;
|
|
435
|
+
try {
|
|
436
|
+
if ((await fs.lstat(file)).isSymbolicLink())
|
|
437
|
+
target = await fs.realpath(file);
|
|
438
|
+
}
|
|
439
|
+
catch (err) {
|
|
440
|
+
if (err.code !== 'ENOENT')
|
|
441
|
+
throw err;
|
|
442
|
+
// ENOENT from realpath on a dangling link, or lstat on a missing file: tell them apart.
|
|
443
|
+
try {
|
|
444
|
+
await fs.lstat(file);
|
|
445
|
+
throw new McpConfigError('config path is a dangling symlink');
|
|
446
|
+
}
|
|
447
|
+
catch (inner) {
|
|
448
|
+
if (inner.code !== 'ENOENT')
|
|
449
|
+
throw inner;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
let mode = 0o600;
|
|
453
|
+
try {
|
|
454
|
+
mode = (await fs.stat(target)).mode & 0o777;
|
|
455
|
+
await fs.copyFile(target, `${target}.codeman-bak`);
|
|
456
|
+
await fs.chmod(`${target}.codeman-bak`, 0o600);
|
|
457
|
+
}
|
|
458
|
+
catch (err) {
|
|
459
|
+
if (err.code !== 'ENOENT')
|
|
460
|
+
throw err;
|
|
461
|
+
}
|
|
462
|
+
if (secret)
|
|
463
|
+
mode &= ~0o077;
|
|
464
|
+
await fs.mkdir(dirname(target), { recursive: true });
|
|
465
|
+
const tmp = `${target}.codeman-tmp-${process.pid}-${randomBytes(4).toString('hex')}`;
|
|
466
|
+
try {
|
|
467
|
+
await fs.writeFile(tmp, text, { mode });
|
|
468
|
+
// writeFile's mode is masked by the umask; the mode we computed is the one we mean.
|
|
469
|
+
await fs.chmod(tmp, mode);
|
|
470
|
+
await fs.rename(tmp, target);
|
|
471
|
+
}
|
|
472
|
+
catch (err) {
|
|
473
|
+
await fs.unlink(tmp).catch(() => undefined);
|
|
474
|
+
throw err;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* The config file a target means, honouring its relocation env var. `skip` is set when the var
|
|
479
|
+
* holds something that cannot be located safely (a relative path resolves against the CLI's
|
|
480
|
+
* working directory, which differs per session), so the target is neither read nor written.
|
|
481
|
+
*/
|
|
482
|
+
function resolveFile(t, home, env) {
|
|
483
|
+
const rel = t.relocation;
|
|
484
|
+
const dir = rel ? env[rel.envVar] : undefined;
|
|
485
|
+
// Every CLI declared today treats an empty value as unset (`||` / a non-empty filter).
|
|
486
|
+
if (!rel || dir === undefined || dir === '')
|
|
487
|
+
return { file: join(home, t.path) };
|
|
488
|
+
if (!isAbsolute(dir)) {
|
|
489
|
+
return {
|
|
490
|
+
file: `$${rel.envVar}/${rel.path}`,
|
|
491
|
+
skip: `${rel.envVar} is set to a relative path, so the file ${t.label} reads cannot be located safely`,
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
return { file: join(dir, rel.path) };
|
|
495
|
+
}
|
|
496
|
+
let applying = false;
|
|
497
|
+
/**
|
|
498
|
+
* Sync across `targets` (already filtered to enabled CLIs with an `mcpConfig`, in priority
|
|
499
|
+
* order: when two CLIs define a name differently, the first one's definition is the one copied).
|
|
500
|
+
* Throws `McpSyncBusyError` if another apply is running.
|
|
501
|
+
*/
|
|
502
|
+
export async function syncMcpServers(targets, opts, unsupported = []) {
|
|
503
|
+
if (opts.apply) {
|
|
504
|
+
if (applying)
|
|
505
|
+
throw new McpSyncBusyError();
|
|
506
|
+
applying = true;
|
|
507
|
+
}
|
|
508
|
+
try {
|
|
509
|
+
return await run(targets, opts, unsupported);
|
|
510
|
+
}
|
|
511
|
+
finally {
|
|
512
|
+
if (opts.apply)
|
|
513
|
+
applying = false;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
async function run(targets, opts, unsupported) {
|
|
517
|
+
const home = opts.home ?? homedir();
|
|
518
|
+
const env = opts.env ?? (opts.home === undefined ? process.env : {});
|
|
519
|
+
const seen = new Set();
|
|
520
|
+
const live = targets
|
|
521
|
+
.map((t) => ({ t, ...resolveFile(t, home, env) }))
|
|
522
|
+
.filter(({ file }) => (seen.has(file) ? false : (seen.add(file), true)));
|
|
523
|
+
const state = live.map(({ t, file, skip }) => {
|
|
524
|
+
const res = {
|
|
525
|
+
id: t.id,
|
|
526
|
+
label: t.label,
|
|
527
|
+
file,
|
|
528
|
+
status: skip ? 'skipped' : 'ok',
|
|
529
|
+
...(skip ? { error: skip } : {}),
|
|
530
|
+
servers: [],
|
|
531
|
+
added: [],
|
|
532
|
+
skipped: [],
|
|
533
|
+
};
|
|
534
|
+
return { t, file, res, servers: dict(), names: new Set() };
|
|
535
|
+
});
|
|
536
|
+
for (const s of state) {
|
|
537
|
+
if (s.res.status !== 'ok')
|
|
538
|
+
continue;
|
|
539
|
+
try {
|
|
540
|
+
if (!s.t.installed && !(await exists(s.file))) {
|
|
541
|
+
s.res.status = 'absent';
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
const parsed = parseConfig(s.t.format, await readText(s.file));
|
|
545
|
+
s.servers = parsed.servers;
|
|
546
|
+
s.names = parsed.names;
|
|
547
|
+
s.res.servers = [...parsed.names];
|
|
548
|
+
}
|
|
549
|
+
catch (err) {
|
|
550
|
+
s.res.status = 'unreadable';
|
|
551
|
+
s.res.error = describeMcpSyncError(err);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
// Union, first enabled definition wins; a later, different definition of the same name is a conflict.
|
|
555
|
+
const union = dict();
|
|
556
|
+
const conflicts = new Set();
|
|
557
|
+
const switchedOff = new Set();
|
|
558
|
+
for (const s of state) {
|
|
559
|
+
if (s.res.status !== 'ok')
|
|
560
|
+
continue;
|
|
561
|
+
for (const name of Object.keys(s.servers)) {
|
|
562
|
+
const def = s.servers[name];
|
|
563
|
+
if (def.disabled) {
|
|
564
|
+
switchedOff.add(name);
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
if (!(name in union))
|
|
568
|
+
union[name] = def;
|
|
569
|
+
else if (fingerprint(union[name]) !== fingerprint(def))
|
|
570
|
+
conflicts.add(name);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
const disabled = [...switchedOff].filter((n) => !(n in union)).sort();
|
|
574
|
+
for (const s of state) {
|
|
575
|
+
if (s.res.status !== 'ok')
|
|
576
|
+
continue;
|
|
577
|
+
const add = dict();
|
|
578
|
+
for (const name of Object.keys(union)) {
|
|
579
|
+
if (s.names.has(name))
|
|
580
|
+
continue;
|
|
581
|
+
if (canExpress(s.t.format, union[name]))
|
|
582
|
+
add[name] = union[name];
|
|
583
|
+
else
|
|
584
|
+
s.res.skipped.push(name);
|
|
585
|
+
}
|
|
586
|
+
s.res.added = Object.keys(add);
|
|
587
|
+
if (!opts.apply || s.res.added.length === 0)
|
|
588
|
+
continue;
|
|
589
|
+
try {
|
|
590
|
+
// Re-read right before writing: claude rewrites ~/.claude.json constantly.
|
|
591
|
+
const fresh = await readText(s.file);
|
|
592
|
+
const out = addServers(s.t.format, fresh, add);
|
|
593
|
+
const current = parseConfig(s.t.format, fresh);
|
|
594
|
+
const written = Object.keys(add).filter((n) => !current.names.has(n));
|
|
595
|
+
if (written.length === 0) {
|
|
596
|
+
s.res.added = [];
|
|
597
|
+
continue;
|
|
598
|
+
}
|
|
599
|
+
const subset = dict();
|
|
600
|
+
for (const n of written)
|
|
601
|
+
subset[n] = add[n];
|
|
602
|
+
await writeAtomic(s.file, out, carriesSecrets(subset));
|
|
603
|
+
s.res.added = written;
|
|
604
|
+
}
|
|
605
|
+
catch (err) {
|
|
606
|
+
s.res.status = 'failed';
|
|
607
|
+
s.res.error = describeMcpSyncError(err);
|
|
608
|
+
s.res.added = [];
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
return {
|
|
612
|
+
applied: opts.apply,
|
|
613
|
+
targets: state.map((s) => s.res),
|
|
614
|
+
conflicts: [...conflicts].sort(),
|
|
615
|
+
disabled,
|
|
616
|
+
unsupported,
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
//# sourceMappingURL=mcp-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-sync.js","sourceRoot":"","sources":["../src/mcp-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/mux-interface.d.ts
CHANGED
|
@@ -93,6 +93,8 @@ export interface CreateSessionOptions {
|
|
|
93
93
|
envOverrides?: Record<string, string>;
|
|
94
94
|
/** Claude CLI effort level, injected as a `--settings` soft default (overridable via /effort in-session) */
|
|
95
95
|
effort?: EffortLevel;
|
|
96
|
+
/** Claude advisor model, merged into the same `--settings` JSON (overridable via /advisor in-session) */
|
|
97
|
+
advisorModel?: string;
|
|
96
98
|
/** tmux history-limit (scrollback lines) allocated when this session is created. */
|
|
97
99
|
historyLimit?: number;
|
|
98
100
|
/** Remote execution metadata for local tmux sessions wrapping SSH */
|
|
@@ -141,6 +143,8 @@ export interface RespawnPaneOptions {
|
|
|
141
143
|
unsetEnvKeys?: string[];
|
|
142
144
|
/** Claude CLI effort level (preserved across respawns, injected via `--settings`) */
|
|
143
145
|
effort?: EffortLevel;
|
|
146
|
+
/** Claude advisor model (preserved across respawns, merged into the same `--settings` JSON) */
|
|
147
|
+
advisorModel?: string;
|
|
144
148
|
/** Original tmux history-limit retained for config parity; respawn cannot resize the existing pane. */
|
|
145
149
|
historyLimit?: number;
|
|
146
150
|
/** Remote execution metadata for local tmux sessions wrapping SSH */
|