用途
project-docs 是一个项目文档生成技能,通过分析代码库来生成结构化文档。其目标是产出反映实际代码的文档,而不是设想中的架构。
何时使用
- 新项目需要初始文档
- 文档缺失或已过时
- 需要让某人快速上手代码库
- 重构后刷新文档
工作流程
1. 检测项目类型
扫描项目根目录以判断项目类型,依据以下指示文件:
| 指示文件 | 项目类型 |
|---|---|
| wrangler.jsonc / wrangler.toml | Cloudflare Worker |
| vite.config.ts + src/App.tsx | React SPA |
| astro.config.mjs | Astro 站点 |
| next.config.js | Next.js 应用 |
| package.json 含 hono | Hono API |
| src/index.ts 含 Hono | API 服务器 |
| drizzle.config.ts | 含数据库层 |
| schema.ts 或 schema/ | 含数据库 schema |
| pyproject.toml / setup.py | Python 项目 |
| Cargo.toml | Rust 项目 |
2. 询问要生成哪些文档
可选文档包括:
- ARCHITECTURE.md — 系统概览、技术栈、目录结构、关键流程
- API_ENDPOINTS.md — 路由、方法、参数、响应结构、认证
- DATABASE_SCHEMA.md — 表、关系、迁移、索引
- 以上全部
只提供与项目匹配的文档。静态站点不提供 API_ENDPOINTS.md;没有数据库则不提供 DATABASE_SCHEMA.md。
3. 扫描代码库
针对每个请求的文档读取相关源文件:
- ARCHITECTURE.md:package.json / pyproject.toml(技术栈、依赖)、入口点(src/index.ts、src/main.tsx、src/App.tsx)、配置文件(wrangler.jsonc、vite.config.ts、tsconfig.json)、目录结构(前两层)、关键模块及其导出。
- API_ENDPOINTS.md:路由文件(src/routes/、src/api/ 或 index 内联)、中间件文件(认证、CORS、日志)、请求/响应类型或 Zod schema、错误处理模式。
- DATABASE_SCHEMA.md:Drizzle schema 文件(src/db/schema.ts、src/schema/)、迁移文件(drizzle/、migrations/)、原始 SQL 文件(如有)、种子文件(如有)。
4. 生成文档
将每个文档写入 docs/ 目录(不存在则创建)。如果项目在该目录已有文档,则提供更新而非覆盖。对于没有 docs/ 目录的小项目,写入项目根目录。
文档模板
ARCHITECTURE.md
包含:概览(一段话说明项目做什么及结构)、技术栈表格(层、技术、版本,如运行时、框架、数据库、ORM、前端、样式)、目录结构(带注释的树,前两层及用途说明)、关键流程(逐步说明请求→中间件→处理器→数据库→响应)、配置(关键配置文件及其控制内容)、部署(如何部署、所需环境变量、构建命令)。
API_ENDPOINTS.md
包含:基础 URL、认证(方式:Bearer token、会话 cookie、API key 或无;令牌来源与获取方式)、端点(按组划分,每个端点列出方法路径、认证要求、参数、响应、错误)、错误格式(标准错误响应结构)、速率限制(如适用)。
DATABASE_SCHEMA.md
包含:引擎(如 Cloudflare D1 (SQLite)、PostgreSQL、MySQL)、表(列、类型、约束、描述)、关系(外键、连接模式、级联规则)、索引(非主键索引及存在原因)、迁移(生成与应用命令,如 npx drizzle-kit generate、npx wrangler d1 migrations apply DB --local、npx wrangler d1 migrations apply DB --remote)、种子数据(引用种子脚本,如有)。
质量规则
- 记录已存在的内容,而非计划中的内容——读取实际代码,不虚构端点或表
- 包含版本号——从 package.json/lock 文件提取,而非凭记忆
- 展示真实响应结构——从代码中的 TypeScript 类型或 Zod schema 复制
- 保持可扫读——多用表格而非段落,多用代码块而非散文
- 不重复 CLAUDE.md——若架构信息已在 CLAUDE.md 中,则移至 ARCHITECTURE.md 或引用它
- 标记缺口——发现未文档化的路由或用途不明的表时,用
<!-- TODO: document purpose -->标注
更新已有文档
如果文档已存在:读取现有文档;与当前代码库对比差异;向用户展示变更(新增端点、移除的表、更新的技术栈);应用更新时保留任何手写笔记或章节;绝不静默覆盖用户添加的自定义内容。
限制
资料未提供该技能的收费、价格、平台支持范围或具体效果数据。