Skip to content

Latest commit

 

History

42 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ApeMind Computer

多租户 dsh(DeepSeek Harness)托管服务。 一个容器内运行一个 host-agent 和 N 个 dsh 实例(每租户一个,绑定回环端口),对外提供:

  • 公网网关(:8080):短票换会话 cookie,之后按 cookie 把 HTTP/WebSocket 流量反代到 该租户的 dsh;转发前把 Host 重写为回环地址并剥掉 Origin/sec-fetch-*,dsh 的 回环信任门禁天然放行,dsh 本身零改动、零登录。
  • 控制 API(:9090):实例生命周期(ensure/status/delete)与容量健康,仅供内网 控制面调用。完整架构与契约见 docs/architecture.md

控制面(如 ApeMind)与本服务共享签票密钥与控制令牌。默认在控制口自动配对 交换后各自落盘,人不搬运密钥;环境变量预共享保留为兼容模式,见 docs/pairing.md。 租户标识对本服务不透明;票据、会话与控制 API 见 docs/architecture.md 第 5、6 节,跨语言测试向量在 tests/vectors/

目录

host-agent/   Node 服务(TypeScript,零运行时依赖,esbuild 打成单文件)
  src/        gateway / control / supervisor / ticket / config
  test/       node:test 单元与集成测试(内置 fake dsh)
docs/         架构(architecture.md)、生命周期(lifecycle.md)、稳定性(stability.md)、配对与认证(pairing.md)、宿主运营配置(host-settings.md)、ApeMind 能力结合(apemind-integration.md)、LTS(lts.md)
scripts/      运营脚本(密度压测 density.py)
tests/vectors 票据 golden vectors(Python 生成,双端测试共用)
tests/density 密度脚本的前缀与停条件单测
deploy/       Kubernetes Helm chart(独立发布,不绑 ApeMind 主 chart)
Dockerfile    运行镜像(node:22-bookworm-slim + 锁版本 dsh + apemind CLI + host-agent)

开发

cd host-agent
npm install
npm run typecheck
npm test
npm run build        # 产出 dist/host-agent.mjs

本地起一个最小实例(需要全局安装 dsh,或用 COMPUTER_DSH_COMMAND 指向任意兼容命令):

COMPUTER_TICKET_SECRET=dev-secret \
COMPUTER_CONTROL_TOKEN=dev-token \
COMPUTER_PUBLIC_ORIGIN=http://127.0.0.1:8080 \
COMPUTER_DATA_DIR=/tmp/computer-data \
node dist/host-agent.mjs

配置

环境变量 默认值 说明
COMPUTER_TICKET_SECRET 必填 与控制面共享的签票密钥
COMPUTER_CONTROL_TOKEN 必填 控制 API 的 Bearer 令牌
COMPUTER_PUBLIC_ORIGIN 必填 网关对外 Origin,用于跨站校验与 cookie Secure
COMPUTER_MAIN_URL https://apemind.ai 无会话/无实例时跳回的主站
COMPUTER_DATA_DIR /data 租户工作区根目录(持久卷)
COMPUTER_GATEWAY_PORT / COMPUTER_CONTROL_PORT 8080 / 9090 监听端口
COMPUTER_PORT_BASE 31000 dsh 回环端口起点
COMPUTER_DSH_COMMAND dsh {patch} --profile web --no-open --port {port} 实例启动命令模板;{patch} 在存在托管配置时展开为 --patch <文件>
COMPUTER_UID_BASE 0(关闭) 每实例独立 uid 的起始值,开启需容器内 root
COMPUTER_LOOPBACK_ISOLATION 关闭 按 uid 装回环 iptables 规则,防租户串访,需 NET_ADMIN

闲置回收、会话 cookie 寿命、就绪窗口、停进程宽限和实例容量在 /data/settings.json(完整五键),出厂文件见镜像内 /usr/local/share/apemind-computer/settings.json。配对后用 GET/PUT /v1/runtimesettings 热更新。详见 docs/host-settings.md

密度压测

scripts/density.py 打控制面 PUT /v1/instances/{key},按批次拉起真实 dsh。 只接受以 density 开头的前缀,退出默认停掉并删除本次建的键。令牌从 COMPUTER_CONTROL_TOKEN--token-file 读,不进日志。

# 本地(先 port-forward 控制口 :9090)
COMPUTER_CONTROL_TOKEN=dev-token python3 scripts/density.py \
  --url http://127.0.0.1:9090 --count 20 --batch 10

python3 tests/density/test_density.py
python3 scripts/density.py --cleanup-only --url http://127.0.0.1:9090

不要对生产控制面跑。容器内存顶、cgroup 是否降级、闲置回收仍按 docs/stability.md 生效;本脚本不测网关数据面。

镜像

镜像只在 GitHub Actions 构建(推 tag v*.*.* 触发),不在本地构建。dsh 版本在 Dockerfile 的 DSH_VERSION 中锁定;pnpmcorepackPNPM_VERSION 钉死并 放到 PATH(dsh plugin 需要它);官方 IM 插件 @xmanrui/dsh-imDSH_IM_VERSION 预装进 /opt/dsh-seed/.dsh,host-agent 拉起实例时写入租户 web profile; apemind CLI 同样构建时锁版本 + sha256,装到 /usr/local/bin/apemind (运行期零下载)。升级 dsh、pnpm、dsh-im 或 CLI 一律走新镜像 tag 加回归验证。 租户 HOME 与 CLI 身份注入见 docs/lifecycle.md §1。

当前发布 tag 是 v0.2.8。离线机先在联网环境导出镜像再 docker load

docker pull apecloud/apemind-computer:v0.2.8
docker save apecloud/apemind-computer:v0.2.8 -o apemind-computer-v0.2.8.tar
docker load -i apemind-computer-v0.2.8.tar

Compose 样例见 compose.example.yml。ApeMind 离线交付把本组件放在 deploy/components/computer,不进入核心默认安装。LTS 分支与发版规则见 docs/lts.md

Kubernetes

独立 Helm chart 在 deploy/。控制面只需要把 COMPUTER_HOST_URL 指到 chart 打出的 :9090 Service,并使用同一对 ticketSecret / controlToken

helm upgrade --install computer-host ./deploy \
  --namespace apemind \
  --set publicOrigin=https://computer.example.com \
  --set ticketSecret="$COMPUTER_TICKET_SECRET" \
  --set controlToken="$COMPUTER_CONTROL_TOKEN"

从 ApeMind 主 chart 的 computerHost 块迁出时:先给现有 PVC 打上 helm.sh/resource-policy=keep,关掉主 chart 的 computerHost.enabled,再用 values-adopt.example.yaml 里的 fullnameOverrideselectorLabelshelm upgrade --install --take-ownership,保住磁盘和工作区。Deployment 的 selector 不能改,必须和现网一致。

安全边界

  • 网关只信两样东西:共享密钥签出的票据/会话,以及回环上的 dsh。
  • 同容器多租户共享内核;开启 COMPUTER_UID_BASECOMPUTER_LOOPBACK_ISOLATION 后可做到文件互不可读、回环端口互不可达,但恶意租户逃逸风险不为零, 更强隔离需要按租户拆 Pod/microVM。
  • 结构化 JSON 日志不落票据、cookie、API key 与对话内容;dsh 自身输出写到 各租户 ~/.apemind/dsh.log

About

ApeMind Computer: Treadstone sandbox host for long-running DeepSeek Harness agents

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages