Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .codex/skills/personal-assistant-go-backend/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ description: 用于 personal_assistant 仓库的 Go 后端开发、重构、代

先阅读 `references/project-rules.md` 作为权威规则,再按下方流程选择执行路径。

任何执行型任务在进入实现流程前,先按项目根目录 `plan/README.md` 生成 `plan/<module>/pending-<task>.md`,待用户明确确认后再执行。

做权限相关重构时,先检查是否越过 `AuthorizationService` 或直接触碰 `Enforcer`;若有,优先收口,再继续功能改动。

## 工作流决策树
Expand All @@ -24,6 +26,45 @@ description: 用于 personal_assistant 仓库的 Go 后端开发、重构、代
4. 用户要求新增或改造独立基础设施能力(如 Trace/Metric/Audit/限流适配/消息客户端):
- 按“独立基础设施实现流程”执行(Config 到 Init,再到接入层)。

## AI 子域渐进式 DDD 工作流

当任务落在 AI 子域时,默认按“`MVC 主体 + AI 子域渐进式 DDD`”理解当前项目,而不是假设仓库已经完成全量 DDD 改造。

### 第 1 步:先判断当前改动属于哪一层

- HTTP 参数、SSE 入口、路由挂载:
- 继续放在 `internal/controller/system`、`internal/router/system`
- AI 用例编排、上下文组装、tool 注册与授权收口、sink/projector 协调:
- 放在 `internal/service/system`
- 稳定协议、事件、tool/runtime 抽象、领域语义:
- 放在 `internal/domain/ai`
- Eino / Local runtime、第三方模型 SDK、tool adapter、checkpoint / approval 等技术实现:
- 放在 `internal/infrastructure/ai`
- AI 持久化访问:
- 继续放在 `internal/repository/interfaces` 与 `internal/repository/system`

### 第 2 步:保持 MVC 外壳,不做过度改名

- 不要为了“更像 DDD”把现有 `controller/router/service/repository` 全部改名成 interfaces/application/infrastructure。
- 当前仓库的推荐方向是:
- MVC 外壳继续保留
- AI 子域只在必要处补 `domain/ai` 与 `infrastructure/ai`
- 如果用户没有明确要求做全量目录迁移,默认做局部拆分,而不是扩大改造范围。

### 第 3 步:AI 子域评审重点

- 是否把协议和具体实现耦合在一起。
- 是否让 `service/system` 直接依赖 Eino/Gin/GORM/Redis 等底层实现细节。
- 是否把 runtime、tool、trace、prompt 拼装、恢复控制全部堆进单个 service 文件。
- 是否把 AI 子域的局部 DDD 演进误做成项目整体全量 DDD 重构。

### AI 子域禁止模式

- 在 `domain/ai` 直接依赖 HTTP、GORM、Eino、Redis。
- 把 `tool/runtime/event/trace` 的稳定协议继续散落在 `service/system` 多个文件中而不收口抽象。
- 因为某次 AI 重构就改写全仓目录口径,导致 MVC 主体被迫跟着迁移。
- 对外宣称“项目已经是完整 DDD 架构”,而实际只完成 AI 子域局部拆分。

## 标准实现流程

### 第 1 步:DTO
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,63 @@
- `role-menu / role-api / role-capability / menu-api` 变更统一写 DB + outbox,不允许在业务 Service 内直接全量刷新 Casbin。
- `user-org-role / 成员状态` 变更允许同步收口当前主体投影,但仍必须补发异步修复事件。

## 14. AI 子域渐进式 DDD 规则

- 当前项目的正式口径是 `MVC 主体 + AI 子域渐进式 DDD`。
- 这表示:
- 项目整体仍以传统 MVC 目录和职责划分为主。
- AI 子域在复杂度上升后,允许渐进式补 `internal/domain/ai` 与 `internal/infrastructure/ai`。
- 默认目标不是全量 DDD 重构,也不是项目整体目录全面改名。
- AI 子域目录职责:
- `internal/controller/system`、`internal/router/system`
- 继续作为 AI HTTP / SSE 入口层。
- `internal/service/system`
- 继续作为 AI 应用编排层,负责会话流程、上下文组装、tool 注册与授权收口、sink/projector 协调。
- `internal/domain/ai`
- 放稳定协议、事件、tool/runtime 抽象、领域语义。
- 禁止依赖 Gin、GORM、Eino、Redis、第三方模型 SDK。
- `internal/infrastructure/ai`
- 放 Eino / Local runtime、模型 SDK、tool adapter、checkpoint / approval / runtime control 等技术实现。
- `internal/repository/*`
- 继续负责 AI 持久化访问,不因为 AI 子域拆分而绕开 Repository。
- AI 任务落点判断:
- 协议与抽象:优先落 `domain/ai`
- 应用编排:优先落 `service/system`
- 基础设施适配:优先落 `infrastructure/ai`
- 持久化:优先落 `repository/*`
- 禁止模式:
- 把 AI 子域演进误表述为“已经完成全量 DDD 重构”。
- 把 runtime、tool、trace、prompt 拼装、恢复控制等复杂度继续无边界堆进单个 `service` 文件。
- 在 `domain/ai` 中直接依赖 HTTP、数据库或具体 Agent 框架。
- 因 AI 子域局部改造而强行推动整个项目做无必要的目录迁移。
- 阶段演进说明:
- A2UI、interrupt、approval、runtimecontrol 等能力允许按阶段收缩、停用或重建。
- 无论具体功能阶段如何变化,AI 子域的依赖方向和目录边界必须保持稳定。

## 计划落盘规则

- 只要任务属于新增、重构、修复、联调、排障、迁移、删除、配置调整这类执行型工作,先写计划,不直接改代码。
- 计划文件固定写到 `plan/<module>/pending-<task>.md`。
- 结构名固定使用英文:根目录为 `plan/`,跨模块目录为 `plan/cross-module/`,状态前缀为 `pending-` 和 `approved-`。
- `<module>` 和 `<task>` 按语义决定中英文:稳定技术名词优先英文,如 `auth`、`permission`;更自然的业务表达可保留中文,如 `组织`、`菜单权限收口`。
- 纯问答、纯解释、纯代码审查、纯只读排查,不强制生成计划文件。
- 计划目录规则以项目根目录 `plan/README.md` 为准。

## 计划命名规则

- 文件名格式固定为 `pending-<task>.md` 或 `approved-<task>.md`。
- `<task>` 必须直接体现本次执行目标,可用英文技术短语,也可用中文业务短语,但都不能空泛。
- 合格示例:`pending-login-auth-refactor.md`、`pending-菜单权限收口.md`、`pending-组织权限联调.md`。
- 后续若用户直接说“先出计划”,默认先写入对应模块目录下的 `pending-<task>.md`,无需额外指定路径。

## 审查后执行规则

- 生成待审计划后,只允许查代码、读文档、跑非修改型检查;未获明确确认前,不允许实施改动。
- 用户明确确认后,先将计划文件改名为 `approved-<task>.md`,再按计划执行。
- 执行前需要在对话中回报计划路径和摘要,供用户审查。
- 若执行中发现范围明显变化,禁止静默扩项,必须重新生成新的 `pending-<task>.md` 给用户复审。
- 涉及路由、服务、配置、权限或跨模块联调的执行任务,同样必须先经过待审计划流程。

## 提问引用规范

在实现或评审过程中需要向用户澄清时,追加一行:
Expand Down
Loading
Loading