aicodeman 1.3.4 → 1.4.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/docker-export.d.ts +107 -0
- package/dist/docker-export.d.ts.map +1 -0
- package/dist/docker-export.js +335 -0
- package/dist/docker-export.js.map +1 -0
- package/dist/docker-hosts.d.ts +184 -0
- package/dist/docker-hosts.d.ts.map +1 -0
- package/dist/docker-hosts.js +506 -0
- package/dist/docker-hosts.js.map +1 -0
- package/dist/mux-interface.d.ts +7 -1
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/session.d.ts +9 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +48 -4
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +50 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +214 -7
- package/dist/tmux-manager.js.map +1 -1
- package/dist/types/api.d.ts +9 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js.map +1 -1
- package/dist/types/session.d.ts +102 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/web/middleware/auth.d.ts.map +1 -1
- package/dist/web/middleware/auth.js +13 -0
- package/dist/web/middleware/auth.js.map +1 -1
- package/dist/web/network-auth-policy.d.ts +9 -0
- package/dist/web/network-auth-policy.d.ts.map +1 -1
- package/dist/web/network-auth-policy.js +12 -0
- package/dist/web/network-auth-policy.js.map +1 -1
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/{app.6890f3d0.js → app.07e61fcf.js} +1 -1
- package/dist/web/public/app.07e61fcf.js.br +0 -0
- package/dist/web/public/app.07e61fcf.js.gz +0 -0
- package/dist/web/public/{constants.5b18ed64.js → constants.503109fa.js} +3 -0
- package/dist/web/public/constants.503109fa.js.br +0 -0
- package/dist/web/public/{constants.5b18ed64.js.gz → constants.503109fa.js.gz} +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
- package/dist/web/public/index.html +139 -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.63794d0b.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
- package/dist/web/public/mobile-handlers.b5a667ef.js.gz +0 -0
- package/dist/web/public/mobile.0644e3ac.css.gz +0 -0
- package/dist/web/public/notification-manager.ca9dc40d.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/panels-ui.ca03853f.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/respawn-ui.2d249da9.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-ui.9da1b71f.js +58 -0
- package/dist/web/public/session-ui.9da1b71f.js.br +0 -0
- package/dist/web/public/session-ui.9da1b71f.js.gz +0 -0
- package/dist/web/public/settings-ui.4acbe789.js +67 -0
- package/dist/web/public/settings-ui.4acbe789.js.br +0 -0
- package/dist/web/public/settings-ui.4acbe789.js.gz +0 -0
- package/dist/web/public/{styles.3d78fd0d.css → styles.546ddae4.css} +1 -1
- package/dist/web/public/styles.546ddae4.css.br +0 -0
- package/dist/web/public/styles.546ddae4.css.gz +0 -0
- package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/terminal-ui.efda6083.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-zerolag-input.137ad9f0.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.085e9e73.js.gz +0 -0
- package/dist/web/routes/case-routes.d.ts.map +1 -1
- package/dist/web/routes/case-routes.js +372 -3
- package/dist/web/routes/case-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +67 -4
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +71 -1
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +155 -0
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +11 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +81 -1
- package/dist/web/server.js.map +1 -1
- package/dist/web/sse-events.d.ts +9 -0
- package/dist/web/sse-events.d.ts.map +1 -1
- package/dist/web/sse-events.js +11 -0
- package/dist/web/sse-events.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/app.6890f3d0.js.br +0 -0
- package/dist/web/public/app.6890f3d0.js.gz +0 -0
- package/dist/web/public/constants.5b18ed64.js.br +0 -0
- package/dist/web/public/session-ui.c9094fe9.js +0 -49
- package/dist/web/public/session-ui.c9094fe9.js.br +0 -0
- package/dist/web/public/session-ui.c9094fe9.js.gz +0 -0
- package/dist/web/public/settings-ui.9538a0c1.js +0 -67
- package/dist/web/public/settings-ui.9538a0c1.js.br +0 -0
- package/dist/web/public/settings-ui.9538a0c1.js.gz +0 -0
- package/dist/web/public/styles.3d78fd0d.css.br +0 -0
- package/dist/web/public/styles.3d78fd0d.css.gz +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-hosts.d.ts","sourceRoot":"","sources":["../src/docker-hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Docker cases: storage, pure command-arg builders, and daemon probes.
|
|
3
|
+
*
|
|
4
|
+
* Docker mode is a LOCATION OVERLAY on cases (not a 6th SessionMode), the direct
|
|
5
|
+
* analog of the remote-SSH feature in `remote-hosts.ts`. Instead of a local tmux
|
|
6
|
+
* pane running `ssh host` into a durable remote tmux server, a local tmux pane
|
|
7
|
+
* runs `docker exec -it` into a durable IN-CONTAINER tmux server. The container is
|
|
8
|
+
* scoped to the CASE (`codeman-case-<name>`), so multiple sessions can `docker
|
|
9
|
+
* exec` into the same long-lived container.
|
|
10
|
+
*
|
|
11
|
+
* This module mirrors `remote-hosts.ts`:
|
|
12
|
+
* - JSON storage for hosts (`docker-hosts.json`) and cases (`docker-cases.json`)
|
|
13
|
+
* - `toSessionDocker()` (mirror of `toSessionRemote`)
|
|
14
|
+
* - `buildDockerBaseArgs()` / `buildDockerCreateArgs()` (mirror of `buildSshConnectionArgs`)
|
|
15
|
+
* - `checkDockerAvailable()` / `checkDockerTmuxAvailable()` (mirror of `checkRemoteTmuxAvailable`)
|
|
16
|
+
*
|
|
17
|
+
* The launch/kill command orchestration (`buildDockerLaunchCommand`,
|
|
18
|
+
* `buildDockerKillCommand`, `dockerTmuxSessionName`) lives in `tmux-manager.ts`,
|
|
19
|
+
* mirroring where `buildRemoteLaunchCommand` lives.
|
|
20
|
+
*
|
|
21
|
+
* @module docker-hosts
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
24
|
+
import fs from 'node:fs/promises';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { homedir } from 'node:os';
|
|
27
|
+
import { createHash } from 'node:crypto';
|
|
28
|
+
import { execFile } from 'node:child_process';
|
|
29
|
+
import { promisify } from 'node:util';
|
|
30
|
+
const execFileAsync = promisify(execFile);
|
|
31
|
+
/** Under vitest, all real `docker` invocations no-op (mirror of tmux-manager's IS_TEST_MODE). */
|
|
32
|
+
const IS_TEST_MODE = !!process.env.VITEST;
|
|
33
|
+
const DOCKER_HOSTS_FILE = 'docker-hosts.json';
|
|
34
|
+
const DOCKER_CASES_FILE = 'docker-cases.json';
|
|
35
|
+
/** Locally-built base image (see scripts/build-agent-image.mjs). */
|
|
36
|
+
export const DEFAULT_AGENT_IMAGE = 'codeman/agent:base';
|
|
37
|
+
/** HOME inside the base image (the `agent` user). Cred mounts + hook-secret land under it. */
|
|
38
|
+
export const CONTAINER_HOME = '/home/agent';
|
|
39
|
+
/** Per-case container name prefix. The `case` letters deliberately do NOT matter to
|
|
40
|
+
* tmux; this is a DOCKER name (`^[a-zA-Z0-9][a-zA-Z0-9_.-]+$`), and case names are
|
|
41
|
+
* already validated `^[a-zA-Z0-9_-]+$`, so `codeman-case-<name>` is always valid. */
|
|
42
|
+
const CONTAINER_NAME_PREFIX = 'codeman-case-';
|
|
43
|
+
/** Sensible resource defaults (all overridable per host). */
|
|
44
|
+
export const DEFAULT_DOCKER_RESOURCES = {
|
|
45
|
+
memory: '4g',
|
|
46
|
+
cpus: '2',
|
|
47
|
+
pidsLimit: 512,
|
|
48
|
+
nofile: '4096:8192',
|
|
49
|
+
};
|
|
50
|
+
// ========== Storage (mirror of remote-hosts.ts) ==========
|
|
51
|
+
export function dockerHostsPath(configDir) {
|
|
52
|
+
return join(configDir, DOCKER_HOSTS_FILE);
|
|
53
|
+
}
|
|
54
|
+
export function dockerCasesPath(configDir) {
|
|
55
|
+
return join(configDir, DOCKER_CASES_FILE);
|
|
56
|
+
}
|
|
57
|
+
async function readJsonArray(path) {
|
|
58
|
+
try {
|
|
59
|
+
const raw = await fs.readFile(path, 'utf-8');
|
|
60
|
+
const parsed = JSON.parse(raw);
|
|
61
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function writeJsonArray(configDir, path, value) {
|
|
68
|
+
if (!existsSync(configDir))
|
|
69
|
+
mkdirSync(configDir, { recursive: true });
|
|
70
|
+
await fs.writeFile(path, JSON.stringify(value, null, 2));
|
|
71
|
+
}
|
|
72
|
+
export async function readDockerHosts(configDir) {
|
|
73
|
+
return readJsonArray(dockerHostsPath(configDir));
|
|
74
|
+
}
|
|
75
|
+
export async function writeDockerHosts(configDir, hosts) {
|
|
76
|
+
await writeJsonArray(configDir, dockerHostsPath(configDir), hosts);
|
|
77
|
+
}
|
|
78
|
+
export async function readDockerCases(configDir) {
|
|
79
|
+
return readJsonArray(dockerCasesPath(configDir));
|
|
80
|
+
}
|
|
81
|
+
export async function writeDockerCases(configDir, cases) {
|
|
82
|
+
await writeJsonArray(configDir, dockerCasesPath(configDir), cases);
|
|
83
|
+
}
|
|
84
|
+
// ========== Naming / display / defaults ==========
|
|
85
|
+
/** Per-case container name. Mirrors how remote derives a stable name from the case. */
|
|
86
|
+
export function dockerContainerName(caseName) {
|
|
87
|
+
return `${CONTAINER_NAME_PREFIX}${caseName}`;
|
|
88
|
+
}
|
|
89
|
+
/** Default pane command per CLI mode (mirror of defaultRemoteCommandForMode). */
|
|
90
|
+
export function defaultDockerCommandForMode(mode) {
|
|
91
|
+
const commands = {
|
|
92
|
+
shell: 'exec bash -l',
|
|
93
|
+
// Mirror the LOCAL claude default so the in-container agent runs non-interactively.
|
|
94
|
+
claude: 'exec claude --dangerously-skip-permissions',
|
|
95
|
+
opencode: 'exec opencode',
|
|
96
|
+
codex: 'exec codex',
|
|
97
|
+
gemini: 'exec gemini',
|
|
98
|
+
};
|
|
99
|
+
return commands[mode] || commands.shell;
|
|
100
|
+
}
|
|
101
|
+
/** `container:/workdir` display string (mirror of remoteDisplayPath's `user@host:path`). */
|
|
102
|
+
export function dockerDisplayPath(docker) {
|
|
103
|
+
if ('containerName' in docker)
|
|
104
|
+
return `${docker.containerName}:${docker.containerWorkdir}`;
|
|
105
|
+
return `${docker.container}:${docker.path}`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The host-callback gateway alias is ENGINE-SPECIFIC: Docker exposes the host as
|
|
109
|
+
* `host.docker.internal`, Podman as `host.containers.internal`. Both are added to
|
|
110
|
+
* the host-guard allowlist so a mixed fleet keeps working.
|
|
111
|
+
*/
|
|
112
|
+
export function hostGatewayAlias(engine) {
|
|
113
|
+
return engine === 'podman' ? 'host.containers.internal' : 'host.docker.internal';
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Rewrite the server's own `CODEMAN_API_URL` to a container-reachable one by
|
|
117
|
+
* swapping ONLY the hostname for the engine's host-gateway alias, preserving
|
|
118
|
+
* scheme AND port (prod is HTTPS on 3000, so hardcoding http://…:3000 breaks
|
|
119
|
+
* every hook). Falls back to `https://<alias>:3000` when the input is absent or
|
|
120
|
+
* unparseable.
|
|
121
|
+
*/
|
|
122
|
+
export function containerApiUrl(processApiUrl, engine) {
|
|
123
|
+
const alias = hostGatewayAlias(engine);
|
|
124
|
+
if (!processApiUrl)
|
|
125
|
+
return `https://${alias}:3000`;
|
|
126
|
+
try {
|
|
127
|
+
const url = new URL(processApiUrl);
|
|
128
|
+
url.hostname = alias;
|
|
129
|
+
// origin drops any trailing path/slash and keeps scheme + (non-default) port
|
|
130
|
+
return url.origin;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return `https://${alias}:3000`;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Stable hash of the drift-relevant `docker create` inputs, stored on the
|
|
138
|
+
* container as the `codeman.confighash` label. On launch, a mismatch between the
|
|
139
|
+
* desired hash and the running container's label triggers the recreate-on-drift
|
|
140
|
+
* prompt (host config edits actually take effect).
|
|
141
|
+
*/
|
|
142
|
+
export function dockerConfigHash(docker) {
|
|
143
|
+
const normalized = JSON.stringify({
|
|
144
|
+
engine: docker.engine,
|
|
145
|
+
image: docker.image,
|
|
146
|
+
containerWorkdir: docker.containerWorkdir,
|
|
147
|
+
network: docker.network,
|
|
148
|
+
networkName: docker.networkName ?? null,
|
|
149
|
+
resources: docker.resources ?? null,
|
|
150
|
+
gpus: docker.gpus ?? null,
|
|
151
|
+
mountCredentials: docker.mountCredentials,
|
|
152
|
+
extraCreateArgs: docker.extraCreateArgs ?? null,
|
|
153
|
+
});
|
|
154
|
+
return createHash('sha256').update(normalized).digest('hex').slice(0, 12);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Build the flattened per-session Docker metadata from a host profile + a case,
|
|
158
|
+
* resolving every default (mirror of toSessionRemote). The `configHash` is
|
|
159
|
+
* computed last over the resolved values.
|
|
160
|
+
*/
|
|
161
|
+
export function toSessionDocker(host, dockerCase) {
|
|
162
|
+
const engine = host.engine ?? 'docker';
|
|
163
|
+
const containerWorkdir = dockerCase.containerWorkdir ?? dockerCase.hostWorkspacePath;
|
|
164
|
+
const base = {
|
|
165
|
+
hostId: host.id,
|
|
166
|
+
label: host.label,
|
|
167
|
+
engine,
|
|
168
|
+
image: host.image || DEFAULT_AGENT_IMAGE,
|
|
169
|
+
containerName: dockerCase.container ?? dockerContainerName(dockerCase.name),
|
|
170
|
+
hostWorkspacePath: dockerCase.hostWorkspacePath,
|
|
171
|
+
containerWorkdir,
|
|
172
|
+
network: host.network ?? 'bridge',
|
|
173
|
+
networkName: host.networkName,
|
|
174
|
+
resources: host.resources ?? DEFAULT_DOCKER_RESOURCES,
|
|
175
|
+
gpus: host.gpus,
|
|
176
|
+
mountCredentials: host.mountCredentials ?? true,
|
|
177
|
+
hooksEnabled: host.hooksEnabled ?? true,
|
|
178
|
+
resumeOnStart: host.resumeOnStart ?? true,
|
|
179
|
+
daemonHost: host.daemonHost,
|
|
180
|
+
context: host.context,
|
|
181
|
+
commands: host.commands,
|
|
182
|
+
extraCreateArgs: host.extraCreateArgs,
|
|
183
|
+
extraExecArgs: host.extraExecArgs,
|
|
184
|
+
};
|
|
185
|
+
return { ...base, configHash: dockerConfigHash(base) };
|
|
186
|
+
}
|
|
187
|
+
// ========== Shell escaping ==========
|
|
188
|
+
/**
|
|
189
|
+
* POSIX single-quote shell-escaping (end-quote, escaped-quote, restart-quote).
|
|
190
|
+
* Mirror of the helper in remote-hosts.ts / tmux-manager.ts. Every dynamic value
|
|
191
|
+
* interpolated into the outer `bash -c "..."` launch layer is escaped through
|
|
192
|
+
* this so a path with spaces stays a single shell token. Operator-entered fields
|
|
193
|
+
* are ALSO schema-rejected for `$`/backtick (NO_SHELL_META) as defense in depth.
|
|
194
|
+
*/
|
|
195
|
+
export function shellescape(str) {
|
|
196
|
+
return "'" + str.replace(/'/g, "'\\''") + "'";
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Engine prefix tokens shared by every docker invocation (mirror of
|
|
200
|
+
* buildSshConnectionArgs). Returns e.g. ['docker'] or ['podman','--context','ctx'].
|
|
201
|
+
*/
|
|
202
|
+
export function buildDockerBaseArgs(docker) {
|
|
203
|
+
const parts = [docker.engine === 'podman' ? 'podman' : 'docker'];
|
|
204
|
+
if (docker.context)
|
|
205
|
+
parts.push('--context', shellescape(docker.context));
|
|
206
|
+
if (docker.daemonHost)
|
|
207
|
+
parts.push('-H', shellescape(docker.daemonHost));
|
|
208
|
+
return parts;
|
|
209
|
+
}
|
|
210
|
+
function mountSpec(m) {
|
|
211
|
+
return `type=bind,src=${m.src},dst=${m.dst}${m.readonly ? ',readonly' : ''}`;
|
|
212
|
+
}
|
|
213
|
+
function resourceFlags(resources) {
|
|
214
|
+
if (!resources)
|
|
215
|
+
return [];
|
|
216
|
+
const flags = [];
|
|
217
|
+
if (resources.memory) {
|
|
218
|
+
// memory-swap == memory disables swap, making --memory a REAL OOM cap.
|
|
219
|
+
flags.push('--memory', resources.memory, '--memory-swap', resources.memory);
|
|
220
|
+
}
|
|
221
|
+
if (resources.cpus)
|
|
222
|
+
flags.push('--cpus', resources.cpus);
|
|
223
|
+
if (resources.pidsLimit)
|
|
224
|
+
flags.push('--pids-limit', String(resources.pidsLimit));
|
|
225
|
+
if (resources.nofile)
|
|
226
|
+
flags.push('--ulimit', `nofile=${resources.nofile}`);
|
|
227
|
+
if (resources.shmSize)
|
|
228
|
+
flags.push('--shm-size', resources.shmSize);
|
|
229
|
+
return flags;
|
|
230
|
+
}
|
|
231
|
+
function networkArg(network, networkName) {
|
|
232
|
+
if (network === 'custom' && networkName)
|
|
233
|
+
return networkName;
|
|
234
|
+
return network; // 'bridge' | 'none'
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Build the `docker create` token list (from `create` through the `sleep
|
|
238
|
+
* infinity` CMD) for a long-lived, hardened, per-case container. PURE: every
|
|
239
|
+
* dynamic value is shellescaped; the caller joins with spaces into the launch
|
|
240
|
+
* string. Security invariants baked in: --cap-drop ALL, --security-opt
|
|
241
|
+
* no-new-privileges, --pids-limit, --memory==--memory-swap, --init,
|
|
242
|
+
* --pull=never, --restart no, NEVER --privileged, NEVER the docker socket.
|
|
243
|
+
*/
|
|
244
|
+
export function buildDockerCreateArgs(ctx) {
|
|
245
|
+
const { docker, sessionId, instance, userArgs, credentialMounts, extraMounts, envCreate, addHostGateway, gatewayAlias, } = ctx;
|
|
246
|
+
const args = [
|
|
247
|
+
'create',
|
|
248
|
+
'--name',
|
|
249
|
+
shellescape(docker.containerName),
|
|
250
|
+
'--label',
|
|
251
|
+
'codeman.managed=1',
|
|
252
|
+
'--label',
|
|
253
|
+
shellescape(`codeman.instance=${instance}`),
|
|
254
|
+
'--label',
|
|
255
|
+
shellescape(`codeman.session=${sessionId.slice(0, 8)}`),
|
|
256
|
+
'--label',
|
|
257
|
+
shellescape(`codeman.confighash=${docker.configHash ?? dockerConfigHash(docker)}`),
|
|
258
|
+
'--pull=never',
|
|
259
|
+
'--init',
|
|
260
|
+
'--restart',
|
|
261
|
+
'no',
|
|
262
|
+
...userArgs,
|
|
263
|
+
'--workdir',
|
|
264
|
+
shellescape(docker.containerWorkdir),
|
|
265
|
+
// Workspace bind: mirror the host path inside the container so the transcript
|
|
266
|
+
// projHash correlates and file features read real host bytes.
|
|
267
|
+
'--mount',
|
|
268
|
+
shellescape(mountSpec({ src: docker.hostWorkspacePath, dst: docker.containerWorkdir })),
|
|
269
|
+
...credentialMounts.flatMap((m) => ['--mount', shellescape(mountSpec(m))]),
|
|
270
|
+
...extraMounts.flatMap((m) => ['--mount', shellescape(mountSpec(m))]),
|
|
271
|
+
];
|
|
272
|
+
if (addHostGateway)
|
|
273
|
+
args.push('--add-host', `${gatewayAlias}:host-gateway`);
|
|
274
|
+
args.push(...resourceFlags(docker.resources),
|
|
275
|
+
// GPU passthrough (needs the NVIDIA container toolkit on the host). No storage
|
|
276
|
+
// cap is set, so the container's writable layer + volumes grow elastically as
|
|
277
|
+
// data flows in (bounded only by host disk).
|
|
278
|
+
...(docker.gpus ? ['--gpus', shellescape(docker.gpus)] : []), '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges', '--network', networkArg(docker.network, docker.networkName));
|
|
279
|
+
for (const [key, value] of Object.entries(envCreate)) {
|
|
280
|
+
args.push('--env', shellescape(`${key}=${value}`));
|
|
281
|
+
}
|
|
282
|
+
// Operator escape-hatch args (schema-validated NO_SHELL_INJECTION), escaped again here.
|
|
283
|
+
for (const extra of docker.extraCreateArgs ?? []) {
|
|
284
|
+
args.push(shellescape(extra));
|
|
285
|
+
}
|
|
286
|
+
args.push(shellescape(docker.image), 'sleep', 'infinity');
|
|
287
|
+
return args;
|
|
288
|
+
}
|
|
289
|
+
// ========== Credential mount resolution (IO) ==========
|
|
290
|
+
/** Host cred paths mapped to their in-container HOME location. */
|
|
291
|
+
const CREDENTIAL_PATHS = [
|
|
292
|
+
{ rel: '.claude' },
|
|
293
|
+
{ rel: '.claude.json' },
|
|
294
|
+
{ rel: '.codex' },
|
|
295
|
+
{ rel: '.gemini' },
|
|
296
|
+
{ rel: '.config/gcloud' },
|
|
297
|
+
{ rel: '.config/opencode' },
|
|
298
|
+
];
|
|
299
|
+
/**
|
|
300
|
+
* Resolve which host credential dirs/files EXIST and map them to their container
|
|
301
|
+
* HOME location. Only-existing avoids docker auto-creating root-owned empty dirs
|
|
302
|
+
* in the user's home. `~/.claude` also carries the transcripts (bind-mounted so
|
|
303
|
+
* host watchers + `--resume` see them) and is therefore mounted read-WRITE.
|
|
304
|
+
*/
|
|
305
|
+
export function resolveCredentialMounts(home = homedir()) {
|
|
306
|
+
const mounts = [];
|
|
307
|
+
for (const { rel } of CREDENTIAL_PATHS) {
|
|
308
|
+
const src = join(home, rel);
|
|
309
|
+
if (existsSync(src)) {
|
|
310
|
+
mounts.push({ src, dst: `${CONTAINER_HOME}/${rel}` });
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return mounts;
|
|
314
|
+
}
|
|
315
|
+
const DOCKER_PROBE_TIMEOUT_MS = 15_000;
|
|
316
|
+
async function runDockerInfo(engine) {
|
|
317
|
+
try {
|
|
318
|
+
const { stdout } = await execFileAsync(engine, ['info', '--format', '{{json .}}'], {
|
|
319
|
+
timeout: DOCKER_PROBE_TIMEOUT_MS,
|
|
320
|
+
});
|
|
321
|
+
return JSON.parse(stdout);
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function classifyDockerInfo(engine, info) {
|
|
328
|
+
const security = info.SecurityOptions ?? [];
|
|
329
|
+
const rootless = security.some((opt) => opt.includes('rootless'));
|
|
330
|
+
const cgroupV2 = info.CgroupVersion === '2';
|
|
331
|
+
const os = `${info.OperatingSystem ?? ''}`.toLowerCase();
|
|
332
|
+
const isDesktop = os.includes('docker desktop') || os.includes('desktop');
|
|
333
|
+
// Under rootless, resource caps are only reliably enforced with cgroup v2 +
|
|
334
|
+
// systemd delegation. We can't detect delegation from `docker info`, so we
|
|
335
|
+
// treat rootless+cgroupv2 as "likely enforced" and rootless+cgroupv1 as not.
|
|
336
|
+
const capsEnforced = !rootless || cgroupV2;
|
|
337
|
+
return { ok: true, engine, rootless, isDesktop, cgroupV2, capsEnforced };
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Probe the container engine: server up, cgroup version, rootless, Desktop, and
|
|
341
|
+
* whether resource caps are enforceable. Auto-detects docker then podman when no
|
|
342
|
+
* engine is given. No-op canned value under VITEST.
|
|
343
|
+
*/
|
|
344
|
+
export async function checkDockerAvailable(engine) {
|
|
345
|
+
if (IS_TEST_MODE) {
|
|
346
|
+
return {
|
|
347
|
+
ok: true,
|
|
348
|
+
engine: engine ?? 'docker',
|
|
349
|
+
rootless: false,
|
|
350
|
+
isDesktop: false,
|
|
351
|
+
cgroupV2: true,
|
|
352
|
+
capsEnforced: true,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
const candidates = engine ? [engine] : ['docker', 'podman'];
|
|
356
|
+
for (const candidate of candidates) {
|
|
357
|
+
const info = await runDockerInfo(candidate);
|
|
358
|
+
if (info)
|
|
359
|
+
return classifyDockerInfo(candidate, info);
|
|
360
|
+
}
|
|
361
|
+
return {
|
|
362
|
+
ok: false,
|
|
363
|
+
engine: engine ?? 'docker',
|
|
364
|
+
rootless: false,
|
|
365
|
+
isDesktop: false,
|
|
366
|
+
cgroupV2: false,
|
|
367
|
+
capsEnforced: false,
|
|
368
|
+
error: 'Docker/Podman not available. Install docker (or podman) and ensure the daemon is running.',
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
/** Is the base image present locally? (never triggers an auto-pull). */
|
|
372
|
+
export async function checkDockerImagePresent(engine, image) {
|
|
373
|
+
if (IS_TEST_MODE)
|
|
374
|
+
return true;
|
|
375
|
+
try {
|
|
376
|
+
await execFileAsync(engine, ['image', 'inspect', '--format', '{{.Id}}', image], {
|
|
377
|
+
timeout: DOCKER_PROBE_TIMEOUT_MS,
|
|
378
|
+
});
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Verify the base image is present AND contains tmux (a HARD prerequisite: the
|
|
387
|
+
* in-container tmux is what makes reconnect durable). Never triggers a pull
|
|
388
|
+
* (`--pull=never`). No-op under VITEST. Mirror of checkRemoteTmuxAvailable.
|
|
389
|
+
*/
|
|
390
|
+
export async function checkDockerTmuxAvailable(docker) {
|
|
391
|
+
if (IS_TEST_MODE)
|
|
392
|
+
return { ok: true, tmuxPath: '/usr/bin/tmux' };
|
|
393
|
+
const engine = docker.engine;
|
|
394
|
+
if (!(await checkDockerImagePresent(engine, docker.image))) {
|
|
395
|
+
return {
|
|
396
|
+
ok: false,
|
|
397
|
+
imageMissing: true,
|
|
398
|
+
error: `base image ${docker.image} not present: build it with 'node scripts/build-agent-image.mjs' (or pull it)`,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
const { stdout } = await execFileAsync(engine, ['run', '--rm', '--pull=never', docker.image, 'sh', '-lc', 'command -v tmux'], { timeout: DOCKER_PROBE_TIMEOUT_MS });
|
|
403
|
+
const tmuxPath = stdout.trim();
|
|
404
|
+
if (!tmuxPath) {
|
|
405
|
+
return { ok: false, error: `base image ${docker.image} is missing tmux (required for durable sessions)` };
|
|
406
|
+
}
|
|
407
|
+
return { ok: true, tmuxPath };
|
|
408
|
+
}
|
|
409
|
+
catch (err) {
|
|
410
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
411
|
+
return { ok: false, error: `could not verify tmux in ${docker.image}: ${msg}` };
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Resolve the host's IP on the default docker bridge (the address a container
|
|
416
|
+
* reaches as `host.docker.internal`), so the server can bind a hooks-only listener
|
|
417
|
+
* there and in-container hooks can call back. Defaults to the conventional
|
|
418
|
+
* 172.17.0.1 when the inspect fails but docker is up; null when docker is absent.
|
|
419
|
+
* No-op canned value under VITEST.
|
|
420
|
+
*/
|
|
421
|
+
export async function detectDockerBridgeGateway(engine = 'docker') {
|
|
422
|
+
if (IS_TEST_MODE)
|
|
423
|
+
return '172.17.0.1';
|
|
424
|
+
const bin = engine === 'podman' ? 'podman' : 'docker';
|
|
425
|
+
try {
|
|
426
|
+
const { stdout } = await execFileAsync(bin, ['network', 'inspect', 'bridge', '--format', '{{(index .IPAM.Config 0).Gateway}}'], { timeout: DOCKER_PROBE_TIMEOUT_MS });
|
|
427
|
+
const ip = stdout.trim();
|
|
428
|
+
return /^\d{1,3}(\.\d{1,3}){3}$/.test(ip) ? ip : '172.17.0.1';
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return null; // docker not available — nothing to bind
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Instance-scoped boot reaper: `docker rm -f` any MANAGED container that belongs
|
|
436
|
+
* to THIS instance (by the `codeman.instance` label) but whose case is no longer
|
|
437
|
+
* in `docker-cases.json`. The instance scoping is what stops a beta from reaping
|
|
438
|
+
* prod's containers (the cross-instance hazard). No-op under VITEST. Best-effort.
|
|
439
|
+
*/
|
|
440
|
+
export async function reapOrphanedDockerContainers(configDir, instance, engine = 'docker') {
|
|
441
|
+
if (IS_TEST_MODE)
|
|
442
|
+
return [];
|
|
443
|
+
const bin = engine === 'podman' ? 'podman' : 'docker';
|
|
444
|
+
let rows = [];
|
|
445
|
+
try {
|
|
446
|
+
const { stdout } = await execFileAsync(bin, [
|
|
447
|
+
'ps',
|
|
448
|
+
'-a',
|
|
449
|
+
'--filter',
|
|
450
|
+
'label=codeman.managed=1',
|
|
451
|
+
'--format',
|
|
452
|
+
'{{.Names}}\t{{index .Labels "codeman.instance"}}',
|
|
453
|
+
], { timeout: DOCKER_PROBE_TIMEOUT_MS });
|
|
454
|
+
rows = stdout
|
|
455
|
+
.split('\n')
|
|
456
|
+
.filter(Boolean)
|
|
457
|
+
.map((line) => {
|
|
458
|
+
const [name, inst = ''] = line.split('\t');
|
|
459
|
+
return { name, inst };
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
catch {
|
|
463
|
+
return []; // daemon down / engine absent — nothing to reap
|
|
464
|
+
}
|
|
465
|
+
const cases = await readDockerCases(configDir);
|
|
466
|
+
const expected = new Set(cases.map((c) => c.container ?? dockerContainerName(c.name)));
|
|
467
|
+
const reaped = [];
|
|
468
|
+
for (const { name, inst } of rows) {
|
|
469
|
+
if (inst !== instance)
|
|
470
|
+
continue; // only THIS instance's containers
|
|
471
|
+
if (expected.has(name))
|
|
472
|
+
continue; // still referenced by a live case
|
|
473
|
+
try {
|
|
474
|
+
await execFileAsync(bin, ['rm', '-f', name], { timeout: DOCKER_PROBE_TIMEOUT_MS });
|
|
475
|
+
reaped.push(name);
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
/* best-effort */
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
return reaped;
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Read the IN-CONTAINER Claude CLI version (`docker exec <container> claude
|
|
485
|
+
* --version`). Feeds Session.cliVersion for docker sessions (the LOCAL claude
|
|
486
|
+
* would report the wrong version and disable trackpad wheel-forwarding, #154).
|
|
487
|
+
* Returns undefined on any failure. No-op under VITEST.
|
|
488
|
+
*/
|
|
489
|
+
export async function probeDockerCliVersion(docker, mode) {
|
|
490
|
+
if (IS_TEST_MODE)
|
|
491
|
+
return undefined;
|
|
492
|
+
const bin = mode === 'shell' ? null : mode;
|
|
493
|
+
if (!bin)
|
|
494
|
+
return undefined;
|
|
495
|
+
try {
|
|
496
|
+
const { stdout } = await execFileAsync(docker.engine, ['exec', docker.containerName, bin, '--version'], {
|
|
497
|
+
timeout: DOCKER_PROBE_TIMEOUT_MS,
|
|
498
|
+
});
|
|
499
|
+
const match = stdout.trim().match(/\d+\.\d+\.\d+/);
|
|
500
|
+
return match ? match[0] : stdout.trim() || undefined;
|
|
501
|
+
}
|
|
502
|
+
catch {
|
|
503
|
+
return undefined;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=docker-hosts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-hosts.js","sourceRoot":"","sources":["../src/docker-hosts.ts"],"names":[],"mappings":"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"}
|
package/dist/mux-interface.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @module mux-interface
|
|
7
7
|
*/
|
|
8
8
|
import type { EventEmitter } from 'node:events';
|
|
9
|
-
import type { ProcessStats, PersistedRespawnConfig, NiceConfig, ClaudeMode, SessionMode, OpenCodeConfig, CodexConfig, EffortLevel, GeminiConfig, SessionRemote } from './types.js';
|
|
9
|
+
import type { ProcessStats, PersistedRespawnConfig, NiceConfig, ClaudeMode, SessionMode, OpenCodeConfig, CodexConfig, EffortLevel, GeminiConfig, SessionRemote, SessionDocker } from './types.js';
|
|
10
10
|
/**
|
|
11
11
|
* Multiplexer session metadata.
|
|
12
12
|
*/
|
|
@@ -23,6 +23,8 @@ export interface MuxSession {
|
|
|
23
23
|
workingDir: string;
|
|
24
24
|
/** Remote execution metadata for local tmux sessions wrapping SSH */
|
|
25
25
|
remote?: SessionRemote;
|
|
26
|
+
/** Docker execution metadata for local tmux sessions wrapping `docker exec` */
|
|
27
|
+
docker?: SessionDocker;
|
|
26
28
|
/** Session mode */
|
|
27
29
|
mode: SessionMode;
|
|
28
30
|
/** Whether webserver is attached to this session */
|
|
@@ -64,6 +66,8 @@ export interface CreateSessionOptions {
|
|
|
64
66
|
historyLimit?: number;
|
|
65
67
|
/** Remote execution metadata for local tmux sessions wrapping SSH */
|
|
66
68
|
remote?: SessionRemote;
|
|
69
|
+
/** Docker execution metadata for local tmux sessions wrapping `docker exec` */
|
|
70
|
+
docker?: SessionDocker;
|
|
67
71
|
}
|
|
68
72
|
/** Options for respawning a dead pane. */
|
|
69
73
|
export interface RespawnPaneOptions {
|
|
@@ -87,6 +91,8 @@ export interface RespawnPaneOptions {
|
|
|
87
91
|
historyLimit?: number;
|
|
88
92
|
/** Remote execution metadata for local tmux sessions wrapping SSH */
|
|
89
93
|
remote?: SessionRemote;
|
|
94
|
+
/** Docker execution metadata for local tmux sessions wrapping `docker exec` */
|
|
95
|
+
docker?: SessionDocker;
|
|
90
96
|
}
|
|
91
97
|
/** Options for pane buffer capture (COD-47 full-history mode). */
|
|
92
98
|
export interface PaneCaptureOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mux-interface.d.ts","sourceRoot":"","sources":["../src/mux-interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,mBAAmB;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,mCAAmC;IACnC,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,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,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sIAAsI;IACtI,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,4GAA4G;IAC5G,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,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,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qFAAqF;IACrF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAI3B;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElE;;;OAGG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD,uDAAuD;IACvD,OAAO,IAAI,IAAI,CAAC;IAIhB,+BAA+B;IAC/B,WAAW,IAAI,UAAU,EAAE,CAAC;IAE5B,0CAA0C;IAC1C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAEtD,wDAAwD;IACxD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEvD,6CAA6C;IAC7C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAIjE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAI9D,2CAA2C;IAC3C,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5D,wCAAwC;IACxC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAExD,0DAA0D;IAC1D,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAE3C,oDAAoD;IACpD,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,SAAS,GAAG,IAAI,CAAC;IAEzF,mDAAmD;IACnD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5C,+CAA+C;IAC/C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAE9D,0DAA0D;IAC1D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI9C;;;OAGG;IACH,iBAAiB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAIxF,8CAA8C;IAC9C,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD,6CAA6C;IAC7C,mBAAmB,IAAI,IAAI,CAAC;IAI5B;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC;IAE3B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEzC,iFAAiF;IACjF,mBAAmB,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAE/C,8EAA8E;IAC9E,YAAY,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAIpE,iEAAiE;IACjE,WAAW,IAAI,OAAO,CAAC;IAEvB,6FAA6F;IAC7F,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3C,gGAAgG;IAChG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAErC,wFAAwF;IACxF,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEjE;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAAC;IAEnG;;;OAGG;IACH,uBAAuB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAAC;CACrF"}
|
|
1
|
+
{"version":3,"file":"mux-interface.d.ts","sourceRoot":"","sources":["../src/mux-interface.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* @module session
|
|
29
29
|
*/
|
|
30
30
|
import { EventEmitter } from 'node:events';
|
|
31
|
-
import { SessionState, SessionStatus, SessionConfig, RalphTrackerState, RalphTodoItem, ActiveBashTool, NiceConfig, type ClaudeMode, type SessionMode, type OpenCodeConfig, type CodexConfig, type EffortLevel, type GeminiConfig, type SessionRemote } from './types.js';
|
|
31
|
+
import { SessionState, SessionStatus, SessionConfig, RalphTrackerState, RalphTodoItem, ActiveBashTool, NiceConfig, type ClaudeMode, type SessionMode, type OpenCodeConfig, type CodexConfig, type EffortLevel, type GeminiConfig, type SessionRemote, type SessionDocker } from './types.js';
|
|
32
32
|
import type { TerminalMultiplexer, MuxSession } from './mux-interface.js';
|
|
33
33
|
import { TaskTracker, type BackgroundTask } from './task-tracker.js';
|
|
34
34
|
import { RalphTracker } from './ralph-tracker.js';
|
|
@@ -69,7 +69,7 @@ export declare function queryTmuxWindowSize(muxName: string, socket: string): {
|
|
|
69
69
|
cols: number;
|
|
70
70
|
rows: number;
|
|
71
71
|
};
|
|
72
|
-
export declare function resolveMuxAttachCwd(workingDir: string, remote?: SessionRemote): string;
|
|
72
|
+
export declare function resolveMuxAttachCwd(workingDir: string, remote?: SessionRemote, docker?: SessionDocker): string;
|
|
73
73
|
/**
|
|
74
74
|
* Represents a JSON message from Claude CLI's stream-json output format.
|
|
75
75
|
* Messages are newline-delimited JSON objects parsed from PTY output.
|
|
@@ -202,6 +202,7 @@ export declare class Session extends EventEmitter {
|
|
|
202
202
|
private _effort;
|
|
203
203
|
private readonly _tmuxHistoryLimit;
|
|
204
204
|
private readonly _remote?;
|
|
205
|
+
private readonly _docker?;
|
|
205
206
|
private _color;
|
|
206
207
|
private _taskTrackerHandlers;
|
|
207
208
|
private _ralphHandlers;
|
|
@@ -246,6 +247,8 @@ export declare class Session extends EventEmitter {
|
|
|
246
247
|
attachmentHistory?: SessionAttachmentHistoryItem[];
|
|
247
248
|
/** Remote execution metadata for sessions launched through SSH inside local tmux. */
|
|
248
249
|
remote?: SessionRemote;
|
|
250
|
+
/** Docker execution metadata for sessions launched inside a container via local tmux. */
|
|
251
|
+
docker?: SessionDocker;
|
|
249
252
|
});
|
|
250
253
|
get status(): SessionStatus;
|
|
251
254
|
get currentTaskId(): string | null;
|
|
@@ -256,6 +259,8 @@ export declare class Session extends EventEmitter {
|
|
|
256
259
|
get errorBuffer(): string;
|
|
257
260
|
get lastActivityAt(): number;
|
|
258
261
|
get claudeSessionId(): string | null;
|
|
262
|
+
/** Docker execution metadata when this session runs inside a container, else undefined. */
|
|
263
|
+
get docker(): SessionDocker | undefined;
|
|
259
264
|
adoptClaudeSessionId(newId: string): void;
|
|
260
265
|
/** The tmux session name, if the session is running inside a mux */
|
|
261
266
|
get muxName(): string | null;
|
|
@@ -414,6 +419,7 @@ export declare class Session extends EventEmitter {
|
|
|
414
419
|
status: SessionStatus;
|
|
415
420
|
workingDir: string;
|
|
416
421
|
remote?: SessionRemote;
|
|
422
|
+
docker?: SessionDocker;
|
|
417
423
|
currentTaskId: string | null;
|
|
418
424
|
createdAt: number;
|
|
419
425
|
lastActivityAt: number;
|
|
@@ -506,6 +512,7 @@ export declare class Session extends EventEmitter {
|
|
|
506
512
|
status: SessionStatus;
|
|
507
513
|
workingDir: string;
|
|
508
514
|
remote?: SessionRemote;
|
|
515
|
+
docker?: SessionDocker;
|
|
509
516
|
currentTaskId: string | null;
|
|
510
517
|
createdAt: number;
|
|
511
518
|
lastActivityAt: number;
|