Files
Cyrene_v2/AGENTS.md
T
Aska 1a6ea45b9e
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled
docs: 强化改动前后推仓库纪律(用户红线,留恢复误操作余地)——每个模块/功能改动前后都 push,绝不攒到阶段末
2026-09-07 05:15:54 +08:00

72 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Cyrene v2 开发铁律(AGENTS.md)
> 本文件是**项目级开发铁律**,由运行环境在**每次工作会话时自动注入**。即使发生上下文压缩/丢失,以下约束仍会强制生效。**必须遵守**,违反即偏离。
## 1. 先读设计,再写代码
- 动任何代码**前**:先读 `DevDocs/开发时间线.md`(当前里程碑 + §3 功能状态清单),确定这一步属于哪个里程碑/功能。
- 具体功能实现:先读对应 `DevDocs/design/*.md`,**按其规格实现,不得自行发挥**(design/01~13 是权威设计)。
## 2. 按里程碑推进,不跳步、不漂移
- 严格按 **M0 → M12** 顺序。每个功能的依赖与归属见时间线 §2/§3。
- 不得「想到什么做什么」。**新需求/新想法:先写入设计或时间线清单,再开发**,不脱离清单。
- 上下文压缩后:**先读 `DevDocs/工作小结.md`** 恢复锚点,再继续,**不得凭印象跳走**。
## 3. 每阶段审查并勾选
- 阶段完成:后端 `go build ./...` + `go vet ./...` + `go test ./...` 全绿;前端 `tsc --noEmit` + `vite build` 通过。
- 在 `DevDocs/开发时间线.md` §3 勾选状态:`✅ 已完成` / `⚠️ 未完成/阻塞`(⚠️ 必须记录原因与延后里程碑)。
- 与 `DevDocs/design/*` 比对:不一致时以设计为准——先改设计文档或修正代码,**不允许带着偏离堆叠**。
## 4. 改动前确认归属
- 修改任一文件/功能前,明确它在哪个里程碑、对应哪份 design 文档;改完同步该文档(若设计变了)。
## 5. 实时同步工作小结
- 每完成一步,更新 `DevDocs/工作小结.md`:当前里程碑 / 进度 / 已完成+未完成 / 关键决策 / 变更日志。
## 6. 小步提交 + 频繁验证
- 小粒度 commit;每步 build/test 通过再提交;提交信息按 Git 规范(feat/fix/refactor/docs/chore,scope 用模块名)。
## 7. 不信任记忆,信任清单
- 关键决策、架构铁律、用户红线(如身份识别靠元数据、不靠提示词)都记录在 `DevDocs/工作小结.md` 的「关键决策」区;压缩后回读,不得丢失。
## 8. 上下文保护:可并行项交给后台子代理,主会话当监工
- **相互独立、不依赖主会话开放状态**的开发任务(如 M0 地基各件、层 1 并行件),用 `Agent(run_in_background=true)` 派后台子代理**并行实现**。
- 主会话**只当监工**:等子代理回报 → 验收(`go build/vet/test`)→ 更新 `工作小结.md` + 时间线 → 小步 commit → 派下一批。**不在主会话里重复子代理已做的搜索/实现**。
- 子代理 prompt 必须**自包含**:写清目标、已知信息、精确文件路径、必须遵守的编码约束(02-development-constraints.md)、验收命令;不要让它去搜已经知道的东西。
- **只有真正独立才并行**;有依赖的串行。避免两个子代理同时改 `go.mod/go.sum`——若都要改,指定其中一个负责或先把依赖拉好。
- 目的:防主会话上下文超限触发压缩;压缩后靠本文件 + `工作小结.md` 恢复锚点,继续当监工。
## 9. 全球红线(跨里程碑,必须遵守;违反即架构偏离)
- **单二进制、单端口 `:8080`、零跨进程 IPC**:模块间同步走**进程内接口 + 依赖注入**(直接方法调用),异步走**进程内 `bus`**;**不另开监听端口、不 HTTP 互调**。
- **身份识别靠 channel 层强类型 `actor` 元数据 + 策略引擎**,**绝不靠提示词/LLM 判断**(主人/群聊/陌生人判定与权限永远由 actor 元数据 + 白名单 + policy engine 决定)。
- **人格 = 身份**(**不限制能力**);**行为模式 = 呈现**(≠边界,可热切换、不构成能力边界);**能力全局全能**;**前端(Web)是第一公民**。
- **IM 是镜像**:只 chat 文本,Web 不回流 IM;输出一律 chat 文本。
- **前端(用户端 + 管理面板)统一 Miuix 设计语言**(小米 HyperOS Miuix / Miuix Console),实现须对齐六大核心(Smooth Corner/多层 Surface/弹簧动效/深色优先/毛玻璃/Liquid Glass),不混用其他 UI 语言。
- **存储**:SQLite 默认 + PG/pgvector **可选增强**;**配置了增强必须真实走语义/向量路径**(非空壳)。
- **工具循环上限 8 轮**;任务:后台声明 / 前台 2s 转后台 / 消息队列回输出。
- **记忆三类作用域隔离**:用户习惯(全局共享)/ 角色日常(他角色只读)/ 项目(人人读写 + 项目索引分层);**群聊 / 陌生人:查记忆只读不写、不入主会话上下文、不泄露主人敏感信息**。
- **敏感操作主代理代审 + 审计日志 + 前端小字**(「xxx 想要干什么,我审查后批准了」)。
- **模型**:per-role 路由 + 接口报错自动降级(主→备→本地);多模态/流式。
## 9.5 学习成熟开源实现,禁止闭门造车(⚠️ 用户强制红线)
- **已成熟的能力/模块,必须优先学习并复用现有开源项目的业务逻辑与交互范式**,**严禁闭门造车/按设计文档凭空推演**。对照基准(按 design 主题):
- **agent 工具循环 / 工具分发** → Claude Code、OpenClaw、Cursor(工具 schema、循环上限、权限门、流式输出)
- **子代理编排 / 隔离上下文 / 审计代审** → Claude Code 的 subagent、OpenAI Swarm、CrewAI
- **MCP** → **官方 Model Context Protocol SDK**(Go/Python/TS 客户端接入、工具自动发现)
- **WS 实时协议 / 流式 token** → OpenAI/Anthropic 官方 SDK 的流式惯例、Claude Code 的实时事件
- **checkpoint 恢复 / 长任务持久化** → Claude Code 的 resume / Cursor 的会话恢复
- **跨平台渠道接入(QQ/微信/Telegram)** → OneBot v11、Telegram Bot API、微信 iLink 既有客户端
- **管理面板 / 前端交互** → Miuix Console(本项目设计基准)、以及成熟 admin 面板范式
- **实现前**:先在该主题的 design 文档下**补一行「开源对照」**——列出参考项目 + 借鉴点(模板:`## 开源对照(实现前必读)`)。实现时逐点对齐其成熟逻辑。
- 若某个能力**已有成熟开源实现**而项目选择了自研,必须**写明理由**(如协议差异、单二进制约束),不得默认自研。
- 上下文压缩后:**本铁律强制生效**;每个模块补全前**先查 `DevDocs/开源对照清单.md`**(集中记录各主题的参考项目与已完成对照),未对照不得开工。
## 10. 代码与流程硬性规范(压缩后仍需遵守)
- 🔴 **文件 ≤500 行、函数 ≤80 行**;**模块按职责拆成多个源文件,严禁把整个模块塞进一个超大文件**;**三次复制必须抽取**共享。
- 🔴 禁 `interface{}`(用 `any`)、禁包级全局变量(除 `var ErrXxx`)、禁裸 `return err`、禁魔法数字;错误一律 `%w` wrap;SQL 全参数化、表名单数、主键 `id`、时间戳 `created_at/updated_at`、索引 `idx_{table}_{col}`;敏感信息打日志。
- 🔴 **日志必须标来源**:模块/子功能用 `internal/logger.WithSource`/`Scoped`(`source=module/subfeature`)标注,跨模块可追溯定位;**禁止无来源裸日志**。
- 🔴 **客户端 API 契约先行**:REST `/api/v1` + WS `/ws` + admin `/api/v1/admin/*` 统一**版本化契约**,供跨平台客户端(Web/移动/IM bridge)接入与治理;JSON 响应 `{data}` / `{error:{code,message}}`。
- 🔴 **用户侧 API 文档随实现更新**:每实现/变更一个 REST 端点、WS 事件、admin API,**立即同步更新 `Docs/api-client.md`**(用户侧跨平台客户端 API 文档),供后期原生客户端开发;契约变更版本化。
- 🔴 **每次模块/功能改动「前」与「后」都推仓库**(用户红线,留恢复误操作余地):改动前若工作树有未推改动,先 `git push origin dev` 存一个干净基线;改动完成验收通过后,立即 `git commit` + `git push origin dev` 存档。**绝不攒一堆改动到阶段末一次性推**——坏操作可随时 `git reset`/`rebase` 到任一推过的 commit 回滚。每个模块/功能提交(或里程碑归档)后均 `git push origin dev` 同步远端。
- 🔴 **遇到开发文档冲突 / 意义不明 / 规格矛盾时**:**阻塞会话**,用 `AskUserQuestion` 询问主人,**不得自行猜测**;文档清、不冲突则自主推进。
- 🔴 阶段验证:后端 `go build ./...` + `go vet ./...` + `go test ./...` 全绿 + windows/darwin 交叉编译;前端(M9+)`tsc --noEmit` + `vite build` 通过。