aicodeman 1.12.2 → 1.14.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/README.md +93 -15
- package/dist/ai-checker-base.d.ts +2 -0
- package/dist/ai-checker-base.d.ts.map +1 -1
- package/dist/ai-checker-base.js +31 -3
- package/dist/ai-checker-base.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +142 -14
- package/dist/cli.js.map +1 -1
- package/dist/config/agent-wait.d.ts +73 -0
- package/dist/config/agent-wait.d.ts.map +1 -0
- package/dist/config/agent-wait.js +99 -0
- package/dist/config/agent-wait.js.map +1 -0
- package/dist/config/service-names.d.ts +23 -0
- package/dist/config/service-names.d.ts.map +1 -0
- package/dist/config/service-names.js +29 -0
- package/dist/config/service-names.js.map +1 -0
- package/dist/daemon-control.d.ts +126 -0
- package/dist/daemon-control.d.ts.map +1 -0
- package/dist/daemon-control.js +433 -0
- package/dist/daemon-control.js.map +1 -0
- package/dist/hooks-config.d.ts +28 -6
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +214 -28
- package/dist/hooks-config.js.map +1 -1
- package/dist/service-installer.d.ts +96 -0
- package/dist/service-installer.d.ts.map +1 -0
- package/dist/service-installer.js +333 -0
- package/dist/service-installer.js.map +1 -0
- package/dist/session-cli-builder.d.ts.map +1 -1
- package/dist/session-cli-builder.js +6 -2
- package/dist/session-cli-builder.js.map +1 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +5 -1
- package/dist/tmux-manager.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.2e9ffd31.js → app.b24f795e.js} +5 -7
- package/dist/web/public/app.b24f795e.js.br +0 -0
- package/dist/web/public/app.b24f795e.js.gz +0 -0
- package/dist/web/public/constants.e7175b95.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/i18n.da34cfaf.js +1 -0
- package/dist/web/public/i18n.da34cfaf.js.br +0 -0
- package/dist/web/public/i18n.da34cfaf.js.gz +0 -0
- package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
- package/dist/web/public/index.html +13 -6
- 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.9936227d.js.gz +0 -0
- package/dist/web/public/mobile-handlers.32fdd57f.js.gz +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.32cacde5.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.1d4203e0.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.ff0dae4c.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-ui.1356a4f4.js.gz +0 -0
- package/dist/web/public/settings-ui.ea63d5db.js +67 -0
- package/dist/web/public/settings-ui.ea63d5db.js.br +0 -0
- package/dist/web/public/settings-ui.ea63d5db.js.gz +0 -0
- package/dist/web/public/styles.b10e5edd.css +1 -0
- package/dist/web/public/styles.b10e5edd.css.br +0 -0
- package/dist/web/public/styles.b10e5edd.css.gz +0 -0
- package/dist/web/public/subagent-windows.4cc8b005.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/{terminal-ui.78c71f3a.js → terminal-ui.d5ae6dcf.js} +2 -2
- package/dist/web/public/terminal-ui.d5ae6dcf.js.br +0 -0
- package/dist/web/public/terminal-ui.d5ae6dcf.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/public/webview-tabs.js +1 -2
- package/dist/web/public/webview-tabs.js.br +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
- package/dist/web/routes/hook-event-routes.js +22 -0
- package/dist/web/routes/hook-event-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +4 -0
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +499 -17
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +53 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +59 -0
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/self-update.d.ts.map +1 -1
- package/dist/web/self-update.js +4 -4
- package/dist/web/self-update.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-listener-wiring.d.ts.map +1 -1
- package/dist/web/session-listener-wiring.js +28 -0
- package/dist/web/session-listener-wiring.js.map +1 -1
- package/dist/web/session-wait-registry.d.ts +407 -0
- package/dist/web/session-wait-registry.d.ts.map +1 -0
- package/dist/web/session-wait-registry.js +895 -0
- package/dist/web/session-wait-registry.js.map +1 -0
- package/package.json +2 -1
- package/skills/codeman/SKILL.md +274 -0
- package/skills/codeman/reference/endpoints.md +214 -0
- package/skills/codeman/reference/recipes.md +249 -0
- package/dist/web/public/app.2e9ffd31.js.br +0 -0
- package/dist/web/public/app.2e9ffd31.js.gz +0 -0
- package/dist/web/public/i18n.0fbea500.js +0 -1
- package/dist/web/public/i18n.0fbea500.js.br +0 -0
- package/dist/web/public/i18n.0fbea500.js.gz +0 -0
- package/dist/web/public/settings-ui.01a1ae7d.js +0 -67
- package/dist/web/public/settings-ui.01a1ae7d.js.br +0 -0
- package/dist/web/public/settings-ui.01a1ae7d.js.gz +0 -0
- package/dist/web/public/styles.50cd52bd.css +0 -1
- package/dist/web/public/styles.50cd52bd.css.br +0 -0
- package/dist/web/public/styles.50cd52bd.css.gz +0 -0
- package/dist/web/public/terminal-ui.78c71f3a.js.br +0 -0
- package/dist/web/public/terminal-ui.78c71f3a.js.gz +0 -0
package/README.md
CHANGED
|
@@ -85,9 +85,29 @@ codeman web --multiuser # named logins + per-user case spaces
|
|
|
85
85
|
Details in [Multi-User Mode](#multi-user-mode-opt-in) below.
|
|
86
86
|
|
|
87
87
|
<details>
|
|
88
|
-
<summary><strong>
|
|
88
|
+
<summary><strong>Keep it running in the background</strong></summary>
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
To outlive the shell you started it in, without setting anything up:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
codeman web -d # detach; logs to ~/.codeman/web.log
|
|
94
|
+
codeman web --status # is it up, and on which pid
|
|
95
|
+
codeman web --stop # graceful SIGTERM; agents keep running in tmux
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
`-d` waits until the server actually answers before reporting success, and refuses to start a second one on the same data dir (two servers sharing a tmux socket attach to each other's sessions).
|
|
99
|
+
|
|
100
|
+
To have it come back after a reboot, install it as a service instead. The installer's final menu does this for you (option 2); `codeman service` is the equivalent for an `npm i -g aicodeman` install:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
codeman service install # systemd user unit (Linux) or LaunchAgent (macOS)
|
|
104
|
+
codeman service status
|
|
105
|
+
codeman service uninstall
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`service install` writes the unit with your current PATH baked in, which matters more than it sounds: launchd hands a job `/usr/bin:/bin:/usr/sbin:/sbin`, so a Homebrew or nvm `node`, `tmux` or `claude` is invisible to a hand-written plist. It never copies `CODEMAN_PASSWORD` into the unit file; add that yourself if the service needs auth.
|
|
109
|
+
|
|
110
|
+
To write the unit by hand instead:
|
|
91
111
|
|
|
92
112
|
**Linux (systemd):**
|
|
93
113
|
|
|
@@ -220,6 +240,8 @@ codeman web # localhost:3000 (loopback only — safe defau
|
|
|
220
240
|
codeman web --port 8080 # custom port (or set CODEMAN_PORT)
|
|
221
241
|
codeman web --https # self-signed TLS (only needed for remote access)
|
|
222
242
|
codeman web -H 0.0.0.0 # bind LAN — REQUIRES CODEMAN_PASSWORD (see Security)
|
|
243
|
+
codeman web -d # detach: survives closing the shell (--status, --stop)
|
|
244
|
+
codeman service install # systemd/launchd service: comes back after reboots
|
|
223
245
|
```
|
|
224
246
|
|
|
225
247
|
Open the printed URL. The page is a single dashboard; everything below happens there.
|
|
@@ -268,6 +290,7 @@ Hit start — Codeman spawns the CLI via a real PTY and streams it to your brows
|
|
|
268
290
|
### 7. Operate & maintain
|
|
269
291
|
|
|
270
292
|
- **App Settings** — model, effort, permission startup mode, theme/skin, notifications, display toggles, per-CLI options, a synced custom display name, and per-device English/Simplified Chinese UI language.
|
|
293
|
+
- **Run it in the background** — `codeman web -d` detaches from your shell (`--status`, `--stop`); `codeman service install` makes it a systemd user unit / macOS LaunchAgent that survives reboots. Both verify the server actually answers before reporting success, and both refuse to start a second server on one data dir. See [Keep it running in the background](#quick-start---installation).
|
|
271
294
|
- **Self-update** — git-clone installs update in place from **Settings → Updates**.
|
|
272
295
|
- **Deploy your own changes** — see [Development](#development).
|
|
273
296
|
|
|
@@ -403,6 +426,7 @@ PTY Output → 16ms Server Batch → DEC 2026 Wrap → SSE → Client rAF → xt
|
|
|
403
426
|
|
|
404
427
|
## More Features
|
|
405
428
|
|
|
429
|
+
- **Background daemon & service install** — `codeman web -d` runs the server detached with a pidfile, `~/.codeman/web.log`, and verified startup (it polls the server until it answers, so a port clash never reads as success); `codeman service install` writes a systemd user unit (Linux) or LaunchAgent (macOS) with your shell's PATH baked in, so an nvm or Homebrew `node`, `tmux` and `claude` are actually found. Secrets are never written into unit files
|
|
406
430
|
- **Self-update** — git-clone installs under systemd/launchd update in place from **App Settings → Updates**: it detects the latest release, auto-stashes a dirty tree, and streams build progress across the service restart (npm installs report as non-updatable)
|
|
407
431
|
- **Multi-CLI** — run **Claude Code**, **OpenCode**, **Codex**, **Antigravity**, or **Gemini** per session; env-var prefixes auto-gate (`CLAUDE_CODE_*` vs `OPENCODE_*` vs `CODEX_*` vs `ANTIGRAVITY_*` vs `GEMINI_*`/`GOOGLE_*`). See [`docs/opencode-integration.md`](docs/opencode-integration.md)
|
|
408
432
|
- **Docker sessions** — run a case inside an isolated, hardened container. One checkbox on **Create New** spins up a container with sensible defaults and starts the agent inside it; multiple sessions share one per-case container; export a container + its workspace to a portable `.tar.gz` to move it to another machine. See [`docs/docker-cases.md`](docs/docker-cases.md)
|
|
@@ -680,15 +704,21 @@ When a CLI runs in a Codeman-managed session, these environment variables are se
|
|
|
680
704
|
|
|
681
705
|
### Rules of the road (read before you POST)
|
|
682
706
|
|
|
683
|
-
1. **Single-line input
|
|
707
|
+
1. **Single-line input, ending in `\r`.** Programmatic input is sent as literal text, and Enter fires **only when the input contains a carriage return**: `{"input":"run tests\r"}`. Without the `\r` the text sits on the session's prompt unsubmitted (and a combined `wait` runs its full timeout on a turn that never started). Embedded newlines are stripped rather than rejected, so `"echo A\necho B\r"` runs the joined command `echo Aecho B`: send one line per call.
|
|
684
708
|
2. **Make input idempotent.** Include a stable `clientId` and a monotonic per-session `seq` on `POST …/input`. The server de-duplicates, so a retry after a dropped connection can't double-deliver a prompt.
|
|
685
|
-
3. **Auth.** If `CODEMAN_PASSWORD` is set, send HTTP Basic auth (user `admin` or `CODEMAN_USERNAME`) or a `codeman_session` cookie. The default loopback install is passwordless. A missing `Origin` header is allowed, so plain `curl` works; cross-site browser origins are rejected (CSRF guard).
|
|
709
|
+
3. **Auth.** If `CODEMAN_PASSWORD` is set, send HTTP Basic auth (user `admin` or `CODEMAN_USERNAME`) or a `codeman_session` cookie. The default loopback install is passwordless. A missing `Origin` header is allowed, so plain `curl` works; cross-site browser origins are rejected (CSRF guard). ⚠️ A `401` replies with the bare string `Unauthorized`, **not** the JSON envelope, so piping it into `jq` throws a parse error instead of showing the failure: check the status before parsing.
|
|
686
710
|
4. **Response envelope.** Most endpoints return `{ "success": true, "data": … }` (errors: `{ "success": false, "error", "errorCode" }`). A few legacy GETs return bare bodies — **handle both** (`body.data ?? body`).
|
|
687
711
|
5. **`/api/v1/*`** is a stable alias of `/api/*`.
|
|
712
|
+
6. **Wait instead of polling, and don't treat a timeout as an error.** The wait endpoints answer with HTTP `200` and `wait.timedOut: true` when nothing happened in time, so loop over short waits (60s is the default) rather than issuing one long call, because tunnels cut idle connections. `wait.timeoutMs` tells you the timeout the server actually applied after clamping (600s ceiling).
|
|
713
|
+
7. **Only `claude` sessions emit `stop` and `blocked`.** Those two come from Claude Code hooks; `shell` and the external CLIs (opencode/codex/gemini/antigravity) accept only `idle`, `working` and `exit`. Asking for `stop` explicitly on those is a `400`; omitting `until` is always safe. ⚠️ On a `shell` session `idle` fires **once**, at startup, and never again, so send-and-wait there can only time out; synchronize hook-less sessions with a `wait-output` marker.
|
|
714
|
+
8. **Nothing reports "ready", so wait for it explicitly.** A new session answers `{"signal":"exit","immediate":true}` (that means *not started*, not *crashed*) until its PID exists, and a `claude` worker in a fresh case then sits on the CLI's trust dialog. Prompt it there and the wait resolves on `idle` in ~2s looking exactly like a finished turn, while the text sits stuck in the dialog. Recipe 2b below is the sequence that avoids it.
|
|
688
715
|
|
|
689
716
|
### Recipes
|
|
690
717
|
|
|
691
718
|
```bash
|
|
719
|
+
# CODEMAN_API_URL is auto-set inside every Codeman session, correct scheme included.
|
|
720
|
+
# The fallback below fits a stock install; on a --https install set the https:// URL
|
|
721
|
+
# yourself and add -k to each curl (self-signed cert).
|
|
692
722
|
API="${CODEMAN_API_URL:-http://127.0.0.1:3000}"
|
|
693
723
|
# (add -u admin:"$CODEMAN_PASSWORD" to each call if a password is set)
|
|
694
724
|
|
|
@@ -700,18 +730,63 @@ curl -s -X POST "$API/api/quick-start" \
|
|
|
700
730
|
-H 'Content-Type: application/json' \
|
|
701
731
|
-d '{"caseName":"refactor-auth","mode":"claude","effort":"high"}' | jq
|
|
702
732
|
|
|
733
|
+
# 2b. Wait until that worker is actually READY (see rule 8): composer marker first,
|
|
734
|
+
# first-run trust dialog only as the fallback. (Probing trust first and sending
|
|
735
|
+
# a blind Enter misfires on re-runs: the dialog text stays in the buffer forever,
|
|
736
|
+
# so the probe matches stale text and the Enter lands in a ready composer.)
|
|
737
|
+
# Match single tokens: TUI text can reach the matcher without its spaces.
|
|
738
|
+
until [ "$(curl -s "$API/api/sessions/$SID" | jq '.data.pid')" != null ]; do sleep 1; done
|
|
739
|
+
R=$(curl -sG "$API/api/sessions/$SID/wait-output" --data-urlencode 'match=bypass' \
|
|
740
|
+
--data-urlencode 'from=buffer' --data-urlencode 'timeout=5000')
|
|
741
|
+
if ! jq -e '.data.wait.matched' <<<"$R" >/dev/null; then
|
|
742
|
+
T=$(curl -sG "$API/api/sessions/$SID/wait-output" --data-urlencode 'match=trust' \
|
|
743
|
+
--data-urlencode 'from=buffer' --data-urlencode 'timeout=2000')
|
|
744
|
+
jq -e '.data.wait.matched' <<<"$T" >/dev/null && \
|
|
745
|
+
curl -s -X POST "$API/api/sessions/$SID/input" -H 'Content-Type: application/json' \
|
|
746
|
+
-d '{"input":"\r","useMux":true}' # accept the first-run trust dialog
|
|
747
|
+
curl -sG "$API/api/sessions/$SID/wait-output" --data-urlencode 'match=bypass' \
|
|
748
|
+
--data-urlencode 'from=buffer' --data-urlencode 'timeout=45000' >/dev/null
|
|
749
|
+
fi
|
|
750
|
+
|
|
703
751
|
# 3. Send a prompt into a session (exactly-once: clientId + seq)
|
|
704
752
|
curl -s -X POST "$API/api/sessions/$SID/input" \
|
|
705
753
|
-H 'Content-Type: application/json' \
|
|
706
|
-
-d '{"input":"Run the test suite and summarize failures","useMux":true,"clientId":"agent-1","seq":1}'
|
|
754
|
+
-d '{"input":"Run the test suite and summarize failures\r","useMux":true,"clientId":"agent-1","seq":1}'
|
|
707
755
|
|
|
708
|
-
# 4.
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
756
|
+
# 4. Send a prompt and BLOCK until that turn is done (registers the wait before
|
|
757
|
+
# writing, so it can't answer with the previous turn's idle state)
|
|
758
|
+
curl -s -X POST "$API/api/sessions/$SID/input" \
|
|
759
|
+
-H 'Content-Type: application/json' \
|
|
760
|
+
-d '{"input":"Run the test suite and summarize failures\r","useMux":true,
|
|
761
|
+
"clientId":"agent-1","seq":2,"wait":"stop,exit","waitTimeout":60000}' \
|
|
762
|
+
| jq '.data.wait' # -> {"signal":"stop","timedOut":false,"waitedMs":41230,...}
|
|
763
|
+
# (`stop` is the definitive end-of-turn hook. Adding `idle` makes it resolve on a
|
|
764
|
+
# spinner pause too, and on anything that redraws a ❯ prompt — like a dialog.)
|
|
765
|
+
|
|
766
|
+
# 4b. Timed out? That's a 200, not a failure. Loop over short waits.
|
|
767
|
+
curl -s "$API/api/sessions/$SID/wait?until=stop,exit&timeout=60000" | jq '.data.wait'
|
|
768
|
+
|
|
769
|
+
# 4c. Or wait for a marker in the output (works for shell sessions too).
|
|
770
|
+
# ⚠️ Unique per call (tmux repaints replay old screen text), and SPLIT so the
|
|
771
|
+
# typed line never contains it: your own keystrokes echo into the output
|
|
772
|
+
# stream, so an unsplit marker matches before the command has run. from=buffer
|
|
773
|
+
# catches a marker that printed before the wait landed.
|
|
774
|
+
N=$RANDOM
|
|
775
|
+
curl -s -X POST "$API/api/sessions/$SID/input" -H 'Content-Type: application/json' \
|
|
776
|
+
-d "{\"input\":\"M=DONE; npm test; echo \${M}_$N rc=\$?\r\",\"useMux\":true}"
|
|
777
|
+
curl -sG "$API/api/sessions/$SID/wait-output" \
|
|
778
|
+
--data-urlencode "match=DONE_$N" --data-urlencode 'from=buffer' \
|
|
779
|
+
--data-urlencode 'timeout=60000' | jq '.data.wait'
|
|
780
|
+
|
|
781
|
+
# 5. Read the terminal back. ⚠️ Use terminal?tail=, NOT /output: the latter's
|
|
782
|
+
# textOutput is empty for every tmux-backed (i.e. every interactive) session.
|
|
783
|
+
# tail counts BYTES, and what comes back is terminal data, ANSI included.
|
|
784
|
+
curl -s "$API/api/sessions/$SID/terminal?tail=8000" | jq -r '.data.terminalBuffer'
|
|
785
|
+
|
|
786
|
+
# 6. Stream live events (session output, agent activity, status)
|
|
712
787
|
curl -sN "$API/api/events" # Server-Sent Events
|
|
713
788
|
|
|
714
|
-
#
|
|
789
|
+
# 7. Schedule recurring work (cron-style job)
|
|
715
790
|
curl -s -X POST "$API/api/cron/jobs" \
|
|
716
791
|
-H 'Content-Type: application/json' \
|
|
717
792
|
-d '{"name":"nightly-deps","agentType":"claude","workingDir":"/home/me/proj",
|
|
@@ -719,11 +794,11 @@ curl -s -X POST "$API/api/cron/jobs" \
|
|
|
719
794
|
"inputMode":"typed","scheduleType":"daily","dailyTime":"03:00",
|
|
720
795
|
"enabled":true,"concurrencyPolicy":"warn_only"}' | jq
|
|
721
796
|
|
|
722
|
-
#
|
|
797
|
+
# 8. Inspect background sub-agents and their transcripts
|
|
723
798
|
curl -s "$API/api/subagents" | jq '.data // .'
|
|
724
799
|
curl -s "$API/api/subagents/$AID/transcript" | jq -r '.data // .'
|
|
725
800
|
|
|
726
|
-
#
|
|
801
|
+
# 9. Whole-system snapshot (sessions, settings, respawn, stats)
|
|
727
802
|
curl -s "$API/api/status" | jq
|
|
728
803
|
```
|
|
729
804
|
|
|
@@ -749,7 +824,7 @@ Codeman registers Claude Code hooks that `POST /api/hook-event` (`permission_pro
|
|
|
749
824
|
|
|
750
825
|
## API
|
|
751
826
|
|
|
752
|
-
REST over Fastify — **~
|
|
827
|
+
REST over Fastify — **~200 handlers across 21 route modules**, plus an SSE stream and a WebSocket terminal channel. All responses use the `ApiResponse<T>` envelope (`{success, data}` / `{success, error, errorCode}`); `/api/v1/*` is a stable alias. A representative subset:
|
|
753
828
|
|
|
754
829
|
### Sessions
|
|
755
830
|
|
|
@@ -757,8 +832,11 @@ REST over Fastify — **~190 handlers across 20 route modules**, plus an SSE str
|
|
|
757
832
|
| -------- | -------------------------- | ---------------------------------------------------------------------------------- |
|
|
758
833
|
| `GET` | `/api/sessions` | List all |
|
|
759
834
|
| `POST` | `/api/quick-start` | Create case + start session (`{caseName?, mode?, effort?, envOverrides?}`) |
|
|
760
|
-
| `POST` | `/api/sessions/:id/input` | Send input (`{input, useMux?, clientId?, seq?}
|
|
761
|
-
| `GET` | `/api/sessions/:id/
|
|
835
|
+
| `POST` | `/api/sessions/:id/input` | Send input (`{input, useMux?, clientId?, seq?, wait?, waitTimeout?}`: `clientId`+`seq` = exactly-once; `wait` blocks until the turn ends) |
|
|
836
|
+
| `GET` | `/api/sessions/:id/terminal` | Read terminal output (`?tail=<bytes>`, `?full=1`); the read path for interactive sessions |
|
|
837
|
+
| `GET` | `/api/sessions/:id/output` | Parsed one-shot output (`textOutput` is empty for tmux-backed sessions) |
|
|
838
|
+
| `GET` | `/api/sessions/:id/wait` | Block until a signal fires (`?until=stop,idle,exit&timeout=&fresh=`); a timeout is a `200` |
|
|
839
|
+
| `GET` | `/api/sessions/:id/wait-output` | Block until a literal string appears (`?match=&nocase=&from=now\|buffer&timeout=`) |
|
|
762
840
|
| `GET` | `/api/sessions/unified` | Unified live + history list (Session Manager) — `?q=&limit=` |
|
|
763
841
|
| `POST` | `/api/sessions/:id/pin` | Pin/unpin in the Session Manager (`{pinned}`) |
|
|
764
842
|
| `PUT` | `/api/session-order` | Sync tab order across devices (`{order: [ids]}`) |
|
|
@@ -82,6 +82,7 @@ export declare abstract class AiCheckerBase<V extends string, C extends AiChecke
|
|
|
82
82
|
protected disabledReason: string | null;
|
|
83
83
|
protected checkMuxName: string | null;
|
|
84
84
|
protected checkTempFile: string | null;
|
|
85
|
+
protected checkStderrFile: string | null;
|
|
85
86
|
protected checkPromptFile: string | null;
|
|
86
87
|
protected checkPollTimer: NodeJS.Timeout | null;
|
|
87
88
|
protected checkTimeoutTimer: NodeJS.Timeout | null;
|
|
@@ -165,6 +166,7 @@ export declare abstract class AiCheckerBase<V extends string, C extends AiChecke
|
|
|
165
166
|
getConfig(): C;
|
|
166
167
|
private runCheck;
|
|
167
168
|
private parseOutput;
|
|
169
|
+
private readStderrDiagnostic;
|
|
168
170
|
private cleanupCheck;
|
|
169
171
|
private handleError;
|
|
170
172
|
private startCooldown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-checker-base.d.ts","sourceRoot":"","sources":["../src/ai-checker-base.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ai-checker-base.d.ts","sourceRoot":"","sources":["../src/ai-checker-base.ts"],"names":[],"mappings":"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"}
|
package/dist/ai-checker-base.js
CHANGED
|
@@ -80,6 +80,7 @@ export class AiCheckerBase extends EventEmitter {
|
|
|
80
80
|
// Active check state
|
|
81
81
|
checkMuxName = null;
|
|
82
82
|
checkTempFile = null;
|
|
83
|
+
checkStderrFile = null;
|
|
83
84
|
checkPromptFile = null;
|
|
84
85
|
checkPollTimer = null;
|
|
85
86
|
checkTimeoutTimer = null;
|
|
@@ -241,6 +242,7 @@ export class AiCheckerBase extends EventEmitter {
|
|
|
241
242
|
const shortId = this.sessionId.slice(0, 8);
|
|
242
243
|
const timestamp = Date.now();
|
|
243
244
|
this.checkTempFile = join(tmpdir(), `${this.tempFilePrefix}-${shortId}-${timestamp}.txt`);
|
|
245
|
+
this.checkStderrFile = join(tmpdir(), `${this.tempFilePrefix}-stderr-${shortId}-${timestamp}.txt`);
|
|
244
246
|
this.checkPromptFile = join(tmpdir(), `${this.tempFilePrefix}-prompt-${shortId}-${timestamp}.txt`);
|
|
245
247
|
this.checkMuxName = `${this.muxNamePrefix}${shortId}`;
|
|
246
248
|
// Security: Validate mux name before use in shell commands
|
|
@@ -249,6 +251,7 @@ export class AiCheckerBase extends EventEmitter {
|
|
|
249
251
|
}
|
|
250
252
|
// Ensure output temp file exists (empty) so we can poll it
|
|
251
253
|
writeFileSync(this.checkTempFile, '');
|
|
254
|
+
writeFileSync(this.checkStderrFile, '');
|
|
252
255
|
// Write prompt to file to avoid E2BIG error (argument list too long)
|
|
253
256
|
// The prompt can be 16KB+ which exceeds shell argument limits
|
|
254
257
|
writeFileSync(this.checkPromptFile, prompt);
|
|
@@ -257,7 +260,7 @@ export class AiCheckerBase extends EventEmitter {
|
|
|
257
260
|
const modelArg = `--model "${this.config.model.replace(/"/g, '\\"')}"`;
|
|
258
261
|
const augmentedPath = getAugmentedPath();
|
|
259
262
|
const claudeCmd = `cat "${this.checkPromptFile}" | claude -p ${modelArg} --output-format text`;
|
|
260
|
-
const fullCmd = `export PATH="${augmentedPath}"; ${claudeCmd} > "${this.checkTempFile}" 2
|
|
263
|
+
const fullCmd = `export PATH="${augmentedPath}"; ${claudeCmd} > "${this.checkTempFile}" 2> "${this.checkStderrFile}"; echo "${this.doneMarker}" >> "${this.checkTempFile}"; rm -f "${this.checkPromptFile}"`;
|
|
261
264
|
// Spawn tmux session
|
|
262
265
|
try {
|
|
263
266
|
// Kill any leftover session with this name first (mux name already validated above)
|
|
@@ -317,15 +320,29 @@ export class AiCheckerBase extends EventEmitter {
|
|
|
317
320
|
// Remove the done marker and trim
|
|
318
321
|
const output = content.replace(this.doneMarker, '').trim();
|
|
319
322
|
if (!output) {
|
|
320
|
-
|
|
323
|
+
const stderr = this.readStderrDiagnostic();
|
|
324
|
+
const detail = stderr ? `: ${stderr}` : '';
|
|
325
|
+
return this.createErrorResult(`Empty output from ${this.checkDescription}${detail}`, durationMs);
|
|
321
326
|
}
|
|
322
327
|
// Delegate to subclass for verdict parsing
|
|
323
328
|
const parsed = this.parseVerdict(output);
|
|
324
329
|
if (!parsed) {
|
|
325
|
-
|
|
330
|
+
const stderr = this.readStderrDiagnostic();
|
|
331
|
+
const detail = stderr ? `; stderr: "${stderr}"` : '';
|
|
332
|
+
return this.createErrorResult(`Could not parse verdict from: "${output.substring(0, 100)}"${detail}`, durationMs);
|
|
326
333
|
}
|
|
327
334
|
return this.createResult(parsed.verdict, parsed.reasoning, durationMs);
|
|
328
335
|
}
|
|
336
|
+
readStderrDiagnostic() {
|
|
337
|
+
if (!this.checkStderrFile || !existsSync(this.checkStderrFile))
|
|
338
|
+
return '';
|
|
339
|
+
try {
|
|
340
|
+
return readFileSync(this.checkStderrFile, 'utf-8').trim().substring(0, 200);
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
return '';
|
|
344
|
+
}
|
|
345
|
+
}
|
|
329
346
|
cleanupCheck() {
|
|
330
347
|
// Clear poll timer
|
|
331
348
|
if (this.checkPollTimer) {
|
|
@@ -360,6 +377,17 @@ export class AiCheckerBase extends EventEmitter {
|
|
|
360
377
|
}
|
|
361
378
|
this.checkTempFile = null;
|
|
362
379
|
}
|
|
380
|
+
if (this.checkStderrFile) {
|
|
381
|
+
try {
|
|
382
|
+
if (existsSync(this.checkStderrFile)) {
|
|
383
|
+
unlinkSync(this.checkStderrFile);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
// Best effort cleanup
|
|
388
|
+
}
|
|
389
|
+
this.checkStderrFile = null;
|
|
390
|
+
}
|
|
363
391
|
if (this.checkPromptFile) {
|
|
364
392
|
try {
|
|
365
393
|
if (existsSync(this.checkPromptFile)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-checker-base.js","sourceRoot":"","sources":["../src/ai-checker-base.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-checker-base.js","sourceRoot":"","sources":["../src/ai-checker-base.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA67B9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -20,6 +20,9 @@ import { getRalphLoop } from './ralph-loop.js';
|
|
|
20
20
|
import { getStore } from './state-store.js';
|
|
21
21
|
import { getErrorMessage } from './types.js';
|
|
22
22
|
import { isSupportedAttachmentExtension } from './attachment-registry.js';
|
|
23
|
+
import { daemonStatus, startDaemon, stopDaemon } from './daemon-control.js';
|
|
24
|
+
import { installService, serviceStatus, uninstallService } from './service-installer.js';
|
|
25
|
+
import { isLoopbackBindHost, isUnauthenticatedNetworkAcknowledged } from './web/network-auth-policy.js';
|
|
23
26
|
const require = createRequire(import.meta.url);
|
|
24
27
|
const pkg = require('../package.json');
|
|
25
28
|
const program = new Command();
|
|
@@ -498,27 +501,107 @@ program
|
|
|
498
501
|
}
|
|
499
502
|
console.log('');
|
|
500
503
|
});
|
|
504
|
+
// ============ Web / daemon / service Commands ============
|
|
505
|
+
/** Shared option set for the commands that can launch a web server. */
|
|
506
|
+
function addWebLaunchOptions(cmd) {
|
|
507
|
+
return cmd
|
|
508
|
+
.option('-H, --host <host>', 'Host to bind to', process.env.CODEMAN_HOST || '127.0.0.1')
|
|
509
|
+
.option('-p, --port <port>', 'Port to listen on (env: CODEMAN_PORT)', process.env.CODEMAN_PORT || '3000')
|
|
510
|
+
.option('--https', 'Enable HTTPS with self-signed certificate (only needed for remote access, not localhost)')
|
|
511
|
+
.option('--title-hostname <hostname>', 'Override the hostname shown in the browser title')
|
|
512
|
+
.option('--allow-unauthenticated-network', 'Allow non-loopback web access without CODEMAN_PASSWORD (dangerous; terminal control is exposed)')
|
|
513
|
+
.option('--multiuser', 'Enable opt-in multi-user mode (named users in ~/.codeman/users.json; env: CODEMAN_MULTIUSER)');
|
|
514
|
+
}
|
|
515
|
+
/** Normalize commander's strings into the shape daemon-control/service-installer take. */
|
|
516
|
+
function toWebLaunchOptions(options) {
|
|
517
|
+
const port = parseInt(options.port, 10);
|
|
518
|
+
if (!Number.isInteger(port) || port <= 0 || port > 65535) {
|
|
519
|
+
console.error(chalk.red(`✗ Invalid port: ${options.port}`));
|
|
520
|
+
process.exit(1);
|
|
521
|
+
}
|
|
522
|
+
return {
|
|
523
|
+
host: options.host,
|
|
524
|
+
port,
|
|
525
|
+
https: !!options.https,
|
|
526
|
+
titleHostname: options.titleHostname,
|
|
527
|
+
allowUnauthenticatedNetwork: !!options.allowUnauthenticatedNetwork,
|
|
528
|
+
multiuser: !!options.multiuser,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* The server prints this itself, but into a log file nobody reads when it is
|
|
533
|
+
* detached or supervised. Repeat it where the operator is actually looking.
|
|
534
|
+
*/
|
|
535
|
+
function warnIfUnauthenticatedNetwork(launch) {
|
|
536
|
+
if (isLoopbackBindHost(launch.host))
|
|
537
|
+
return;
|
|
538
|
+
if (isUnauthenticatedNetworkAcknowledged(launch.allowUnauthenticatedNetwork))
|
|
539
|
+
return;
|
|
540
|
+
console.log(chalk.yellow(`⚠ Binding ${launch.host} without CODEMAN_PASSWORD: anyone who can reach this port gets terminal control.`));
|
|
541
|
+
console.log(chalk.yellow(' Set CODEMAN_PASSWORD, or bind 127.0.0.1 and front it with tailscale serve.'));
|
|
542
|
+
}
|
|
501
543
|
// Web interface command
|
|
502
|
-
program
|
|
503
|
-
.
|
|
504
|
-
.
|
|
505
|
-
.option('
|
|
506
|
-
|
|
507
|
-
.option('--https', 'Enable HTTPS with self-signed certificate (only needed for remote access, not localhost)')
|
|
508
|
-
.option('--title-hostname <hostname>', 'Override the hostname shown in the browser title')
|
|
509
|
-
.option('--allow-unauthenticated-network', 'Allow non-loopback web access without CODEMAN_PASSWORD (dangerous; terminal control is exposed)')
|
|
510
|
-
.option('--multiuser', 'Enable opt-in multi-user mode (named users in ~/.codeman/users.json; env: CODEMAN_MULTIUSER)')
|
|
511
|
-
.action(async (options) => {
|
|
544
|
+
const webCmd = addWebLaunchOptions(program.command('web').description('Start the web interface'))
|
|
545
|
+
.option('-d, --daemon', 'Run detached in the background; survives the shell, logs to <data dir>/web.log')
|
|
546
|
+
.option('--stop', 'Stop a server started with --daemon')
|
|
547
|
+
.option('--status', 'Report whether a detached server is running');
|
|
548
|
+
webCmd.action(async (options) => {
|
|
512
549
|
// The flag is surfaced to the rest of the process via the env var so
|
|
513
550
|
// isMultiUserMode() has a single source of truth (see config/multiuser.ts).
|
|
514
551
|
if (options.multiuser)
|
|
515
552
|
process.env.CODEMAN_MULTIUSER = '1';
|
|
553
|
+
const launch = toWebLaunchOptions(options);
|
|
554
|
+
if (options.stop) {
|
|
555
|
+
const result = await stopDaemon(launch);
|
|
556
|
+
if (result.ok && result.reason === 'not-running') {
|
|
557
|
+
console.log(chalk.gray(`○ ${result.message}`));
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
if (result.ok) {
|
|
561
|
+
console.log(chalk.green(`✓ ${result.message ?? `Stopped Codeman (pid ${result.pid})`}`));
|
|
562
|
+
console.log(chalk.gray(' Your agents keep running in tmux.'));
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
console.error(chalk.red(`✗ ${result.message ?? 'Could not stop the server'}`));
|
|
566
|
+
process.exit(1);
|
|
567
|
+
}
|
|
568
|
+
if (options.status) {
|
|
569
|
+
const status = await daemonStatus(launch);
|
|
570
|
+
if (status.responding) {
|
|
571
|
+
const version = status.version ? ` (v${status.version})` : '';
|
|
572
|
+
console.log(chalk.green(`✓ Responding at ${status.url}${version}`));
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
console.log(chalk.yellow(`○ Nothing answering at ${status.url}`));
|
|
576
|
+
}
|
|
577
|
+
console.log(` Daemon pid: ${status.running ? chalk.green(String(status.pid)) : chalk.gray('not running')}`);
|
|
578
|
+
console.log(chalk.gray(` Pidfile: ${status.pidFile}`));
|
|
579
|
+
console.log(chalk.gray(` Log: ${status.logPath}`));
|
|
580
|
+
if (!status.running && status.responding) {
|
|
581
|
+
console.log(chalk.gray(' (running, but not started with --daemon: probably a service or a foreground run)'));
|
|
582
|
+
}
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
if (options.daemon) {
|
|
586
|
+
warnIfUnauthenticatedNetwork(launch);
|
|
587
|
+
console.log(chalk.cyan('Starting Codeman in the background...'));
|
|
588
|
+
const result = await startDaemon(launch);
|
|
589
|
+
if (result.ok) {
|
|
590
|
+
console.log(chalk.green(`\n✓ Codeman is running at ${result.url} (pid ${result.pid})`));
|
|
591
|
+
console.log(chalk.gray(` Logs: ${result.logPath}`));
|
|
592
|
+
console.log(chalk.gray(' Stop it with: codeman web --stop'));
|
|
593
|
+
console.log(chalk.gray(' Want it back after a reboot? codeman service install'));
|
|
594
|
+
return;
|
|
595
|
+
}
|
|
596
|
+
console.error(chalk.red(`\n✗ ${result.message ?? 'Failed to start'}`));
|
|
597
|
+
process.exit(1);
|
|
598
|
+
}
|
|
516
599
|
const { startWebServer } = await import('./web/server.js');
|
|
517
|
-
const host =
|
|
518
|
-
const port =
|
|
519
|
-
const https =
|
|
600
|
+
const host = launch.host;
|
|
601
|
+
const port = launch.port;
|
|
602
|
+
const https = launch.https;
|
|
520
603
|
const titleHostname = options.titleHostname;
|
|
521
|
-
const allowUnauthenticatedNetwork =
|
|
604
|
+
const allowUnauthenticatedNetwork = launch.allowUnauthenticatedNetwork ?? false;
|
|
522
605
|
const protocol = https ? 'https' : 'http';
|
|
523
606
|
const displayHost = host === '0.0.0.0' ? 'localhost' : host;
|
|
524
607
|
console.log(chalk.cyan(`Starting Codeman web interface on ${displayHost}:${port}${https ? ' (HTTPS)' : ''}...`));
|
|
@@ -553,6 +636,51 @@ program
|
|
|
553
636
|
process.exit(1);
|
|
554
637
|
}
|
|
555
638
|
});
|
|
639
|
+
// Supervised service: the "still there after a reboot" answer, where `web -d` is
|
|
640
|
+
// the "still there after I close this shell" one (issue #231).
|
|
641
|
+
const serviceCmd = program
|
|
642
|
+
.command('service')
|
|
643
|
+
.description('Manage the background service (systemd user unit on Linux, LaunchAgent on macOS)');
|
|
644
|
+
addWebLaunchOptions(serviceCmd.command('install').description('Install and start the service, then verify it answers')).action(async (options) => {
|
|
645
|
+
const launch = toWebLaunchOptions(options);
|
|
646
|
+
warnIfUnauthenticatedNetwork(launch);
|
|
647
|
+
console.log(chalk.cyan('Installing the Codeman service...'));
|
|
648
|
+
const result = await installService(launch);
|
|
649
|
+
for (const warning of result.warnings ?? [])
|
|
650
|
+
console.log(chalk.yellow(`⚠ ${warning}`));
|
|
651
|
+
if (!result.ok) {
|
|
652
|
+
console.error(chalk.red(`✗ ${result.message}`));
|
|
653
|
+
process.exit(1);
|
|
654
|
+
}
|
|
655
|
+
console.log(chalk.green(`✓ ${result.message}`));
|
|
656
|
+
console.log(chalk.gray(` Unit: ${result.unitPath}`));
|
|
657
|
+
if (process.env.CODEMAN_PASSWORD) {
|
|
658
|
+
console.log(chalk.yellow(' Note: CODEMAN_PASSWORD was NOT copied into the unit file. Add it there yourself if the service needs auth.'));
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
serviceCmd
|
|
662
|
+
.command('uninstall')
|
|
663
|
+
.description('Stop the service and remove its unit file')
|
|
664
|
+
.action(() => {
|
|
665
|
+
const result = uninstallService();
|
|
666
|
+
if (!result.ok) {
|
|
667
|
+
console.error(chalk.red(`✗ ${result.message}`));
|
|
668
|
+
process.exit(1);
|
|
669
|
+
}
|
|
670
|
+
console.log(chalk.green(`✓ ${result.message}`));
|
|
671
|
+
});
|
|
672
|
+
addWebLaunchOptions(serviceCmd.command('status').description('Show whether the service is installed and running')).action(async (options) => {
|
|
673
|
+
const status = await serviceStatus(toWebLaunchOptions(options));
|
|
674
|
+
if (!status.kind) {
|
|
675
|
+
console.log(chalk.yellow(`No supported supervisor on ${process.platform}. Use \`codeman web -d\` instead.`));
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
console.log(` Supervisor: ${status.kind} (${status.name})`);
|
|
679
|
+
console.log(` Unit file: ${status.installed ? chalk.green(status.unitPath) : chalk.gray('not installed')}`);
|
|
680
|
+
console.log(` Loaded: ${status.loaded ? chalk.green('yes') : chalk.gray('no')}`);
|
|
681
|
+
const version = status.version ? ` (v${status.version})` : '';
|
|
682
|
+
console.log(` Responding: ${status.responding ? chalk.green(`yes at ${status.url}${version}`) : chalk.gray(`no at ${status.url}`)}`);
|
|
683
|
+
});
|
|
556
684
|
// ============ Multi-user Commands ============
|
|
557
685
|
//
|
|
558
686
|
// Operate directly on ~/.codeman/users.json (via user-store) with NO running
|