背景
README 和两周计划描述了本地 Web UI / Fastify adapter,但仓库目前没有 src/server/main.ts,npm start 指向不存在的构建产物。后续 UI 需要一个薄、可测试且不绕过 Orchestrator 所有权的 REST 接口。
目标
提供本地单用户 Fastify API,用现有 Orchestrator 作为唯一业务入口,支持健康检查、创建运行、列出/查看运行、导出归档;长运行以异步 job 方式启动,不阻塞 HTTP 连接。
范围
- 仅新增/修改
src/server/**、tests/server-*.test.ts;如脚本与真实入口不一致,可最小修改 package.json,但不得新增依赖(Fastify 已存在)。不改 Orchestrator、RunStore、CLI、input 或 benchmark 文件。
- 导出可注入的
buildServer(),测试不得真实监听端口;src/server/main.ts 仅负责配置和启动。
- API 至少包括:
GET /health、GET /api/runs、GET /api/runs/:id、POST /api/runs、GET /api/runs/:id/archive。
POST /api/runs 严格校验 package path、runtime/execution 枚举和可选 provider/model/thinking;默认本地 fake/local;立即返回 202 与 job id,后台执行,并可查询 job 状态。
- 不返回原始 stack、凭据或任意宿主文件;错误 envelope 稳定且状态码正确;archive 仅允许已完成 run 的已验证 project.zip。
- 默认监听
127.0.0.1,不提供认证前不得绑定 0.0.0.0;CORS 默认关闭。
- 优雅关闭 server 和 Orchestrator/SQLite 资源;如 Orchestrator 缺少公开 close,只能在 server adapter 内使用明确生命周期边界,不得修改核心模块。
TDD / 验收
先写 Fastify inject Red tests,覆盖健康、schema 拒绝、404、202 job、失败 job、列表/详情、archive gating、无 stack 泄漏。实现后:
npm run check
npm run build
并启动编译后的 server,curl /health 后优雅关闭。不得在测试中调用真实 Pi、Docker 或网络。
非目标
- React UI、SSE/WebSocket、认证、多用户、远程部署;
- 修改 Orchestrator、输入提取或 Benchmark harness。
背景
README 和两周计划描述了本地 Web UI / Fastify adapter,但仓库目前没有
src/server/main.ts,npm start指向不存在的构建产物。后续 UI 需要一个薄、可测试且不绕过 Orchestrator 所有权的 REST 接口。目标
提供本地单用户 Fastify API,用现有
Orchestrator作为唯一业务入口,支持健康检查、创建运行、列出/查看运行、导出归档;长运行以异步 job 方式启动,不阻塞 HTTP 连接。范围
src/server/**、tests/server-*.test.ts;如脚本与真实入口不一致,可最小修改package.json,但不得新增依赖(Fastify 已存在)。不改 Orchestrator、RunStore、CLI、input 或 benchmark 文件。buildServer(),测试不得真实监听端口;src/server/main.ts仅负责配置和启动。GET /health、GET /api/runs、GET /api/runs/:id、POST /api/runs、GET /api/runs/:id/archive。POST /api/runs严格校验 package path、runtime/execution 枚举和可选 provider/model/thinking;默认本地 fake/local;立即返回202与 job id,后台执行,并可查询 job 状态。127.0.0.1,不提供认证前不得绑定0.0.0.0;CORS 默认关闭。TDD / 验收
先写 Fastify inject Red tests,覆盖健康、schema 拒绝、404、202 job、失败 job、列表/详情、archive gating、无 stack 泄漏。实现后:
并启动编译后的 server,curl
/health后优雅关闭。不得在测试中调用真实 Pi、Docker 或网络。非目标