feat(jcode): add jcode as a run mode

jcode (1jehuang/jcode) joins the CLI registry as the `jcode` run mode:
Run menu, phone overview, TUI, quick-start and POST /api/sessions
(`jcodeConfig: { model?, resumeSessionId? }`), local, SSH and Docker
(dedicated agent-image layer), plus codeman doctor and install.sh
through the generated catalogue. Measured on a live jcode 0.98.1 pane.

- Work detection reads jcode's braille status row and `<n>>` composer;
  alt screen with mouse strip and PageUp/PageDown paging like opencode.
- Every jcode TUI is a client of one shared per-user daemon whose tools
  run with the daemon's env, so no agent skill injection and no JCODE_*
  envOverrides prefix.
- New `capabilities.sharedDaemon`: a session kill spares descendants
  outside the pane's process group, so closing the tab that started the
  daemon no longer cuts every other jcode session off (measured).
- last-response answers an honest empty for an external CLI with no
  transcript reader that the pane segmenter cannot read (jcode alone).
- GET /api/jcode/status via the generic registry resolver.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Codeman maintainer committed 2026-11-09 02:52:13 +01:00
1 parent 86502b6904
commit 2a876731f6
66 files changed
+1304 -127

No files matched your search

+15
View File
@@ -203,6 +203,21 @@ RUN curl -fsSL https://omp.sh/install | sh \
&& rm -f /root/.local/bin/omp \
&& omp --version
# jcode is NOT on npm: a standalone Rust binary via jcode.sh's installer, which
# writes $HOME/.jcode/builds/versions/<v>/ and links $HOME/.local/bin/jcode to it.
# The linked `jcode` is a small sh LAUNCHER that resolves its own path and execs
# the `jcode-<os>-<arch>.bin` beside it, so (unlike grok/omp above) the whole
# version directory is copied, to /opt/jcode, and /usr/local/bin/jcode links the
# launcher there. Root's ~/.jcode is dropped in the same layer so the image does
# not carry the ~160MB binary twice. JCODE_SKIP_SERVER_RELOAD: there is no jcode
# daemon at build time to hand off to.
RUN curl -fsSL https://jcode.sh/install | JCODE_SKIP_SERVER_RELOAD=1 bash \
&& mkdir -p /opt/jcode \
&& cp -a "$(dirname "$(readlink -f /root/.local/bin/jcode)")/." /opt/jcode/ \
&& ln -sfn /opt/jcode/jcode /usr/local/bin/jcode \
&& rm -rf /root/.jcode /root/.local/bin/jcode \
&& jcode --version
# `agent` user (gid 0) with an arbitrary-uid-writable HOME. The uid is
# auto-assigned (node:22-slim already occupies uid 1000 with its `node` user); at
# runtime Codeman overrides with `--user <hostUid>:0` on Linux, so the baked uid