叠加于根
../CLAUDE.md。开发前先读「生态边界」「🚫 红线」。 分层落点、错误映射、鉴权、编码约定的权威细则见 skillcore-dev(后端backend.md/ 前端frontend.md/ 转发·调度·计费forwarding.md/ 任务task.md/ 插件契约plugin-contract.md)——本文件只保留边界与红线,不复制细则。
全生态职责速查表见根 ../CLAUDE.md「生态边界」,本节为 core 视角。
Core 负责:身份/用户、账号、API Key、分组与路由、账号调度、转发管线(鉴权/限流/failover)、计费、任务/资产、模型目录、插件生命周期、后台 UI 框架。
Core 不负责(出现即越界):
| 不写什么 | 归谁 | core 的正确做法 |
|---|---|---|
| 外部协议格式(OpenAI/Anthropic 的请求/响应/SSE/错误体形态) | Gateway 插件 | 转发层只认 ForwardOutcome;对外错误格式按插件 Metadata["error_format"] 声明选择格式化器,未声明回退 OpenAI 兼容默认 |
| 上游认证(OAuth/token/session/TLS 指纹) | Provider(现混于网关插件) | 凭证只加密存取、不解释;刷新经 ForwardOutcome.UpdatedCredentials 回写 |
| 插件产品页面 | UI 插件 | core 仅提供挂载点(FrontendWidgets slot / FrontendPages)与资产服务 |
边界纪律(新增/改动代码必须遵守):
- 禁止新增 provider/模型字符串特判。协议/平台差异一律经插件 Metadata 约定键声明,Core 只留与厂商无关的默认兜底。约定键登记于 skill
core-dev的 Metadata 约定表;现存硬编码越界(scheduling_model.go的 claude/openai 翻译映射、selector.go/billing/image_pricing.go/asset_cleanup.go的图像 provider 假定)已逐条登记 skillcore-dev「技术债」,勿加深,越界判定标准见该节。 - HostService 是插件调 core 的唯一通道(
internal/plugin/host_service.go,现 19 个 method),已登记"单通道过宽"债务。新增 method 前先确认属跨插件的平台能力,单插件业务勿入;新增后同步登记 skillcore-dev。 - core 禁止 import 插件包,识别插件仅经 SDK 接口 + manifest;core 代码勿绑定具体插件名(
/status反代目标经 configplugins.status_plugin指定即为此例)。 - 触碰技术债登记的热点时勿加深,治理按排期,无需顺手重构。
- 改动涉及转发/契约/计费/调度/任务,同步更新 skill
core-dev(防漂移红线)。
- 分层:handler 不写业务逻辑;service 不碰 gin/http(不出现
*gin.Context/HTTP 状态码/response.*);service 不直连 ent——经本包Repository接口,实现置于internal/infra/store/。落点表与标准改动顺序见 skillcore-dev「backend」。 - 改
ent/schema/后须make ent并提交生成代码,否则make ci的verify-ent失败;生成代码(ent/非schema/部分)不可手改。 - 新接口走 dto + mapper,handler 勿手拼
map[string]any作响应(统计/SSE 等沿用同域写法除外)。 - 上游账号失效用 422,禁止返回 401——前端 401 全局拦截会登出当前管理员(见
ErrReauthRequired)。 - API Key 路由错误用
abortWithOpenAIError(),不用response.*。 - 复用优先:开发前先读同域现有实现(首选
account全链路)。注释中文;_test.go同包、表驱动。
internal/bootstrap/http_handlers.go—NewHTTPHandlers内按store → service → handler构造,挂载至HTTPHandlers。internal/server/router.go—registerRoutes()选对分组(v1/userGroup/adminGroup/extGroup)注册路由。
internal/scheduler/— 账号调度/并发/家族冷却/sticky 路由,瞬态状态在 Redis。internal/billing/— 用量计费、费率、记账(calculator/rate/recorder)。internal/plugin/— 插件生命周期、转发管线、HostService 宿主能力、任务执行、资产服务;core 调插件经此,反向仅经Host.Invoke。internal/routing/— 模型 → 账号选择。- 任务状态机见 skill
core-dev「任务状态机」(task.md)。
React 19 + Vite + TanStack Query + Tailwind + @doudou-start/airgate-theme。三层落点(pages/shared/app)、数据流、路由守卫与懒加载约定见 skill core-dev「frontend」;新页面参照 pages/admin 现有页面。
make dev # 全量热重载(后端 air + 前端 vite + 插件 watch)
make ent # 改 ent/schema 后重新生成
make ci # 提交前完整自检(链路见 skill airgate-ci-check)单包测试(backend/):go test ./internal/app/account/... -run TestXxx -v -count=1
- core 全栈开发(后端/前端/子系统) → skill
core-dev - 提交前自检 → skill
airgate-ci-check