chore: align sqlite control plane architecture
- replace default Convex control-plane wording with Rust SQLite control-plane across architecture, AGENTS, Reasonix, and design docs - retire root Convex functions source and deploy script into recycle while keeping explicit cloud/compat/sync-replica boundaries - add control-plane migration guard/docs and keep CodeGraph refreshed after the SQLite control-plane cutover
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
>
|
||||
> 归档说明(2026-05-21):本文冻结 ACP session 与控制面分享/账号作用域远期合同;当前只作为 future reference,不作为 MVP 后阶段 active implementation checklist。
|
||||
>
|
||||
> 2026-05-22 口径补充:本文标题中的 Convex 是历史控制面语境。当前默认控制面已由 Rust SQLite `control-plane` 承接;ACP/Hermes runtime session、auth、share grants、AI policy 默认不再依赖 Convex。下文涉及 Convex store 的内容只作为历史 / compat / sync replica 对照。
|
||||
>
|
||||
> 本稿目的:
|
||||
> 1. 明确 ACP session 必须绑定当前账号权限与控制面作用域,不能以内存态绕过权限。
|
||||
> 2. 冻结后续“复制会话 / 只读分享 / 多人共同会话”的产品语义,避免当前实现误扩。
|
||||
@@ -26,7 +28,7 @@ ACP 默认主链已经替代旧 Hermes HTTP 主链,但这不意味着 ACP runt
|
||||
|
||||
当前必须成立的规则:
|
||||
|
||||
- **控制面持有产品层 AI session 的账号作用域真相;在当前实现里它可以暂时落在 Convex,但长期不应把“Convex”写死成唯一真相。**
|
||||
- **Rust SQLite control-plane 持有产品层 AI session 的账号作用域真相;Convex 只作为历史 / compat / sync replica 对照,不应被写死成唯一真相。**
|
||||
- **ACP runtime session 只是执行层会话**,可以被控制面 session 绑定或索引,但不能直接作为跨用户共享对象。
|
||||
- **ACP session 记录必须带 `userId / workspaceId / documentId / sessionId / runId / actorId / acpRuntime / profile`**。
|
||||
- **写入控制面 session store 失败时,不允许静默降级为可继续写入的内存 session**。这会破坏账号隔离、审计和后续分享语义。
|
||||
@@ -38,7 +40,7 @@ ACP 默认主链已经替代旧 Hermes HTTP 主链,但这不意味着 ACP runt
|
||||
|
||||
### 1.1 MNote AI Session
|
||||
|
||||
MNote AI Session 是产品层会话对象,长期应该由控制面持有;当前实现可以暂存在 Convex,但目标不是把消息全文和权限真相永久绑死在 Convex。
|
||||
MNote AI Session 是产品层会话对象,长期应该由控制面持有;当前默认控制面是 Rust SQLite control-plane,目标不是把消息全文和权限真相永久绑死在 Convex。
|
||||
|
||||
它回答:
|
||||
|
||||
@@ -77,8 +79,8 @@ Tool Audit 是 mnote 侧工具执行与写入结果的审计记录,必须以
|
||||
|
||||
当前代码可接受的最小边界:
|
||||
|
||||
- `POST /api/hermes/client/sessions` 在 ACP 默认路径下创建 Convex 侧 runtime session 索引。
|
||||
- `POST /api/hermes/client/runs` 创建 run 并持久化到 Convex runtime store。
|
||||
- `POST /api/hermes/client/sessions` 在 ACP 默认路径下创建 SQLite control-plane runtime session 索引;Convex 仅保留显式 legacy compat。
|
||||
- `POST /api/hermes/client/runs` 创建 run 并默认持久化到 SQLite control-plane runtime store。
|
||||
- `GET /api/hermes/client/events/{runId}` 将 ACP event 转成页面 SSE,并追加 runtime event。
|
||||
- `GET /api/hermes/client/gateway/health` 在 ACP 默认路径下返回 `transport=acp`,不再探测旧 Hermes HTTP gateway。
|
||||
|
||||
@@ -209,7 +211,7 @@ Runtime event 和 tool event 应保留原始结构,但查询时必须做权限
|
||||
|
||||
规则:
|
||||
|
||||
- 创建 session 时使用当前 Convex Auth 解析出的真实 user id。
|
||||
- 创建 session 时使用当前 SQLite control-plane auth/session 解析出的真实 user / actor id。
|
||||
- `userId` 只可作为服务端派生字段,不可由浏览器任意指定。
|
||||
- run / event / tool audit 都必须与同一 actor 绑定。
|
||||
- 当前请求无法解析用户时,应返回 `401` 或稳定错误,而不是创建匿名共享 session。
|
||||
@@ -410,7 +412,7 @@ DELETE /api/hermes/client/sessions/{sessionId}/members/{userId}
|
||||
状态:当前主线。
|
||||
|
||||
- ACP 默认主链可用。
|
||||
- session/run/event 必须账号作用域写入 Convex。
|
||||
- session/run/event 必须账号作用域写入 Rust SQLite control-plane;Convex 只作为显式 compat / sync replica。
|
||||
- 旧 Hermes HTTP 主链进入 `recycle`。
|
||||
- 不实现复制、分享、多人会话。
|
||||
- 文档与测试明确禁止内存降级绕过权限。
|
||||
@@ -421,7 +423,7 @@ DELETE /api/hermes/client/sessions/{sessionId}/members/{userId}
|
||||
|
||||
- 增加 `ai_sessions` / `ai_session_members` / `ai_runtime_bindings`。
|
||||
- 将现有 `acp_runtime_runs` 从“运行态索引”升级为 session 下的 run 记录。
|
||||
- UI 从 localStorage 历史逐步迁到 Convex session 列表。
|
||||
- UI 从 localStorage 历史逐步迁到 Rust control-plane session 列表。
|
||||
|
||||
### Phase C:复制与只读分享
|
||||
|
||||
|
||||
Reference in New Issue
Block a user