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.
Files changed (109) hide show
  1. package/dist/docker-export.d.ts +107 -0
  2. package/dist/docker-export.d.ts.map +1 -0
  3. package/dist/docker-export.js +335 -0
  4. package/dist/docker-export.js.map +1 -0
  5. package/dist/docker-hosts.d.ts +184 -0
  6. package/dist/docker-hosts.d.ts.map +1 -0
  7. package/dist/docker-hosts.js +506 -0
  8. package/dist/docker-hosts.js.map +1 -0
  9. package/dist/mux-interface.d.ts +7 -1
  10. package/dist/mux-interface.d.ts.map +1 -1
  11. package/dist/session.d.ts +9 -2
  12. package/dist/session.d.ts.map +1 -1
  13. package/dist/session.js +48 -4
  14. package/dist/session.js.map +1 -1
  15. package/dist/tmux-manager.d.ts +50 -1
  16. package/dist/tmux-manager.d.ts.map +1 -1
  17. package/dist/tmux-manager.js +214 -7
  18. package/dist/tmux-manager.js.map +1 -1
  19. package/dist/types/api.d.ts +9 -1
  20. package/dist/types/api.d.ts.map +1 -1
  21. package/dist/types/api.js.map +1 -1
  22. package/dist/types/session.d.ts +102 -0
  23. package/dist/types/session.d.ts.map +1 -1
  24. package/dist/types/session.js.map +1 -1
  25. package/dist/web/middleware/auth.d.ts.map +1 -1
  26. package/dist/web/middleware/auth.js +13 -0
  27. package/dist/web/middleware/auth.js.map +1 -1
  28. package/dist/web/network-auth-policy.d.ts +9 -0
  29. package/dist/web/network-auth-policy.d.ts.map +1 -1
  30. package/dist/web/network-auth-policy.js +12 -0
  31. package/dist/web/network-auth-policy.js.map +1 -1
  32. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  33. package/dist/web/public/{app.6890f3d0.js → app.07e61fcf.js} +1 -1
  34. package/dist/web/public/app.07e61fcf.js.br +0 -0
  35. package/dist/web/public/app.07e61fcf.js.gz +0 -0
  36. package/dist/web/public/{constants.5b18ed64.js → constants.503109fa.js} +3 -0
  37. package/dist/web/public/constants.503109fa.js.br +0 -0
  38. package/dist/web/public/{constants.5b18ed64.js.gz → constants.503109fa.js.gz} +0 -0
  39. package/dist/web/public/cron-ui.js.gz +0 -0
  40. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  41. package/dist/web/public/index.html +139 -10
  42. package/dist/web/public/index.html.br +0 -0
  43. package/dist/web/public/index.html.gz +0 -0
  44. package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
  45. package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
  46. package/dist/web/public/mobile-handlers.b5a667ef.js.gz +0 -0
  47. package/dist/web/public/mobile.0644e3ac.css.gz +0 -0
  48. package/dist/web/public/notification-manager.ca9dc40d.js.gz +0 -0
  49. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  50. package/dist/web/public/panels-ui.ca03853f.js.gz +0 -0
  51. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  52. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  53. package/dist/web/public/respawn-ui.2d249da9.js.gz +0 -0
  54. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  55. package/dist/web/public/session-ui.9da1b71f.js +58 -0
  56. package/dist/web/public/session-ui.9da1b71f.js.br +0 -0
  57. package/dist/web/public/session-ui.9da1b71f.js.gz +0 -0
  58. package/dist/web/public/settings-ui.4acbe789.js +67 -0
  59. package/dist/web/public/settings-ui.4acbe789.js.br +0 -0
  60. package/dist/web/public/settings-ui.4acbe789.js.gz +0 -0
  61. package/dist/web/public/{styles.3d78fd0d.css → styles.546ddae4.css} +1 -1
  62. package/dist/web/public/styles.546ddae4.css.br +0 -0
  63. package/dist/web/public/styles.546ddae4.css.gz +0 -0
  64. package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
  65. package/dist/web/public/sw.js.gz +0 -0
  66. package/dist/web/public/terminal-ui.efda6083.js.gz +0 -0
  67. package/dist/web/public/ultracode-panel.js.gz +0 -0
  68. package/dist/web/public/ultracode-windows.js.gz +0 -0
  69. package/dist/web/public/upload.html.gz +0 -0
  70. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  71. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  72. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  73. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  74. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  75. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  76. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  77. package/dist/web/public/vendor/xterm.css.gz +0 -0
  78. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  79. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  80. package/dist/web/routes/case-routes.d.ts.map +1 -1
  81. package/dist/web/routes/case-routes.js +372 -3
  82. package/dist/web/routes/case-routes.js.map +1 -1
  83. package/dist/web/routes/session-routes.d.ts.map +1 -1
  84. package/dist/web/routes/session-routes.js +67 -4
  85. package/dist/web/routes/session-routes.js.map +1 -1
  86. package/dist/web/schemas.d.ts +71 -1
  87. package/dist/web/schemas.d.ts.map +1 -1
  88. package/dist/web/schemas.js +155 -0
  89. package/dist/web/schemas.js.map +1 -1
  90. package/dist/web/server.d.ts +11 -0
  91. package/dist/web/server.d.ts.map +1 -1
  92. package/dist/web/server.js +81 -1
  93. package/dist/web/server.js.map +1 -1
  94. package/dist/web/sse-events.d.ts +9 -0
  95. package/dist/web/sse-events.d.ts.map +1 -1
  96. package/dist/web/sse-events.js +11 -0
  97. package/dist/web/sse-events.js.map +1 -1
  98. package/package.json +1 -1
  99. package/dist/web/public/app.6890f3d0.js.br +0 -0
  100. package/dist/web/public/app.6890f3d0.js.gz +0 -0
  101. package/dist/web/public/constants.5b18ed64.js.br +0 -0
  102. package/dist/web/public/session-ui.c9094fe9.js +0 -49
  103. package/dist/web/public/session-ui.c9094fe9.js.br +0 -0
  104. package/dist/web/public/session-ui.c9094fe9.js.gz +0 -0
  105. package/dist/web/public/settings-ui.9538a0c1.js +0 -67
  106. package/dist/web/public/settings-ui.9538a0c1.js.br +0 -0
  107. package/dist/web/public/settings-ui.9538a0c1.js.gz +0 -0
  108. package/dist/web/public/styles.3d78fd0d.css.br +0 -0
  109. 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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"}
@@ -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":"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"}
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;