feat(v0.1): add per-session RWO PVC foundation for true session state persistence

PR A for #770: docs + migration 007 + RBAC + types foundation.

- 新增 failureKind session-store-evicted,用于区分 PVC 缺失与真协议错误
- 新增 migration 007_v01_session_state_storage:sessions 表增加 storage_* 列 + 索引
- mgr SA RBAC 增量:persistentvolumeclaims: [create, get, list, watch, delete]
- 6 份 SPEC 升级(runtime-assembly / hwlab-manual-dispatch / backend-codex T7b / agentrun-runner / agentrun-mgr / services)
- 显式禁止:fake app-server mock、replacement threadId、runner 启动后 copy/restore、idleTimeoutMs 拉永驻
- selftest 断言更新到 007_v01_session_state_storage

后续 PR B/C 在此基础上接入 mgr 端 PVC 生命周期 + runner 端 mount + backend 端 observability。
This commit is contained in:
Codex
2026-06-03 18:45:13 +08:00
parent cb93992b1c
commit 87beb00bdb
10 changed files with 153 additions and 1 deletions
+22
View File
@@ -71,6 +71,28 @@ PATCH /api/v1/commands/:commandId/status
所有 API 成功和失败响应都必须是 JSON。失败响应至少包含 `failureKind``message` 和 trace correlation;不得出现空 stdout/空 response 被误判为成功的情况。
### v0.1.1 Session state 存储 API
`P1 SessionRef 持久化` 升级到「per-session RWO PVC 直接挂载」后,manager 必须提供下列受控 API 来管理 session 的 PVC 生命周期:
```http
POST /api/v1/sessions # session + PVC
GET /api/v1/sessions/:id/storage # PVC
DELETE /api/v1/sessions/:id/storage # PVC + storage_kind=evicted
POST /api/v1/sessions/:id/storage/refresh # runner PVC
```
边界:
- `POST /api/v1/sessions` 同步创建 `agentrun-v01-session-<sessionId>` PVC1Gi RWOStorageClass 走 `AGENTRUN_SESSION_STORAGE_CLASS`),再返回 session record。
- `GET /api/v1/sessions/:id/storage` 只返回 `pvcName` / `pvcPhase` / `storage_size_bytes` / `storage_files_count` / `storage_sha256` / `storage_updated_at` 摘要。
- `DELETE /api/v1/sessions/:id/storage` 删 PVC 并回写 `storage_kind='evicted'``storage_evicted_at`
- `POST /api/v1/sessions/:id/storage/refresh` 写回 runner 报告的 PVC 摘要,写到 `agentrun_sessions` 表的 `storage_*` 列。
- GC 循环(默认 5min,可调 `AGENTRUN_SESSION_GC_INTERVAL_MS`)扫到 `expires_at` 过 + 无 active run 的 session 删 PVC。
- run 渲染前 `get pvc`:不存在且 `storage_kind='pvc'` 时短路返回 `session-store-evicted`,不创建 runner Job。
- mgr SA 必须有 `persistentvolumeclaims: [create, get, list, watch, delete]` 权限(RBAC 由 deploy 模板提供)。
- failureKind 矩阵新增 `session-store-evicted`,仅当 `AGENTRUN_SESSION_PVC_NAME` 已设 + codex 报 `no rollout found for thread id` 时使用;其他 `thread/resume` 失败按 T7 走 `thread-resume-failed`
## HWLAB v0.2 基线承接
Manager 只承接 HWLAB v0.2 Code Agent 的通用执行事实,不承接 HWLAB 的用户鉴权、device-pod 授权或 Workbench schema。HWLAB 侧能力吸收总表见 [spec-v01-hwlab-manual-dispatch.md](spec-v01-hwlab-manual-dispatch.md)。本服务需要把以下能力固化为 AgentRun 自身合同: