aicodeman 1.24.4 → 1.24.6
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/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -4
- package/dist/cli.js.map +1 -1
- package/dist/config/cli-registry/argv.d.ts +44 -0
- package/dist/config/cli-registry/argv.d.ts.map +1 -0
- package/dist/config/cli-registry/argv.js +157 -0
- package/dist/config/cli-registry/argv.js.map +1 -0
- package/dist/config/cli-registry/index.d.ts +17 -0
- package/dist/config/cli-registry/index.d.ts.map +1 -0
- package/dist/config/cli-registry/index.js +11 -0
- package/dist/config/cli-registry/index.js.map +1 -0
- package/dist/config/cli-registry/patterns.d.ts +42 -0
- package/dist/config/cli-registry/patterns.d.ts.map +1 -0
- package/dist/config/cli-registry/patterns.js +104 -0
- package/dist/config/cli-registry/patterns.js.map +1 -0
- package/dist/config/cli-registry/profiles.d.ts +74 -0
- package/dist/config/cli-registry/profiles.d.ts.map +1 -0
- package/dist/config/cli-registry/profiles.js +90 -0
- package/dist/config/cli-registry/profiles.js.map +1 -0
- package/dist/config/cli-registry/registry.d.ts +63 -0
- package/dist/config/cli-registry/registry.d.ts.map +1 -0
- package/dist/config/cli-registry/registry.js +216 -0
- package/dist/config/cli-registry/registry.js.map +1 -0
- package/dist/config/cli-registry/schema.d.ts +259 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -0
- package/dist/config/cli-registry/schema.js +398 -0
- package/dist/config/cli-registry/schema.js.map +1 -0
- package/dist/config/cli-registry/stock.d.ts +15 -0
- package/dist/config/cli-registry/stock.d.ts.map +1 -0
- package/dist/config/cli-registry/stock.js +996 -0
- package/dist/config/cli-registry/stock.js.map +1 -0
- package/dist/config/cli-registry/types.d.ts +565 -0
- package/dist/config/cli-registry/types.d.ts.map +1 -0
- package/dist/config/cli-registry/types.js +13 -0
- package/dist/config/cli-registry/types.js.map +1 -0
- package/dist/config/dependency-registry.d.ts +12 -1
- package/dist/config/dependency-registry.d.ts.map +1 -1
- package/dist/config/dependency-registry.js +155 -203
- package/dist/config/dependency-registry.js.map +1 -1
- package/dist/cron/cron-service.d.ts.map +1 -1
- package/dist/cron/cron-service.js +51 -17
- package/dist/cron/cron-service.js.map +1 -1
- package/dist/docker-hosts.d.ts +9 -1
- package/dist/docker-hosts.d.ts.map +1 -1
- package/dist/docker-hosts.js +25 -17
- package/dist/docker-hosts.js.map +1 -1
- package/dist/remote-hosts.d.ts +73 -0
- package/dist/remote-hosts.d.ts.map +1 -1
- package/dist/remote-hosts.js +139 -45
- package/dist/remote-hosts.js.map +1 -1
- package/dist/remote-reconnect.d.ts +10 -1
- package/dist/remote-reconnect.d.ts.map +1 -1
- package/dist/remote-reconnect.js +9 -0
- package/dist/remote-reconnect.js.map +1 -1
- package/dist/session-cli-registry-bridge.d.ts +66 -0
- package/dist/session-cli-registry-bridge.d.ts.map +1 -0
- package/dist/session-cli-registry-bridge.js +165 -0
- package/dist/session-cli-registry-bridge.js.map +1 -0
- package/dist/session.d.ts +13 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +69 -76
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +50 -35
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +258 -623
- package/dist/tmux-manager.js.map +1 -1
- package/dist/utils/antigravity-cli-resolver.d.ts.map +1 -1
- package/dist/utils/antigravity-cli-resolver.js +8 -10
- package/dist/utils/antigravity-cli-resolver.js.map +1 -1
- package/dist/utils/cli-executable-resolver.d.ts +9 -1
- package/dist/utils/cli-executable-resolver.d.ts.map +1 -1
- package/dist/utils/cli-executable-resolver.js +3 -2
- package/dist/utils/cli-executable-resolver.js.map +1 -1
- package/dist/utils/cli-launcher.d.ts +46 -0
- package/dist/utils/cli-launcher.d.ts.map +1 -0
- package/dist/utils/cli-launcher.js +101 -0
- package/dist/utils/cli-launcher.js.map +1 -0
- package/dist/utils/cli-resolver.d.ts +101 -0
- package/dist/utils/cli-resolver.d.ts.map +1 -0
- package/dist/utils/cli-resolver.js +220 -0
- package/dist/utils/cli-resolver.js.map +1 -0
- package/dist/utils/codex-cli-resolver.d.ts.map +1 -1
- package/dist/utils/codex-cli-resolver.js +8 -11
- package/dist/utils/codex-cli-resolver.js.map +1 -1
- package/dist/utils/deepseek-cli-resolver.d.ts.map +1 -1
- package/dist/utils/deepseek-cli-resolver.js +8 -6
- package/dist/utils/deepseek-cli-resolver.js.map +1 -1
- package/dist/utils/gemini-cli-resolver.d.ts.map +1 -1
- package/dist/utils/gemini-cli-resolver.js +8 -10
- package/dist/utils/gemini-cli-resolver.js.map +1 -1
- package/dist/utils/grok-cli-resolver.js +8 -8
- package/dist/utils/grok-cli-resolver.js.map +1 -1
- package/dist/utils/omp-cli-resolver.d.ts.map +1 -1
- package/dist/utils/omp-cli-resolver.js +10 -15
- package/dist/utils/omp-cli-resolver.js.map +1 -1
- package/dist/utils/opencode-cli-resolver.d.ts.map +1 -1
- package/dist/utils/opencode-cli-resolver.js +8 -11
- package/dist/utils/opencode-cli-resolver.js.map +1 -1
- package/dist/utils/pi-cli-resolver.d.ts.map +1 -1
- package/dist/utils/pi-cli-resolver.js +8 -9
- package/dist/utils/pi-cli-resolver.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.a5d2fc08.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/constants.7bd482dc.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/i18n.9ae15b51.js.gz +0 -0
- package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
- package/dist/web/public/index.html +9 -2
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.87f14251.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.0454a3e9.js.gz +0 -0
- package/dist/web/public/mobile-handlers.0f83a608.js.gz +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.87674154.css.gz +0 -0
- package/dist/web/public/notification-manager.5d229063.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/panels-ui.e6e06034.js.gz +0 -0
- package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
- package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/session-ui.c558f981.js.gz +0 -0
- package/dist/web/public/{settings-ui.2a814a17.js → settings-ui.95b333c6.js} +1 -1
- package/dist/web/public/settings-ui.95b333c6.js.br +0 -0
- package/dist/web/public/settings-ui.95b333c6.js.gz +0 -0
- package/dist/web/public/styles.421b36d4.css.gz +0 -0
- package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.42c24949.js.gz +0 -0
- package/dist/web/public/terminal-ui.70445f81.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.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.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.4ec670b0.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/routes/cron-routes.d.ts.map +1 -1
- package/dist/web/routes/cron-routes.js +3 -2
- package/dist/web/routes/cron-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +8 -34
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +164 -251
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +2 -1
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +12 -48
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +82 -37
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/session-wait-registry.d.ts +1 -1
- package/dist/web/session-wait-registry.d.ts.map +1 -1
- package/dist/web/session-wait-registry.js +20 -12
- package/dist/web/session-wait-registry.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/settings-ui.2a814a17.js.br +0 -0
- package/dist/web/public/settings-ui.2a814a17.js.gz +0 -0
package/dist/remote-hosts.js
CHANGED
|
@@ -4,6 +4,7 @@ import { join } from 'node:path';
|
|
|
4
4
|
import { homedir } from 'node:os';
|
|
5
5
|
import { exec } from 'node:child_process';
|
|
6
6
|
import { promisify } from 'node:util';
|
|
7
|
+
import { getCli } from './config/cli-registry/registry.js';
|
|
7
8
|
const execAsync = promisify(exec);
|
|
8
9
|
const REMOTE_HOSTS_FILE = 'remote-hosts.json';
|
|
9
10
|
const REMOTE_CASES_FILE = 'remote-cases.json';
|
|
@@ -69,39 +70,55 @@ const REMOTE_LOGIN_SHELL = '"${SHELL:-/bin/sh}"';
|
|
|
69
70
|
export function remoteLoginShellCommand(command) {
|
|
70
71
|
return `exec ${REMOTE_LOGIN_SHELL} -i -l -c ${shellescape(command)}`;
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* The CLI text a location overlay should launch for `mode`, or null when this build has no
|
|
75
|
+
* entry for it. `overlays.<location>.command` when the entry names one, otherwise the bare
|
|
76
|
+
* binary — which is what every non-claude CLI wants, and why only claude declares a command.
|
|
77
|
+
*
|
|
78
|
+
* ⚠️ This returns the CLI INVOCATION only. Each location wraps it its own way (remote: a
|
|
79
|
+
* login-shell `-c`; docker: `exec`), which is exactly why the overlay stores the unwrapped
|
|
80
|
+
* form rather than a ready-made line.
|
|
81
|
+
*/
|
|
82
|
+
function overlayCliCommand(mode, location) {
|
|
83
|
+
const entry = getCli(mode);
|
|
84
|
+
if (!entry)
|
|
85
|
+
return null;
|
|
86
|
+
const overlay = entry.overlays[location];
|
|
87
|
+
if (overlay && 'disabled' in overlay)
|
|
88
|
+
return null;
|
|
89
|
+
return overlay?.command ?? entry.discovery.binaries[0] ?? null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The default remote pane command for `mode`.
|
|
93
|
+
*
|
|
94
|
+
* Agent CLIs (claude/opencode/codex/gemini/antigravity/…) are typically installed under
|
|
95
|
+
* per-user paths like ~/.local/bin or ~/.opencode/bin, added to PATH only by the remote
|
|
96
|
+
* user's interactive-login shell startup files (~/.zshrc etc.). ssh's remote-command
|
|
97
|
+
* execution is neither interactive nor login, so a bare `exec claude` sees only sshd's
|
|
98
|
+
* minimal default PATH and fails with "command not found" (exit 127) — confirmed via
|
|
99
|
+
* `tmux capture-pane` on the remain-on-exit-preserved dead pane. Route through
|
|
100
|
+
* `$SHELL -i -l -c`, the same fix shell mode uses, so PATH is fully resolved first.
|
|
101
|
+
*
|
|
102
|
+
* ⚠️ The per-CLI half is now READ FROM THE REGISTRY (`overlays.remote`), not from a
|
|
103
|
+
* hardcoded `Record<RemoteCommandMode, string>`. The table it replaces duplicated the
|
|
104
|
+
* registry exactly, with nothing keeping the two in step — a capability that is both wrong
|
|
105
|
+
* and unread is worse than an absent one, because the next person trusts it. Notes that were
|
|
106
|
+
* attached to individual rows and are still true:
|
|
107
|
+
* - claude carries `--dangerously-skip-permissions` so the remote agent runs
|
|
108
|
+
* non-interactively (no trust-folder prompt nothing on the remote can answer);
|
|
109
|
+
* `overlays.remote.command` on the claude entry is where that now lives.
|
|
110
|
+
* - `dsh` alone boots nothing — the launcher needs a profile, and the remote box's profile
|
|
111
|
+
* inventory is unknown here. The per-host `commands.deepseek` override names one.
|
|
112
|
+
* The per-host `commands.*` override remains the escape hatch for every mode.
|
|
113
|
+
*/
|
|
72
114
|
export function defaultRemoteCommandForMode(mode) {
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
// the
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// fix already used for shell mode below, so PATH is fully resolved before the
|
|
81
|
-
// CLI name is looked up.
|
|
82
|
-
const commands = {
|
|
83
|
-
// $SHELL, not a hardcoded bash: sshd sets it from the remote user's
|
|
84
|
-
// /etc/passwd entry, so this launches their actual login shell (zsh,
|
|
85
|
-
// fish, etc.). -i -l so it sources rc files (~/.zshrc etc.), matching
|
|
86
|
-
// the local shell-mode launch.
|
|
87
|
-
shell: `exec ${REMOTE_LOGIN_SHELL} -i -l`,
|
|
88
|
-
// Mirror the LOCAL claude default so the remote agent runs non-interactively
|
|
89
|
-
// (no trust-folder/permission prompt that nothing on the remote answers). The
|
|
90
|
-
// per-host `commands.claude` override stays the escape hatch.
|
|
91
|
-
claude: remoteLoginShellCommand('claude --dangerously-skip-permissions'),
|
|
92
|
-
opencode: remoteLoginShellCommand('opencode'),
|
|
93
|
-
codex: remoteLoginShellCommand('codex'),
|
|
94
|
-
gemini: remoteLoginShellCommand('gemini'),
|
|
95
|
-
antigravity: remoteLoginShellCommand('agy'),
|
|
96
|
-
pi: remoteLoginShellCommand('pi'),
|
|
97
|
-
grok: remoteLoginShellCommand('grok'),
|
|
98
|
-
// `dsh` alone boots nothing: the launcher needs a profile, and the remote box's
|
|
99
|
-
// profile inventory is unknown here. The per-host `commands.deepseek` override
|
|
100
|
-
// is the escape hatch for naming one.
|
|
101
|
-
deepseek: remoteLoginShellCommand('dsh'),
|
|
102
|
-
omp: remoteLoginShellCommand('omp'),
|
|
103
|
-
};
|
|
104
|
-
return commands[mode] || commands.shell;
|
|
115
|
+
// $SHELL, not a hardcoded bash: sshd sets it from the remote user's /etc/passwd entry, so
|
|
116
|
+
// this launches their actual login shell (zsh, fish, …). `-i -l` so it sources rc files,
|
|
117
|
+
// matching the local shell-mode launch. Not templatable as overlay data: the shell is
|
|
118
|
+
// whatever the REMOTE passwd says, which is why `shell` is the one arm still written here.
|
|
119
|
+
const shellCommand = `exec ${REMOTE_LOGIN_SHELL} -i -l`;
|
|
120
|
+
const cli = overlayCliCommand(mode, 'remote');
|
|
121
|
+
return cli === null ? shellCommand : remoteLoginShellCommand(cli);
|
|
105
122
|
}
|
|
106
123
|
export function remoteSshTarget(host) {
|
|
107
124
|
return `${host.username}@${host.host}`;
|
|
@@ -233,19 +250,22 @@ export async function checkRemoteTmuxAvailable(host) {
|
|
|
233
250
|
}
|
|
234
251
|
}
|
|
235
252
|
/**
|
|
236
|
-
* The CLI binary
|
|
237
|
-
*
|
|
238
|
-
* probe
|
|
253
|
+
* The CLI binary a session mode runs on the remote host, read from the registry rather than
|
|
254
|
+
* from a hardcoded map. `shell` has no CLI to probe and resolves to undefined, which is what
|
|
255
|
+
* makes the probe return null for it.
|
|
256
|
+
*
|
|
257
|
+
* ⚠️ Deriving this CHANGES BEHAVIOUR, deliberately and in one direction. The map it replaces
|
|
258
|
+
* listed claude/opencode/codex/gemini/antigravity/pi/omp and simply omitted `grok` and
|
|
259
|
+
* `deepseek` — its own comment said the rule was "every mode except shell", so the two were
|
|
260
|
+
* an oversight from when those CLIs were added, not a decision. A remote grok or deepseek
|
|
261
|
+
* session therefore reported no version at all. It now probes `grok --version` /
|
|
262
|
+
* `dsh --version` through the same login-shell wrapper as its siblings.
|
|
263
|
+
*
|
|
264
|
+
* (`antigravity` is why this cannot be the mode name: its binary is `agy`.)
|
|
239
265
|
*/
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
codex: 'codex',
|
|
244
|
-
gemini: 'gemini',
|
|
245
|
-
antigravity: 'agy',
|
|
246
|
-
pi: 'pi',
|
|
247
|
-
omp: 'omp',
|
|
248
|
-
};
|
|
266
|
+
function remoteCliBin(mode) {
|
|
267
|
+
return getCli(mode)?.discovery.binaries[0];
|
|
268
|
+
}
|
|
249
269
|
/**
|
|
250
270
|
* Build the SSH command that reads the remote CLI's version (`claude --version`
|
|
251
271
|
* on the remote host). The version query is routed through
|
|
@@ -257,7 +277,7 @@ const REMOTE_CLI_BIN = {
|
|
|
257
277
|
* launch can reach. Returns null for modes with no CLI (shell).
|
|
258
278
|
*/
|
|
259
279
|
export function buildRemoteCliVersionProbeCommand(host, mode) {
|
|
260
|
-
const bin =
|
|
280
|
+
const bin = remoteCliBin(mode);
|
|
261
281
|
if (!bin)
|
|
262
282
|
return null;
|
|
263
283
|
return [
|
|
@@ -292,6 +312,80 @@ export async function probeRemoteCliVersion(host, mode) {
|
|
|
292
312
|
return undefined;
|
|
293
313
|
}
|
|
294
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* COD-108 — build the SSH command that asks whether THIS Codeman's durable
|
|
317
|
+
* remote tmux session (`-L codeman-remote -s codeman-ssh-<id>`) is still alive
|
|
318
|
+
* on the remote host.
|
|
319
|
+
*
|
|
320
|
+
* `has-session` exits 0 when the session exists, non-zero otherwise (and
|
|
321
|
+
* stderr is swallowed). Connection options come from the shared
|
|
322
|
+
* `buildSshConnectionArgs` so this probe reaches exactly the hosts the launch
|
|
323
|
+
* can reach — same port/identity/proxy/jump-host as `buildRemoteLaunchCommand`.
|
|
324
|
+
*/
|
|
325
|
+
export function buildRemoteSessionAliveCommand(host, remoteSessionName) {
|
|
326
|
+
const [ssh, ...connectionArgs] = buildSshConnectionArgs(host);
|
|
327
|
+
const remoteCmd = `tmux -L codeman-remote has-session -t ${shellescape(remoteSessionName)} 2>/dev/null`;
|
|
328
|
+
return [ssh, ...connectionArgs, remoteSshTarget(host), shellescape(remoteCmd)].join(' ');
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* COD-108 — resolve whether THIS Codeman's durable remote tmux session is still
|
|
332
|
+
* alive on the remote host, for the auto-reconnect watcher.
|
|
333
|
+
*
|
|
334
|
+
* Returns:
|
|
335
|
+
* - `true` → the remote tmux session exists (the agent is still running
|
|
336
|
+
* on the remote; the LOCAL pane died from a transport drop →
|
|
337
|
+
* safe to auto-reconnect).
|
|
338
|
+
* - `false` → the remote session is gone (the agent exited cleanly and
|
|
339
|
+
* the remote tmux tore down; reviving would relaunch a fresh
|
|
340
|
+
* agent — must NOT auto-reconnect).
|
|
341
|
+
* - `undefined` → probe failed (host unreachable, ssh error, tmux missing).
|
|
342
|
+
* Callers MUST treat this as "do not reconnect": an
|
|
343
|
+
* unreachable host is not a reason to relaunch the agent.
|
|
344
|
+
*
|
|
345
|
+
* VITEST guard — returns `true` under test so a real ssh never runs; the
|
|
346
|
+
* command construction is covered by `buildRemoteSessionAliveCommand`.
|
|
347
|
+
*/
|
|
348
|
+
export async function remoteTmuxSessionAlive(remote, remoteSessionName) {
|
|
349
|
+
if (process.env.VITEST)
|
|
350
|
+
return true;
|
|
351
|
+
const command = buildRemoteSessionAliveCommand(remote, remoteSessionName);
|
|
352
|
+
try {
|
|
353
|
+
await execAsync(command, { timeout: 15_000 });
|
|
354
|
+
return classifyRemoteAliveExit(0, false);
|
|
355
|
+
}
|
|
356
|
+
catch (err) {
|
|
357
|
+
const e = err;
|
|
358
|
+
return classifyRemoteAliveExit(typeof e.code === 'number' ? e.code : null, e.killed === true);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Map the `has-session` probe's exit status onto the tri-state the watcher
|
|
363
|
+
* reads. Pure, so the mapping is unit-tested even though the probe itself is
|
|
364
|
+
* VITEST-guarded.
|
|
365
|
+
*
|
|
366
|
+
* ⚠️ `tmux has-session` prints NOTHING on success (measured: exit 0, empty
|
|
367
|
+
* stdout; the failure message goes to stderr), so the exit status is the ONLY
|
|
368
|
+
* signal. An earlier version read stdout and therefore classified every live
|
|
369
|
+
* remote session as gone, which silently disabled transport-drop reconnects.
|
|
370
|
+
*
|
|
371
|
+
* - exit 0 → the durable remote session exists → `true`.
|
|
372
|
+
* - exit 255 is ssh's own failure (unreachable host, auth, proxy/jump error)
|
|
373
|
+
* and a timeout arrives as `killed` with no numeric code: we learned
|
|
374
|
+
* nothing about the session → `undefined`, which the watcher treats as
|
|
375
|
+
* "do not revive".
|
|
376
|
+
* - any other non-zero status is the REMOTE command's: tmux's 1 for a missing
|
|
377
|
+
* session, or 127 when tmux is not installed there (no durable session can
|
|
378
|
+
* exist without it) → `false`.
|
|
379
|
+
*/
|
|
380
|
+
export function classifyRemoteAliveExit(code, killed) {
|
|
381
|
+
if (killed)
|
|
382
|
+
return undefined;
|
|
383
|
+
if (code === 0)
|
|
384
|
+
return true;
|
|
385
|
+
if (code === null || code === 255)
|
|
386
|
+
return undefined;
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
295
389
|
/**
|
|
296
390
|
* COD-105 — build the SSH command that lists `codeman-*` tmux sessions on a
|
|
297
391
|
* remote host's canonical `-L codeman` socket.
|
package/dist/remote-hosts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-hosts.js","sourceRoot":"","sources":["../src/remote-hosts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-hosts.js","sourceRoot":"","sources":["../src/remote-hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,6 +81,15 @@ export interface ReconnectSessionView {
|
|
|
81
81
|
isRemote: boolean;
|
|
82
82
|
/** Result of `isPaneDead(muxName)` for this session. */
|
|
83
83
|
paneDead: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Whether the DURABLE remote tmux session is still alive on the remote host.
|
|
86
|
+
* Tri-state: `true` = transport drop with the agent still running (safe to
|
|
87
|
+
* reattach); `false` = the remote session is gone (the agent exited cleanly
|
|
88
|
+
* via ctrl-c/ctrl-d/exit and the remote tmux tore down); `undefined` =
|
|
89
|
+
* unknown/unresolvable. The watcher must NOT revive when the remote session
|
|
90
|
+
* is gone or unknown — a clean exit must never auto-relaunch the agent.
|
|
91
|
+
*/
|
|
92
|
+
remoteAlive: boolean | undefined;
|
|
84
93
|
}
|
|
85
94
|
/**
|
|
86
95
|
* Decision outcomes for a single watcher tick on one session.
|
|
@@ -99,7 +108,7 @@ export type ReconnectAction = {
|
|
|
99
108
|
kind: 'skip';
|
|
100
109
|
reason: ReconnectSkipReason;
|
|
101
110
|
};
|
|
102
|
-
export type ReconnectSkipReason = 'not-remote' | 'pane-alive' | 'guarded' | 'in-flight' | 'not-due' | 'exhausted' | 'disabled';
|
|
111
|
+
export type ReconnectSkipReason = 'not-remote' | 'pane-alive' | 'guarded' | 'in-flight' | 'not-due' | 'exhausted' | 'disabled' | 'remote-gone';
|
|
103
112
|
export interface DecideReconnectInput {
|
|
104
113
|
session: ReconnectSessionView;
|
|
105
114
|
state: RemoteReconnectState | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-reconnect.d.ts","sourceRoot":"","sources":["../src/remote-reconnect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAuD,CAAC;AAEzG,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,QAA6B,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,QAAQ,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,oBAAoB,CAE1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAQ7F;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,IAAI,oBAAoB,CAE1D;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-reconnect.d.ts","sourceRoot":"","sources":["../src/remote-reconnect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAuD,CAAC;AAEzG,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,QAA6B,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,QAAQ,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,oBAAoB,CAE1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAQ7F;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,IAAI,oBAAoB,CAE1D;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,WAAW,GACX,SAAS,GACT,WAAW,GACX,UAAU,GACV,aAAa,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,CA+B5E"}
|
package/dist/remote-reconnect.js
CHANGED
|
@@ -102,6 +102,15 @@ export function decideReconnect(input) {
|
|
|
102
102
|
// Intentional kill / detach must NEVER be auto-revived.
|
|
103
103
|
if (guarded)
|
|
104
104
|
return { kind: 'skip', reason: 'guarded' };
|
|
105
|
+
// A clean exit tears down the durable remote tmux (the session's only pane
|
|
106
|
+
// exiting destroys it). Reviving is ONLY correct for a transport drop: the
|
|
107
|
+
// agent is still running on the remote, so the durable session must still
|
|
108
|
+
// exist. When it is gone (or status is unknown — probe failed/unreachable),
|
|
109
|
+
// the agent exited intentionally and must not be auto-relaunched (found
|
|
110
|
+
// live 2026-08-29: remote omp/opencode ctrl-c/ctrl-d auto-respawned fresh
|
|
111
|
+
// sessions; only claude's `|| --resume` accidentally masked it).
|
|
112
|
+
if (session.remoteAlive !== true)
|
|
113
|
+
return { kind: 'skip', reason: 'remote-gone' };
|
|
105
114
|
const s = state ?? freshReconnectState();
|
|
106
115
|
// Only one reconnect in flight per session — don't stack respawns.
|
|
107
116
|
if (s.inFlight)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-reconnect.js","sourceRoot":"","sources":["../src/remote-reconnect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEzG,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,MAAM,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ,IAAI,sBAAsB,CAAC;AAC5C,CAAC;AAqBD,yEAAyE;AACzE,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AACxG,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,KAA2B,EAAE,GAAW;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO;QACL,GAAG,KAAK;QACR,QAAQ;QACR,cAAc,EAAE,GAAG,GAAG,KAAK;KAC5B,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB;IACjC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-reconnect.js","sourceRoot":"","sources":["../src/remote-reconnect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEzG,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,MAAM,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ,IAAI,sBAAsB,CAAC;AAC5C,CAAC;AAqBD,yEAAyE;AACzE,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AACxG,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,KAA2B,EAAE,GAAW;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO;QACL,GAAG,KAAK;QACR,QAAQ;QACR,cAAc,EAAE,GAAG,GAAG,KAAK;KAC5B,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB;IACjC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAqDD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAExD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC1D,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACrE,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACrE,wDAAwD;IACxD,IAAI,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACxD,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAEjF,MAAM,CAAC,GAAG,KAAK,IAAI,mBAAmB,EAAE,CAAC;IAEzC,mEAAmE;IACnE,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAE7D,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAE9D,uDAAuD;IACvD,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAExD,qCAAqC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEvE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Bridges the legacy per-mode spawn options (`buildSpawnCommand`'s option bag
|
|
3
|
+
* in tmux-manager.ts, unchanged on the wire since before this registry existed) onto the CLI
|
|
4
|
+
* registry's generic argv engine (`renderLaunch`).
|
|
5
|
+
*
|
|
6
|
+
* The per-mode `<Mode>Config` objects on `POST /api/sessions` predate the registry and stay
|
|
7
|
+
* on the wire for API compatibility (`docs/versioning-policy.md`), so SOMETHING has to know
|
|
8
|
+
* which field holds which CLI's config. That knowledge is DATA — `launch.legacyConfigField`
|
|
9
|
+
* and `launch.legacyConfigAliases`, declared once per entry in `config/cli-registry/stock.ts`
|
|
10
|
+
* — which is what lets this file stay a generic reader rather than a `switch (mode)`.
|
|
11
|
+
*
|
|
12
|
+
* An entry declaring NO `legacyConfigField` reads its params straight off the top-level
|
|
13
|
+
* option bag. That is claude, whose discrete `claudeMode`/`allowedTools`/`model`/
|
|
14
|
+
* `resumeSessionId` fields predate the `<Mode>Config` pattern — not a special case for
|
|
15
|
+
* claude, just the other of the two shapes the wire has always had.
|
|
16
|
+
*
|
|
17
|
+
* @module session-cli-registry-bridge
|
|
18
|
+
*/
|
|
19
|
+
import type { CliEntry } from './config/cli-registry/types.js';
|
|
20
|
+
import type { AntigravityConfig, ClaudeMode, CodexConfig, DeepSeekConfig, EffortLevel, GeminiConfig, GrokConfig, OmpConfig, OpenCodeConfig, PiConfig } from './types/session.js';
|
|
21
|
+
export interface SpawnBridgeOptions {
|
|
22
|
+
mode: string;
|
|
23
|
+
sessionId: string;
|
|
24
|
+
model?: string;
|
|
25
|
+
claudeMode?: ClaudeMode;
|
|
26
|
+
allowedTools?: string;
|
|
27
|
+
openCodeConfig?: OpenCodeConfig;
|
|
28
|
+
codexConfig?: CodexConfig;
|
|
29
|
+
geminiConfig?: GeminiConfig;
|
|
30
|
+
antigravityConfig?: AntigravityConfig;
|
|
31
|
+
piConfig?: PiConfig;
|
|
32
|
+
grokConfig?: GrokConfig;
|
|
33
|
+
deepSeekConfig?: DeepSeekConfig;
|
|
34
|
+
ompConfig?: OmpConfig;
|
|
35
|
+
resumeSessionId?: string;
|
|
36
|
+
effort?: EffortLevel;
|
|
37
|
+
sessionName?: string;
|
|
38
|
+
claudeCliVersion?: string | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Same lookup, addressed by mode rather than by entry, for callers holding only a mode and an
|
|
42
|
+
* option bag (tmux-manager's env configuration). Returns undefined for an unregistered mode.
|
|
43
|
+
*/
|
|
44
|
+
export declare function legacyConfigForMode(mode: string, options: Record<string, unknown>): Record<string, unknown> | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* The env vars this CLI declares in `env.configSetenv`, resolved from its legacy config
|
|
47
|
+
* object — i.e. the ones whose value comes from the CALLER rather than the server's own
|
|
48
|
+
* environment.
|
|
49
|
+
*
|
|
50
|
+
* ⚠️ Re-validated here against the declared `ParamSpec` even though the wire shape is already
|
|
51
|
+
* Zod-checked upstream. These values reach `tmux setenv`, and for DeepSeek the value IS a
|
|
52
|
+
* permission level: a builder must never trust its caller on a security-relevant field, and
|
|
53
|
+
* the cost of re-checking an enum is nothing.
|
|
54
|
+
*
|
|
55
|
+
* A value that fails validation is DROPPED, not defaulted — which is the safe direction: the
|
|
56
|
+
* var goes unset, and the CLI falls back to its own default (for dsh, `workspace-write`,
|
|
57
|
+
* which asks) rather than to something we guessed.
|
|
58
|
+
*/
|
|
59
|
+
export declare function configSetenvValues(entry: CliEntry, rawConfig: Record<string, unknown> | undefined): Record<string, string>;
|
|
60
|
+
/**
|
|
61
|
+
* Render the spawn command for `entry` from the legacy option bag. Returns `undefined` for a
|
|
62
|
+
* `shell`-kind entry (or any entry declaring no launch variants), which callers take as "fall
|
|
63
|
+
* back to the local login-shell resolution" — shell has no CLI to template.
|
|
64
|
+
*/
|
|
65
|
+
export declare function buildSpawnCommandFromRegistry(entry: CliEntry, options: SpawnBridgeOptions): string | undefined;
|
|
66
|
+
//# sourceMappingURL=session-cli-registry-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cli-registry-bridge.d.ts","sourceRoot":"","sources":["../src/session-cli-registry-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAQ/D,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAYD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAIrC;AA0BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAmBD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAsC9G"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Bridges the legacy per-mode spawn options (`buildSpawnCommand`'s option bag
|
|
3
|
+
* in tmux-manager.ts, unchanged on the wire since before this registry existed) onto the CLI
|
|
4
|
+
* registry's generic argv engine (`renderLaunch`).
|
|
5
|
+
*
|
|
6
|
+
* The per-mode `<Mode>Config` objects on `POST /api/sessions` predate the registry and stay
|
|
7
|
+
* on the wire for API compatibility (`docs/versioning-policy.md`), so SOMETHING has to know
|
|
8
|
+
* which field holds which CLI's config. That knowledge is DATA — `launch.legacyConfigField`
|
|
9
|
+
* and `launch.legacyConfigAliases`, declared once per entry in `config/cli-registry/stock.ts`
|
|
10
|
+
* — which is what lets this file stay a generic reader rather than a `switch (mode)`.
|
|
11
|
+
*
|
|
12
|
+
* An entry declaring NO `legacyConfigField` reads its params straight off the top-level
|
|
13
|
+
* option bag. That is claude, whose discrete `claudeMode`/`allowedTools`/`model`/
|
|
14
|
+
* `resumeSessionId` fields predate the `<Mode>Config` pattern — not a special case for
|
|
15
|
+
* claude, just the other of the two shapes the wire has always had.
|
|
16
|
+
*
|
|
17
|
+
* @module session-cli-registry-bridge
|
|
18
|
+
*/
|
|
19
|
+
import { renderLaunch } from './config/cli-registry/argv.js';
|
|
20
|
+
import { matchesPattern } from './config/cli-registry/patterns.js';
|
|
21
|
+
import { buildEffortCliArgs, sanitizeCliSessionName } from './session-cli-builder.js';
|
|
22
|
+
import { compareVersions } from './utils/dependency-checker.js';
|
|
23
|
+
import { getClaudeCliVersion } from './utils/claude-cli-resolver.js';
|
|
24
|
+
import { launcherDefaultTarget } from './utils/cli-launcher.js';
|
|
25
|
+
import { getCli } from './config/cli-registry/registry.js';
|
|
26
|
+
/**
|
|
27
|
+
* The raw legacy config object this entry's params should be read from: the declared
|
|
28
|
+
* `<Mode>Config` field, or the option bag itself when none is declared.
|
|
29
|
+
*/
|
|
30
|
+
function legacyConfigFor(entry, options) {
|
|
31
|
+
const field = entry.launch.legacyConfigField;
|
|
32
|
+
if (field === undefined)
|
|
33
|
+
return options;
|
|
34
|
+
return options[field];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Same lookup, addressed by mode rather than by entry, for callers holding only a mode and an
|
|
38
|
+
* option bag (tmux-manager's env configuration). Returns undefined for an unregistered mode.
|
|
39
|
+
*/
|
|
40
|
+
export function legacyConfigForMode(mode, options) {
|
|
41
|
+
const entry = getCli(mode);
|
|
42
|
+
if (!entry)
|
|
43
|
+
return undefined;
|
|
44
|
+
return legacyConfigFor(entry, options);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build `ParamValues` for every declared `token`/`bool`/`enum` param by reading it out of the
|
|
48
|
+
* legacy config object through `legacyConfigAliases` (falling back to the param's own name).
|
|
49
|
+
* `engine`-sourced params are skipped — those come from `EngineValues`, never legacy config.
|
|
50
|
+
*/
|
|
51
|
+
function buildParamsFromLegacyConfig(entry, rawConfig) {
|
|
52
|
+
const params = {};
|
|
53
|
+
if (!rawConfig)
|
|
54
|
+
return params;
|
|
55
|
+
const aliases = entry.launch.legacyConfigAliases ?? {};
|
|
56
|
+
for (const [paramName, spec] of Object.entries(entry.launch.params)) {
|
|
57
|
+
if (spec.type === 'engine')
|
|
58
|
+
continue;
|
|
59
|
+
const legacyKey = aliases[paramName] ?? paramName;
|
|
60
|
+
const value = rawConfig[legacyKey];
|
|
61
|
+
if (value === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
// Anything that is not already a string or boolean is DROPPED rather than coerced: the
|
|
64
|
+
// wire shape is Zod-validated upstream, so a surprise here means something is wrong,
|
|
65
|
+
// and `String({})` would happily produce a token nobody intended.
|
|
66
|
+
if (typeof value === 'string' || typeof value === 'boolean') {
|
|
67
|
+
params[paramName] = value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return params;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The env vars this CLI declares in `env.configSetenv`, resolved from its legacy config
|
|
74
|
+
* object — i.e. the ones whose value comes from the CALLER rather than the server's own
|
|
75
|
+
* environment.
|
|
76
|
+
*
|
|
77
|
+
* ⚠️ Re-validated here against the declared `ParamSpec` even though the wire shape is already
|
|
78
|
+
* Zod-checked upstream. These values reach `tmux setenv`, and for DeepSeek the value IS a
|
|
79
|
+
* permission level: a builder must never trust its caller on a security-relevant field, and
|
|
80
|
+
* the cost of re-checking an enum is nothing.
|
|
81
|
+
*
|
|
82
|
+
* A value that fails validation is DROPPED, not defaulted — which is the safe direction: the
|
|
83
|
+
* var goes unset, and the CLI falls back to its own default (for dsh, `workspace-write`,
|
|
84
|
+
* which asks) rather than to something we guessed.
|
|
85
|
+
*/
|
|
86
|
+
export function configSetenvValues(entry, rawConfig) {
|
|
87
|
+
const out = {};
|
|
88
|
+
const mappings = entry.env.configSetenv;
|
|
89
|
+
if (!mappings || !rawConfig)
|
|
90
|
+
return out;
|
|
91
|
+
const aliases = entry.launch.legacyConfigAliases ?? {};
|
|
92
|
+
for (const { name, fromParam } of mappings) {
|
|
93
|
+
const spec = entry.launch.params[fromParam];
|
|
94
|
+
if (!spec)
|
|
95
|
+
continue; // schema-validated at load; belt and braces
|
|
96
|
+
const raw = rawConfig[aliases[fromParam] ?? fromParam];
|
|
97
|
+
if (typeof raw !== 'string')
|
|
98
|
+
continue;
|
|
99
|
+
if (spec.type === 'enum' && !spec.values.includes(raw))
|
|
100
|
+
continue;
|
|
101
|
+
if (spec.type === 'token' && !matchesPattern(spec.pattern, raw))
|
|
102
|
+
continue;
|
|
103
|
+
out[name] = raw;
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Which `capabilities.gates` are currently satisfied. `resolveVersion` is called AT MOST
|
|
109
|
+
* ONCE, and only when the entry actually declares a gate — a `--version` subprocess probe
|
|
110
|
+
* has no reason to run for an entry with none.
|
|
111
|
+
*/
|
|
112
|
+
function resolveGatesPassed(entry, resolveVersion) {
|
|
113
|
+
const passed = new Set();
|
|
114
|
+
const gateEntries = Object.entries(entry.capabilities.gates);
|
|
115
|
+
if (gateEntries.length === 0)
|
|
116
|
+
return passed;
|
|
117
|
+
const cliVersion = resolveVersion();
|
|
118
|
+
if (!cliVersion)
|
|
119
|
+
return passed; // fail-closed: an unknown version satisfies no gate
|
|
120
|
+
for (const [name, gate] of gateEntries) {
|
|
121
|
+
if (compareVersions(cliVersion, gate.minVersion) >= 0)
|
|
122
|
+
passed.add(name);
|
|
123
|
+
}
|
|
124
|
+
return passed;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Render the spawn command for `entry` from the legacy option bag. Returns `undefined` for a
|
|
128
|
+
* `shell`-kind entry (or any entry declaring no launch variants), which callers take as "fall
|
|
129
|
+
* back to the local login-shell resolution" — shell has no CLI to template.
|
|
130
|
+
*/
|
|
131
|
+
export function buildSpawnCommandFromRegistry(entry, options) {
|
|
132
|
+
if (entry.kind === 'shell' || entry.launch.variants.length === 0)
|
|
133
|
+
return undefined;
|
|
134
|
+
const params = buildParamsFromLegacyConfig(entry, legacyConfigFor(entry, options));
|
|
135
|
+
const engineValues = {
|
|
136
|
+
sessionId: options.sessionId,
|
|
137
|
+
// Allowlist-sanitized (Unicode letters/digits + ` . _ : -`, 64 chars), matching
|
|
138
|
+
// buildNameCliArgs exactly — sanitizeCliSessionName is the injection guard for this
|
|
139
|
+
// value, NOT the `quote: 'double'` escaping on the --name arg (which only makes an
|
|
140
|
+
// unsafe value inert, it does not launder one into something meaningful).
|
|
141
|
+
sessionName: sanitizeCliSessionName(options.sessionName),
|
|
142
|
+
};
|
|
143
|
+
// Only a launcher CLI has one, and resolving it means a filesystem scan of the launcher's
|
|
144
|
+
// profile tree, so skip the lookup entirely for the eight entries that declare no profile.
|
|
145
|
+
if (entry.discovery.launcherProfile !== undefined) {
|
|
146
|
+
engineValues.launcherDefaultTarget = launcherDefaultTarget(entry) ?? undefined;
|
|
147
|
+
}
|
|
148
|
+
// Mirrors buildEffortCliArgs exactly: ultracode carries a fixed settings blob, every other
|
|
149
|
+
// level rides a plain `--effort <level>` flag. Reusing the canonical builder here (rather
|
|
150
|
+
// than re-deriving the ultracode special case) keeps the EFFORT_LEVELS allowlist and the
|
|
151
|
+
// settings-JSON shape single-sourced in session-cli-builder.ts.
|
|
152
|
+
const [effortFlag, effortValue] = buildEffortCliArgs(options.effort);
|
|
153
|
+
if (effortFlag === '--settings')
|
|
154
|
+
engineValues.effortSettingsJson = effortValue;
|
|
155
|
+
else if (effortFlag === '--effort')
|
|
156
|
+
engineValues.effortLevel = effortValue;
|
|
157
|
+
// Preserves buildSpawnCommand's original fallback exactly: an EXPLICIT `undefined` probes
|
|
158
|
+
// the local claude CLI (getClaudeCliVersion, null under vitest); an explicit `null` means
|
|
159
|
+
// "known to be unresolvable" and must not probe. The probe only ever runs from
|
|
160
|
+
// resolveGatesPassed, and only for an entry that actually declares a gate, so this stays
|
|
161
|
+
// generic without spawning a stray `claude --version` for every other CLI's launch.
|
|
162
|
+
const gatesPassed = resolveGatesPassed(entry, () => options.claudeCliVersion !== undefined ? options.claudeCliVersion : getClaudeCliVersion());
|
|
163
|
+
return renderLaunch(entry.launch, params, engineValues, gatesPassed);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=session-cli-registry-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cli-registry-bridge.js","sourceRoot":"","sources":["../src/session-cli-registry-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -37,7 +37,19 @@ import type { SessionAttachmentHistoryItem } from './types/session.js';
|
|
|
37
37
|
export type { BackgroundTask } from './task-tracker.js';
|
|
38
38
|
export type { RalphTrackerState, RalphTodoItem, ActiveBashTool } from './types.js';
|
|
39
39
|
export type ResizeViewportType = 'mobile' | 'tablet' | 'desktop';
|
|
40
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* True for external-CLI run modes (non-Claude) that use their own TUI and output format:
|
|
42
|
+
* no Claude transcript, no hooks, no Claude-format token/BashTool parsing.
|
|
43
|
+
*
|
|
44
|
+
* ⚠️ Reads its OWN capability flag rather than being derived from `hooks` or `kind`, and
|
|
45
|
+
* that independence is load-bearing. `shell` has no hooks but is NOT external, so a
|
|
46
|
+
* predicate derived from hooks would sweep it in here; `deepseek` HAS hooks but IS
|
|
47
|
+
* external. Deriving one of these three predicates from another has already shipped a bug
|
|
48
|
+
* (see CliCapabilities' own doc comment), which is why they are three separate fields.
|
|
49
|
+
*
|
|
50
|
+
* An UNREGISTERED mode is treated as external — the conservative answer, since it disables
|
|
51
|
+
* Claude-specific parsing rather than pointing it at output that was never Claude's.
|
|
52
|
+
*/
|
|
41
53
|
export declare function isExternalCliMode(mode: SessionMode): boolean;
|
|
42
54
|
/**
|
|
43
55
|
* Modes whose TUI emits alt-screen / scrollback-erase / mouse-tracking sequences
|