@jahanxu/code-flow 0.1.0 → 0.2.0

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.
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # code-flow
2
+
3
+ 一个用于快速初始化与管理项目规范的命令行工具。通过全局安装后执行 `code-flow init`,自动生成项目约定文件与目录结构,帮助团队统一流程并提升协作效率。
4
+
5
+ ## 安装
6
+
7
+ npm:
8
+
9
+ ```bash
10
+ npm i -g @jahanxu/code-flow
11
+ ```
12
+
13
+ pnpm:
14
+
15
+ ```bash
16
+ pnpm add -g @jahanxu/code-flow
17
+ ```
18
+
19
+ ## 升级
20
+
21
+ npm:
22
+
23
+ ```bash
24
+ npm i -g @jahanxu/code-flow@latest
25
+ ```
26
+
27
+ pnpm:
28
+
29
+ ```bash
30
+ pnpm add -g @jahanxu/code-flow@latest
31
+ ```
32
+
33
+ ## 卸载
34
+
35
+ npm:
36
+
37
+ ```bash
38
+ npm rm -g @jahanxu/code-flow
39
+ ```
40
+
41
+ pnpm:
42
+
43
+ ```bash
44
+ pnpm remove -g @jahanxu/code-flow
45
+ ```
46
+
47
+ ## 基本用法
48
+
49
+ 初始化:
50
+
51
+ ```bash
52
+ code-flow init
53
+ ```
54
+
55
+ 查看帮助:
56
+
57
+ ```bash
58
+ code-flow --help
59
+ ```
60
+
61
+ ## 生成的目录与文件
62
+
63
+ 运行 `code-flow init` 后,将在项目根目录生成(或更新)以下结构:
64
+
65
+ ```
66
+ .code-flow/
67
+ .claude/
68
+ CLAUDE.md
69
+ ```
70
+
71
+ ## 依赖说明
72
+
73
+ - 需要 `python3` 版本 3.9 及以上
74
+ - 需要安装 `pyyaml`(`cf_init` 会尝试自动安装,失败会提示手动处理)
75
+
76
+ ## 常见问题
77
+
78
+ - EOTP(`--otp`)
79
+ - 原因:启用了 npm/pnpm 的一次性密码或 2FA。
80
+ - 处理:按提示输入 OTP,或使用 `--otp` 重新执行安装命令。
81
+
82
+ - E402(`--access=public`)
83
+ - 原因:发布/安装时访问级别不匹配或权限不足。
84
+ - 处理:必要时使用 `--access=public` 重新发布或检查权限配置。
85
+
86
+ - name 冲突
87
+ - 原因:本地或全局已有同名命令/包。
88
+ - 处理:先卸载冲突包或更换名称后再安装。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jahanxu/code-flow",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "license": "UNLICENSED",
5
5
  "bin": {
6
6
  "code-flow": "src/cli.js"
@@ -0,0 +1,33 @@
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
+ This project uses the code-flow layered spec system.
21
+
22
+ **Auto-inject rule**: Before answering any coding question, you MUST:
23
+ 1. Determine domain(s) from the user's question:
24
+ - **frontend**: mentions components, pages, hooks, styles, UI, CSS, React/Vue/Angular, or references .tsx/.jsx/.css/.scss files
25
+ - **backend**: mentions services, API, database, models, logging, or references .py/.go files, SQL, ORM
26
+ 2. Read `.code-flow/config.yml` → find matching domain's `specs` list
27
+ 3. Read each spec file from `.code-flow/specs/` and apply as constraints
28
+ 4. If question spans multiple domains, load all matching specs
29
+ 5. If no domain matches, skip spec loading
30
+
31
+ Do NOT ask the user which specs to load — decide automatically based on context.
32
+
33
+ ## Learnings
@@ -0,0 +1,269 @@
1
+ # cf-init
2
+
3
+ 项目规范体系一键初始化。检测技术栈,生成完整的 .code-flow/ 目录、spec 模板、配置文件和 Hook 配置。
4
+
5
+ ## 输入
6
+
7
+ - `/project:cf-init` — 自动检测技术栈
8
+ - `/project:cf-init frontend` — 强制前端项目
9
+ - `/project:cf-init backend` — 强制后端项目
10
+ - `/project:cf-init fullstack` — 强制全栈项目
11
+
12
+ ## 执行步骤
13
+
14
+ ### 1. 检测技术栈
15
+
16
+ 用 Glob 扫描项目根目录:
17
+
18
+ - `package.json` 存在 → 前端项目。用 Read 读取,检查 dependencies 中的 react/vue/@angular/core 确定框架。
19
+ - `pyproject.toml` 或 `requirements.txt` 存在 → Python 后端
20
+ - `go.mod` 存在 → Go 后端
21
+ - 同时存在前后端标识 → 全栈项目
22
+ - 均不存在 → Generic(前后端均生成)
23
+
24
+ 如果用户指定了 `frontend|backend|fullstack` 参数,跳过检测直接使用。
25
+
26
+ ### 2. 生成 .code-flow/config.yml
27
+
28
+ 如果文件不存在,用 Write 生成。如果已存在,用 Read 读取后仅补充缺失的顶层 key。
29
+
30
+ 模板内容:
31
+
32
+ ```yaml
33
+ version: 1
34
+
35
+ budget:
36
+ total: 2500
37
+ l0_max: 800
38
+ l1_max: 1700
39
+
40
+ inject:
41
+ auto: true
42
+ code_extensions:
43
+ - ".py"
44
+ - ".go"
45
+ - ".ts"
46
+ - ".tsx"
47
+ - ".js"
48
+ - ".jsx"
49
+ - ".java"
50
+ - ".rs"
51
+ - ".rb"
52
+ - ".vue"
53
+ - ".svelte"
54
+ skip_extensions:
55
+ - ".md"
56
+ - ".txt"
57
+ - ".json"
58
+ - ".yml"
59
+ - ".yaml"
60
+ - ".toml"
61
+ - ".lock"
62
+ - ".csv"
63
+ - ".xml"
64
+ - ".svg"
65
+ - ".png"
66
+ - ".jpg"
67
+ skip_paths:
68
+ - "docs/**"
69
+ - "*.config.*"
70
+ - ".code-flow/**"
71
+ - ".claude/**"
72
+ - "node_modules/**"
73
+ - "dist/**"
74
+ - "build/**"
75
+ - ".git/**"
76
+
77
+ path_mapping:
78
+ frontend:
79
+ patterns:
80
+ - "src/components/**"
81
+ - "src/pages/**"
82
+ - "src/hooks/**"
83
+ - "src/styles/**"
84
+ - "**/*.tsx"
85
+ - "**/*.jsx"
86
+ - "**/*.css"
87
+ - "**/*.scss"
88
+ specs:
89
+ - "frontend/directory-structure.md"
90
+ - "frontend/quality-standards.md"
91
+ - "frontend/component-specs.md"
92
+ spec_priority:
93
+ "frontend/directory-structure.md": 1
94
+ "frontend/quality-standards.md": 2
95
+ "frontend/component-specs.md": 3
96
+ backend:
97
+ patterns:
98
+ - "services/**"
99
+ - "api/**"
100
+ - "models/**"
101
+ - "**/*.py"
102
+ - "**/*.go"
103
+ specs:
104
+ - "backend/directory-structure.md"
105
+ - "backend/logging.md"
106
+ - "backend/database.md"
107
+ - "backend/platform-rules.md"
108
+ - "backend/code-quality-performance.md"
109
+ spec_priority:
110
+ "backend/directory-structure.md": 1
111
+ "backend/database.md": 2
112
+ "backend/logging.md": 3
113
+ "backend/code-quality-performance.md": 4
114
+ "backend/platform-rules.md": 5
115
+ ```
116
+
117
+ 根据检测结果,只保留相关的 path_mapping 条目(仅前端项目删除 backend,仅后端项目删除 frontend)。
118
+
119
+ ### 3. 生成 .code-flow/validation.yml
120
+
121
+ 如果文件不存在,用 Write 生成:
122
+
123
+ ```yaml
124
+ validators:
125
+ - name: "TypeScript 类型检查"
126
+ trigger: "**/*.{ts,tsx}"
127
+ command: "npx tsc --noEmit"
128
+ timeout: 30000
129
+ on_fail: "检查类型定义,参见 specs/frontend/quality-standards.md"
130
+
131
+ - name: "ESLint"
132
+ trigger: "**/*.{ts,tsx,js,jsx}"
133
+ command: "npx eslint {files}"
134
+ timeout: 15000
135
+ on_fail: "运行 npx eslint --fix 自动修复"
136
+
137
+ - name: "Python 类型检查"
138
+ trigger: "**/*.py"
139
+ command: "python3 -m mypy {files}"
140
+ timeout: 30000
141
+ on_fail: "检查类型注解,参见 specs/backend/code-quality-performance.md"
142
+
143
+ - name: "Pytest"
144
+ trigger: "**/*.py"
145
+ command: "python3 -m pytest --tb=short -q"
146
+ timeout: 60000
147
+ on_fail: "测试失败,检查断言和 mock 是否需要更新"
148
+ ```
149
+
150
+ 根据技术栈只保留相关 validators。
151
+
152
+ ### 4. 生成 spec 文件
153
+
154
+ 在 `.code-flow/specs/` 下,按检测到的技术栈生成 spec 模板。每个 spec 遵循统一格式:
155
+
156
+ ```markdown
157
+ # [规范名称]
158
+
159
+ ## Rules
160
+ - 规则1
161
+
162
+ ## Patterns
163
+ - 推荐模式
164
+
165
+ ## Anti-Patterns
166
+ - 禁止模式
167
+
168
+ ## Learnings
169
+ ```
170
+
171
+ 前端项目生成:
172
+ - `.code-flow/specs/frontend/directory-structure.md`
173
+ - `.code-flow/specs/frontend/quality-standards.md`
174
+ - `.code-flow/specs/frontend/component-specs.md`
175
+
176
+ 后端项目生成:
177
+ - `.code-flow/specs/backend/directory-structure.md`
178
+ - `.code-flow/specs/backend/logging.md`
179
+ - `.code-flow/specs/backend/database.md`
180
+ - `.code-flow/specs/backend/platform-rules.md`
181
+ - `.code-flow/specs/backend/code-quality-performance.md`
182
+
183
+ **已存在的 spec 文件不覆盖**。
184
+
185
+ ### 5. 生成 CLAUDE.md
186
+
187
+ 如果 CLAUDE.md 不存在,用 Write 生成 L0 模板:
188
+
189
+ ```markdown
190
+ # Project Guidelines
191
+
192
+ ## Team Identity
193
+ - Team: [team name]
194
+ - Project: [project name]
195
+ - Language: [primary language]
196
+
197
+ ## Core Principles
198
+ - All changes must include tests
199
+ - Single responsibility per function (<= 50 lines)
200
+ - No loose typing or silent exception handling
201
+ - Handle errors explicitly
202
+
203
+ ## Forbidden Patterns
204
+ - Hard-coded secrets or credentials
205
+ - Unparameterized SQL
206
+ - Network calls inside tight loops
207
+
208
+ ## Spec Loading
209
+ This project uses the code-flow layered spec system.
210
+ Specs live in .code-flow/specs/ and are injected on demand.
211
+
212
+ ## Learnings
213
+ ```
214
+
215
+ 如果 CLAUDE.md 已存在,用 Read 读取后仅补充缺失的 `##` 段落(不覆盖已有内容)。展示 diff 供用户确认。
216
+
217
+ ### 6. 生成 .claude/settings.local.json Hook 配置
218
+
219
+ 用 Read 检查是否存在。如果不存在,用 Write 生成:
220
+
221
+ ```json
222
+ {
223
+ "hooks": {
224
+ "PreToolUse": [
225
+ {
226
+ "matcher": "Edit|Write|MultiEdit",
227
+ "hooks": [
228
+ {
229
+ "type": "command",
230
+ "command": "python3 .code-flow/scripts/cf_inject_hook.py",
231
+ "timeout": 5
232
+ }
233
+ ]
234
+ }
235
+ ],
236
+ "SessionStart": [
237
+ {
238
+ "hooks": [
239
+ {
240
+ "type": "command",
241
+ "command": "python3 .code-flow/scripts/cf_session_hook.py"
242
+ }
243
+ ]
244
+ }
245
+ ]
246
+ }
247
+ }
248
+ ```
249
+
250
+ 如果已存在,用 Read 读取 JSON,仅合并 `hooks` 字段中缺失的事件条目,保留其他配置(如 permissions)不变。用 Write 回写。
251
+
252
+ ### 7. 安装 pyyaml
253
+
254
+ 用 Bash 执行:
255
+
256
+ ```bash
257
+ python3 -m pip install pyyaml
258
+ ```
259
+
260
+ 成功 → 继续。失败 → 输出 warning("请手动安装: pip install pyyaml"),不阻塞。
261
+
262
+ ### 8. 输出摘要
263
+
264
+ 输出以下信息:
265
+ - 检测到的技术栈
266
+ - 已生成/跳过的文件列表
267
+ - 各 spec 文件的 token 估算(字符数 / 4)
268
+ - Hook 配置状态确认
269
+ - 提醒用户填充 spec 文件的具体规范内容
@@ -0,0 +1,41 @@
1
+ # cf-inject
2
+
3
+ 强制重新注入指定领域的编码规范(通常不需要手动调用)。
4
+
5
+ ## 自动注入机制
6
+
7
+ 本项目的规范注入是**全自动**的,通过两层机制保障:
8
+
9
+ 1. **CLAUDE.md 指令**(主要):Claude 根据用户提问内容自动判断领域,读取 `.code-flow/config.yml` 和对应 spec 文件,作为约束应用
10
+ 2. **PreToolUse Hook**(安全网):编辑代码文件时 Hook 自动触发,注入匹配领域的 specs
11
+
12
+ 正常情况下**无需手动调用**此命令。
13
+
14
+ ## 何时使用
15
+
16
+ - 需要强制刷新已注入的规范(如 spec 文件刚被修改)
17
+ - 想要预览某个领域的完整规范内容
18
+ - 自动注入未生效时的排查手段
19
+
20
+ ## 输入
21
+
22
+ - `/project:cf-inject frontend` — 强制加载前端全部 specs
23
+ - `/project:cf-inject backend` — 强制加载后端全部 specs
24
+
25
+ ## 执行步骤
26
+
27
+ 1. 用 Read 读取 `.code-flow/config.yml`,获取指定领域的 `specs` 列表
28
+ 2. 用 Read 逐个读取 `.code-flow/specs/` 下的匹配文件
29
+ 3. 将规范内容直接输出到对话中,格式:
30
+
31
+ ```
32
+ ## Active Specs (manual inject)
33
+
34
+ ### [spec-path]
35
+ [spec 内容]
36
+
37
+ ---
38
+ 以上规范是本次开发的约束条件,生成代码必须遵循。
39
+ ```
40
+
41
+ 4. 用 Write 更新 `.code-flow/.inject-state`,防止 Hook 重复注入
@@ -0,0 +1,120 @@
1
+ # cf-learn
2
+
3
+ 自动扫描项目配置文件和代码模式,提取隐含的编码约束和团队规范,呈现给用户确认后写入 CLAUDE.md 或 spec 文件。
4
+
5
+ ## 输入
6
+
7
+ - `/project:cf-learn` — 全量扫描
8
+ - `/project:cf-learn frontend` — 仅扫描前端相关
9
+ - `/project:cf-learn backend` — 仅扫描后端相关
10
+
11
+ ## 执行步骤
12
+
13
+ ### 1. 扫描项目配置文件
14
+
15
+ 用 Glob 查找以下配置文件(存在则 Read 读取内容):
16
+
17
+ **前端配置**:
18
+ - `.eslintrc*` / `eslint.config.*` — 提取 lint 规则(no-any、import 排序、命名规范等)
19
+ - `tsconfig.json` — 提取 strict 模式、path alias、target 等关键配置
20
+ - `.prettierrc*` / `prettier.config.*` — 提取格式化规则(缩进、引号、分号)
21
+ - `tailwind.config.*` — 提取自定义 theme、spacing 规则
22
+ - `next.config.*` / `nuxt.config.*` / `vite.config.*` — 提取框架特定约束
23
+ - `jest.config.*` / `vitest.config.*` — 提取测试配置(覆盖率阈值等)
24
+
25
+ **后端配置**:
26
+ - `pyproject.toml` — 提取 ruff/mypy/pytest 配置、Python 版本要求
27
+ - `setup.cfg` / `tox.ini` — 提取测试和 lint 配置
28
+ - `.golangci.yml` — 提取 Go lint 规则
29
+ - `Makefile` — 提取构建和测试命令
30
+ - `Dockerfile` / `docker-compose.yml` — 提取运行时约束
31
+
32
+ **通用配置**:
33
+ - `.github/workflows/*.yml` / `.gitlab-ci.yml` — 提取 CI 检查步骤(哪些 lint/test 是必须通过的)
34
+ - `.editorconfig` — 提取编辑器统一配置
35
+ - `.gitignore` — 推断项目结构(哪些目录被排除)
36
+ - `package.json` 的 scripts 字段 — 提取常用命令
37
+
38
+ ### 2. 扫描代码模式
39
+
40
+ 用 Grep 在项目代码中搜索以下模式,提取隐含规范:
41
+
42
+ - 错误处理模式:`try/except`、`catch`、自定义 Error 类的使用方式
43
+ - 日志模式:使用的日志库和格式(structlog、winston、pino 等)
44
+ - 测试模式:测试框架、断言风格、mock 方式
45
+ - 导入规范:absolute vs relative imports、barrel exports
46
+ - 命名模式:文件命名(kebab-case / PascalCase)、变量命名风格
47
+
48
+ ### 3. 综合分析并生成候选学习点
49
+
50
+ 将扫描结果综合分析,提取 **具体的、可执行的** 编码约束。每个学习点格式:
51
+
52
+ ```
53
+ [来源] 约束描述
54
+ ```
55
+
56
+ 例如:
57
+ ```
58
+ [tsconfig.json] strict 模式已启用,禁止 implicit any
59
+ [.eslintrc] import 必须按 builtin → external → internal 排序
60
+ [pyproject.toml] Python 最低版本 3.11,可使用 match/case 语法
61
+ [CI: lint.yml] PR 必须通过 ruff check + mypy --strict
62
+ [代码模式] 错误处理统一使用自定义 AppError 类,不使用裸 Exception
63
+ [Makefile] 测试命令为 make test,覆盖率阈值 80%
64
+ ```
65
+
66
+ **过滤规则**:
67
+ - 跳过已在 CLAUDE.md 或 spec 文件中记录的规范(避免重复)
68
+ - 只提取对 AI 生成代码有实际影响的约束
69
+ - 忽略纯格式化规则(如果有 Prettier/formatter 自动处理)
70
+
71
+ ### 4. 呈现给用户确认
72
+
73
+ 将候选学习点分组展示:
74
+
75
+ ```
76
+ 扫描发现以下未记录的编码约束:
77
+
78
+ 全局约束(建议写入 CLAUDE.md):
79
+ 1. [x] [tsconfig.json] strict 模式已启用,禁止 implicit any
80
+ 2. [x] [CI] PR 必须通过 lint + type check
81
+ 3. [ ] [.editorconfig] 缩进使用 2 空格
82
+
83
+ 前端约束(建议写入 specs/frontend/):
84
+ 4. [x] [.eslintrc] React hooks 必须遵循 exhaustive-deps 规则
85
+ 5. [x] [代码模式] 组件文件使用 PascalCase 命名
86
+
87
+ 后端约束(建议写入 specs/backend/):
88
+ 6. [x] [pyproject.toml] 使用 ruff 替代 flake8/isort
89
+ 7. [x] [代码模式] 所有 API handler 使用 async def
90
+
91
+ 确认要写入的条目(输入编号,或 all 全部写入,或 none 跳过):
92
+ ```
93
+
94
+ 等待用户确认。
95
+
96
+ ### 5. 写入确认的条目
97
+
98
+ 根据用户选择:
99
+
100
+ - **全局约束** → 用 Edit 追加到 `CLAUDE.md` 的 `## Learnings` 段落,格式:`- [YYYY-MM-DD] 内容`
101
+ - **前端约束** → 询问用户写入哪个 spec 文件,用 Edit 追加到对应 spec 的 `## Learnings` 段落
102
+ - **后端约束** → 同上
103
+
104
+ 每条写入后输出确认。
105
+
106
+ ### 6. 输出摘要
107
+
108
+ ```
109
+ 已写入 N 条学习点:
110
+ - CLAUDE.md: +3 条
111
+ - specs/frontend/quality-standards.md: +2 条
112
+ - specs/backend/code-quality-performance.md: +2 条
113
+ Token 变化: CLAUDE.md 138 → 195 tokens
114
+ ```
115
+
116
+ ## 异常处理
117
+
118
+ - 无配置文件可扫描 → 提示项目可能未初始化,建议手动添加
119
+ - 未发现新约束 → 输出"未发现未记录的约束,当前规范已覆盖项目配置"
120
+ - `.code-flow/` 不存在 → 提示运行 `/project:cf-init`
@@ -0,0 +1,56 @@
1
+ # cf-scan
2
+
3
+ 审计规范文件的 token 分布,检测冗余和过时内容,输出优化建议。
4
+
5
+ ## 输入
6
+
7
+ - `/project:cf-scan` — 完整审计
8
+ - `/project:cf-scan --json` — 仅输出原始 JSON
9
+ - `/project:cf-scan --only-issues` — 仅显示有问题的文件
10
+ - `/project:cf-scan --limit=N` — 限制输出行数
11
+
12
+ ## 执行步骤
13
+
14
+ ### 1. 调用 Python 脚本
15
+
16
+ 用 Bash 执行:
17
+
18
+ ```bash
19
+ python3 .code-flow/scripts/cf_scan.py [--json] [--only-issues] [--limit=N]
20
+ ```
21
+
22
+ 将用户传入的参数原样透传。
23
+
24
+ ### 2. 解析输出
25
+
26
+ 解析 stdout 的 JSON 输出,格式如下:
27
+
28
+ ```json
29
+ {
30
+ "files": [
31
+ {"path": "CLAUDE.md", "tokens": 650, "percent": "26%", "issues": []},
32
+ {"path": "specs/frontend/component-specs.md", "tokens": 420, "percent": "17%", "issues": ["冗余: '结构化日志' 3处重复"]}
33
+ ],
34
+ "total_tokens": 2150,
35
+ "budget": 2500,
36
+ "warnings": []
37
+ }
38
+ ```
39
+
40
+ ### 3. 格式化输出
41
+
42
+ 将 JSON 格式化为人类可读的表格:
43
+
44
+ | 文件 | Tokens | 占比 | 问题 |
45
+ |------|--------|------|------|
46
+ | CLAUDE.md | ~650 | 26% | - |
47
+ | specs/frontend/component-specs.md | ~420 | 17% | - |
48
+ | **合计** | **~2150** | **/ 2500** | |
49
+
50
+ 如有 warnings,在表格下方输出优化建议。
51
+
52
+ ## 异常处理
53
+
54
+ - `.code-flow/` 不存在 → 提示运行 `/project:cf-init`
55
+ - Python 脚本执行失败 → 输出错误信息,建议检查 Python 环境和 pyyaml 安装
56
+ - spec 文件全为空模板 → 输出 warning,提示先填充规范内容
@@ -0,0 +1,65 @@
1
+ # cf-stats
2
+
3
+ 统计规范体系的 token 使用情况,包括各文件分布和预算利用率。
4
+
5
+ ## 输入
6
+
7
+ - `/project:cf-stats` — 完整统计
8
+ - `/project:cf-stats --human` — 人类可读格式
9
+ - `/project:cf-stats --domain=frontend` — 仅统计指定领域
10
+
11
+ ## 执行步骤
12
+
13
+ ### 1. 调用 Python 脚本
14
+
15
+ 用 Bash 执行:
16
+
17
+ ```bash
18
+ python3 .code-flow/scripts/cf_stats.py [--human] [--domain=frontend]
19
+ ```
20
+
21
+ 将用户传入的参数原样透传。
22
+
23
+ ### 2. 解析输出
24
+
25
+ 解析 stdout 的 JSON 输出,格式如下:
26
+
27
+ ```json
28
+ {
29
+ "l0": {"file": "CLAUDE.md", "tokens": 650, "budget": 800},
30
+ "l1": {
31
+ "frontend": [
32
+ {"path": "frontend/directory-structure.md", "tokens": 180},
33
+ {"path": "frontend/quality-standards.md", "tokens": 150}
34
+ ],
35
+ "backend": [
36
+ {"path": "backend/database.md", "tokens": 200}
37
+ ]
38
+ },
39
+ "total_tokens": 1580,
40
+ "total_budget": 2500,
41
+ "utilization": "63%"
42
+ }
43
+ ```
44
+
45
+ ### 3. 格式化输出
46
+
47
+ 将 JSON 格式化为人类可读的统计信息:
48
+
49
+ ```
50
+ L0 (CLAUDE.md): ~650 / 800 tokens
51
+
52
+ L1 Frontend:
53
+ - directory-structure.md: ~180 tokens
54
+ - quality-standards.md: ~150 tokens
55
+
56
+ L1 Backend:
57
+ - database.md: ~200 tokens
58
+
59
+ Total: ~1580 / 2500 tokens (63%)
60
+ ```
61
+
62
+ ## 异常处理
63
+
64
+ - `.code-flow/` 不存在 → 提示运行 `/project:cf-init`
65
+ - Python 脚本执行失败 → 输出错误信息,建议检查 Python 环境