fix(mindspace): edit_file 落盘、Finish 聊天 merge 与回归守卫

- finish-sync 支持 edit_file 覆盖 public HTML
- Finish 同步 merge 本地流式消息,剥离 agent 内部前缀
- 新增 verify:mindspace-publish-guards 与 AGENTS.md 跨工具说明
- 发版脚本接入回归门禁;103 runtime 发布含备份回退

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-06-30 00:27:15 +08:00
parent 742aee7148
commit 98721371a4
31 changed files with 1440 additions and 141 deletions
+56
View File
@@ -0,0 +1,56 @@
# Agent 协作说明(Codex / Cloud / Cursor / 其它 AI 工具通用)
本文件供**所有**在仓库内工作的 AI 编码助手阅读,不限于 Cursor。
## 必读:已验证回归守卫(勿轻易覆盖)
下列行为经过长时间调试验证。**删改相关代码前必须先读文档并跑 verify**:
| 主题 | 文档 |
|------|------|
| MindSpace 公开页 `edit_file` 落盘 + 聊天 Finish 不丢消息 | [docs/regression-guards/mindspace-publish-and-chat-finish.md](docs/regression-guards/mindspace-publish-and-chat-finish.md) |
索引:[docs/regression-guards/README.md](docs/regression-guards/README.md)
### 改相关文件前必跑
```bash
# 单测 + 源码静态守卫
npm run verify:mindspace-publish-guards
# 发 Portal runtime 后(含 bundle 检查)
npm run verify:mindspace-publish-guards:full
```
发版脚本(`scripts/release-prod.sh``scripts/release-portal-runtime-prod.sh`)在未 `--skip-tests` 时也会执行上述 verify。
### 受保护的关键路径
- `mindspace-public-finish-sync.mjs``edit_file` 必须 materialize 到 `public/*.html`
- `chat-finish-sync.mjs` — Finish / UpdateConversation **merge**,禁止盲覆盖
- `conversation-display.mjs` + `src/utils/message.ts` — 用户消息不得展示 routing/skill 内部前缀
- `src/hooks/useTKMindChat.ts``syncSessionMessages` merge + 重试
- `server.mjs` — session snapshot 需 `hint_mc` **且** `hint_ua` 才走缓存
代码内搜索 `REGRESSION GUARD` 可定位所有内联说明。
### 相关单测(已接入 `npm test`
- `mindspace-public-finish-sync.test.mjs`
- `chat-finish-sync.test.mjs`
- `conversation-display.test.mjs`
---
## Cursor 专用规则(其它工具请读上文文档)
Cursor 额外加载:`.cursor/rules/mindspace-publish-chat-finish-guards.mdc`
内容与 `docs/regression-guards/mindspace-publish-and-chat-finish.md` 一致,仅为 Cursor 在编辑相关文件时自动提示。
---
## 仓库惯例
- 本地开发:`pnpm dev`(见 [README.md](README.md)
- 生产隔离:[docs/service-isolation-runbook.md](docs/service-isolation-runbook.md)
- 发版须 Git commit,禁止本机直 rsync 到 103/105(见 README