Files
Codeman/test/location-overlay-commands.test.ts
T
Codeman maintainer 2a876731f6 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>
2026-11-09 02:52:13 +01:00

66 lines
2.9 KiB
TypeScript

/**
* @fileoverview Golden pins for the remote/docker LOCATION OVERLAY commands, now that both
* are read from `overlays.<location>` on the registry entry rather than from a hardcoded
* `Record<…CommandMode, string>` in each file.
*
* The literals below are transcribed from those two tables as they stood BEFORE the wiring,
* which is the whole point: the tables were dead-simple duplicates of registry data with
* nothing keeping the two in step, and the way to delete a duplicate safely is to pin what it
* produced first. A diff here means an entry's `overlays` (or its first declared binary)
* changed what a remote or in-container pane actually runs.
*
* Note the two arms deliberately NOT read from an entry, each for its own reason: remote
* `shell` resolves the REMOTE user's login shell (unknowable from here, hence `$SHELL`), and
* docker `shell` is the entry that declares `docker: { disabled: true }` — a container has no
* per-user login shell to resolve, so it gets a plain `bash -l`.
*
* Port: none (pure, over registry data).
*/
import { it, expect } from 'vitest';
import { defaultRemoteCommandForMode, remoteLoginShellCommand } from '../src/remote-hosts.js';
import { defaultDockerCommandForMode } from '../src/docker-hosts.js';
import type { SessionMode } from '../src/types/session.js';
it('pins every remote pane command', () => {
const expected: Record<string, string> = {
shell: '{ set -- -i -l; case ${SHELL##*/} in csh|tcsh) set --;; esac; exec "${SHELL:-/bin/sh}" "$@"; }',
claude: remoteLoginShellCommand('claude --dangerously-skip-permissions'),
opencode: remoteLoginShellCommand('opencode'),
codex: remoteLoginShellCommand('codex'),
gemini: remoteLoginShellCommand('gemini'),
antigravity: remoteLoginShellCommand('agy'),
pi: remoteLoginShellCommand('pi'),
grok: remoteLoginShellCommand('grok'),
deepseek: remoteLoginShellCommand('dsh'),
omp: remoteLoginShellCommand('omp'),
copilot: remoteLoginShellCommand('copilot'),
jcode: remoteLoginShellCommand('jcode'),
};
for (const [mode, want] of Object.entries(expected)) {
expect(defaultRemoteCommandForMode(mode as SessionMode), mode).toBe(want);
}
expect(defaultRemoteCommandForMode('nope' as SessionMode)).toBe(expected.shell);
});
it('pins every in-container pane command', () => {
const expected: Record<string, string> = {
shell: 'exec bash -l',
claude: 'exec claude --dangerously-skip-permissions',
opencode: 'exec opencode',
codex: 'exec codex',
gemini: 'exec gemini',
antigravity: 'exec agy',
pi: 'exec pi',
grok: 'exec grok',
deepseek: 'exec dsh',
omp: 'exec omp',
copilot: 'exec copilot',
jcode: 'exec jcode',
};
for (const [mode, want] of Object.entries(expected)) {
expect(defaultDockerCommandForMode(mode as SessionMode), mode).toBe(want);
}
expect(defaultDockerCommandForMode('nope' as SessionMode)).toBe('exec bash -l');
});