# AGENTS.md — 给编码代理的指引 本仓库是 VMall B2B2C 商城 MVP(pnpm + Cargo 双 workspace)。改动前先读本文件与 `README.md`;功能变更须同步 OpenSpec。 ## 布局与所有权 - `apps/api` — Rust 后端(crate `vmall-api`)。迁移在 `apps/api/migrations/`(sqlx,启动时自动执行,只增不改)。分层约定见英文:`docs/adr/`、`docs/tech-specs/rust-api.md`、`openspec/specs/api-architecture/spec.md`。代码按限界上下文放在 `src/modules//`(handler → service → repo);HTTP 抽取器在 `src/http/`。新功能写进对应模块,不要把 SQL 堆回 handler。简单 CRUD 允许 handler 直接调 repo。Service 返回 `ApiResult`,不依赖 `Json`/`StatusCode`。Repo 接受 `&mut PgConnection` / `&mut Transaction` 以便组合事务。不引入泛型 Repository trait。 - `apps/mall` / `apps/shop-admin` / `apps/admin` — 三个 Nuxt 3 应用。端口固定 3000/3001/3002。 - `packages/shared` — `@vmall/shared`:**唯一** API 契约(`src/types.ts` + `src/api.ts`)、en/zh 语言包、共享 Tailwind v4 主题 `theme.css`(`@theme` tokens + `html[data-accent]` 预设)。前端禁止自建 API 封装;契约变更只在这里改,且三个前端都要过构建。共享 Vue 组件在 `packages/ui`(`@vmall/ui`:`VBtn`/`VBadge`/`VField`/`VInput`/`VCard`/`VPanel`/`VTable`/`VPage`/`VAccentSwatch` + `useAccent()`,以 Nuxt 模块自动注册)。布局用 Tailwind utilities,禁止 `