Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
265b2e5
feat(docker): attach a case to an already-running container
Aug 30, 2026
7bd0259
feat(docker): add the attach-an-existing-container panel
Aug 30, 2026
b8e134d
fix(docker): verify the container workdir and end the probe with exit 0
Aug 30, 2026
f54157e
feat(docker): link to container attach from the Create New tab
Aug 30, 2026
f754a19
i18n(docker): translate the attach panel, and unblock translation
Aug 30, 2026
570c00d
feat(docker): make the container field a picker you can also type into
Aug 30, 2026
51b25f5
feat(docker): take run-mode availability from the container
Aug 30, 2026
853e320
fix(docker): probe container CLIs by their real binary name
Aug 30, 2026
ec66045
fix(docker): probe the container's CLIs live instead of trusting atta…
Aug 30, 2026
59daec7
fix(docker): stop requiring the CLI on the host for a container session
Aug 30, 2026
3969ff9
fix(files): give the picker a root when the server runs as root
Aug 30, 2026
0cc6e57
feat(docker): add a folder picker to both path fields
Aug 30, 2026
5f391b4
fix(docker): send the probe body as an object, and explain an unreach…
Aug 30, 2026
93e9169
feat(adopt): adopt tmux sessions a human started outside Codeman
Aug 31, 2026
1cb6bde
feat(docker): let one adopted container back several cases in differe…
Sep 1, 2026
cd1114c
fix(terminal): use xterm 6's selection theme keys so light skins show…
Sep 1, 2026
7ab5015
feat(terminal): make Shift+drag select, and right-click copy the sele…
Sep 1, 2026
08442df
fix(ui): don't create a compositing layer for a hidden full-screen ov…
Sep 1, 2026
3fbaada
fix(cjk): forward Ctrl/Alt-modified navigation keys to the CLI
Sep 1, 2026
c2492a3
feat(remote): support password-authenticated SSH hosts, storing the p…
Sep 1, 2026
e6dac66
feat(remote): add the password field to the remote-host form
Sep 1, 2026
05bb708
fix(input): recover when the seq counter falls behind the server wate…
Sep 2, 2026
f1ed3a5
feat(docker): add "copy an existing case" to the adopt panel
Sep 2, 2026
ba21ae1
fix(docker): pre-fill the copied case instead of blanking two fields
Sep 2, 2026
435569c
fix(sse): stop reloading the whole terminal when a reconnect lands on…
Sep 3, 2026
27fa5d3
fix(ui): skip the foreign-session repaint when the payload has not ch…
Sep 3, 2026
f4ee764
style: match the prettier version the lockfile pins
Aug 30, 2026
300853a
fix(docker): don't require omp on the host for a container session
Sep 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions src/config/foreign-tmux.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* @fileoverview Bounds for FOREIGN tmux discovery (sessions a human started
* outside Codeman).
*
* Two facts drive every number here. First, the number of tmux sockets and panes
* on a machine is NOT under Codeman's control — a discovery walk with no ceiling
* is an unbounded loop over data someone else produces, so sockets and panes are
* both hard-capped. Second, an ssh handshake is an order of magnitude slower than
* a local `exec`; reusing the shared 5s `EXEC_TIMEOUT_MS` would classify every
* remote host as unreachable, so the probe gets its own timeout.
*
* @module config/foreign-tmux
*/

/** How often the browser re-polls `/api/mux/foreign` while the home screen is visible. */
export const FOREIGN_POLL_INTERVAL_MS = 8000;

/**
* Server-side cache TTL for a LOCAL scan. This, not the poll interval, is what
* bounds the real cost: N open tabs polling at 8s still trigger at most one scan
* per TTL.
*/
export const FOREIGN_CACHE_TTL_MS = 5000;

/** Timeout for one probe invocation (local exec, `docker exec`, or one ssh). */
export const FOREIGN_PROBE_TIMEOUT_MS = 12000;

/** Max tmux sockets inspected per location, oldest-first by directory order. */
export const FOREIGN_MAX_SOCKETS = 16;

/** Max pane rows parsed from one probe. Panes past this are dropped, not errors. */
export const FOREIGN_MAX_PANES = 400;

/** Max process rows parsed from one probe's `ps` snapshot. */
export const FOREIGN_MAX_PROCS = 4000;

/** Max bytes of probe stdout kept. A runaway `ps` must not become a heap problem. */
export const FOREIGN_PROBE_MAX_BYTES = 2 * 1024 * 1024;
382 changes: 376 additions & 6 deletions src/docker-hosts.ts

Large diffs are not rendered by default.

Binary file added src/foreign-tmux-discovery.ts
Binary file not shown.
Loading