vibeglish 0.1.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.
@@ -0,0 +1,591 @@
1
+ # VibeGlish — 在 Vibe Coding 中自然习得英语
2
+
3
+ > 把你每天跟 Claude Code 说的"蹩脚英语"变成最好的学习素材
4
+
5
+ ---
6
+
7
+ ## 一、产品概述
8
+
9
+ ### 核心洞察
10
+
11
+ 开发者每天跟 Claude Code 用英语对话几十上百次,这些 prompt 是真实的、高频的、有上下文的英语输出——远比任何教材的例句更贴近你自己的表达习惯。但这些"蹩脚英语"说完就忘了,从未被系统性地利用。
12
+
13
+ ### 产品定义
14
+
15
+ VibeGlish 是一个由 Claude Code Hook 驱动的**被动式英语学习系统**。它静默记录你发给 Claude Code 的每条 prompt,定期批量调用 AI 进行语法纠正与分析,最终通过一个本地 Web Dashboard 呈现你的英语成长轨迹。
16
+
17
+ ### 设计哲学
18
+
19
+ - **零打扰**:采集阶段完全静默,不中断编码心流
20
+ - **后置学习**:攒够素材后统一复习,而非实时打断纠错
21
+ - **游戏化**:用数据可视化和成就系统让复习不枯燥
22
+ - **开发者友好**:所有数据本地存储,CLI 优先,一切可 hack
23
+
24
+ ---
25
+
26
+ ## 二、用户画像与场景
27
+
28
+ ### 目标用户
29
+
30
+ 中国开发者(或其他非英语母语开发者),日常使用 Claude Code 进行开发,英语水平大致在 CEFR B1-B2 之间——能表达意图但存在系统性语法问题。
31
+
32
+ ### 典型场景
33
+
34
+ | 场景 | 描述 |
35
+ |------|------|
36
+ | 日常编码 | 用户正常用英语跟 Claude Code 对话,完全不需要意识到 VibeGlish 的存在 |
37
+ | 午休/下班复习 | 打开 Dashboard 查看今天的 prompt 被纠正后的样子,花 5-10 分钟快速浏览 |
38
+ | 周末回顾 | 查看一周的统计报告,发现自己反复犯的错误类型 |
39
+ | 长期成长 | 翻看几个月前的记录,发现当时的错误现在已经不犯了 |
40
+
41
+ ---
42
+
43
+ ## 三、系统架构
44
+
45
+ ### 3.1 整体数据流
46
+
47
+ ```
48
+ ┌──────────────┐ UserPromptSubmit ┌─────────────────┐
49
+ │ 你输入 prompt │ ─────── Hook ────────▶ │ capture.sh │
50
+ │ (Claude Code) │ │ 写入 JSONL 日志 │
51
+ └──────────────┘ └────────┬────────┘
52
+
53
+
54
+ ~/.vibeglish/raw/
55
+ 2026-04-03.jsonl
56
+
57
+ ┌────────────────────────┤
58
+ │ CLI: vibeglish review │
59
+ │ (手动触发 or cron) │
60
+ └────────────────────────┘
61
+
62
+ 调用 Anthropic API
63
+ 批量纠正 + 分析
64
+
65
+
66
+ ~/.vibeglish/reviewed/
67
+ 2026-04-03.json
68
+
69
+
70
+ ┌───────────────────┐
71
+ │ 本地 Web Dashboard │
72
+ │ vibeglish serve │
73
+ └───────────────────┘
74
+ ```
75
+
76
+ ### 3.2 技术选型
77
+
78
+ | 组件 | 技术 | 理由 |
79
+ |------|------|------|
80
+ | Hook 脚本 | Bash + jq | 极轻量,无需额外运行时依赖 |
81
+ | 原始日志 | JSONL 文件(按天分片) | 追加写入性能最佳,无需数据库 |
82
+ | AI 纠正引擎 | Anthropic Messages API (claude-sonnet-4-20250514) | 成本低、速度快、质量足够 |
83
+ | 复习数据 | JSON 文件(按天分片) | 与原始日志一一对应,方便管理 |
84
+ | Dashboard | 单文件 HTML + 内嵌 JS(由本地 HTTP server 提供) | 零前端构建依赖,一个 `python -m http.server` 即可 |
85
+ | CLI 工具 | Node.js 单文件脚本 | 与 Claude Code 生态一致,用户大概率已装 Node |
86
+
87
+ ---
88
+
89
+ ## 四、功能模块详细设计
90
+
91
+ ### 4.1 模块一:静默采集(Hook)
92
+
93
+ #### 4.1.1 Hook 配置
94
+
95
+ 在 `~/.claude/settings.json` 中注册 `UserPromptSubmit` hook:
96
+
97
+ ```json
98
+ {
99
+ "hooks": {
100
+ "UserPromptSubmit": [
101
+ {
102
+ "matcher": "",
103
+ "hooks": [
104
+ {
105
+ "type": "command",
106
+ "command": "~/.vibeglish/hooks/capture.sh"
107
+ }
108
+ ]
109
+ }
110
+ ]
111
+ }
112
+ }
113
+ ```
114
+
115
+ #### 4.1.2 capture.sh 行为
116
+
117
+ 脚本从 stdin 读取 JSON,提取用户 prompt 内容,追加写入日志文件。
118
+
119
+ **输入格式**(由 Claude Code 通过 stdin 传入):
120
+
121
+ ```json
122
+ {
123
+ "session_id": "abc123",
124
+ "prompt": "help me fix the drift sync issue, it failed when offline",
125
+ "cwd": "/Users/jian/projects/tapdoki"
126
+ }
127
+ ```
128
+
129
+ **输出格式**(追加到 `~/.vibeglish/raw/2026-04-03.jsonl`):
130
+
131
+ ```json
132
+ {
133
+ "ts": "2026-04-03T14:32:01+08:00",
134
+ "session_id": "abc123",
135
+ "project": "tapdoki",
136
+ "prompt": "help me fix the drift sync issue, it failed when offline",
137
+ "char_count": 54,
138
+ "word_count": 10
139
+ }
140
+ ```
141
+
142
+ #### 4.1.3 过滤规则
143
+
144
+ 不是所有 prompt 都值得纠正。capture.sh 需要在写入前过滤:
145
+
146
+ | 过滤条件 | 规则 | 理由 |
147
+ |----------|------|------|
148
+ | 纯代码粘贴 | 如果 prompt 中代码块(被 ``` 包裹的内容或缩进 4 格的行)占比 > 70%,跳过 | 代码不是英语学习素材 |
149
+ | 过短 | word_count < 4 | "yes" "ok" "run it" 没有纠正价值 |
150
+ | 纯中文 | 不包含任何 ASCII 字母 | 不属于英语练习 |
151
+ | Slash command | 以 `/` 开头 | 这是 Claude Code 内置命令 |
152
+ | 文件路径粘贴 | 整条 prompt 匹配路径模式(如纯 `/path/to/file`) | 无英语内容 |
153
+ | 重复 | 与同一 session 内上一条完全相同 | 避免重试造成的重复记录 |
154
+
155
+ #### 4.1.4 性能约束
156
+
157
+ - capture.sh 必须在 **50ms 以内**完成,否则会拖慢 Claude Code 的响应
158
+ - 仅做 I/O 追加写入,不做任何网络请求
159
+ - 如果写入失败(磁盘满等),静默失败(exit 0),绝不阻塞 Claude Code
160
+
161
+ #### 4.1.5 边缘情况
162
+
163
+ | 情况 | 处理方式 |
164
+ |------|----------|
165
+ | 日志文件不存在 | 自动创建,包含日期目录 |
166
+ | 磁盘满 | 捕获写入错误,静默退出 |
167
+ | stdin 不是合法 JSON | 跳过,写入错误日志 `~/.vibeglish/error.log` |
168
+ | prompt 字段缺失 | 跳过 |
169
+ | 混合中英文 prompt | **保留**——这是真实场景,AI 纠正时会单独处理英语部分 |
170
+ | 包含敏感信息(API key 等) | 不做脱敏——所有数据仅本地存储,后续 AI 调用用用户自己的 API key |
171
+ | 并发写入(多个 Claude Code 实例) | 使用 `flock` 文件锁保证 JSONL 追加原子性 |
172
+ | 跨天切换(午夜) | 以 prompt 发生时的本地日期为准分片 |
173
+
174
+ ---
175
+
176
+ ### 4.2 模块二:AI 批量纠正引擎
177
+
178
+ #### 4.2.1 触发方式
179
+
180
+ ```bash
181
+ # 纠正今天的记录
182
+ vibeglish review
183
+
184
+ # 纠正指定日期
185
+ vibeglish review --date 2026-04-01
186
+
187
+ # 纠正一个日期范围
188
+ vibeglish review --from 2026-03-25 --to 2026-04-03
189
+
190
+ # 仅纠正尚未处理的记录(默认行为)
191
+ vibeglish review # 自动跳过 reviewed/ 中已存在的日期
192
+ ```
193
+
194
+ #### 4.2.2 Prompt 工程
195
+
196
+ 向 API 发送的 system prompt:
197
+
198
+ ```
199
+ You are an English writing coach for non-native developers. You will receive
200
+ a batch of prompts that a Chinese developer wrote to an AI coding assistant.
201
+
202
+ For each prompt, provide:
203
+ 1. "corrected": The natural, idiomatic English version. Preserve technical
204
+ terms exactly. If the original mixes Chinese and English, only correct
205
+ the English parts and leave Chinese as-is.
206
+ 2. "issues": An array of specific corrections, each with:
207
+ - "type": one of "grammar", "vocabulary", "spelling", "punctuation",
208
+ "style", "word_order"
209
+ - "original": the problematic fragment (quote from original)
210
+ - "corrected": the fixed fragment
211
+ - "rule": a concise explanation in CHINESE (学习者的母语) so the
212
+ developer actually absorbs it. Use grammatical terminology sparingly.
213
+ 3. "score": 0-100 fluency score for the original. 100 = native-level.
214
+ Scoring rubric:
215
+ - 90-100: Minor style issues only
216
+ - 70-89: Understandable but has noticeable errors
217
+ - 50-69: Meaning is clear but grammar is systematically broken
218
+ - 30-49: Requires effort to understand
219
+ - 0-29: Largely incomprehensible
220
+ 4. "is_clean": boolean, true if no corrections needed (score >= 95)
221
+
222
+ If a prompt is just a code snippet, a file path, or not meaningfully English,
223
+ return {"skip": true} for that entry.
224
+
225
+ Respond with a JSON array matching the input order. No markdown fences.
226
+ ```
227
+
228
+ #### 4.2.3 批处理策略
229
+
230
+ | 参数 | 值 | 理由 |
231
+ |------|-----|------|
232
+ | 每批大小 | 20 条 prompt | 平衡 token 用量与 API 调用次数 |
233
+ | 并发数 | 3 | 避免触发 rate limit |
234
+ | 模型 | claude-sonnet-4-20250514 | 性价比最优 |
235
+ | max_tokens | 4096 | 20 条的纠正结果通常在 2000-3000 tokens |
236
+ | temperature | 0 | 纠正任务需要确定性 |
237
+
238
+ #### 4.2.4 输出格式
239
+
240
+ 写入 `~/.vibeglish/reviewed/2026-04-03.json`:
241
+
242
+ ```json
243
+ {
244
+ "date": "2026-04-03",
245
+ "reviewed_at": "2026-04-03T22:15:00+08:00",
246
+ "model": "claude-sonnet-4-20250514",
247
+ "stats": {
248
+ "total_captured": 47,
249
+ "total_reviewed": 38,
250
+ "skipped": 9,
251
+ "avg_score": 61.3,
252
+ "issue_breakdown": {
253
+ "grammar": 42,
254
+ "vocabulary": 11,
255
+ "spelling": 3,
256
+ "punctuation": 8,
257
+ "style": 15,
258
+ "word_order": 5
259
+ }
260
+ },
261
+ "entries": [
262
+ {
263
+ "id": "20260403-143201-a1b2",
264
+ "ts": "2026-04-03T14:32:01+08:00",
265
+ "project": "tapdoki",
266
+ "original": "help me fix the drift sync issue, it failed when offline",
267
+ "corrected": "Help me fix the Drift sync issue — it fails when the device is offline.",
268
+ "score": 62,
269
+ "is_clean": false,
270
+ "issues": [
271
+ {
272
+ "type": "grammar",
273
+ "original": "it failed",
274
+ "corrected": "it fails",
275
+ "rule": "描述一个反复出现的问题用一般现在时,不用过去时"
276
+ },
277
+ {
278
+ "type": "grammar",
279
+ "original": "when offline",
280
+ "corrected": "when the device is offline",
281
+ "rule": "offline 是形容词,需要主语和系动词:the device is offline"
282
+ }
283
+ ]
284
+ }
285
+ ]
286
+ }
287
+ ```
288
+
289
+ #### 4.2.5 成本估算
290
+
291
+ | 场景 | 日 prompt 数 | 估算 input tokens | 估算 output tokens | 日均成本 (Sonnet) |
292
+ |------|-------------|-------------------|--------------------|--------------------|
293
+ | 轻度使用 | 30 | ~3,000 | ~4,500 | ~$0.03 |
294
+ | 中度使用 | 80 | ~8,000 | ~12,000 | ~$0.08 |
295
+ | 重度使用 | 200 | ~20,000 | ~30,000 | ~$0.20 |
296
+
297
+ #### 4.2.6 边缘情况
298
+
299
+ | 情况 | 处理方式 |
300
+ |------|----------|
301
+ | API key 未配置 | 清晰报错,引导用户设置 `ANTHROPIC_API_KEY` 环境变量 |
302
+ | API 调用失败(网络/rate limit) | 指数退避重试 3 次,最终失败的批次标记为 `"status": "failed"`,下次 review 可重试 |
303
+ | API 返回非法 JSON | 尝试修复(去 markdown 围栏、修复尾部截断),若仍失败则标记该批次为 failed |
304
+ | 单条 prompt 极长(>2000 字) | 截断至前 500 词并标注 `"truncated": true` |
305
+ | 同一天重复 review | 默认跳过已 reviewed 的日期,加 `--force` 覆盖 |
306
+ | 原始文件正在被 hook 追加写入 | review 命令先复制一份快照再处理,避免读写冲突 |
307
+ | AI 返回的数组长度与输入不匹配 | 通过 id 做 fallback 匹配,无法匹配的标记 `"review_status": "mismatch"` |
308
+
309
+ ---
310
+
311
+ ### 4.3 模块三:CLI 工具
312
+
313
+ #### 4.3.1 命令列表
314
+
315
+ ```bash
316
+ vibeglish init # 初始化目录结构 + 安装 hook
317
+ vibeglish status # 显示今日采集数/待 review 数/总计数
318
+ vibeglish review # 触发 AI 纠正(参数见 4.2.1)
319
+ vibeglish report # 在终端打印统计摘要
320
+ vibeglish serve # 启动本地 Dashboard(默认 localhost:6188)
321
+ vibeglish export # 导出全部数据为单个 JSON 或 CSV
322
+ vibeglish hook-test # 模拟一条 prompt 输入,测试 hook 是否正常工作
323
+ vibeglish uninstall # 移除 hook 配置(保留数据)
324
+ ```
325
+
326
+ #### 4.3.2 `vibeglish init` 详细流程
327
+
328
+ 1. 创建目录结构:
329
+ ```
330
+ ~/.vibeglish/
331
+ ├── raw/ # 原始 JSONL 日志
332
+ ├── reviewed/ # AI 纠正结果
333
+ ├── hooks/ # hook 脚本
334
+ │ └── capture.sh
335
+ ├── dashboard/ # 静态 Web 文件
336
+ │ └── index.html
337
+ ├── config.json # 用户配置
338
+ └── error.log # 错误日志
339
+ ```
340
+
341
+ 2. 生成 `capture.sh` 并设置 `chmod +x`
342
+
343
+ 3. 读取 `~/.claude/settings.json`:
344
+ - 如果文件不存在 → 创建并写入 hook 配置
345
+ - 如果文件存在但无 `hooks` 字段 → 追加
346
+ - 如果已有 `UserPromptSubmit` hook → **不覆盖**,提示用户手动合并,并输出需要添加的配置片段
347
+ - 如果已有 VibeGlish 的 hook → 提示已安装,跳过
348
+
349
+ 4. 输出安装成功信息及快速使用指引
350
+
351
+ #### 4.3.3 `vibeglish report` 终端输出示例
352
+
353
+ ```
354
+ 📊 VibeGlish Weekly Report (Mar 28 - Apr 03)
355
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
356
+
357
+ Prompts captured: 287
358
+ Prompts reviewed: 263 (24 skipped)
359
+ Average score: 64.2 ▲ +3.1 vs last week
360
+
361
+ 🔥 Top 3 recurring mistakes:
362
+ ┌──────────────────────────────────────────────────────┐
363
+ │ 1. 冠词缺失 (a/the) 37 次 ████████░░ │
364
+ │ 2. 时态错误 (现在时 vs 过去时) 24 次 █████░░░░░ │
365
+ │ 3. 主谓一致 18 次 ████░░░░░░ │
366
+ └──────────────────────────────────────────────────────┘
367
+
368
+ 💎 Clean prompts (score ≥ 95): 31 / 263 (11.8%)
369
+
370
+ 📈 Score trend:
371
+ Mon ██████░░░░ 58
372
+ Tue ███████░░░ 65
373
+ Wed ██████░░░░ 61
374
+ Thu ███████░░░ 67
375
+ Fri ████████░░ 72 ← best day!
376
+
377
+ 🏆 Achievements unlocked this week:
378
+ "Article Apprentice" — 连续 3 天冠词错误 < 5 次
379
+ ```
380
+
381
+ #### 4.3.4 config.json 默认值
382
+
383
+ ```json
384
+ {
385
+ "api_key_env": "ANTHROPIC_API_KEY",
386
+ "model": "claude-sonnet-4-20250514",
387
+ "locale": "zh-CN",
388
+ "min_word_count": 4,
389
+ "max_code_ratio": 0.7,
390
+ "batch_size": 20,
391
+ "concurrency": 3,
392
+ "dashboard_port": 6188,
393
+ "auto_review_cron": null,
394
+ "score_explanation_language": "zh-CN"
395
+ }
396
+ ```
397
+
398
+ ---
399
+
400
+ ### 4.4 模块四:Web Dashboard
401
+
402
+ #### 4.4.1 技术方案
403
+
404
+ 单个 `index.html` 文件,内嵌 CSS 和 JS,不依赖构建工具。通过 `vibeglish serve` 启动一个静态文件服务器 + 简易 API 代理(读取 `~/.vibeglish/reviewed/` 下的 JSON 文件)。
405
+
406
+ #### 4.4.2 页面结构
407
+
408
+ **页面一:Today(默认首页)**
409
+
410
+ - 顶部大数字:今日得分(均值)、今日 prompt 数、clean prompt 占比
411
+ - 时间线视图:按时间排列今天的每条 prompt
412
+ - 每条展示:原文 → 纠正后(diff 高亮)→ 错误详情(折叠)
413
+ - 点击可展开看每个 issue 的中文解释
414
+ - 左侧彩色竖条表示 score(绿 > 80,黄 60-80,红 < 60)
415
+ - 底部:今日错误类型分布饼图
416
+
417
+ **页面二:Trends(成长曲线)**
418
+
419
+ - 主图:每日平均 score 折线图(可切换周/月/全部)
420
+ - 副图:每日 prompt 数量柱状图
421
+ - 错误类型堆叠面积图:展示各类错误随时间的变化趋势
422
+ - "已消灭的错误"列表:曾经频繁出现但最近 30 天不再出现的错误类型
423
+
424
+ **页面三:Mistakes(错题本)**
425
+
426
+ - 按错误类型分 tab:grammar / vocabulary / spelling / punctuation / style / word_order
427
+ - 每种类型下按频次排序展示:
428
+ - 错误模式(如"missing article before noun")
429
+ - 出现次数及趋势迷你图
430
+ - 最近 3 个真实例句(original → corrected)
431
+ - 支持搜索:按关键词搜索原始 prompt
432
+
433
+ **页面四:Achievements(成就系统)**
434
+
435
+ - 成就卡片墙,每个成就包含:图标、标题、描述、解锁条件、解锁时间
436
+ - 已解锁的亮色显示,未解锁的灰色 + 进度条
437
+
438
+ #### 4.4.3 成就系统设计
439
+
440
+ | 成就名 | 条件 | 图标意象 |
441
+ |--------|------|----------|
442
+ | First Blood | 完成第一次 review | 🩸 |
443
+ | Grammar Guru | 连续 7 天 grammar 类错误 ≤ 2 次/天 | 📐 |
444
+ | Article Apprentice | 连续 3 天无冠词错误 | 🎓 |
445
+ | Streak Master (×N) | 连续 N 天有记录(7/30/100) | 🔥 |
446
+ | Century Club | 累计 review 100 条 prompt | 💯 |
447
+ | Thousand Words | 累计 review 1000 条 prompt | 📚 |
448
+ | Clean Coder | 单日 clean prompt 占比 > 50% | ✨ |
449
+ | Perfect Day | 单日全部 prompt score ≥ 90 | 💎 |
450
+ | Polyglot | 在 5 个不同 project 中留下记录 | 🌍 |
451
+ | Night Owl | 凌晨 0-5 点仍在 coding 并留下 prompt | 🦉 |
452
+ | Speed Learner | 某错误类型周频次从 >10 降至 <3 | ⚡ |
453
+ | Vocabulary Voyager | 使用过 50 个不同的技术词汇 | 🧭 |
454
+
455
+ #### 4.4.4 Diff 高亮规则
456
+
457
+ 原文与纠正后文本的对比展示:
458
+
459
+ - 使用字符级 diff 算法(类似 `git diff --word-diff`)
460
+ - 删除部分:红色背景 + 删除线
461
+ - 新增部分:绿色背景
462
+ - 未变化部分:正常显示
463
+ - 中文部分:灰色显示,不参与 diff
464
+
465
+ #### 4.4.5 Dashboard 边缘情况
466
+
467
+ | 情况 | 处理方式 |
468
+ |------|----------|
469
+ | 无任何数据 | 显示友好的空状态引导页:"开始用 Claude Code 写代码吧!" |
470
+ | 只有 raw 没有 reviewed | 提示运行 `vibeglish review` |
471
+ | 数据量极大(半年+) | 前端分页加载,Trends 页面默认只展示最近 30 天 |
472
+ | 端口被占用 | 自动尝试 6189、6190...直到找到可用端口 |
473
+ | 浏览器不支持某些 CSS 特性 | 使用渐进增强,核心功能不依赖现代 CSS |
474
+
475
+ ---
476
+
477
+ ## 五、安装与卸载
478
+
479
+ ### 5.1 安装
480
+
481
+ ```bash
482
+ # 方式一:npx 直接运行(推荐)
483
+ npx vibeglish init
484
+
485
+ # 方式二:全局安装
486
+ npm install -g vibeglish
487
+ vibeglish init
488
+ ```
489
+
490
+ `vibeglish init` 执行完毕后,用户需要**重启 Claude Code**(或新开一个 session)使 hook 生效。init 命令应在最后明确提示这一点。
491
+
492
+ ### 5.2 卸载
493
+
494
+ ```bash
495
+ vibeglish uninstall
496
+ ```
497
+
498
+ 行为:
499
+ - 从 `~/.claude/settings.json` 中移除 VibeGlish 的 hook 条目
500
+ - **不删除** `~/.vibeglish/` 目录(保留用户数据)
501
+ - 提示用户如需彻底删除数据,手动 `rm -rf ~/.vibeglish`
502
+
503
+ ### 5.3 升级
504
+
505
+ ```bash
506
+ npm update -g vibeglish
507
+ vibeglish init --upgrade # 更新 hook 脚本和 dashboard,不影响数据
508
+ ```
509
+
510
+ ---
511
+
512
+ ## 六、数据安全与隐私
513
+
514
+ | 关切 | 处理 |
515
+ |------|------|
516
+ | Prompt 可能包含敏感代码 | 所有数据仅存储在本地 `~/.vibeglish/`,不上传任何第三方服务 |
517
+ | AI 纠正需调用 API | 使用用户自己的 Anthropic API key,走标准 API 通道 |
518
+ | prompt 中的 API key/密码 | capture.sh 对明显的 secret 模式做基础脱敏(`sk-***`, `ghp_***` 等替换为 `[REDACTED]`) |
519
+ | `.vibeglish` 目录权限 | init 时设为 `700`(仅用户可读写) |
520
+ | git 忽略 | init 时不操作 `.gitignore`(因为数据在 home 目录,不在 repo 中) |
521
+
522
+ ---
523
+
524
+ ## 七、后续扩展方向(v2 及以后)
525
+
526
+ 以下功能**不在 MVP 范围内**,但架构设计时需预留空间:
527
+
528
+ 1. **实时模式(可选)**:通过 `UserPromptSubmit` hook 返回 `additionalContext`,在 Claude Code 的上下文中注入上一条 prompt 的纠正结果,让 Claude 在回复中顺带纠正你的英语(需用户主动开启,有延迟代价)
529
+
530
+ 2. **Anki 导出**:将高频错误模式导出为 Anki 卡片(正面:错误句,背面:纠正 + 解释)
531
+
532
+ 3. **团队排行榜**:团队成员的匿名化 score 排行(需后端服务,离 MVP 很远)
533
+
534
+ 4. **VS Code 侧边栏**:如果用户使用 Claude Code 的 VS Code 扩展,可以做一个侧边栏面板显示实时纠正
535
+
536
+ 5. **自定义纠正重点**:用户可配置"我想重点关注冠词"或"忽略标点问题"
537
+
538
+ 6. **语音输入分析**:如果未来 Claude Code 支持语音输入,可扩展到发音建议
539
+
540
+ ---
541
+
542
+ ## 八、验收标准(Definition of Done)
543
+
544
+ ### MVP 完成的定义
545
+
546
+ - [ ] `vibeglish init` 可在 macOS/Linux 上一键完成安装
547
+ - [ ] Hook 正确触发并写入 JSONL,不影响 Claude Code 响应速度(< 50ms)
548
+ - [ ] `vibeglish review` 可批量纠正,输出结构化 JSON
549
+ - [ ] `vibeglish serve` 可启动 Dashboard,Today/Trends/Mistakes 三个核心页面可用
550
+ - [ ] `vibeglish report` 可在终端输出周报摘要
551
+ - [ ] 成就系统至少实现 6 个成就
552
+ - [ ] 所有边缘情况有合理处理(不崩溃、有友好提示)
553
+ - [ ] README 包含安装指引、截图、和一个 2 分钟上手流程
554
+
555
+ ### 不在 MVP 范围内
556
+
557
+ - Windows 支持(Hook 脚本是 bash)
558
+ - 多语言 Dashboard UI(MVP 只做中文)
559
+ - 自动定时 review(用户手动触发或自行配 cron)
560
+ - 任何需要后端服务/数据库的功能
561
+
562
+ ---
563
+
564
+ ## 九、开发提示(给 Claude Code 的 CLAUDE.md 建议)
565
+
566
+ 将以下内容放入项目的 `CLAUDE.md`,帮助 Claude Code 理解项目上下文:
567
+
568
+ ```markdown
569
+ # VibeGlish
570
+
571
+ 一个 Claude Code Hook 驱动的英语学习工具。
572
+
573
+ ## 架构
574
+ - `src/hooks/capture.sh` — UserPromptSubmit hook,写入 ~/.vibeglish/raw/
575
+ - `src/cli/index.mjs` — CLI 入口,子命令:init/review/report/serve/export
576
+ - `src/review/engine.mjs` — Anthropic API 批量纠正引擎
577
+ - `src/dashboard/index.html` — 单文件 Web Dashboard
578
+ - `src/achievements.mjs` — 成就系统计算逻辑
579
+
580
+ ## 约束
581
+ - capture.sh 必须 < 50ms 完成,不做网络请求
582
+ - Dashboard 是单个 HTML 文件,不用框架,不用构建工具
583
+ - 所有数据存储在 ~/.vibeglish/,不用数据库
584
+ - CLI 用 Node.js ESM,最低支持 Node 18
585
+ - API 调用用 claude-sonnet-4-20250514
586
+
587
+ ## 测试
588
+ - `npm test` 运行全部测试
589
+ - hook 测试用 `echo '{"prompt":"test"}' | bash src/hooks/capture.sh`
590
+ - API 测试用 mock,不实际调用
591
+ ```