云端身份与记忆:用户画像+分级记忆,不动 thread

- 新增 cloud/identity.py:user_profiles(显示名/时区/偏好,偏好禁密钥键)
  与 identity_memories(user 级仅本人可见、project 级项目成员可见,
  kind fact/preference/decision/convention,supersede 链+物理删除)。
- server 新增 /users/me/profile、/users/me/memories、/projects/{id}/
  identity-memories、/users/me/identity-context,项目记忆先过项目
  read/create_task 门;上下文只显式取用,不自动注入任务/thread。
- PG schema 与迁移清单同步新增两张 TEXT 主键表,序列清单不动;
  server 补 do_PUT 入口(/users/me/profile 首个 PUT 路由)。
- 新测试 11 个;三套件 cloud 937 OK(4 跳过)、host 89 OK、deploy 29 OK。
- 未动:host.py、worker、CODEX_HOME、旧 summaries 表、控制台 UI;
  未推、未建 PR、未部署。
This commit is contained in:
host committed 2026-10-28 03:43:02 +08:00
1 parent 38c0797cb3
commit 6e9d6dc5e8
6 files changed
+949

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
# 系统级身份与记忆(云端层)
本批只做云端层,不动 Codex thread:不改 `host.py`、不改
`CODEX_HOME`、不改任何 thread 的创建/续跑/fork/归档,
也不向任何任务或 thread 自动注入记忆。
## 数据
- `user_profiles`:每用户一行,display_name、timezone、
preferences(JSON)。偏好里禁止含 password/secret/token/
api_key/credential 的键,绝不能拿它当第二个凭证库。
- `identity_memories`:分级记忆,TEXT 主键(不走 IDENTITY
序列,见 `cloud/migrations.py` 对齐说明)。
- `user`:只归属用户一人可见,跨项目;不得带 project_id。
- `project`:归属用户创建、项目成员可见;读/写权限由
server 的项目 `read` / `create_task` 门先卡,store 层
不认项目成员关系。
- `kind`:fact / preference / decision / convention。
- `source_thread_id`:仅作来源标注,不建立 thread 依赖。
- 旧项目记忆 `summaries` 表不动;`identity-context` 返回的
项目摘要上下文是独立字段,不与身份上下文合并。
## 语义
- 修正用 supersede 链:旧行变 `superseded` 并指向新行,
旧内容不再进上下文,但可审计;删除是物理删除,仅用于
用户主动遗忘。
- 上下文只取最新 active 各 5 条,不全量倒历史。
- 他人用户级记忆在 HTTP 层回 404(不是 403),避免用
状态码探出记忆存在。
## 接口
- `GET/PUT /users/me/profile`(本人)
- `GET/POST /users/me/memories`、`POST /users/me/memories/{id}/supersede`、`DELETE /users/me/memories/{id}`(本人)
- `GET/POST /projects/{id}/identity-memories`、`POST /projects/{id}/identity-memories/{id}/supersede`、`DELETE /projects/{id}/identity-memories/{id}`(项目门)
- `GET /users/me/identity-context?project_id=...`:显式取用,
返回 profile、两级记忆、身份上下文、项目摘要上下文四个
独立字段;调用方要把上下文放进新任务时,应自己拼进
新建任务的 prompt 并留痕,本接口不代劳。
## 未做
- 未接 worker:任务创建时不会自动拼身份上下文,thread
行为与升级前一致;自动注入是下一步的显式决策,需另
定注入点(新建 thread 的 developerInstructions 还是首轮
prompt)、去重与成本上限。
- 未做控制台 UI;未做跨引擎记忆(本批记忆与 Codex
thread 无关,换引擎时云端记忆仍可用)。