chore: archive AgentDock v1 implementation

This commit is contained in:
leefer
2026-08-24 17:14:08 +08:00
commit f512bd58ec
66 changed files with 10663 additions and 0 deletions
+117
View File
@@ -0,0 +1,117 @@
# AgentDock 网页控制台部署说明
## 访问范围
控制台固定绑定服务器地址 `192.168.200.36`,默认端口为 `8443`
```text
https://192.168.200.36:8443
```
Caddy 同时检查来源 IP,只接受 `192.168.200.0/24`。Compose 不映射
Runner 和 Console 的内部端口,局域网只能接触 HTTPS 代理。
## 准备 `.env`
在服务器执行:
```bash
cd /vol1/1000/docker/ai-toools
cp -n .env.example .env
chmod 600 .env
```
必须设置三个独立的机密值:
```dotenv
ADMIN_PASSWORD=一个至少12位的管理员密码
RUNNER_TOKEN=至少32位随机字符串
CONFIG_ENCRYPTION_KEY=至少32位随机字符串
```
可以用 OpenSSL 生成随机值:
```bash
openssl rand -base64 36
```
不要把三个值写进 `compose.yaml`、Dockerfile 或 Git。`CONFIG_ENCRYPTION_KEY`
丢失后,设置页中保存的 API Key 将无法解密。
## 构建和启动
```bash
cd /vol1/1000/docker/ai-toools
mkdir -p workspace data console-data
chmod +x scripts/generate-console-certificate.sh
./scripts/generate-console-certificate.sh /vol1/1000/docker/ai-toools
docker compose build
docker compose up -d
docker compose ps
docker compose logs --tail=100 ai-tools ai-console ai-proxy
```
健康状态应为 `healthy`。检查内部服务:
```bash
docker compose exec ai-tools curl -fsS http://127.0.0.1:4174/health
docker compose exec ai-console wget -qO- http://127.0.0.1:4173/health
```
## 信任局域网证书
Caddy 使用部署目录中为服务器 IP 生成的自签名证书。把证书复制到 Windows:
```bash
cd /vol1/1000/docker/ai-toools
scp nas:/vol1/1000/docker/ai-toools/proxy/certs/agentdock.crt .
```
复制到 Windows 后,在当前用户的受信任根证书存储中安装:
```powershell
certutil -user -addstore Root .\agentdock.crt
```
只应信任从自己的 `192.168.200.36` 服务器导出的证书。安装后重新打开浏览器,
访问 `https://192.168.200.36:8443`
## 第一次使用
1. 使用 `.env` 中的 `ADMIN_PASSWORD` 登录。
2. 在顶部选择 `/workspace` 下的项目。
3. 在设置页填写需要的 API Key,或点击“打开终端”进入独立授权终端完成设备授权。
4. 回到工作台,选择 CLI 后直接发送消息。
5. DeepSeek Harness 必须先填写任务再发送,使用 `headless` 执行一次后自动退出。
工作台的“会话”页使用非交互 CLI 输出和单一多行输入框。每条消息对应一次任务,
回复按时间连续显示。按 Enter 发送,按 Shift+Enter 换行。初始化授权使用独立的
可交互终端;“原始输出”页只用于查看本次非交互任务的底层输出,不接收键盘输入。
当前 `@deepseek-ai/dsh@0.1.1-rc.2` 没有发布可直接安装的 TUI profile bundle。
CLI 帮助中的 `tui` 只是自定义 profile 示例,不能直接执行。AgentDock 因此只开放
官方内置并适合本控制台的 `headless` profile,不开放 Harness 自带 Web 服务。
DeepSeek Harness 不使用其他 CLI 的网页登录状态,必须在设置页配置
`DEEPSEEK_API_KEY` 才能运行。
API Key 使用 AES-256-GCM 加密后存放于 `console-data/settings.enc.json`,接口只返回
掩码。原有 CLI 自己的登录状态仍保存在 `data` 目录。
## 会话生命周期
- 浏览器关闭:CLI 进程继续运行,重新登录后可继续连接。
- `ai-console` 重启:CLI 进程不受影响,但管理员需要重新登录。
- `ai-tools` 重启:其中的所有 CLI 进程会停止;历史输出仍保留。
- `docker compose down`:所有 CLI 进程停止,`data``console-data` 不删除。
## 安全检查
```bash
# 不应出现 docker.sock
docker inspect ai-tools --format '{{json .Mounts}}' | grep docker.sock
# 主机只应监听 HTTPS 端口,不应监听 4173/4174
ss -lnt | grep -E '(:8443|:4173|:4174)'
```
第一条命令没有输出是正确结果。第二条只应看到 `192.168.200.36:8443`
+161
View File
@@ -0,0 +1,161 @@
# 部署说明
## 1. 部署前提
Ubuntu 主机需要满足:
- Ubuntu 22.04 或 24.04x86_64 或 ARM64
- 已安装 Docker Engine 和 Docker Compose Plugin
- 能访问各 CLI 的官网、npm Registry 和模型接口
- 当前用户有运行 Docker 的权限
- 建议至少 4 核 CPU、8 GB 内存和 15 GB 可用磁盘
这些 CLI 通常调用云端模型,本容器不在本机加载大模型权重,因此一般不需要 GPU。
## 2. 放置部署文件
建议把本目录放到 Ubuntu
```text
/opt/ai-toolbox
```
项目统一放到:
```text
/srv/projects
```
创建项目目录:
```bash
sudo mkdir -p /srv/projects
sudo chown -R "$(id -u):$(id -g)" /srv/projects
```
## 3. 准备配置
```bash
cd /opt/ai-toolbox
cp .env.example .env
chmod +x scripts/ai
id -u
id -g
```
`id -u``id -g` 的结果填写进 `.env`
```dotenv
WORKSPACE_PATH=/srv/projects
AI_HOME_PATH=/opt/ai-toolbox/data
AI_UID=1000
AI_GID=1000
AI_CONTAINER_NAME=ai-tools
TZ=Asia/Shanghai
```
不要把 API Key 写进 Dockerfile。`.env` 也不要提交到 Git。
## 4. 构建并启动
```bash
docker compose build
docker compose up -d
docker compose ps
docker compose exec ai-tools ai-tools-check
```
检查结果中以下命令都应显示 `OK`
```text
codex claude codebuddy kimi opencode qwen dsh cc-switch multica
```
## 5. 首次登录
每个工具需要分别登录一次:
```bash
./scripts/ai codex .
./scripts/ai claude .
./scripts/ai codebuddy .
./scripts/ai kimi .
./scripts/ai opencode .
./scripts/ai qwen .
```
按照终端显示的链接或验证码,在 Windows 浏览器中完成登录。Kimi 进入界面后使用 `/login`
远程服务器上,浏览器自动打开通常不会成功,这是正常的。优先使用工具提供的设备验证码登录;如果某个工具只支持浏览器回调,可以改用它支持的 API Key,或者为回调端口建立 SSH 隧道。
登录信息和会话文件保存在 `.env``AI_HOME_PATH` 目录中,不会因为重新构建镜像而丢失。
## 6. 初始化 CC Switch
打开网页的“设置 -> Provider”,点击“打开 CC Switch TUI”。先为 Claude、Codex 和 OpenCode 导入或创建 Provider,并确认三个 CLI 都有当前 Provider。
也可以在 SSH 中操作:
```bash
ai cc-switch
ai cc-switch --app codex provider list
```
配置完成后,在网页启用“CC Switch 配置接管”。启用后,AgentDock 不再向 Claude、Codex 和 OpenCode 会话注入网页账号页保存的旧 API Key,避免环境变量覆盖 CC Switch 配置。CodeBuddy、Kimi、Qwen 和 DeepSeek 仍由 AgentDock 管理。
## 7. 初始化 Multica Runtime
打开网页的“设置 -> Runtime”,填写现有自托管 Multica 的 Server URL 和 App URL,然后点击“初始化 Runtime”。授权只在独立终端中进行,完成后 Supervisor 会自动启动前台 daemon。
也可以在 SSH 中检查:
```bash
ai multica config show
ai multica daemon status --output json
docker compose logs --tail=100 ai-tools
```
Multica 当前公开支持 Claude、Codex、CodeBuddy、Kimi 和 OpenCode。Qwen 与 DeepSeek 会显示为“已安装,待验证支持”。本部署仅安装 Multica 客户端 Runtime,不包含也不替换用户现有的自托管服务端。
如果网页终端中的 OAuth 回调无法从 Windows 返回容器,可在 NAS SSH 中运行一次临时初始化。将两个示例 URL 替换为实际地址:
```bash
docker run --rm -it \
--network host \
--user 1000:1001 \
-e HOME=/home/ai \
-v /vol1/1000/docker/ai-toools/data:/home/ai \
local/ai-toolbox:0.2.0 \
multica-setup \
--server-url https://multica-api.example.com \
--app-url https://multica.example.com \
--callback-host 192.168.200.36
```
该容器只在授权期间使用宿主机网络,完成后自动退出。正式 Multica daemon 仍由 `ai-tools` 内的 Supervisor 管理,不使用 host 网络。
## 8. DeepSeek Harness
DeepSeek Harness 的命令是 `dsh`,当前属于 developer preview,官方提示未来可能出现不兼容更新。
无界面执行一次任务:
```bash
./scripts/ai dsh my-project --profile headless "检查项目并运行测试"
```
查看当前版本支持的参数:
```bash
docker compose exec ai-tools dsh --help
```
当前 npm 包只提供 `headless``web` profile,没有可安装的原生 TUI。AgentDock 使用 `headless`,每次提交一个任务,完成后进程自动退出。`web` profile 不纳入 Compose,也不额外暴露端口。
## 9. OpenClaw 和 Cursor
- 不修改 Ubuntu 主机现有的 OpenClaw。
- 不占用 OpenClaw 的 Gateway 端口。
- Cursor 桌面版保留在 Windows。
- Cursor 使用 Remote SSH 打开 `/srv/projects/项目名`
- AI 容器通过 `/workspace/项目名` 访问同一批文件。
+72
View File
@@ -0,0 +1,72 @@
# 升级和备份
## 升级 CLI
默认版本是 `latest`。升级时重新构建镜像:
```bash
cd /opt/ai-toolbox
docker compose build --pull --no-cache
docker compose up -d
docker compose exec ai-tools ai-tools-check
```
为了避免上游突然更新造成故障,首次部署成功后建议记录版本:
```bash
docker compose exec ai-tools npm list -g --depth=0
```
然后把 `.env` 中的 `latest` 改成确定的版本号,再重新构建。例如:
```dotenv
CODEX_VERSION=具体版本号
CLAUDE_VERSION=具体版本号
```
DeepSeek Harness 目前是 developer preview,尤其建议锁定版本。
CC Switch 与 Multica 使用固定原生二进制版本和 SHA256 校验。升级时同时修改 Dockerfile 中的版本号和对应架构校验值,不要只修改 `.env` 版本而保留旧校验值。
## 备份账号和会话
所有 CLI 的用户配置位于 `.env``AI_HOME_PATH`。默认示例为:
```text
/opt/ai-toolbox/data
```
这个目录也包含 `~/.cc-switch``~/.multica`、各 CLI 登录信息以及 Multica Runtime 身份,必须整体备份。
创建备份:
```bash
mkdir -p "$HOME/ai-toolbox-backups"
docker run --rm \
-v /opt/ai-toolbox/data:/source:ro \
-v "$HOME/ai-toolbox-backups:/backup" \
ubuntu:24.04 \
tar -C /source -czf /backup/ai-toolbox-home.tar.gz .
```
备份中包含登录凭证,应当像密码一样保护。
网页控制台还需要备份:
```text
/vol1/1000/docker/ai-toools/console-data
/vol1/1000/docker/ai-toools/.env
```
`.env` 内的 `CONFIG_ENCRYPTION_KEY` 必须与 `console-data` 成对保存,否则无法解密
网页中保存的 API Key。备份中还包含管理员密码,也应按密码文件保护。
## 不要执行的命令
停止使用:
```bash
docker compose down
```
`docker compose down` 不会删除 `AI_HOME_PATH` 中的配置。不要手动删除该目录,除非明确要清除全部登录状态和会话。
+124
View File
@@ -0,0 +1,124 @@
# 192.168.200.36 实际部署记录
部署时间:2026-08-23
## 已部署状态
- SSH 主机:`192.168.200.36:22`
- 实际可用账户:`leefer`
- Windows SSH 别名:`nas`
- 部署目录:`/vol1/1000/docker/ai-toools`
- 项目目录:`/vol1/1000/docker/ai-toools/workspace`
- CLI 账号数据:`/vol1/1000/docker/ai-toools/data`
- 容器名称:`ai-tools`
- 镜像:`local/ai-toolbox:latest`
## 网页控制台
- 局域网 URL`https://192.168.200.36:8443`
- 局域网域名:`https://agent.solsum.cn`
- 代理:`ai-proxy`
- 控制服务:`ai-console`
- CLI Runner`ai-tools:4174`,仅 Docker 内部网络可达
- RuntimeRunner 与 Multica daemon 同处 `ai-tools`,共享 `/home/ai``/workspace` 和 CLI PATH
- 控制台数据:`/vol1/1000/docker/ai-toools/console-data`
- 允许来源:`192.168.200.0/24`
- Docker Socket:未挂载
注意:本机 SSH 配置把直接使用 IP `192.168.200.36` 指向了 Gitea 的 `222` 端口。日常系统 SSH 应使用已有别名 `nas`
```powershell
ssh nas
```
`root` 账户没有接受本机现有私钥,因此本次部署使用已验证且属于 Docker 组的 `leefer` 账户。没有修改服务器的 root SSH 设置。
## 已锁定版本
```text
Codex CLI 0.149.0
Claude Code 2.1.241
CodeBuddy Code 2.137.1
Kimi Code CLI 0.38.0
OpenCode 1.18.21
Qwen Code 0.22.0
DeepSeek Harness 0.1.1-rc.2
CC Switch CLI 5.10.2
Multica CLI 0.1.53
Node.js 22.23.2
```
## 第一次登录
从 Windows 进入服务器:
```powershell
ssh nas
```
然后逐个启动并完成登录:
```bash
ai codex .
ai claude .
ai codebuddy .
ai kimi .
ai opencode .
ai qwen .
ai cc-switch
```
Kimi 进入界面后输入 `/login`。网页登录在 Windows 浏览器完成即可。DeepSeek Harness 按实际模型提供方配置使用,不需要作为常驻服务启动。
## 日常调用
在 Ubuntu SSH 终端调用:
```bash
ai codex 项目名
ai claude 项目名
ai kimi 项目名
ai qwen 项目名
ai dsh 项目名 --profile headless "运行测试"
ai multica daemon status --output json
```
这里的 `项目名` 是项目目录相对于 `workspace` 的路径。例如:
```text
/vol1/1000/docker/ai-toools/workspace/my-app
```
对应:
```bash
ai codex my-app
```
从 Windows 直接调用:
```powershell
.\scripts\remote-ai.ps1 -Server nas -Tool codex -Project my-app
.\scripts\remote-ai.ps1 -Server nas -Tool claude -Project my-app
.\scripts\remote-ai.ps1 -Server nas -Tool kimi -Project my-app
```
## 管理命令
```bash
cd /vol1/1000/docker/ai-toools
docker compose ps
docker compose exec ai-tools ai-tools-check
docker compose logs --tail=100 ai-tools
docker compose restart
docker compose down
docker compose up -d
```
`docker compose down` 不会删除登录数据。不要手动删除 `data` 目录。
## Cursor 和 OpenClaw
- Windows Cursor 使用 Remote SSH 的 `nas` 连接,打开 `workspace` 下的项目。
- OpenClaw 没有安装进 `ai-tools`,现有 OpenClaw 配置和端口均未修改。
+17
View File
@@ -0,0 +1,17 @@
# 官方资料来源
以下资料在 2026-08-23 核对。上游安装方式可能继续变化。
- Codex CLI[官方 CLI 文档](https://developers.openai.com/codex/cli/);官方当前提供 Linux 安装方式,并支持 ChatGPT 或 API Key 登录。
- Codex 登录:[官方认证文档](https://learn.chatgpt.com/docs/auth);凭证可能保存在 `~/.codex/auth.json` 或系统凭证存储中。
- Claude Code[官方安装文档](https://code.claude.com/docs/en/setup);支持 Ubuntu 20.04+,官方推荐原生安装,也保留 npm 安装方式。
- Kimi Code CLI[官方入门文档](https://www.kimi.com/code/docs/en/kimi-code-cli/guides/getting-started.html)npm 包为 `@moonshot-ai/kimi-code`,要求 Node.js 22.19.0+。
- DeepSeek Harness[官方仓库](https://github.com/deepseek-ai/deepseek-harness)npm 包为 `@deepseek-ai/dsh`,命令为 `dsh`,当前处于 developer preview。
- DeepSeek Harness CLI[官方 CLI 说明](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md);支持 `web``headless` profile。
- CodeBuddy Code[npm 包](https://www.npmjs.com/package/@tencent-ai/codebuddy-code)
- OpenCode[官方站点](https://opencode.ai/)
- Qwen Code[官方仓库](https://github.com/QwenLM/qwen-code)
- CC Switch CLI[社区 CLI 仓库](https://github.com/SaladDay/cc-switch-cli);本部署锁定 `v5.10.2`,管理 Claude、Codex 和 OpenCode。
- Multica CLI[公开二进制分发仓库](https://github.com/zimplemedia/multica-cli);本部署锁定 `v0.1.53`,仅运行连接现有自托管服务端的客户端 daemon。
本部署选择 npm 统一安装,是为了让所有工具共用同一套 Node.js 运行环境并简化 Docker 镜像维护。对于提供原生安装器的工具,这不代表 npm 是其唯一安装方式。
+101
View File
@@ -0,0 +1,101 @@
# 常见故障
## 1. 命令不存在
```bash
docker compose exec ai-tools ai-tools-check
docker compose build --no-cache
docker compose up -d
```
如果只缺少一个命令,查看构建日志中对应 npm 包的安装错误。
## 2. 项目目录没有权限
在 Ubuntu 主机执行:
```bash
grep -E '^(AI_UID|AI_GID)=' .env
id -u
id -g
sudo chown -R "$(id -u):$(id -g)" /srv/projects
```
`.env` 中的 UID/GID 应与操作项目文件的 Ubuntu 用户一致。修改后重新构建容器。
## 3. 登录完成后重建容器又要求登录
检查持久化目录:
```bash
docker compose config
grep '^AI_HOME_PATH=' .env
ls -ld "$(grep '^AI_HOME_PATH=' .env | cut -d= -f2-)"
```
确认 Compose 仍把 `AI_HOME_PATH` 挂载到了 `/home/ai`,并且目录没有被手动删除。
## 4. Windows 运行脚本后界面显示异常
使用 Windows Terminal,并确保 SSH 分配终端:
```powershell
ssh -tt mobai@192.168.1.100 "docker exec -it ai-tools codex"
```
本部署包的 `remote-ai.ps1` 已经使用 `ssh -tt`
## 5. 登录链接跳回 localhost 后失败
原因是网页在 Windows 打开,但登录回调服务在 Ubuntu 容器里。优先选择设备验证码登录或 API Key。只有在工具明确显示回调端口时,才建立对应的 SSH 端口转发。
不要直接把随机回调端口开放到公网。
## 6. 无法访问模型接口或 npm
在容器内检查 DNS 和 HTTPS
```bash
docker compose exec ai-tools getent hosts registry.npmjs.org
docker compose exec ai-tools curl -I https://registry.npmjs.org/
```
如果 Ubuntu 主机需要代理,应把代理地址配置到 Docker daemon 或 Compose 环境中。代理凭证不要写入会提交的文件。
## 7. DeepSeek Harness 更新后参数变化
它目前是 developer preview。先查看当前帮助:
```bash
docker compose exec ai-tools dsh --help
docker compose exec ai-tools dsh web --help
```
确认工作后,把 `.env``DSH_VERSION``latest` 改为当前版本号并重新构建。
## 8. OpenClaw 受到影响
本 Compose 文件没有安装 OpenClaw、没有映射 OpenClaw 端口,也没有挂载 OpenClaw 配置目录。若现有 OpenClaw 出现问题,应单独检查它原来的服务,不要删除 AI 工具箱的 `data` 目录试图修复。
## 9. CC Switch 切换后没有生效
先检查冲突环境变量和当前 Provider:
```bash
ai cc-switch env check --app codex
ai cc-switch --app codex provider current
```
确认网页“设置 -> Provider”中的“CC Switch 配置接管”已启用,并重新创建 CLI 会话。已经运行中的会话不会自动切换 Provider。
## 10. Multica daemon 离线
```bash
ai multica config show
ai multica daemon status --output json
docker compose logs --tail=150 ai-tools
```
`workspace_id` 未设置,回到网页 Runtime 页面重新初始化。若配置完整但 daemon 未上线,执行 `docker compose restart ai-tools`Supervisor 会重新拉起它。不要在容器内额外运行后台 daemon,否则会与 Supervisor 管理的前台进程重复。
若授权页面最终跳回无法访问的本地回调地址,使用部署文档“初始化 Multica Runtime”中的一次性 host 网络命令。它只负责写入 `/home/ai/.multica`,不会改变正式 Compose 的网络边界。
+113
View File
@@ -0,0 +1,113 @@
# 日常使用
## 使用网页控制台
局域网浏览器访问:
```text
https://192.168.200.36:8443
```
登录后可以选择项目、发送消息、查看文字回复、Git Diff 和历史会话。
关闭浏览器不会停止 CLI;停止 `ai-tools` 容器才会停止其中全部 CLI 进程。
日常任务使用“会话”页的单一多行输入框;Enter 发送,Shift+Enter 换行。首次登录时从“设置 -> CLI 账号”打开独立终端。
“原始输出”只用于故障排查。日常任务使用非交互模式,不会弹出原生确认提示。
DeepSeek Harness 没有空会话,必须先输入完整任务再发送。
Provider 切换在“设置 -> Provider”完成,只影响切换后新启动的 CLI 会话。MCP 与 Skills 的完整编辑仍在 CC Switch TUI 中完成。Multica 的连接、Workspace 和 daemon 状态在“设置 -> Runtime”查看。
网页中的“运行中实例”表示当前真实 CLI 进程数量,不是已安装工具数量。
## 在 Ubuntu 上使用
先登录 Ubuntu
```powershell
ssh nas
```
进入部署目录后调用工具:
```bash
ai codex my-project
ai claude my-project
ai codebuddy my-project
ai kimi my-project
ai opencode my-project
ai qwen my-project
ai cc-switch
ai multica daemon status --output json
```
`my-project` 对应 NAS 的 `/vol1/1000/docker/ai-toools/workspace/my-project``cc-switch``multica` 是管理命令,不接项目参数。
如果不使用辅助脚本,原始命令是:
```bash
docker compose exec --workdir /workspace/my-project ai-tools codex
```
## 从 Windows 一条命令调用
在包含本部署包的 Windows 目录执行:
```powershell
.\scripts\remote-ai.ps1 `
-Server mobai@192.168.1.100 `
-Tool codex `
-Project my-project
```
调用其他工具只需要修改 `-Tool`
```powershell
.\scripts\remote-ai.ps1 -Server mobai@192.168.1.100 -Tool claude -Project my-project
.\scripts\remote-ai.ps1 -Server mobai@192.168.1.100 -Tool kimi -Project my-project
.\scripts\remote-ai.ps1 -Server mobai@192.168.1.100 -Tool qwen -Project my-project
```
传递额外参数:
```powershell
.\scripts\remote-ai.ps1 `
-Server mobai@192.168.1.100 `
-Tool kimi `
-Project my-project `
-ToolArguments @("-p", "解释这个项目")
```
DeepSeek Harness 无界面任务:
```powershell
.\scripts\remote-ai.ps1 `
-Server mobai@192.168.1.100 `
-Tool dsh `
-Project my-project `
-ToolArguments @("--profile", "headless", "运行测试")
```
## 推荐的工作方式
1. Windows Cursor 使用 Remote SSH 打开 Ubuntu 的 `/srv/projects/my-project`
2. Windows Terminal 使用 `remote-ai.ps1` 启动需要的 CLI。
3. Cursor 和容器看到的是同一份 Ubuntu 项目文件。
4. OpenClaw继续按现有方式运行,与本容器互不影响。
## 查看容器状态
```bash
cd /opt/ai-toolbox
docker compose ps
docker compose logs --tail=100 ai-tools
docker compose exec ai-tools ai-tools-check
```
## 停止和启动
```bash
docker compose stop
docker compose start
```
Codex、Claude 等任务 CLI 只在会话期间运行。容器常驻 Runner、Supervisor 和 Multica daemon;停止 `ai-tools` 容器会同时停止 daemon 和全部会话。配置保存在宿主机 `data` 目录,重新启动或重建容器后仍在。