Files
MailUI4Agents/deploy/zcode.env.example
JianFeeeee 51789ee72e deploy: 标准目录部署 —— 运行时不再依赖源码目录
用户注意到:「当前 agentmail 是在源码目录部署的,应当改为标准目录部署」。
查证后有三处实证(都不是猜测):

1. ★ **失败通知钩子执行的是仓库里的脚本**
   (`/home/program/agentmail/deploy/service-failure-notify.mjs`,8 处引用:
   4 个 drop-in + zcode/zcode-mail-bridge 单元 + agentmail-failure-flush)。
   仓库一挪/一改名,故障通知就**静默失效** —— 而那条管线正是用来报告服务故障的。
2. **opencode-serve 的 cwd 就是源码目录**(`WorkingDirectory=/home/program/agentmail`)。
3. ★ **仓库里的 `deploy/*.service` 是旧的源码目录版本**(ExecStart 指向
   `/home/program/agentmail/plugins/...`),而机器上的已被改过 —— 也就是说
   **谁跑一次 install.sh 就会把部署退回源码目录**。drop-in 更是只存在于 /etc 里,
   仓库完全没有它们。

## 改动

- **唯一真相**:`deploy/systemd/` 镜像 systemd 目录结构,收进全部单元与 drop-in
  (8 个单元 + 12 个 drop-in),路径全部改到 `/opt`。
- 运行时脚本装到 **`/opt/agentmail/bin/service-failure-notify.mjs`**(自包含,
  无相对导入);`install.sh` 与 `redeploy-gateway.sh` 都会幂等地装它。
- opencode 的 cwd 改为 `/opt/agentmail`(与网关一致),已重启生效
  (`/proc/<pid>/cwd` 已核)。
- 删掉 `deploy/*.service` 的旧副本,避免两个真相。
- dsh 的 `cordis.patch.yml` 注释里的安装示例也改到标准位置(运行时用的是环境变量,
  那条注释是唯一残留)。

## 判据(`deploy/check-deploy-drift.mjs` 新增「标准目录部署」四条 + 自检)

① 任何 unit/drop-in 都不得引用源码目录;② 已安装单元与 `deploy/systemd/` 逐字节一致;
③ 通知脚本在标准位置且可执行;④ 各服务的 cwd/ExecStart 不在源码目录
(homeagent/dsh/zcode 是**别的产品**的标准位置,按白名单放行)。
自检两个样本:引用源码目录的必须红、干净样本必须绿(证明不是恒真)。

顺带修掉一处**真漂移**:仓库里 dsh 的 `dist/index.js` 落后于部署件(改了 src 没重建),
重建后 `check-deploy-drift` 报「四个宿主都在跑当前代码」。

## 复核

- `/etc/systemd/system/` 引用仓库:**0** 个文件;`/opt/agentmail` 下只剩旧二进制/备份里
  的构建路径(Go 嵌的源码路径,无害)与一条注释。
- 四个宿主都在跑当前代码;标准目录四项全绿。
- 全部服务 active,opencode/网关 cwd 均已在安装根下。
2026-09-14 08:38:33 +08:00

32 lines
1.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# zcode 邮件驱动deploy/systemd/zcode-mail-bridge.service的 EnvironmentFile。
#
# 与 pi / opencode / dsh 三桥**同一套变量名** —— 同名同义,排障时才不用
# 每换一个平台就重新记一遍。
AGENTMAIL_GATEWAY_URL=http://127.0.0.1:8180
AGENTMAIL_AGENT_NAME=zcode
# 凭据。用注册时的 secretX-Agent-Secret
# 管理员密钥AGENTMAIL_AGENT_KEY登记后可以换成它两者服务端都认。
# 驱动启动时会打印用的是哪一种。
# AGENTMAIL_AGENT_SECRET=<在 /root/gotmp/zcode-agent-secret.txt>
# 驱动与插件MCP 服务器、授权钩子)共用这两个目录,**必须一致**
# 授权表(「一直同意」)与主动发信记录都落在这里,两边解析出不同路径
# 就会出现「刚点过一直同意又问你一遍」「模型自己发过了又被自动转发一遍」。
AGENTMAIL_CONFIG_DIR=/root/.agentmail-zcode
# 没有 to_workspace 时的兜底目录根。每一轮会在它下面按会话 id 建子目录。
AGENTMAIL_WORKSPACE_ROOT=/root/.agentmail-zcode/workspaces
# 一轮的上限。ZCode 要跑模型 + 工具,比另三个桥宽一些。
# 必须**小于** systemd 的 TimeoutStopSec 无关,但与限制同一量级以免长跑占满串行队列。
AGENTMAIL_TURN_TIMEOUT_MS=1200000
# ZCode CLI 入口(纯 CLI不是 Electron GUI 入口)。
AGENTMAIL_ZCODE_CLI=/opt/ZCode/resources/glm/zcode.cjs
# 仓库内进程固定用系统 node/usr/bin/node v22与官方插件硬编码的
# 工具链 node 分开,避免某天工具链升级把驱动带走。
# 注:这里不设 PATH —— 插件清单里 MCP 服务器的 `command: node`
# 由 ZCode 继承本进程的 PATH 解析systemd 默认 PATH 含 /usr/bin。