@michaelxwb/code-flow 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +157 -0
  2. package/package.json +16 -0
  3. package/src/adapters/claude/CLAUDE.md +51 -0
  4. package/src/adapters/claude/commands/cf-init.md +262 -0
  5. package/src/adapters/claude/commands/cf-inject.md +55 -0
  6. package/src/adapters/claude/commands/cf-learn.md +291 -0
  7. package/src/adapters/claude/commands/cf-stats.md +86 -0
  8. package/src/adapters/claude/commands/cf-task/align.md +283 -0
  9. package/src/adapters/claude/commands/cf-task/archive.md +131 -0
  10. package/src/adapters/claude/commands/cf-task/block.md +30 -0
  11. package/src/adapters/claude/commands/cf-task/graph.md +73 -0
  12. package/src/adapters/claude/commands/cf-task/note.md +239 -0
  13. package/src/adapters/claude/commands/cf-task/plan.md +270 -0
  14. package/src/adapters/claude/commands/cf-task/prd.md +138 -0
  15. package/src/adapters/claude/commands/cf-task/start.md +173 -0
  16. package/src/adapters/claude/commands/cf-task/status.md +59 -0
  17. package/src/adapters/claude/commands/cf-validate.md +73 -0
  18. package/src/adapters/claude/settings.local.json +60 -0
  19. package/src/adapters/codex/AGENTS.md +51 -0
  20. package/src/adapters/codex/config.toml +3 -0
  21. package/src/adapters/codex/hooks.json +48 -0
  22. package/src/adapters/codex/skills/cf-init/SKILL.md +271 -0
  23. package/src/adapters/codex/skills/cf-inject/SKILL.md +56 -0
  24. package/src/adapters/codex/skills/cf-learn/SKILL.md +296 -0
  25. package/src/adapters/codex/skills/cf-stats/SKILL.md +87 -0
  26. package/src/adapters/codex/skills/cf-task-align/SKILL.md +284 -0
  27. package/src/adapters/codex/skills/cf-task-archive/SKILL.md +132 -0
  28. package/src/adapters/codex/skills/cf-task-block/SKILL.md +31 -0
  29. package/src/adapters/codex/skills/cf-task-graph/SKILL.md +74 -0
  30. package/src/adapters/codex/skills/cf-task-note/SKILL.md +236 -0
  31. package/src/adapters/codex/skills/cf-task-plan/SKILL.md +271 -0
  32. package/src/adapters/codex/skills/cf-task-prd/SKILL.md +139 -0
  33. package/src/adapters/codex/skills/cf-task-start/SKILL.md +174 -0
  34. package/src/adapters/codex/skills/cf-task-status/SKILL.md +60 -0
  35. package/src/adapters/codex/skills/cf-validate/SKILL.md +74 -0
  36. package/src/adapters/costrict/CLAUDE.md +51 -0
  37. package/src/adapters/costrict/commands/cf-init.md +262 -0
  38. package/src/adapters/costrict/commands/cf-inject.md +55 -0
  39. package/src/adapters/costrict/commands/cf-learn.md +291 -0
  40. package/src/adapters/costrict/commands/cf-stats.md +86 -0
  41. package/src/adapters/costrict/commands/cf-task/align.md +283 -0
  42. package/src/adapters/costrict/commands/cf-task/archive.md +131 -0
  43. package/src/adapters/costrict/commands/cf-task/block.md +30 -0
  44. package/src/adapters/costrict/commands/cf-task/graph.md +73 -0
  45. package/src/adapters/costrict/commands/cf-task/note.md +239 -0
  46. package/src/adapters/costrict/commands/cf-task/plan.md +270 -0
  47. package/src/adapters/costrict/commands/cf-task/prd.md +138 -0
  48. package/src/adapters/costrict/commands/cf-task/start.md +173 -0
  49. package/src/adapters/costrict/commands/cf-task/status.md +59 -0
  50. package/src/adapters/costrict/commands/cf-validate.md +73 -0
  51. package/src/adapters/costrict/settings.local.json +60 -0
  52. package/src/adapters/opencode/AGENTS.md +51 -0
  53. package/src/adapters/opencode/commands/cf-init.md +275 -0
  54. package/src/adapters/opencode/commands/cf-inject.md +59 -0
  55. package/src/adapters/opencode/commands/cf-learn.md +295 -0
  56. package/src/adapters/opencode/commands/cf-stats.md +90 -0
  57. package/src/adapters/opencode/commands/cf-task/align.md +287 -0
  58. package/src/adapters/opencode/commands/cf-task/archive.md +135 -0
  59. package/src/adapters/opencode/commands/cf-task/block.md +34 -0
  60. package/src/adapters/opencode/commands/cf-task/graph.md +77 -0
  61. package/src/adapters/opencode/commands/cf-task/note.md +243 -0
  62. package/src/adapters/opencode/commands/cf-task/plan.md +274 -0
  63. package/src/adapters/opencode/commands/cf-task/prd.md +142 -0
  64. package/src/adapters/opencode/commands/cf-task/start.md +177 -0
  65. package/src/adapters/opencode/commands/cf-task/status.md +63 -0
  66. package/src/adapters/opencode/commands/cf-validate.md +77 -0
  67. package/src/adapters/opencode/opencode.json +4 -0
  68. package/src/adapters/opencode/plugins/code-flow/index.js +132 -0
  69. package/src/adapters/opencode/plugins/code-flow/package.json +6 -0
  70. package/src/cli.js +810 -0
  71. package/src/core/code-flow/config.yml +159 -0
  72. package/src/core/code-flow/scripts/cf_checks.py +306 -0
  73. package/src/core/code-flow/scripts/cf_core.py +954 -0
  74. package/src/core/code-flow/scripts/cf_feedback.py +56 -0
  75. package/src/core/code-flow/scripts/cf_inject_hook.py +178 -0
  76. package/src/core/code-flow/scripts/cf_log.py +146 -0
  77. package/src/core/code-flow/scripts/cf_post_hook.py +196 -0
  78. package/src/core/code-flow/scripts/cf_scan.py +293 -0
  79. package/src/core/code-flow/scripts/cf_session_hook.py +42 -0
  80. package/src/core/code-flow/scripts/cf_stats.py +439 -0
  81. package/src/core/code-flow/scripts/cf_stop_hook.py +191 -0
  82. package/src/core/code-flow/scripts/cf_user_prompt_hook.py +402 -0
  83. package/src/core/code-flow/specs/backend/_map.md +56 -0
  84. package/src/core/code-flow/specs/backend/code-quality-performance.md +47 -0
  85. package/src/core/code-flow/specs/backend/database.md +39 -0
  86. package/src/core/code-flow/specs/backend/directory-structure.md +42 -0
  87. package/src/core/code-flow/specs/backend/logging.md +38 -0
  88. package/src/core/code-flow/specs/backend/platform-rules.md +43 -0
  89. package/src/core/code-flow/specs/frontend/_map.md +52 -0
  90. package/src/core/code-flow/specs/frontend/component-specs.md +56 -0
  91. package/src/core/code-flow/specs/frontend/directory-structure.md +41 -0
  92. package/src/core/code-flow/specs/frontend/quality-standards.md +46 -0
  93. package/src/core/code-flow/specs/shared/_map.md +57 -0
  94. package/src/core/code-flow/specs/shared/design/design-frontend.md +247 -0
  95. package/src/core/code-flow/specs/shared/design/design-full.md +494 -0
  96. package/src/core/code-flow/specs/shared/design/design-lite.md +293 -0
  97. package/src/core/code-flow/specs/shared/prd-template.md +187 -0
  98. package/src/core/code-flow/tasks/.gitkeep +0 -0
  99. package/src/core/code-flow/validation.yml +48 -0
package/README.md ADDED
@@ -0,0 +1,157 @@
1
+ # code-flow
2
+
3
+ 一个用于快速初始化与管理项目规范的命令行工具。通过全局安装后执行 `code-flow init`,自动生成项目约定文件与目录结构,帮助团队统一流程并提升协作效率。
4
+
5
+ ## 安装
6
+
7
+ npm:
8
+
9
+ ```bash
10
+ npm i -g @michaelxwb/code-flow
11
+ ```
12
+
13
+ pnpm:
14
+
15
+ ```bash
16
+ pnpm add -g @michaelxwb/code-flow
17
+ ```
18
+
19
+ ## 升级
20
+
21
+ npm:
22
+
23
+ ```bash
24
+ npm i -g @michaelxwb/code-flow@latest
25
+ ```
26
+
27
+ pnpm:
28
+
29
+ ```bash
30
+ pnpm add -g @michaelxwb/code-flow@latest
31
+ ```
32
+
33
+ ## 卸载
34
+
35
+ npm:
36
+
37
+ ```bash
38
+ npm rm -g @michaelxwb/code-flow
39
+ ```
40
+
41
+ pnpm:
42
+
43
+ ```bash
44
+ pnpm remove -g @michaelxwb/code-flow
45
+ ```
46
+
47
+ ## 基本用法
48
+
49
+ 初始化(默认 `--platform=claude`):
50
+
51
+ ```bash
52
+ code-flow init
53
+ code-flow init --platform=codex
54
+ code-flow init --platform=costrict
55
+ code-flow init --platform=opencode
56
+ code-flow init --force # 覆盖所有文件,包括用户已编辑内容
57
+ ```
58
+
59
+ 查看帮助:
60
+
61
+ ```bash
62
+ code-flow --help
63
+ ```
64
+
65
+ ## 质量闭环(v0.5)
66
+
67
+ 零配置开箱即用,安装后自动获得两个闭环:
68
+
69
+ **合规反馈**:spec 约束可在 frontmatter 标注机检规则,AI 编辑文件后自动检查,违规当场反馈给 AI 修正(只提示、不阻断):
70
+
71
+ ```yaml
72
+ ---
73
+ description: 改 Python 脚本时适用
74
+ checks:
75
+ - id: no-print-debug
76
+ type: regex
77
+ pattern: '^\s*print\('
78
+ files: "**/*.py"
79
+ message: 禁止 print() 调试,用日志到 stderr
80
+ ---
81
+ ```
82
+
83
+ **学习沉淀**:你在对话中纠正 AI 的行为("不要用 print 调试")会被记录,`/cf-learn` 将同类纠正聚合为候选规范(附 ✅/❌ 对照与机检草稿),由你确认后落盘——纠正一次,不用说第二遍。
84
+
85
+ **误报治理**:反馈出现误报时直接告诉 AI"这是误报"即可,同一规则误报 3 次或误报率超 10% 自动停用;`cf-stats` 可查违规榜/修正率/误报率,`cf-stats --audit` 输出僵尸规范复审清单。
86
+
87
+ **一键回退**:`config.yml` 中 `quality_loop.enabled: false` 完整回到 v0.5 行为。
88
+
89
+ > **数据声明**:质量闭环产生的所有数据(违规事件、纠正语句摘录、统计计数)仅存储在项目本地 `.code-flow/` 目录(`.session-log.jsonl` / `.check-state.json`,已加入 .gitignore),不上传、不外发、30 天滚动清理。纠正采集可经 `quality_loop.correction_capture: false` 单独关闭。
90
+
91
+ ## 支持的 AI 工具
92
+
93
+ | 工具 | `--platform` | 状态 |
94
+ |------|-------------|------|
95
+ | [Claude Code](https://claude.ai/code) | `claude` | ✅ 完整支持 |
96
+ | [Codex CLI](https://github.com/openai/codex) | `codex` | ✅ 完整支持 |
97
+ | [Costrict](https://costrict.com) | `costrict` | ✅ 完整支持 |
98
+ | [OpenCode](https://opencode.ai) | `opencode` | ✅ 完整支持 |
99
+
100
+ ## 生成的目录与文件
101
+
102
+ 运行 `code-flow init` 后,将在项目根目录生成(或更新)以下结构:
103
+
104
+ ```
105
+ .code-flow/ # 规范核心(共用)
106
+ scripts/ # Python Hook 脚本(三端共用)
107
+ specs/<domain>/ # 领域 spec(_map.md + 约束规则)
108
+
109
+ # Claude Code (--platform=claude)
110
+ .claude/commands/ # 命令模板
111
+ .claude/settings.local.json # Hook 注册(PreToolUse + UserPromptSubmit)
112
+ CLAUDE.md # 全局指令
113
+
114
+ # Codex CLI (--platform=codex)
115
+ .codex/hooks.json # Hook 注册(SessionStart + UserPromptSubmit)
116
+ .codex/config.toml # Codex 配置
117
+ .agents/skills/<skill>/SKILL.md # 项目级 Skills
118
+ AGENTS.md # 全局指令
119
+
120
+ # Costrict (--platform=costrict)
121
+ .costrict/commands/ # 命令模板
122
+ .costrict/settings.local.json # Hook 注册
123
+ CLAUDE.md # 与 Claude 共用全局指令
124
+
125
+ # OpenCode (--platform=opencode)
126
+ .opencode/commands/ # 命令模板(含 cf-task/)
127
+ .opencode/plugins/code-flow/ # 插件:转发到 cf_user_prompt_hook.py
128
+ opencode.json # 插件注册
129
+ AGENTS.md # 全局指令
130
+ ```
131
+
132
+ ## 依赖说明
133
+
134
+ - 需要 `python3` 版本 3.9 及以上
135
+ - 需要安装 `pyyaml`(`cf_init` 会尝试自动安装,失败会提示手动处理)
136
+ - 运行测试需要 `pytest`
137
+
138
+ ### 运行测试
139
+
140
+ ```bash
141
+ python3 -m pip install pyyaml pytest
142
+ python3 -m pytest -q tests
143
+ ```
144
+
145
+ ## 常见问题
146
+
147
+ - EOTP(`--otp`)
148
+ - 原因:启用了 npm/pnpm 的一次性密码或 2FA。
149
+ - 处理:按提示输入 OTP,或使用 `--otp` 重新执行安装命令。
150
+
151
+ - E402(`--access=public`)
152
+ - 原因:发布/安装时访问级别不匹配或权限不足。
153
+ - 处理:必要时使用 `--access=public` 重新发布或检查权限配置。
154
+
155
+ - name 冲突
156
+ - 原因:本地或全局已有同名命令/包。
157
+ - 处理:先卸载冲突包或更换名称后再安装。
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@michaelxwb/code-flow",
3
+ "version": "0.5.1",
4
+ "license": "UNLICENSED",
5
+ "bin": {
6
+ "code-flow": "src/cli.js"
7
+ },
8
+ "files": [
9
+ "src/cli.js",
10
+ "src/core/**",
11
+ "src/adapters/**"
12
+ ],
13
+ "dependencies": {
14
+ "@ccusage/codex": "^18.0.10"
15
+ }
16
+ }
@@ -0,0 +1,51 @@
1
+ # Project Guidelines
2
+
3
+ ## Team Identity
4
+ - Team: [team name]
5
+ - Project: [project name]
6
+ - Language: [primary language]
7
+
8
+ ## Core Principles
9
+ - All changes must include tests
10
+ - Single responsibility per function (<= 50 lines)
11
+ - No loose typing or silent exception handling
12
+ - Handle errors explicitly
13
+
14
+ ## Forbidden Patterns
15
+ - Hard-coded secrets or credentials
16
+ - Unparameterized SQL
17
+ - Network calls inside tight loops
18
+
19
+ ## Spec Loading
20
+ 本项目使用 code-flow 两层规范体系。
21
+
22
+ **两层架构**:
23
+ - **Tier 0 `_map.md`(导航地图)**:项目结构、关键文件、数据流。你手动读取,帮助理解代码在哪里。
24
+ - **Tier 1 约束规范**:编码规则、模式、反模式。编辑代码时(PreToolUse)自动注入完整约束;其他场景注入 **Spec Catalog**(spec 目录),由你按场景自行读取。
25
+
26
+ **你的职责**:
27
+ 1. 从问题判断领域:
28
+ - **frontend**:components、pages、hooks、styles、UI、.tsx/.jsx/.css
29
+ - **backend**:services、API、database、models、logging、.py/.go
30
+ 2. 读取 `.code-flow/specs/<domain>/_map.md` 获取导航上下文
31
+ 3. 收到 **Spec Catalog** 时,编码前先 Read 其中与当前任务匹配的 spec 全文(路径相对 `.code-flow/specs/`);prompt 引用明确文件路径或你编辑代码(PreToolUse)时,完整约束自动注入,无需手动读取
32
+ 4. 问题跨多个领域时,读取所有匹配的 `_map.md`
33
+ 5. 没有匹配领域时,跳过规范加载
34
+
35
+ 不要询问用户加载哪些规范——按 Catalog 自取或等待自动注入即可。
36
+
37
+ ## 合规反馈协议(quality_loop)
38
+
39
+ 1. 编辑代码后收到 **Spec 合规反馈 (auto-check)** 时,先按提示修正违规,再继续当前任务
40
+ 2. 用户表示某条反馈是误报("这是误报"/"忽略这个检查")时,代为执行:
41
+ `python3 .code-flow/scripts/cf_feedback.py ignore <check-id>`
42
+ (check-id 见反馈中的 `规则: <spec>#<check-id>`;同一规则误报达阈值会自动停用)
43
+ 3. 会话收尾被校验拦回(cf-stop 反馈未过项)时,修复后再结束;不要绕过
44
+ 4. 新增/修改规范时优先用 ✅/❌ 代码对照示例表达(见 spec 模板 Examples 段)
45
+
46
+ ## Task Documents (cf-task workflow)
47
+
48
+ - `.code-flow/specs/shared/` holds PRD/design templates(含前端 `design-frontend.md`)used by `/cf-task:prd` and `/cf-task:align`
49
+ - 一个需求的 prd / design / tasks 同放需求目录 `.code-flow/tasks/<日期>/<需求>/`;全栈需求可有 `<需求>.frontend.design.md` + `<需求>.backend.design.md`,`/cf-task:plan <需求目录>` 合并拆解,`/cf-task:archive` 按整个需求目录归档(旧扁平布局仍兼容)
50
+ - Workflow: `/cf-task:prd` → `.prd.md` → `/cf-task:align <.prd.md>` → `.design.md`(s) → `/cf-task:plan <需求目录>` → tasks
51
+ - Templates are read by the commands themselves; you do not need to pre-load them
@@ -0,0 +1,262 @@
1
+ # cf-init
2
+
3
+ 项目规范体系一键初始化。检测技术栈,基于 `code-flow init` 已部署的核心模板完成裁剪与填充,生成可检索、可注入、可维护的 specs。
4
+
5
+ ## 输入
6
+
7
+ - `/project:cf-init` — 自动检测技术栈
8
+ - `/project:cf-init frontend` — 强制前端项目
9
+ - `/project:cf-init backend` — 强制后端项目
10
+ - `/project:cf-init fullstack` — 强制全栈项目
11
+ - `/project:cf-init --skip-learn` — 跳过自动扫描,仅生成/修补模板
12
+
13
+ ## 执行步骤
14
+
15
+ ### 1. 检测技术栈
16
+
17
+ 先用文件清单扫描项目根目录,再读取关键配置文件交叉判断。不要只因为 `package.json` 存在就判定为前端。
18
+
19
+ **扫描信号**:
20
+ - 前端依赖:`react`、`vue`、`@angular/core`、`svelte`、`next`、`nuxt`、`vite`、`webpack`
21
+ - Node 后端依赖:`express`、`fastify`、`koa`、`@nestjs/*`、`hapi`、`prisma`、`typeorm`
22
+ - Python 后端:`pyproject.toml`、`requirements.txt`、`setup.cfg`,以及 `fastapi`、`django`、`flask`、`sqlalchemy`、`pytest`、`ruff`、`mypy`
23
+ - Go 后端:`go.mod`、`cmd/`、`internal/`、`pkg/`
24
+ - Rust/Java 后端:`Cargo.toml`、`pom.xml`、`build.gradle`
25
+ - 前端目录:`src/components`、`src/pages`、`src/hooks`、`app/`、`pages/`、`components/`、`styles/`
26
+ - 后端目录:`api/`、`services/`、`handlers/`、`controllers/`、`models/`、`migrations/`、`routes/`
27
+ - Monorepo:`apps/`、`packages/`、`frontend/`、`backend/`、`client/`、`server/`
28
+
29
+ **判定规则**:
30
+ - 用户指定 `frontend|backend|fullstack` 时,以用户参数为准,但仍记录检测到的框架和语言。
31
+ - 同时命中明确前端和后端信号 → `fullstack`。
32
+ - 只有前端框架/目录信号 → `frontend`。
33
+ - 只有后端框架/目录信号 → `backend`。
34
+ - 只有 `package.json` 且命中 Node 后端依赖 → `backend`;只有 `package.json` 但无框架信号 → `generic`,不要强行写前端规范。
35
+ - 无明确技术栈 → `generic`,生成 frontend + backend 基础模板,但在摘要中标注“需人工确认”。
36
+
37
+ ### 2. 校准 .code-flow/config.yml
38
+
39
+ `code-flow init` 已从 `src/core/code-flow/config.yml` 复制当前核心模板。cf-init 不要复制或手写旧版 YAML;应该读取现有 `.code-flow/config.yml`,只做保守修补。
40
+
41
+ 必须保持或补齐这些核心能力:
42
+ - `inject.compress: true`
43
+ - `inject.dedup_window: 5`
44
+ - 完整 `skip_extensions`,包括图片、压缩包、PDF 等非代码文件
45
+ - `skip_paths` 中的平台目录:`.claude/**`、`.codex/**`、`.costrict/**`
46
+ - `path_mapping.shared`,包括 `shared/_map.md`、`shared/prd-template.md`、`shared/design/design-lite.md`、`shared/design/design-full.md`、`shared/design/design-frontend.md`
47
+ - backend patterns 中同时包含 `*.py` 与 `**/*.py`
48
+ - 按检测到的前端框架动态补 `frontend.patterns`:Vue→`**/*.vue`、Svelte→`**/*.svelte`、Next→`app/**` 等(保守追加,按检测结果,不预塞所有框架)
49
+
50
+ 根据技术栈只裁剪 `frontend` / `backend` 域:
51
+ - `frontend`:保留 `shared` + `frontend`,删除 `backend`
52
+ - `backend`:保留 `shared` + `backend`,删除 `frontend`
53
+ - `fullstack` / `generic`:保留 `shared` + `frontend` + `backend`
54
+ - 用户已有自定义域(如 `infra`、`mobile`、`cli`、`scripts`)必须保留,不得删除
55
+
56
+ 如果发现 `.code-flow/config.yml` 缺失,提示用户先运行 `code-flow init --platform=<platform>`,不要手工拼装整份 YAML。
57
+
58
+ ### 3. 裁剪 .code-flow/validation.yml
59
+
60
+ `code-flow init` 已复制默认 `.code-flow/validation.yml`。读取并按技术栈删除不相关 validator,保持 YAML 结构和已有用户修改。
61
+
62
+ - 纯前端项目:删除 `Python 类型检查`、`Pytest`
63
+ - Python 后端项目:删除 `TypeScript 类型检查`、`Vue 类型检查`、`ESLint`、`Stylelint`、`前端单元测试`
64
+ - Go/Rust/Java 后端:删除前端 validator;如果没有对应语言 validator,保留文件并在摘要中提示用户补充
65
+ - fullstack / generic:全部保留,除非项目明确没有对应语言文件
66
+
67
+ 若 `.code-flow/validation.yml` 缺失,提示用户重跑 `code-flow init`,不要手工拼装 YAML。
68
+
69
+ ### 4. 生成 spec 文件
70
+
71
+ 严格按步骤 1 的 stack 生成,禁止超出范围:
72
+
73
+ | stack | 生成目录 | 禁止生成 |
74
+ |-------|---------|---------|
75
+ | `frontend` | `specs/frontend/` + `specs/shared/` | `specs/backend/` |
76
+ | `backend` | `specs/backend/` + `specs/shared/` | `specs/frontend/` |
77
+ | `fullstack` / `generic` | `specs/frontend/` + `specs/backend/` + `specs/shared/` | — |
78
+
79
+ shared 模板必须存在:
80
+ - `.code-flow/specs/shared/_map.md`
81
+ - `.code-flow/specs/shared/prd-template.md`
82
+ - `.code-flow/specs/shared/design/design-lite.md`
83
+ - `.code-flow/specs/shared/design/design-full.md`
84
+ - `.code-flow/specs/shared/design/design-frontend.md`
85
+
86
+ 约束规范格式:
87
+
88
+ ```markdown
89
+ # [规范名称]
90
+
91
+ ## Rules
92
+ - 规则1
93
+
94
+ ## Patterns
95
+ - 推荐模式
96
+
97
+ ## Anti-Patterns
98
+ - 禁止模式
99
+ ```
100
+
101
+ 导航地图(`_map.md`)格式:
102
+
103
+ ```markdown
104
+ # [Domain] Retrieval Map
105
+
106
+ > AI 导航地图:帮助快速定位代码结构和关键模块。
107
+
108
+ ## Purpose
109
+ [项目角色描述]
110
+
111
+ ## Architecture
112
+ [技术栈和架构模式]
113
+
114
+ ## Key Files
115
+ | File | Purpose |
116
+ |------|---------|
117
+
118
+ ## Module Map
119
+ [目录树形图]
120
+
121
+ ## Data Flow
122
+ [数据流向]
123
+
124
+ ## Navigation Guide
125
+ [做 X 去哪里的快速指引]
126
+ ```
127
+
128
+ 前端域文件:
129
+ - `.code-flow/specs/frontend/_map.md`
130
+ - `.code-flow/specs/frontend/directory-structure.md`
131
+ - `.code-flow/specs/frontend/quality-standards.md`
132
+ - `.code-flow/specs/frontend/component-specs.md`
133
+
134
+ 后端域文件:
135
+ - `.code-flow/specs/backend/_map.md`
136
+ - `.code-flow/specs/backend/directory-structure.md`
137
+ - `.code-flow/specs/backend/logging.md`
138
+ - `.code-flow/specs/backend/database.md`
139
+ - `.code-flow/specs/backend/platform-rules.md`
140
+ - `.code-flow/specs/backend/code-quality-performance.md`
141
+
142
+ 已存在的 spec 文件不覆盖;只补缺失文件。填充已有空模板时要先展示 diff。
143
+
144
+ ### 5. 校准 CLAUDE.md
145
+
146
+ CLAUDE.md 的完整内容由适配器模板统一定义,`code-flow init` 已部署到项目根;cf-init 不再内嵌副本,避免双份维护导致不一致。
147
+
148
+ - 读取现有 CLAUDE.md,根据检测到的技术栈填充 `## Team Identity` 占位符(team / project / language)。
149
+ - 若用户已自定义,只补充缺失的 `##` 段落,不覆盖已有内容;写入前展示 diff 供确认。
150
+ - 若 CLAUDE.md 缺失,提示用户先运行 `code-flow init --platform=claude`,不要手工拼装完整模板。
151
+
152
+ ### 6. 生成 .claude/settings.local.json Hook 配置
153
+
154
+ 检查 `.claude/settings.local.json` 是否存在。如果不存在,按当前适配器模板创建,必须包含 `PreToolUse`、`SessionStart`、`UserPromptSubmit` 三类 hook,并使用 git root 定位脚本路径。
155
+
156
+ 如果文件已存在,只合并缺失的 hook 事件、matcher 或 command,保留用户已有 permissions、settings 和自定义 hooks,不得整文件覆盖。
157
+
158
+ ### 7. 安装 pyyaml
159
+
160
+ 先探测依赖,不要直接安装:
161
+
162
+ ```bash
163
+ python3 -c "import yaml"
164
+ ```
165
+
166
+ 如果探测失败,再按顺序尝试:
167
+
168
+ ```bash
169
+ python3 -m pip install --user pyyaml
170
+ python3 -m pip install pyyaml
171
+ python3 -m pip install --user --break-system-packages pyyaml
172
+ ```
173
+
174
+ 全部失败时只输出 warning 和手动安装建议,不阻塞 cf-init 主流程。
175
+
176
+ ### 8. 自动扫描项目规范(Auto-learn)
177
+
178
+ 如果传入 `--skip-learn`,跳过此步骤。否则自动执行扫描,但必须遵守“证据优先”:只写入能从配置、代码、CI、测试或目录结构中找到依据的规范;不确定的内容写入 TODO 或留空,禁止编造项目规范。
179
+
180
+ #### 8.1 扫描输入
181
+
182
+ 读取以下配置文件(存在才使用):
183
+
184
+ **前端配置**:
185
+ - `.eslintrc*` / `eslint.config.*` — lint 规则
186
+ - `tsconfig.json` — strict 模式、path alias、target
187
+ - `.prettierrc*` / `prettier.config.*` — 格式化规则
188
+ - `tailwind.config.*` — 自定义 theme
189
+ - `next.config.*` / `nuxt.config.*` / `vite.config.*` — 框架约束
190
+ - `jest.config.*` / `vitest.config.*` — 测试配置
191
+
192
+ **后端配置**:
193
+ - `pyproject.toml` — ruff/mypy/pytest 配置、Python 版本
194
+ - `.golangci.yml` — Go lint 规则
195
+ - `Makefile` — 构建和测试命令
196
+ - `Dockerfile` / `docker-compose.yml` — 运行时约束
197
+
198
+ **通用配置**:
199
+ - `.github/workflows/*.yml` / `.gitlab-ci.yml` — CI 检查步骤
200
+ - `.editorconfig` — 编辑器配置
201
+ - `package.json` scripts — 常用命令
202
+ - `README*` — 项目用途和运行方式
203
+
204
+ 扫描代码结构和模式:
205
+ - 目录结构、入口文件、路由、handler/service/model 调用链 → 写入 `_map.md`
206
+ - 错误处理、日志、测试、导入、命名模式 → 写入对应约束 specs
207
+ - 纯格式化规则(formatter 自动处理)默认不写入 Rules,除非项目明确要求人工遵守
208
+
209
+ #### 8.2 写入策略
210
+
211
+ 先展示扫描摘要和拟写入内容,等待用户确认。用户确认 `all` 后再写入;用户输入 `skip` 时保留模板不填充。
212
+
213
+ 写入规则:
214
+ - `_map.md`:Purpose、Architecture、Key Files、Module Map、Data Flow、Navigation Guide 必须来自实际文件或配置
215
+ - `Rules`:只放强制约束,如 strict mode、CI 必跑命令、禁止模式
216
+ - `Patterns`:只放代码中重复出现的成熟模式,并标注来源
217
+ - `Anti-Patterns`:只放配置或代码审查中明确禁止的做法
218
+ - 每条自动提取内容建议带来源,如 `[tsconfig.json] strict=true`、`[CI] npm test`
219
+ - 去重:不要重复模板已有规则;不要把同一规则写入多个 spec,除非它确实跨域
220
+
221
+ 展示格式:
222
+
223
+ ```text
224
+ 项目规范扫描完成:
225
+
226
+ 导航地图 (Retrieval Map):
227
+ frontend/_map.md:
228
+ Purpose: ...
229
+ Architecture: ...
230
+ Key Files: ...
231
+
232
+ 编码约束 (从配置和代码中提取):
233
+ frontend/quality-standards.md:
234
+ 1. [tsconfig.json] strict 模式已启用
235
+ backend/code-quality-performance.md:
236
+ 2. [pyproject.toml] pytest 配置存在
237
+
238
+ 确认写入?(all 全部写入 / 输入编号选择 / skip 跳过):
239
+ ```
240
+
241
+ ### 9. 输出摘要
242
+
243
+ ```text
244
+ cf-init 完成
245
+
246
+ 技术栈: <检测结果>
247
+ 文件结构:
248
+ Created: ...
249
+ Updated: ...
250
+ Skipped: ...
251
+ Token 估算: ...
252
+
253
+ 下一步:
254
+ - 审阅并补充 spec 文件中的 TODO
255
+ - 运行 cf-learn 补充更多规范
256
+ - 运行 cf-learn --map 更新导航地图
257
+ - 开始开发: cf-task-plan <设计文档>
258
+ ```
259
+
260
+ ## v0.5 质量闭环部署说明
261
+
262
+ init/upgrade 后新增:PostToolUse / Stop hook 注册(合规反馈与收尾守门)、`.code-flow/.gitignore`(运行时数据不入库)。运行时数据 `.session-log.jsonl` / `.check-state.json` 首次使用自动创建,仅存本地。规范写作建议:frontmatter 加 `description`(Spec Catalog 行)与 `checks`(机检标注),规则优先用 ✅/❌ Examples 段表达(cf-learn 候选自动生成草稿)。
@@ -0,0 +1,55 @@
1
+ # cf-inject
2
+
3
+ 强制重新注入指定领域的编码规范(通常不需要手动调用)。
4
+
5
+ ## 自动注入机制
6
+
7
+ 本项目的规范注入是**全自动**的,通过两层机制保障:
8
+
9
+ 1. **CLAUDE.md 指令**:Claude 根据问题自动判断领域,读取 `_map.md` 导航地图理解项目结构
10
+ 2. **PreToolUse Hook**:编辑代码文件时根据文件路径标签自动注入匹配的约束 specs
11
+
12
+ 两层职责分离:CLAUDE.md 负责导航(Tier 0),Hook 负责约束注入(Tier 1)。
13
+
14
+ 正常情况下**无需手动调用**此命令。
15
+
16
+ ## 何时使用
17
+
18
+ - 需要强制刷新已注入的规范(如 spec 文件刚被修改)
19
+ - 想要预览某个领域的完整规范内容
20
+ - 自动注入未生效时的排查手段
21
+ - Hook 标签匹配遗漏了某些 spec,需要手动补充
22
+
23
+ ## 输入
24
+
25
+ - `/project:cf-inject frontend` — 强制加载前端全部 specs
26
+ - `/project:cf-inject backend` — 强制加载后端全部 specs
27
+
28
+ ## 执行步骤
29
+
30
+ 1. 用 Read 读取 `.code-flow/config.yml`,获取指定领域的 `specs` 列表
31
+ 2. 提取所有 spec 的 `path` 字段(兼容新旧格式)
32
+ 3. 按 tier 排序:tier 0(`_map.md`)在前,tier 1 按列表顺序
33
+ 4. 用 Read 逐个读取 `.code-flow/specs/` 下的匹配文件
34
+ 5. 将规范内容直接输出到对话中,格式:
35
+
36
+ ```
37
+ ## Active Specs (manual inject)
38
+
39
+ ### Navigation (Retrieval Map)
40
+
41
+ #### [domain]/_map.md
42
+ [导航地图内容]
43
+
44
+ ### Constraints (all specs for domain)
45
+
46
+ #### [spec-path]
47
+ [spec 内容]
48
+
49
+ ---
50
+ 以上规范是本次开发的约束条件,生成代码必须遵循。
51
+ ```
52
+
53
+ 6. 用 Write 更新 `.code-flow/.inject-state`,将该域所有 spec 路径标记为已注入,防止 Hook 重复注入
54
+
55
+ > 注:手动 inject 会加载该域的**全部** spec,不做标签过滤。这是与 Hook 自动注入的区别——Hook 按标签精准匹配,手动注入用于全量预览或强制刷新。