@mycodemap/mycodemap 0.2.0 → 0.3.7

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/CHANGELOG.md +95 -0
  2. package/dist/cli/commands/ship/analyzer.d.ts +26 -0
  3. package/dist/cli/commands/ship/analyzer.d.ts.map +1 -0
  4. package/dist/cli/commands/ship/analyzer.js +143 -0
  5. package/dist/cli/commands/ship/analyzer.js.map +1 -0
  6. package/dist/cli/commands/ship/checker.d.ts +20 -0
  7. package/dist/cli/commands/ship/checker.d.ts.map +1 -0
  8. package/dist/cli/commands/ship/checker.js +86 -0
  9. package/dist/cli/commands/ship/checker.js.map +1 -0
  10. package/dist/cli/commands/ship/index.d.ts +17 -0
  11. package/dist/cli/commands/ship/index.d.ts.map +1 -0
  12. package/dist/cli/commands/ship/index.js +51 -0
  13. package/dist/cli/commands/ship/index.js.map +1 -0
  14. package/dist/cli/commands/ship/monitor.d.ts +19 -0
  15. package/dist/cli/commands/ship/monitor.d.ts.map +1 -0
  16. package/dist/cli/commands/ship/monitor.js +105 -0
  17. package/dist/cli/commands/ship/monitor.js.map +1 -0
  18. package/dist/cli/commands/ship/pipeline.d.ts +23 -0
  19. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -0
  20. package/dist/cli/commands/ship/pipeline.js +152 -0
  21. package/dist/cli/commands/ship/pipeline.js.map +1 -0
  22. package/dist/cli/commands/ship/publisher.d.ts +11 -0
  23. package/dist/cli/commands/ship/publisher.d.ts.map +1 -0
  24. package/dist/cli/commands/ship/publisher.js +75 -0
  25. package/dist/cli/commands/ship/publisher.js.map +1 -0
  26. package/dist/cli/commands/ship/rules/confidence-rules.d.ts +48 -0
  27. package/dist/cli/commands/ship/rules/confidence-rules.d.ts.map +1 -0
  28. package/dist/cli/commands/ship/rules/confidence-rules.js +122 -0
  29. package/dist/cli/commands/ship/rules/confidence-rules.js.map +1 -0
  30. package/dist/cli/commands/ship/rules/quality-rules.d.ts +25 -0
  31. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -0
  32. package/dist/cli/commands/ship/rules/quality-rules.js +134 -0
  33. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -0
  34. package/dist/cli/commands/ship/rules/version-rules.d.ts +24 -0
  35. package/dist/cli/commands/ship/rules/version-rules.d.ts.map +1 -0
  36. package/dist/cli/commands/ship/rules/version-rules.js +75 -0
  37. package/dist/cli/commands/ship/rules/version-rules.js.map +1 -0
  38. package/dist/cli/commands/ship/versioner.d.ts +12 -0
  39. package/dist/cli/commands/ship/versioner.d.ts.map +1 -0
  40. package/dist/cli/commands/ship/versioner.js +92 -0
  41. package/dist/cli/commands/ship/versioner.js.map +1 -0
  42. package/dist/cli/index.js +9 -0
  43. package/dist/cli/index.js.map +1 -1
  44. package/docs/PUBLISHING.md +344 -34
  45. package/docs/ai-guide/COMMANDS.md +34 -0
  46. package/docs/rules/pre-release-checklist.md +426 -0
  47. package/package.json +8 -2
  48. package/scripts/.githooks/commit-msg +31 -0
  49. package/scripts/.githooks/pre-commit +55 -0
  50. package/scripts/benchmark.ts +209 -0
  51. package/scripts/hooks/commit-msg +24 -0
  52. package/scripts/hooks/install-hooks.sh +29 -0
  53. package/scripts/hooks/pre-commit +60 -0
  54. package/scripts/pre-release-check.js +717 -0
  55. package/scripts/release.sh +142 -0
  56. package/scripts/run-benchmark.sh +29 -0
  57. package/scripts/validate-ai-docs.js +294 -0
  58. package/scripts/validate-docs.js +238 -0
  59. package/scripts/validate-pack.js +86 -0
  60. package/dist/ai/claude.d.ts +0 -38
  61. package/dist/ai/claude.d.ts.map +0 -1
  62. package/dist/ai/claude.js +0 -169
  63. package/dist/ai/claude.js.map +0 -1
  64. package/dist/ai/codex.d.ts +0 -38
  65. package/dist/ai/codex.d.ts.map +0 -1
  66. package/dist/ai/codex.js +0 -169
  67. package/dist/ai/codex.js.map +0 -1
  68. package/dist/ai/factory.d.ts +0 -48
  69. package/dist/ai/factory.d.ts.map +0 -1
  70. package/dist/ai/factory.js +0 -95
  71. package/dist/ai/factory.js.map +0 -1
  72. package/dist/ai/index.d.ts +0 -12
  73. package/dist/ai/index.d.ts.map +0 -1
  74. package/dist/ai/index.js +0 -29
  75. package/dist/ai/index.js.map +0 -1
  76. package/dist/ai/provider.d.ts +0 -70
  77. package/dist/ai/provider.d.ts.map +0 -1
  78. package/dist/ai/provider.js +0 -31
  79. package/dist/ai/provider.js.map +0 -1
  80. package/dist/ai/subagent-caller.d.ts +0 -90
  81. package/dist/ai/subagent-caller.d.ts.map +0 -1
  82. package/dist/ai/subagent-caller.js +0 -280
  83. package/dist/ai/subagent-caller.js.map +0 -1
  84. package/dist/ai/types.d.ts +0 -70
  85. package/dist/ai/types.d.ts.map +0 -1
  86. package/dist/ai/types.js +0 -5
  87. package/dist/ai/types.js.map +0 -1
  88. package/dist/generator/ai-overview.d.ts +0 -51
  89. package/dist/generator/ai-overview.d.ts.map +0 -1
  90. package/dist/generator/ai-overview.js +0 -160
  91. package/dist/generator/ai-overview.js.map +0 -1
  92. package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
  93. package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
  94. package/dist/orchestrator/ai-feed-generator.js +0 -377
  95. package/dist/orchestrator/ai-feed-generator.js.map +0 -1
  96. package/docs/archive/test-report-symbol-search.md +0 -384
  97. package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
  98. package/docs/archive/test_report_scenario5.md +0 -615
  99. package/docs/archive/test_scenario_3_impact_analysis_report.md +0 -520
@@ -0,0 +1,426 @@
1
+ # 发布前检查清单 (Pre-Release Checklist)
2
+
3
+ > 本文档定义了每次发布前必须通过的强制护栏规则。
4
+ >
5
+ > **自动执行**: `npm run docs:check:pre-release`
6
+ > **CI 集成**: 发布工作流会自动运行此检查
7
+
8
+ ---
9
+
10
+ ## 🚨 关键原则
11
+
12
+ **任何发布都必须满足以下原则:**
13
+
14
+ 1. **AI友好文档完整性** - 所有AI文档必须存在且符合标准
15
+ 2. **版本一致性** - 所有文件中的版本号必须一致
16
+ 3. **llms.txt 标准** - 必须符合 llmstxt.org 规范
17
+ 4. **交叉引用有效性** - 所有内部链接必须有效
18
+ 5. **CHANGELOG 同步** - 必须包含当前版本的更新记录
19
+ 6. **OIDC 配置** - 使用 Trusted Publishing 方式发布
20
+
21
+ ---
22
+
23
+ ## 📋 检查项详情 (共10项)
24
+
25
+ ### 1. AI 文档完整性检查
26
+
27
+ **目标**: 确保所有必需的AI文档存在且大小在合理范围内
28
+
29
+ **检查文件**:
30
+ | 文件 | 必需 | 最小大小 | 最大大小 |
31
+ |------|------|---------|---------|
32
+ | `llms.txt` | ✅ | 100B | 10KB |
33
+ | `AI_GUIDE.md` | ✅ | 1KB | 50KB |
34
+ | `AI_DISCOVERY.md` | ✅ | 1KB | 50KB |
35
+ | `ai-document-index.yaml` | ✅ | 500B | 50KB |
36
+ | `docs/ai-guide/README.md` | ✅ | 500B | 30KB |
37
+ | `docs/ai-guide/QUICKSTART.md` | ✅ | 1KB | 50KB |
38
+ | `docs/ai-guide/COMMANDS.md` | ✅ | 2KB | 100KB |
39
+ | `docs/ai-guide/OUTPUT.md` | ✅ | 2KB | 100KB |
40
+ | `docs/ai-guide/PATTERNS.md` | ✅ | 2KB | 100KB |
41
+ | `docs/ai-guide/PROMPTS.md` | ✅ | 2KB | 100KB |
42
+ | `docs/ai-guide/INTEGRATION.md` | ✅ | 2KB | 150KB |
43
+
44
+ **限制**:
45
+ - 单个文件最大 150KB
46
+ - 所有AI文档总计最大 500KB
47
+
48
+ ### 2. llms.txt 标准格式检查
49
+
50
+ **目标**: 确保符合 [llmstxt.org](https://llmstxt.org/) 标准
51
+
52
+ **必需元素**:
53
+ - [ ] H1 标题 (`# CodeMap`)
54
+ - [ ] 摘要引用 (`> CodeMap 是...`)
55
+ - [ ] 文档章节 (`## 文档` 或 `## Docs`)
56
+ - [ ] 链接格式 (`[Title](./path.md)`)
57
+
58
+ **推荐元素**:
59
+ - [ ] 快速开始章节
60
+ - [ ] 完整文档章节
61
+ - [ ] 可选章节
62
+
63
+ **Token 效率**:
64
+ - llms.txt 估算 token 数必须 < 5,000
65
+
66
+ ### 3. 版本一致性检查
67
+
68
+ **目标**: 确保所有文件中的版本号一致
69
+
70
+ **检查文件**:
71
+ - `package.json` - `version` 字段
72
+ - `llms.txt` - 文中版本号
73
+ - `ai-document-index.yaml` - `project.version`
74
+ - `AI_GUIDE.md` - 文中版本号
75
+ - `AI_DISCOVERY.md` - 文中版本号 (可选)
76
+
77
+ **要求**:
78
+ - 所有文件版本号必须完全一致
79
+ - 必须符合语义化版本规范 (`x.x.x`)
80
+ - 预发布版本可包含后缀 (`0.2.0-beta.1`)
81
+
82
+ **版本同步清单**:
83
+
84
+ 更新版本号时必须同步以下文件:
85
+ - [ ] `package.json` - 主版本号
86
+ - [ ] `llms.txt` - 文中版本声明
87
+ - [ ] `ai-document-index.yaml` - `project.version`
88
+ - [ ] `AI_GUIDE.md` - 页眉版本信息
89
+ - [ ] `AI_DISCOVERY.md` - 页眉版本信息
90
+ - [ ] `CHANGELOG.md` - 版本条目
91
+
92
+ ### 4. 交叉引用有效性检查
93
+
94
+ **目标**: 确保文档间的引用关系完整
95
+
96
+ **必需引用**:
97
+ | 源文件 | 必须引用 |
98
+ |--------|---------|
99
+ | `llms.txt` | `AI_GUIDE.md`, `ai-document-index.yaml` |
100
+ | `AI_GUIDE.md` | `AI_DISCOVERY.md`, `ai-document-index.yaml`, `docs/ai-guide/` |
101
+ | `README.md` | `AI_GUIDE.md` |
102
+ | `AGENTS.md` | AI 友好文档规范 |
103
+ | `CLAUDE.md` | `AI_GUIDE.md`, `docs/ai-guide/` |
104
+
105
+ **链接验证**:
106
+ - 所有内部链接必须指向存在的文件
107
+ - 锚点链接 (`#section`) 会被忽略
108
+
109
+ ### 5. AI 友好性检查
110
+
111
+ **目标**: 确保 AI_GUIDE.md 符合 AI 阅读最佳实践
112
+
113
+ **检查项**:
114
+ - [ ] 层级标题 (`##`, `###`)
115
+ - [ ] 表格 (速查表)
116
+ - [ ] 代码块 (bash/typescript/json)
117
+ - [ ] TypeScript 接口定义
118
+ - [ ] 决策树/流程图
119
+ - [ ] 提示词模板
120
+
121
+ ### 6. CHANGELOG 同步检查
122
+
123
+ **目标**: 确保 CHANGELOG 包含当前版本的更新记录
124
+
125
+ **要求**:
126
+ - 必须包含当前版本号的条目
127
+ - 推荐包含 AI 文档相关更新记录
128
+
129
+ **格式示例**:
130
+ ```markdown
131
+ ## [0.2.0] - 2026-03-17 - MVP3 Architecture Release
132
+
133
+ ### 🐛 Bug Fixes
134
+ - ...
135
+
136
+ ### 📚 Documentation
137
+ - ...
138
+ ```
139
+
140
+ ### 7. 发布必需文件检查
141
+
142
+ **目标**: 确保发布到 NPM/GitHub 所需的文件都存在
143
+
144
+ **必需文件**:
145
+ | 文件 | 用途 | 状态 |
146
+ |------|------|------|
147
+ | `CHANGELOG.md` | GitHub Release 引用 | 必需 |
148
+ | `LICENSE` | NPM 包许可证 | 必需 |
149
+ | `README.md` | NPM 包主页展示 | 必需 |
150
+
151
+ ### 8. Git Tag 一致性检查
152
+
153
+ **目标**: 确保版本号与 git tag 一致
154
+
155
+ **检查项**:
156
+ - [ ] 本地 tag `v{x.x.x}` 是否存在
157
+ - [ ] Tag 是否指向当前 commit
158
+ - [ ] 远程 tag 是否已推送
159
+ - [ ] 当前分支是否为 main/master
160
+
161
+ **发布流程**:
162
+
163
+ ```bash
164
+ # 方式1: 使用发布脚本(推荐)
165
+ ./scripts/release.sh patch # patch/minor/major
166
+
167
+ # 方式2: 手动发布
168
+ # 1. 更新版本号
169
+ npm version patch # 自动创建 tag
170
+
171
+ # 2. 推送 tag
172
+ git push origin main --tags
173
+
174
+ # 3. GitHub Actions 自动完成:
175
+ # - 构建项目
176
+ # - 运行测试
177
+ # - 发布到 NPM (通过 OIDC)
178
+ # - 创建 GitHub Release
179
+ ```
180
+
181
+ **Tag 命名规范**:
182
+ - 格式: `v{x.x.x}` (例如: `v0.2.0`)
183
+ - 必须带有 `v` 前缀
184
+ - 必须符合语义化版本规范
185
+
186
+ **GitHub Release**:
187
+ - 由 GitHub Actions 自动创建
188
+ - 基于 CHANGELOG.md 生成 release notes
189
+ - 包含预发布版本检测 (版本号包含 `-`)
190
+
191
+ ### 9. OIDC 发布配置检查
192
+
193
+ **目标**: 确保使用 OIDC Trusted Publishing 方式发布
194
+
195
+ **配置要求**:
196
+
197
+ 1. **NPM 端配置**:
198
+ - 访问 `https://www.npmjs.com/package/@mycodemap/mycodemap/access`
199
+ - 添加 GitHub Actions 作为 Trusted Publisher:
200
+ - GitHub Organization: `yuanyuanyuan`
201
+ - GitHub Repository: `mycodemap`
202
+ - Workflow Name: `publish.yml`
203
+
204
+ 2. **GitHub Secrets 检查**:
205
+ - [ ] **不应设置** `NPM_TOKEN` secret
206
+ - [ ] 如果需要 Token 方式,使用 `NPM_TOKEN` 并确保是 **Automation** 类型
207
+
208
+ 3. **Workflow 权限配置**:
209
+ ```yaml
210
+ permissions:
211
+ contents: write # 用于创建 GitHub Release
212
+ id-token: write # 用于 OIDC trusted publishing (必需)
213
+ ```
214
+
215
+ 4. **发布命令**:
216
+ ```yaml
217
+ # 正确:使用 OIDC
218
+ - name: Publish to NPM
219
+ run: npm publish --access public --provenance
220
+
221
+ # 错误:设置 NODE_AUTH_TOKEN 会干扰 OIDC
222
+ # env:
223
+ # NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
224
+ ```
225
+
226
+ **验证命令**:
227
+ ```bash
228
+ # 检查是否设置了 NPM_TOKEN(OIDC 方式应该为空)
229
+ gh secret list | grep NPM_TOKEN
230
+
231
+ # 如果存在,删除它
232
+ gh secret remove NPM_TOKEN
233
+ ```
234
+
235
+ ### 10. YAML 索引有效性检查
236
+
237
+ **目标**: 确保 `ai-document-index.yaml` 结构完整
238
+
239
+ **必需字段**:
240
+ - [ ] `project` 根字段
241
+ - [ ] `project.version` 版本号
242
+ - [ ] `documentation` 文档配置
243
+ - [ ] `documentation.ai_documents` AI文档列表
244
+ - [ ] `cli_commands` 命令索引
245
+ - [ ] `navigation` 导航配置
246
+
247
+ **引用验证**:
248
+ - YAML 中引用的所有文件路径必须存在
249
+
250
+ ### 11. AGENTS.md 文档规范检查
251
+
252
+ **目标**: 确保 AGENTS.md 包含 AI 友好文档的强制要求
253
+
254
+ **必需章节**:
255
+ - [ ] AI 友好文档规范
256
+ - [ ] 结构清晰要求
257
+ - [ ] 决策树要求
258
+ - [ ] 速查表要求
259
+ - [ ] 代码可复现要求
260
+ - [ ] 类型定义要求
261
+ - [ ] 提示词模板要求
262
+
263
+ ---
264
+
265
+ ## 🔧 使用方法
266
+
267
+ ### 本地检查
268
+
269
+ ```bash
270
+ # 运行完整的发布前检查
271
+ npm run docs:check:pre-release
272
+
273
+ # 查看详细输出
274
+ npm run docs:check:pre-release 2>&1 | less
275
+ ```
276
+
277
+ ### CI/CD 集成
278
+
279
+ 发布工作流 (`.github/workflows/publish.yml`) 已自动集成此检查:
280
+
281
+ ```yaml
282
+ - name: Run pre-release AI documentation check
283
+ run: npm run docs:check:pre-release
284
+ ```
285
+
286
+ ### 发布前准备
287
+
288
+ **推荐方式: 使用发布脚本(一键完成)**
289
+
290
+ ```bash
291
+ # 使用发布脚本(自动处理版本、tag、推送)
292
+ ./scripts/release.sh patch # patch 版本 (0.2.0 -> 0.2.1)
293
+ ./scripts/release.sh minor # minor 版本 (0.2.0 -> 0.3.0)
294
+ ./scripts/release.sh major # major 版本 (0.2.0 -> 1.0.0)
295
+ ./scripts/release.sh 0.3.0 # 指定具体版本
296
+
297
+ # 脚本会自动:
298
+ # 1. 运行 npm run check:all
299
+ # 2. 更新 package.json 版本
300
+ # 3. 创建 git commit
301
+ # 4. 创建 git tag
302
+ # 5. 推送到远程仓库
303
+ # 6. 触发 GitHub Actions 发布 (OIDC)
304
+ ```
305
+
306
+ **手动方式(需要更多控制时)**
307
+
308
+ ```bash
309
+ # 1. 确保工作区干净
310
+ git status
311
+
312
+ # 2. 运行发布前检查
313
+ npm run docs:check:pre-release
314
+
315
+ # 3. 构建和测试
316
+ npm run check:all
317
+
318
+ # 4. 更新版本号(会自动创建 tag)
319
+ npm version patch|minor|major
320
+
321
+ # 5. 推送代码和 tag
322
+ git push origin main
323
+ git push origin --tags
324
+
325
+ # 6. GitHub Actions 自动完成发布
326
+ ```
327
+
328
+ ---
329
+
330
+ ## ❌ 常见问题
331
+
332
+ ### OIDC 发布失败
333
+
334
+ **问题**: GitHub Actions 发布失败,提示 403 Forbidden
335
+
336
+ **解决**:
337
+ 1. 检查 NPM 端是否配置了 Trusted Publisher:
338
+ - 访问 `https://www.npmjs.com/package/@mycodemap/mycodemap/access`
339
+ - 确认已添加 GitHub Actions 作为 Trusted Publisher
340
+ 2. 检查 workflow 权限:
341
+ - 确保有 `id-token: write`
342
+ 3. 检查是否意外设置了 `NPM_TOKEN`:
343
+ ```bash
344
+ gh secret list | grep NPM_TOKEN
345
+ # 如果存在,删除:gh secret remove NPM_TOKEN
346
+ ```
347
+ 4. 检查 workflow 中是否设置了 `NODE_AUTH_TOKEN` 环境变量(不应该设置)
348
+
349
+ ### 版本不一致
350
+
351
+ **问题**: 多个文件中的版本号不一致
352
+
353
+ **解决**:
354
+ ```bash
355
+ # 统一更新所有文件中的版本号
356
+ VERSION="0.3.0"
357
+
358
+ # 更新 package.json
359
+ npm version $VERSION --no-git-tag-version
360
+
361
+ # 手动更新其他文件中的版本号
362
+ # - llms.txt
363
+ # - AI_GUIDE.md
364
+ # - AI_DISCOVERY.md
365
+ # - ai-document-index.yaml
366
+ ```
367
+
368
+ ### llms.txt 格式错误
369
+
370
+ **问题**: llms.txt 不符合标准格式
371
+
372
+ **解决**:
373
+ 参考 [llmstxt.org](https://llmstxt.org/) 规范,确保包含:
374
+ - H1 标题
375
+ - 摘要引用 (blockquote)
376
+ - 文档章节
377
+
378
+ ### CHANGELOG 缺少条目
379
+
380
+ **问题**: CHANGELOG 缺少当前版本的条目
381
+
382
+ **解决**:
383
+ ```bash
384
+ # 在 CHANGELOG.md 顶部添加条目
385
+ ## [x.x.x] - $(date +%Y-%m-%d) - 简短描述
386
+
387
+ ### 🐛 Bug Fixes
388
+ - ...
389
+
390
+ ### ✨ Features
391
+ - ...
392
+
393
+ ### 📚 Documentation
394
+ - ...
395
+ ```
396
+
397
+ ---
398
+
399
+ ## 📊 检查脚本架构
400
+
401
+ ```
402
+ scripts/pre-release-check.js
403
+ ├── checkRequiredFiles() # 检查文件存在性和大小
404
+ ├── checkLlmsTxtStandards() # llms.txt 标准格式
405
+ ├── checkVersionConsistency() # 版本一致性
406
+ ├── checkCrossReferences() # 交叉引用有效性
407
+ ├── checkAIFriendliness() # AI 友好性
408
+ ├── checkChangelogSync() # CHANGELOG 同步
409
+ ├── checkYamlIndex() # YAML 索引有效性
410
+ ├── checkDocumentationStandards() # AGENTS.md 规范
411
+ ├── checkReleaseFiles() # 发布必需文件
412
+ └── checkGitTag() # Git Tag 一致性
413
+ ```
414
+
415
+ ---
416
+
417
+ ## 📝 变更历史
418
+
419
+ | 日期 | 版本 | 变更 |
420
+ |------|------|------|
421
+ | 2026-03-23 | 0.2.0 | 添加 OIDC Trusted Publishing 配置说明 |
422
+ | 2026-03-22 | 0.2.0 | 初始发布,基于 AI_FRIENDLINESS_AUDIT.md |
423
+
424
+ ---
425
+
426
+ *此文档是发布流程的强制要求,任何变更都需要同步更新检查脚本。*
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@mycodemap/mycodemap",
3
- "version": "0.2.0",
3
+ "version": "0.3.7",
4
4
  "description": "TypeScript 代码地图工具 - 为 AI 辅助开发提供结构化上下文",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/yuanyuanyuan/mycodemap"
8
+ },
5
9
  "main": "./dist/index.js",
6
10
  "type": "module",
7
11
  "exports": {
@@ -16,6 +20,7 @@
16
20
  "dist/",
17
21
  "docs/",
18
22
  "examples/",
23
+ "scripts/",
19
24
  "README.md",
20
25
  "LICENSE",
21
26
  "CHANGELOG.md",
@@ -27,12 +32,13 @@
27
32
  "docs:check": "node scripts/validate-docs.js && node scripts/validate-ai-docs.js",
28
33
  "docs:check:human": "node scripts/validate-docs.js",
29
34
  "docs:check:ai": "node scripts/validate-ai-docs.js",
35
+ "docs:check:pre-release": "node scripts/pre-release-check.js",
30
36
  "test": "vitest run",
31
37
  "lint": "eslint src",
32
38
  "typecheck": "tsc --noEmit",
33
39
  "benchmark": "bash scripts/run-benchmark.sh",
34
40
  "test:all": "npm run test && npm run benchmark",
35
- "prepublishOnly": "npm run build && npm test",
41
+ "prepublishOnly": "npm run docs:check:pre-release && npm run build && npm test",
36
42
  "validate-pack": "node scripts/validate-pack.js",
37
43
  "release": "./scripts/release.sh",
38
44
  "check:all": "npm run typecheck && npm run lint && npm test && npm run docs:check",
@@ -0,0 +1,31 @@
1
+ #!/bin/sh
2
+ # Commit-msg hook: 验证 Commit 消息格式
3
+
4
+ # 获取 commit message 文件路径
5
+ COMMIT_MSG_FILE=$1
6
+ COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
7
+
8
+ # 定义有效的 TAG
9
+ VALID_TAGS="feat fix refactor docs chore test style perf ci build revert"
10
+
11
+ # 检查是否以 [TAG] 格式开头
12
+ if ! echo "$COMMIT_MSG" | grep -qE '^\[[a-z]+\]'; then
13
+ echo "❌ Commit message must start with a valid tag."
14
+ echo " Expected format: [TAG] message"
15
+ echo " Valid tags: $VALID_TAGS"
16
+ echo ""
17
+ echo " Example: [feat] add new feature"
18
+ exit 1
19
+ fi
20
+
21
+ # 提取 TAG 并验证
22
+ TAG=$(echo "$COMMIT_MSG" | sed -E 's/^\[([a-z]+)\].*/\1/')
23
+
24
+ if ! echo "$VALID_TAGS" | grep -qw "$TAG"; then
25
+ echo "❌ Invalid tag: [$TAG]"
26
+ echo " Valid tags: $VALID_TAGS"
27
+ exit 1
28
+ fi
29
+
30
+ echo "✅ Commit message validated"
31
+ exit 0
@@ -0,0 +1,55 @@
1
+ #!/bin/sh
2
+ # Pre-commit hook: 验证文件头注释
3
+
4
+ echo "🔍 Checking file headers..."
5
+
6
+ # 获取 node_modules 的路径
7
+ NODE_PATH=$(pwd)/node_modules
8
+
9
+ # 检查是否安装了必要的依赖
10
+ if [ ! -f "$NODE_PATH/.bin/tsc" ]; then
11
+ echo "⚠️ TypeScript not found, skipping header check"
12
+ exit 0
13
+ fi
14
+
15
+ # 扫描源代码目录
16
+ SRC_DIR="src"
17
+
18
+ # 定义需要检查的文件扩展名
19
+ EXTENSIONS="ts tsx js jsx mjs cjs"
20
+
21
+ # 统计变量
22
+ TOTAL=0
23
+ INVALID=0
24
+
25
+ for ext in $EXTENSIONS; do
26
+ # 查找所有匹配的文件,排除 node_modules, dist, test 等目录
27
+ FILES=$(find "$SRC_DIR" -type f -name "*.$ext" 2>/dev/null | grep -v node_modules | grep -v dist | grep -v __tests__ | grep -v "\.test\." | grep -v "\.spec\.")
28
+
29
+ for file in $FILES; do
30
+ TOTAL=$((TOTAL + 1))
31
+
32
+ # 检查文件头是否包含 [META] 或 [WHY]
33
+ if ! head -n 20 "$file" | grep -qi '\[META\]\|\[WHY\]'; then
34
+ echo "❌ E0008: $file - Missing [META] or [WHY] comment"
35
+ INVALID=$((INVALID + 1))
36
+ fi
37
+ done
38
+ done
39
+
40
+ echo ""
41
+ echo "Total files checked: $TOTAL"
42
+ echo "Invalid files: $INVALID"
43
+
44
+ if [ $INVALID -gt 0 ]; then
45
+ echo ""
46
+ echo "❌ File header check failed. Please add [META] or [WHY] comment to the files above."
47
+ echo " Example:"
48
+ echo " /**"
49
+ echo " * [META] Description of this file"
50
+ echo " */"
51
+ exit 1
52
+ fi
53
+
54
+ echo "✅ All file headers are valid"
55
+ exit 0