fix: harden Windows startup and rebuild release

This commit is contained in:
shiyue
2026-07-28 08:01:14 +08:00
parent efe7c02ec3
commit 4d97446a6f
7 changed files with 166 additions and 6 deletions

View File

@@ -0,0 +1,48 @@
# Windows 启动脚本交付审查发现
## 初始状态
- 项目根目录存在 `start.bat`
- 根目录已有另一项已完成任务的计划文件,本次改用独立作用域,避免覆盖。
- 工作区存在一个与本次审查无关的未跟踪 TODO CSV不触碰。
## 入口与初步脚本审查
- `start.bat` 是 20 行 ASCII DOS batch 文件,已使用 `%~dp0` + `cd /d`,因此支持从其他工作目录启动,也支持项目位于不同盘符。
- 脚本只检查 `node`,未独立检查 `npm`;标准 Node.js 安装通常同时提供 npm但定制/损坏环境可能例外。
- 仅在 `node_modules` 整个目录不存在时执行 `npm install`;目录存在但依赖缺失或 lockfile 已更新时不会补装。
- `npm install` 后没有检查失败状态,即使依赖安装失败仍会继续执行 `node server.js`
- `node server.js` 退出后无论成功失败都会 `pause`,但没有明确显示退出码。
- 仓库同时有 `package-lock.json`,面向别人交付时更适合 `npm ci` 做可复现的首次安装(前提是 lockfile 与 package.json 同步)。
- README 中已把 `start.bat` 声明为 Windows 启动入口。
## 运行时与环境兼容性
- `package.json` 的运行依赖只有纯 JavaScript 包 `ws`,没有需要 Windows 本机编译工具链的原生依赖。
- 服务端已有 `process.platform === 'win32'` 分支:停止子进程时使用 `taskkill`,启动 Agent 子进程时禁用 Unix 的 detached 模式,说明核心服务明确考虑了 Windows。
- 检索到的 `/usr/bin/node``bash``ss` 等 Unix 命令位于回归测试脚本或 mock 数据,不在 `start.bat -> node server.js` 的普通启动主链路上。
- README 要求 Node.js >= 18`start.bat` 只检查“能否找到 node”没有检查版本也没有检查 npm这是交给非开发者使用时最明显的前置条件缺口。
- 当前 WSL 环境没有 `cmd.exe`,不能在本机执行真实 Windows CMD 动态测试;后续只能做静态批处理核验和 Node 主链路验证,并明确标注这一限制。
## 关键 Windows 批处理问题
- Windows 的 npm 命令通常由 `npm.cmd` 提供。
- 在一个 `.bat` 中直接执行另一个 `.bat/.cmd` 而不使用 `call`,控制流不会可靠返回原脚本。
- 当前第 15 行是 `npm install`,因此首次运行进入安装分支后,存在依赖装完却不继续执行第 1819 行启动服务的确定性批处理兼容风险;常见表现是用户需要再次双击。
- 交付版至少应改为 `call npm ...`,并在安装后用 `if errorlevel 1` 阻断失败路径。
- 服务对 Claude/Codex 使用直接 `spawn(command, args)`Windows 全局 npm CLI 常见为 `.cmd` shim完整 Agent 功能还应在真实 Windows 上做一次 CLI 拉起验收。这不影响 `node server.js` 自身启动,但属于交付验收边界。
## 验证结果
- `node --check server.js`:通过。
- `node --check lib/agent-runtime.js`:通过。
- `npm ls --depth=0`:通过,当前运行依赖为 `ws@8.19.0`
- 使用隔离的配置、会话、日志目录在 18082 端口启动服务并请求首页HTTP 成功,首页 10143 字节。
- `start.bat` 当前为 ASCII + LF现代 Windows CMD 可解析 LF且 Windows Git 常会按 `core.autocrlf` 转换,因此不是主要阻断项。
## 交付边界
- 收件人需安装 Node.js >= 18`node``npm` 在 PATH 中。
- 需要把完整源码运行目录一起交付,不能只发送 `start.bat`
- 要使用 Agent 功能,还需安装并登录 Claude Code 或 Codex CLI。
- 不应把发送者自己的 `.env``config/auth.json``sessions/``logs/` 一并打包,以免泄露密码和会话数据。

View File

@@ -0,0 +1,11 @@
# Windows 启动脚本交付审查进度
- 2026-07-27启用 `planning-with-files`,建立独立审查计划。
- 2026-07-27确认 `start.bat` 位于项目根目录;尚未修改业务文件。
- 2026-07-27完成 Trellis 会话上下文读取;当前 Trellis 任务与本次审查无关,未切换任务。
- 2026-07-27完成 `start.bat` 初读,已发现依赖安装失败未拦截、依赖目录存在即跳过校验等交付风险。
- 2026-07-27codebase-memory 索引状态为 ready运行主链路具备 Windows 分支Unix 专属命令主要在测试脚本。
- 2026-07-27尝试调用 `cmd.exe` 进行动态验证,当前 WSL 环境未提供该命令,记录为验证限制,不重复尝试。
- 2026-07-27确认首次安装分支缺少 `call npm install` 是 Windows 批处理关键缺陷,当前脚本不宜原样交付。
- 2026-07-27完成 Node 语法、依赖树和隔离 HTTP 启动验证,主服务入口通过。
- 2026-07-27审查完成结论为 Windows 可支持,但 `start.bat` 交付前需要修正。本轮未修改业务源码。

View File

@@ -0,0 +1,29 @@
# Windows 启动脚本交付审查计划
## 目标
判断 `start.bat` 是否能交给其他 Windows 用户直接使用,并核验脚本语法、依赖、路径、首次运行、错误提示和配套文件。
## 阶段
- [x] 阶段一:读取 Trellis 上下文并确认交付入口与配套文件
- [x] 阶段二:审查批处理语法、依赖、路径与首次运行行为
- [x] 阶段三:执行可行的 Windows 兼容性验证与启动链路核对
- [x] 阶段四:形成是否需要修改及交付条件的结论
## 约束
- 当前先做只读审查,不擅自修改业务文件。
- 保留用户已有未提交文件,不覆盖其他会话的计划。
- 不使用已弃用的 graphify。
## 错误记录
- 当前 WSL 环境没有 `cmd.exe`,无法直接执行 Windows CMD 动态测试;改用静态检查与主链路交叉验证。
## 最终结论
- `start.bat` 的路径切换和 Node 启动语法可用于 WindowsNode 服务主入口隔离启动通过。
- 当前脚本不适合原样交给首次使用者,关键原因是调用 `npm.cmd` 时没有使用 `call`,安装结束后可能不继续启动服务。
- 交付前应补齐 `call npm ...`、Node >= 18、npm 检查、安装失败阻断和退出码提示。
- 本轮是审查任务,未修改 `start.bat` 或业务源码。