ProjectForge v0.2.0
v0.2.0 把"约束式执行"从口号变成现实:executor 可插拔、cancel 真正生效、确定性验证真实执行、base-dir 单一贯通。
主要变化
executor 可插拔(MS1)
CodingAgentAdapter泛化为CliAgentAdapter模板基类(重试/超时映射/git checkpoint/scope 判定可复用),sandbox 变为可注入的SandboxPolicyProjectService(executor_factory=...);CLI/API 新增--executor {hermes,mock}- 新增离线 MockExecutor:真实走 orchestrator + validator,无需 Hermes/bwrap/网络即可跑通全链路(demo 与 CI 的关键解锁)
base-dir 单一贯通(MS2,
--base-dir现在是唯一运行时根:projects/、runs/、workspaces/三分;workspace 独立为--run-dir(默认<base>/workspaces/<project>)- 修复 replan/resume 路径忽略
--base-dir的缺陷;v0.1.x 自定义布局不自动迁移,默认.runtime布局不变
cancel 真正生效(MS3)
- 持久化
cancel_requested(跨覆盖粘滞),orchestrator 在任务间检查取消并置BLOCKED/CANCELLED - run 执行移出全局锁;run 身份统一(orchestrator 复用 run_control 的 run_id);终态不再被覆盖
确定性验证真实执行 + 验收标准语义修复(MS4)
- 任务可声明
test_paths/test_command,validator 真实执行声明的测试命令 - 声明的测试套件通过时,人工验收标准降级为
manual_review_items,任务可达 DONE;无 test_scope 保持保守 BLOCKED;套件失败 = 硬 FAIL - scope 检查支持 workspace 相对路径与绝对 allowed_paths 的解析比对
- 此前生产路径的任务因验收标准恒
NEEDS_REVIEW永远无法完成——已修复
验证证据
| 层 | 结果 |
|---|---|
| GitHub Actions CI(3.10/3.11/3.12) | 通过 |
| 本地全量多轮 | 325 passed / 19 skipped,零 flake |
| 真实执行环境(Hermes + bwrap sandbox,19 个真实 LLM 用例) | 344 passed / 0 skipped |
离线一键体验:python scripts/demo.py(生命周期 → 执行 → 注入失败 → 人工审批 replan → resume → COMPLETED),见 docs/demo.md。
PyPI
元数据已就绪(sdist + wheel 构建通过)。发布由 tag/release 触发的 workflow 完成,需要在仓库 Secrets 配置 PYPI_API_KEY。
已知限制
- 沙箱与宿主共享网络(真隔离需 slirp4netns)
- git checkpoint 在非 git workspace 下为空,validator 尚未消费 checkpoint
- hermes 执行超时最坏 900s × 3 次