aicodeman 1.5.0 → 1.6.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 (143) hide show
  1. package/README.md +10 -8
  2. package/README.zh-CN.md +289 -92
  3. package/dist/docker-export.d.ts +13 -0
  4. package/dist/docker-export.d.ts.map +1 -1
  5. package/dist/docker-export.js +55 -8
  6. package/dist/docker-export.js.map +1 -1
  7. package/dist/docker-hosts.d.ts +36 -5
  8. package/dist/docker-hosts.d.ts.map +1 -1
  9. package/dist/docker-hosts.js +90 -16
  10. package/dist/docker-hosts.js.map +1 -1
  11. package/dist/remote-hosts.d.ts +61 -1
  12. package/dist/remote-hosts.d.ts.map +1 -1
  13. package/dist/remote-hosts.js +142 -0
  14. package/dist/remote-hosts.js.map +1 -1
  15. package/dist/remote-reconnect.d.ts +129 -0
  16. package/dist/remote-reconnect.d.ts.map +1 -0
  17. package/dist/remote-reconnect.js +119 -0
  18. package/dist/remote-reconnect.js.map +1 -0
  19. package/dist/services/unified-session-service.d.ts +13 -1
  20. package/dist/services/unified-session-service.d.ts.map +1 -1
  21. package/dist/services/unified-session-service.js +88 -3
  22. package/dist/services/unified-session-service.js.map +1 -1
  23. package/dist/session-order.d.ts +40 -0
  24. package/dist/session-order.d.ts.map +1 -0
  25. package/dist/session-order.js +67 -0
  26. package/dist/session-order.js.map +1 -0
  27. package/dist/session.d.ts +39 -0
  28. package/dist/session.d.ts.map +1 -1
  29. package/dist/session.js +87 -19
  30. package/dist/session.js.map +1 -1
  31. package/dist/state-store.d.ts +12 -0
  32. package/dist/state-store.d.ts.map +1 -1
  33. package/dist/state-store.js +33 -0
  34. package/dist/state-store.js.map +1 -1
  35. package/dist/tmux-manager.d.ts +66 -0
  36. package/dist/tmux-manager.d.ts.map +1 -1
  37. package/dist/tmux-manager.js +260 -8
  38. package/dist/tmux-manager.js.map +1 -1
  39. package/dist/types/app-state.d.ts +2 -0
  40. package/dist/types/app-state.d.ts.map +1 -1
  41. package/dist/types/app-state.js.map +1 -1
  42. package/dist/types/session.d.ts +43 -1
  43. package/dist/types/session.d.ts.map +1 -1
  44. package/dist/types/session.js +1 -1
  45. package/dist/types/session.js.map +1 -1
  46. package/dist/web/public/admin-ui.js.gz +0 -0
  47. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  48. package/dist/web/public/app.b78b0465.js +38 -0
  49. package/dist/web/public/app.b78b0465.js.br +0 -0
  50. package/dist/web/public/app.b78b0465.js.gz +0 -0
  51. package/dist/web/public/{constants.5ce97313.js → constants.21a0a83e.js} +10 -0
  52. package/dist/web/public/constants.21a0a83e.js.br +0 -0
  53. package/dist/web/public/{constants.5ce97313.js.gz → constants.21a0a83e.js.gz} +0 -0
  54. package/dist/web/public/cron-ui.js.gz +0 -0
  55. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  56. package/dist/web/public/index.html +32 -13
  57. package/dist/web/public/index.html.br +0 -0
  58. package/dist/web/public/index.html.gz +0 -0
  59. package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
  60. package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
  61. package/dist/web/public/mobile-handlers.b5a667ef.js.gz +0 -0
  62. package/dist/web/public/mobile.597136a6.css +1 -0
  63. package/dist/web/public/mobile.597136a6.css.br +0 -0
  64. package/dist/web/public/mobile.597136a6.css.gz +0 -0
  65. package/dist/web/public/notification-manager.ca9dc40d.js.gz +0 -0
  66. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  67. package/dist/web/public/{panels-ui.3c9b0465.js → panels-ui.58582d4c.js} +2 -2
  68. package/dist/web/public/panels-ui.58582d4c.js.br +0 -0
  69. package/dist/web/public/panels-ui.58582d4c.js.gz +0 -0
  70. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  71. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  72. package/dist/web/public/respawn-ui.2d249da9.js.gz +0 -0
  73. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  74. package/dist/web/public/session-ui.0cf86dd4.js +68 -0
  75. package/dist/web/public/session-ui.0cf86dd4.js.br +0 -0
  76. package/dist/web/public/session-ui.0cf86dd4.js.gz +0 -0
  77. package/dist/web/public/{settings-ui.29214cf1.js → settings-ui.bc5f4792.js} +2 -2
  78. package/dist/web/public/settings-ui.bc5f4792.js.br +0 -0
  79. package/dist/web/public/settings-ui.bc5f4792.js.gz +0 -0
  80. package/dist/web/public/styles.7295e6f4.css +1 -0
  81. package/dist/web/public/styles.7295e6f4.css.br +0 -0
  82. package/dist/web/public/styles.7295e6f4.css.gz +0 -0
  83. package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
  84. package/dist/web/public/sw.js.gz +0 -0
  85. package/dist/web/public/terminal-ui.9ea677e9.js +3 -0
  86. package/dist/web/public/terminal-ui.9ea677e9.js.br +0 -0
  87. package/dist/web/public/terminal-ui.9ea677e9.js.gz +0 -0
  88. package/dist/web/public/ultracode-panel.js.gz +0 -0
  89. package/dist/web/public/ultracode-windows.js.gz +0 -0
  90. package/dist/web/public/upload.html.gz +0 -0
  91. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  92. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  93. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  94. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  95. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  96. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  97. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  98. package/dist/web/public/vendor/xterm.css.gz +0 -0
  99. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  100. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  101. package/dist/web/routes/case-routes.d.ts +2 -2
  102. package/dist/web/routes/case-routes.d.ts.map +1 -1
  103. package/dist/web/routes/case-routes.js +75 -21
  104. package/dist/web/routes/case-routes.js.map +1 -1
  105. package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
  106. package/dist/web/routes/hook-event-routes.js +9 -0
  107. package/dist/web/routes/hook-event-routes.js.map +1 -1
  108. package/dist/web/routes/session-routes.d.ts.map +1 -1
  109. package/dist/web/routes/session-routes.js +172 -7
  110. package/dist/web/routes/session-routes.js.map +1 -1
  111. package/dist/web/schemas.d.ts +14 -0
  112. package/dist/web/schemas.d.ts.map +1 -1
  113. package/dist/web/schemas.js +42 -0
  114. package/dist/web/schemas.js.map +1 -1
  115. package/dist/web/server.d.ts +9 -0
  116. package/dist/web/server.d.ts.map +1 -1
  117. package/dist/web/server.js +57 -1
  118. package/dist/web/server.js.map +1 -1
  119. package/dist/web/sse-events.d.ts +18 -0
  120. package/dist/web/sse-events.d.ts.map +1 -1
  121. package/dist/web/sse-events.js +21 -0
  122. package/dist/web/sse-events.js.map +1 -1
  123. package/package.json +1 -1
  124. package/dist/web/public/app.6c4b9893.js +0 -38
  125. package/dist/web/public/app.6c4b9893.js.br +0 -0
  126. package/dist/web/public/app.6c4b9893.js.gz +0 -0
  127. package/dist/web/public/constants.5ce97313.js.br +0 -0
  128. package/dist/web/public/mobile.0644e3ac.css +0 -1
  129. package/dist/web/public/mobile.0644e3ac.css.br +0 -0
  130. package/dist/web/public/mobile.0644e3ac.css.gz +0 -0
  131. package/dist/web/public/panels-ui.3c9b0465.js.br +0 -0
  132. package/dist/web/public/panels-ui.3c9b0465.js.gz +0 -0
  133. package/dist/web/public/session-ui.4851c61a.js +0 -58
  134. package/dist/web/public/session-ui.4851c61a.js.br +0 -0
  135. package/dist/web/public/session-ui.4851c61a.js.gz +0 -0
  136. package/dist/web/public/settings-ui.29214cf1.js.br +0 -0
  137. package/dist/web/public/settings-ui.29214cf1.js.gz +0 -0
  138. package/dist/web/public/styles.9e6cdb9d.css +0 -1
  139. package/dist/web/public/styles.9e6cdb9d.css.br +0 -0
  140. package/dist/web/public/styles.9e6cdb9d.css.gz +0 -0
  141. package/dist/web/public/terminal-ui.efda6083.js +0 -3
  142. package/dist/web/public/terminal-ui.efda6083.js.br +0 -0
  143. package/dist/web/public/terminal-ui.efda6083.js.gz +0 -0
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  <h2 align="center">Mission control for AI coding agents</h2>
6
6
 
7
7
  <p align="center">
8
- <em>Claude Code &bull; OpenCode &bull; Codex &bull; Terminal - One Dashboard &bull; Any Device</em>
8
+ <em>Claude Code &bull; OpenCode &bull; Codex &bull; Gemini &bull; Terminal - One Dashboard &bull; Any Device</em>
9
9
  </p>
10
10
 
11
11
  <p align="center">
@@ -34,7 +34,7 @@ curl -fsSL https://raw.githubusercontent.com/Ark0N/Codeman/master/install.sh | b
34
34
 
35
35
  This installs Node.js and tmux if missing, clones Codeman to `~/.codeman/app`, and builds it.
36
36
 
37
- You'll need at least one AI coding CLI installed — [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [OpenCode](https://opencode.ai), or [Codex](https://developers.openai.com/codex/cli) (any combination works). After install:
37
+ You'll need at least one AI coding CLI installed — [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [OpenCode](https://opencode.ai), [Codex](https://developers.openai.com/codex/cli), or [Gemini CLI](https://github.com/google-gemini/gemini-cli) (any combination works). After install:
38
38
 
39
39
  ```bash
40
40
  codeman web
@@ -106,7 +106,7 @@ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.codeman.web.plist
106
106
  wsl bash -c "curl -fsSL https://raw.githubusercontent.com/Ark0N/Codeman/master/install.sh | bash"
107
107
  ```
108
108
 
109
- Codeman requires tmux, so Windows users need [WSL](https://learn.microsoft.com/en-us/windows/wsl/install). If you don't have WSL yet: run `wsl --install` in an admin PowerShell, reboot, open Ubuntu, then install your preferred AI coding CLI inside WSL ([Claude Code](https://docs.anthropic.com/en/docs/claude-code), [OpenCode](https://opencode.ai), or [Codex](https://developers.openai.com/codex/cli)). After installing, `http://localhost:3000` is accessible from your Windows browser.
109
+ Codeman requires tmux, so Windows users need [WSL](https://learn.microsoft.com/en-us/windows/wsl/install). If you don't have WSL yet: run `wsl --install` in an admin PowerShell, reboot, open Ubuntu, then install your preferred AI coding CLI inside WSL ([Claude Code](https://docs.anthropic.com/en/docs/claude-code), [OpenCode](https://opencode.ai), [Codex](https://developers.openai.com/codex/cli), or [Gemini CLI](https://github.com/google-gemini/gemini-cli)). After installing, `http://localhost:3000` is accessible from your Windows browser.
110
110
 
111
111
  </details>
112
112
 
@@ -365,13 +365,14 @@ PTY Output → 16ms Server Batch → DEC 2026 Wrap → SSE → Client rAF → xt
365
365
  ## More Features
366
366
 
367
367
  - **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)
368
- - **Multi-CLI** — run **Claude Code**, **OpenCode**, or **Codex** per session; env-var prefixes auto-gate (`CLAUDE_CODE_*` vs `OPENCODE_*` vs `CODEX_*`). See [`docs/opencode-integration.md`](docs/opencode-integration.md)
368
+ - **Multi-CLI** — run **Claude Code**, **OpenCode**, **Codex**, or **Gemini** per session; env-var prefixes auto-gate (`CLAUDE_CODE_*` vs `OPENCODE_*` vs `CODEX_*` vs `GEMINI_*`/`GOOGLE_*`). See [`docs/opencode-integration.md`](docs/opencode-integration.md)
369
369
  - **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)
370
370
  - **Effort & Ultracode** — set a per-session default effort (`low`–`max`) or enable **ultracode** (dynamic multi-agent workflows). Soft defaults only — switchable anytime with `/effort` in-session. Extended-thinking budget is configurable too
371
371
  - **Voice input** — dictate prompts with Deepgram Nova-3 (Web Speech API fallback): toggle recording, auto-silence stop, live level meter (`Ctrl+Shift+V`)
372
372
  - **Image input** — paste or drag-and-drop images straight into a session
373
373
  - **Gesture control** _(opt-in)_ — a MediaPipe hand-tracking overlay to grab/drag session windows and pinch buttons, hands-free. Enable with `CODEMAN_GESTURE=1` + App Settings → Display
374
374
  - **Multi-monitor span** _(macOS)_ — one click opens a browser window maximized across all displays, so floating agent/gesture panels can cross the physical seam
375
+ - **File Viewer button** _(opt-in)_ — a header button that toggles the built-in file browser panel with one tap; enable under App Settings → Display → Header Displays
375
376
  - **CJK / IME input** — full composition support for Chinese / Japanese / Korean
376
377
  - **OS notifications & hostname-aware titles** — desktop alerts and tab titles are prefixed `codeman:<host>` so multi-host setups stay unambiguous
377
378
 
@@ -384,11 +385,12 @@ Run a case inside its own hardened Docker container instead of directly on your
384
385
  - **One click** — on **New Case → Create New**, tick **🐳 Run in an isolated Docker container**. Codeman creates the case folder, spins up a container with default settings, and starts the agent inside it. No host/image/network fields to fill in.
385
386
  - **Resource templates** — expand the checkbox for a **Small / Medium / Large / GPU** preset (memory, CPUs, GPU), or set your own. **Disk is elastic** — storage grows as data flows in, no fixed cap.
386
387
  - **Shared per-case container** — many sessions can `docker exec` into the same container; killing one session never tears the container out from under the others.
387
- - **Hardened by default** — non-root, `--cap-drop ALL`, `no-new-privileges`, PID/memory caps, never `--privileged` or the docker socket. Your existing `~/.claude` login is bind-mounted (credentials stay on the host, never captured in exports); a **sealed** profile (no host mounts, network off) is one toggle away.
388
+ - **Hardened by default** — non-root, `--cap-drop ALL`, `no-new-privileges`, PID/memory caps, never `--privileged` or the docker socket; a **sealed** profile (no host credentials, network off) is one toggle away.
389
+ - **Seamless auth, isolated credentials** — your host Claude / Codex / Gemini / OpenCode logins work inside the container out of the box: credentials are seeded (copied) in at launch and onboarding/trust prompts are pre-answered, so no login wizard appears. The container keeps its own copies and never writes back to your host credential stores; only conversation transcripts are shared, and exports never capture secrets.
388
390
  - **Move it to another machine** — export a container's whole environment (toolchain + workspace) to a portable `.tar.gz`, `docker load` it on the other side, and import it into a fresh case.
389
391
  - **Durable** — reconnect after a restart lands back in the same live agent; a container stop/reboot resumes the conversation from the bind-mounted transcript.
390
392
 
391
- Prerequisite: Docker (or Podman) and the base image build it once with `node scripts/build-agent-image.mjs`. Full guide: [`docs/docker-cases.md`](docs/docker-cases.md).
393
+ Prerequisite: just Docker (or Podman). The agent base image builds itself automatically on first use, with progress streamed to the UI (or pre-build it with `node scripts/build-agent-image.mjs`). Full guide: [`docs/docker-cases.md`](docs/docker-cases.md).
392
394
 
393
395
  ---
394
396
 
@@ -555,7 +557,7 @@ These run for **every** request — before auth, even on the default no-password
555
557
 
556
558
  ### Input, files & headers
557
559
 
558
- - **Schema-validated inputs** — every API body is checked with Zod v4 schemas; a `CLAUDE_CODE_*` / `OPENCODE_*` / `CODEX_*` env-prefix allowlist gates which settings each CLI can receive
560
+ - **Schema-validated inputs** — every API body is checked with Zod v4 schemas; a `CLAUDE_CODE_*` / `OPENCODE_*` / `CODEX_*` / `GEMINI_*` / `GOOGLE_*` env-prefix allowlist gates which settings each CLI can receive
559
561
  - **Path containment** — file routes `realpath` before boundary checks (no TOCTOU); `..`, absolute paths, and symlinks resolving outside the working dir are rejected. Caps: 10 MB text preview / 50 MB raw & download; `/api/download` blocklists sensitive paths (`.env`, `*credentials*`, `~/.ssh/`, `.aws/credentials`). SVG/HTML is served `octet-stream` + `nosniff` + attachment so it downloads rather than executes
560
562
  - **Security headers** — `Content-Security-Policy` (`default-src 'self'`, every exception enumerated), `X-Content-Type-Options: nosniff`, `X-Frame-Options: SAMEORIGIN`, HSTS over HTTPS, and CORS reflected **only** for `localhost` / `127.0.0.1` / `::1`
561
563
 
@@ -791,7 +793,7 @@ flowchart TB
791
793
  end
792
794
 
793
795
  subgraph External["External"]
794
- CLI["AI CLI<br/><small>Claude Code / OpenCode / Codex</small>"]
796
+ CLI["AI CLI<br/><small>Claude Code / OpenCode / Codex / Gemini</small>"]
795
797
  BG["Background Agents<br/><small>(Task tool)</small>"]
796
798
  end
797
799
  end