ai-dev-analytics 1.0.3 → 1.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.
Files changed (113) hide show
  1. package/README.md +73 -13
  2. package/README.zh-CN.md +73 -13
  3. package/dist/cli/commands/build.d.ts +2 -0
  4. package/dist/cli/commands/build.d.ts.map +1 -0
  5. package/dist/cli/commands/build.js +61 -0
  6. package/dist/cli/commands/build.js.map +1 -0
  7. package/dist/cli/commands/dashboard.js +1 -1
  8. package/dist/cli/commands/dashboard.js.map +1 -1
  9. package/dist/cli/commands/import.d.ts +2 -0
  10. package/dist/cli/commands/import.d.ts.map +1 -0
  11. package/dist/cli/commands/import.js +28 -0
  12. package/dist/cli/commands/import.js.map +1 -0
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +167 -183
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/merge.d.ts +2 -0
  17. package/dist/cli/commands/merge.d.ts.map +1 -0
  18. package/dist/cli/commands/merge.js +47 -0
  19. package/dist/cli/commands/merge.js.map +1 -0
  20. package/dist/cli/commands/migrate-dir.d.ts +2 -0
  21. package/dist/cli/commands/migrate-dir.d.ts.map +1 -0
  22. package/dist/cli/commands/migrate-dir.js +85 -0
  23. package/dist/cli/commands/migrate-dir.js.map +1 -0
  24. package/dist/cli/commands/migrate.js +5 -5
  25. package/dist/cli/commands/migrate.js.map +1 -1
  26. package/dist/cli/commands/reindex.d.ts +4 -0
  27. package/dist/cli/commands/reindex.d.ts.map +1 -1
  28. package/dist/cli/commands/reindex.js +48 -3
  29. package/dist/cli/commands/reindex.js.map +1 -1
  30. package/dist/cli/commands/report.js +1 -1
  31. package/dist/cli/commands/report.js.map +1 -1
  32. package/dist/cli/commands/rules.d.ts +5 -0
  33. package/dist/cli/commands/rules.d.ts.map +1 -1
  34. package/dist/cli/commands/rules.js +146 -39
  35. package/dist/cli/commands/rules.js.map +1 -1
  36. package/dist/cli/commands/skills.d.ts +7 -0
  37. package/dist/cli/commands/skills.d.ts.map +1 -0
  38. package/dist/cli/commands/skills.js +180 -0
  39. package/dist/cli/commands/skills.js.map +1 -0
  40. package/dist/cli/commands/start.d.ts.map +1 -1
  41. package/dist/cli/commands/start.js +5 -9
  42. package/dist/cli/commands/start.js.map +1 -1
  43. package/dist/cli/commands/status.d.ts.map +1 -1
  44. package/dist/cli/commands/status.js +1 -5
  45. package/dist/cli/commands/status.js.map +1 -1
  46. package/dist/cli/commands/update.d.ts.map +1 -1
  47. package/dist/cli/commands/update.js +26 -5
  48. package/dist/cli/commands/update.js.map +1 -1
  49. package/dist/cli/index.js +30 -0
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/mcp/server.d.ts.map +1 -1
  52. package/dist/mcp/server.js +86 -57
  53. package/dist/mcp/server.js.map +1 -1
  54. package/dist/server/api.js +2 -2
  55. package/dist/server/api.js.map +1 -1
  56. package/dist/server/index.js +1 -1
  57. package/dist/server/index.js.map +1 -1
  58. package/dist/utils/ai-build.d.ts +19 -0
  59. package/dist/utils/ai-build.d.ts.map +1 -0
  60. package/dist/utils/ai-build.js +278 -0
  61. package/dist/utils/ai-build.js.map +1 -0
  62. package/dist/utils/fs.d.ts +18 -0
  63. package/dist/utils/fs.d.ts.map +1 -1
  64. package/dist/utils/fs.js +70 -0
  65. package/dist/utils/fs.js.map +1 -1
  66. package/dist/utils/git.d.ts +10 -1
  67. package/dist/utils/git.d.ts.map +1 -1
  68. package/dist/utils/git.js +76 -8
  69. package/dist/utils/git.js.map +1 -1
  70. package/dist/utils/guide.d.ts +21 -4
  71. package/dist/utils/guide.d.ts.map +1 -1
  72. package/dist/utils/guide.js +168 -16
  73. package/dist/utils/guide.js.map +1 -1
  74. package/dist/utils/import.d.ts +27 -0
  75. package/dist/utils/import.d.ts.map +1 -0
  76. package/dist/utils/import.js +298 -0
  77. package/dist/utils/import.js.map +1 -0
  78. package/dist/utils/paths.d.ts +2 -2
  79. package/dist/utils/paths.d.ts.map +1 -1
  80. package/dist/utils/paths.js +8 -8
  81. package/dist/utils/paths.js.map +1 -1
  82. package/dist/utils/rules.d.ts +6 -1
  83. package/dist/utils/rules.d.ts.map +1 -1
  84. package/dist/utils/rules.js +126 -6
  85. package/dist/utils/rules.js.map +1 -1
  86. package/dist/utils/run-data.d.ts +2 -2
  87. package/dist/utils/run-data.d.ts.map +1 -1
  88. package/dist/utils/run-data.js +6 -11
  89. package/dist/utils/run-data.js.map +1 -1
  90. package/dist/utils/skills.d.ts +37 -0
  91. package/dist/utils/skills.d.ts.map +1 -0
  92. package/dist/utils/skills.js +228 -0
  93. package/dist/utils/skills.js.map +1 -0
  94. package/package.json +1 -1
  95. package/src/assets/skills/audit.md +6 -6
  96. package/src/assets/skills/bug-fixer.md +4 -4
  97. package/src/assets/skills/code-generator.md +4 -4
  98. package/src/assets/skills/dashboard-generator.md +2 -2
  99. package/src/assets/skills/dev-flower.md +3 -3
  100. package/src/assets/skills/deviation-recorder.md +7 -7
  101. package/src/assets/skills/mcp-reviewer.md +2 -2
  102. package/src/assets/skills/requirement-analyzer.md +4 -4
  103. package/src/assets/skills/rules-evolver.md +7 -7
  104. package/src/assets/skills/self-reviewer.md +4 -4
  105. package/src/assets/skills/task-splitter.md +5 -5
  106. package/src/assets/skills/workflow-orchestrator.md +11 -11
  107. package/src/assets/templates/demo-run.json +7 -7
  108. package/src/dashboard/assets/index-B8QcPcg7.css +1 -0
  109. package/src/dashboard/assets/{index-E4BP-QJG.js → index-DcAl6lhS.js} +1 -1
  110. package/src/dashboard/demo/run.en.json +1169 -0
  111. package/src/dashboard/demo/run.zh.json +1169 -0
  112. package/src/dashboard/index.html +2 -2
  113. package/src/dashboard/assets/index-CwXn3nJb.css +0 -1
package/README.md CHANGED
@@ -14,16 +14,16 @@ One line to integrate. Zero workflow changes.
14
14
  { "mcpServers": { "aida": { "command": "npx", "args": ["-y", "ai-dev-analytics", "mcp"] } } }
15
15
  ```
16
16
 
17
- [![npm version](https://img.shields.io/badge/npm-v1.0.0-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
17
+ [![npm version](https://img.shields.io/badge/npm-v1.1.0-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
18
18
  [![license](https://img.shields.io/github/license/LWTlong/ai-dev-analytics?color=%23333)](./LICENSE)
19
19
  [![node](https://img.shields.io/node/v/ai-dev-analytics?color=%23339933)](https://nodejs.org)
20
- [![tests](https://img.shields.io/badge/tests-82%20passed-brightgreen)](#testing)
20
+ [![tests](https://img.shields.io/badge/tests-passing-brightgreen)](#testing)
21
21
  [![Live Demo](https://img.shields.io/badge/🎯_Live_Demo-Interactive_Dashboard-FF4B4B)](https://lwtlong.github.io/ai-dev-analytics/)
22
22
  [![ai-dev-analytics MCP server](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics/badges/score.svg)](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
23
23
 
24
24
  [![ai-dev-analytics MCP server](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics/badges/card.svg)](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
25
25
 
26
- [One-Line Setup](#-30-second-setup) · [Data-Driven Loop](#-the-data-driven-loop) · [Dashboard](#-the-dashboard) · [SOP Workflow](#-standardized-ai-development-workflow) · [Data for Reports](#-data-sedimentation--performance-reports) · [中文文档](./README.zh-CN.md)
26
+ [One-Line Setup](#-30-second-setup) · [Data-Driven Loop](#-the-data-driven-loop) · [Dashboard](#-the-dashboard) · [SOP Workflow](#-standardized-ai-development-workflow) · [Data for Reports](#-data-sedimentation--performance-reports) · [Commands](./COMMANDS.md) · [Docs](./docs/INDEX.md) · [中文文档](./README.zh-CN.md)
27
27
 
28
28
  </div>
29
29
 
@@ -60,7 +60,7 @@ Vibe Coding Session
60
60
  "9 deviations → 56% hallucination, 44% rule-missing"
61
61
 
62
62
  Deviation patterns identified → AI suggests rules → user confirms → sedimented
63
- .aidevos/rules/ ← your AI's growing knowledge base
63
+ .aida/rules/ ← your AI's growing knowledge base
64
64
 
65
65
  AI reads rules next session → same mistakes eliminated
66
66
 
@@ -86,7 +86,7 @@ Vibe Coding Session
86
86
 
87
87
  ![Deviation & Rule Trend](https://raw.githubusercontent.com/LWTlong/ai-dev-analytics/main/docs/deviation-rule-trend.png)
88
88
 
89
- The `.aidevos/rules/` directory is your **project-specific AI knowledge base**. It grows with every run. The more you use AI, the smarter it gets at *your* project.
89
+ The `.aida/rules/` directory is your **project-specific AI knowledge base**. It grows with every run. The more you use AI, the smarter it gets at *your* project.
90
90
 
91
91
  ---
92
92
 
@@ -119,7 +119,15 @@ Run `npx ai-dev-analytics dashboard` to see **your own project's data** in secon
119
119
 
120
120
  ### 🔒 100% Local. Zero External Requests.
121
121
 
122
- AIDA writes JSON files to `.aidevos/` in your project directory. **The codebase contains zero HTTP calls to external services** — no telemetry, no cloud sync, no analytics, no tracking. Zero runtime dependencies. Your code and data never leave your machine. Period.
122
+ AIDA writes JSON files to `.aida/` in your project directory. **The codebase contains zero HTTP calls to external services** — no telemetry, no cloud sync, no analytics, no tracking. Zero runtime dependencies. Your code and data never leave your machine. Period.
123
+
124
+ ## Command Reference
125
+
126
+ Detailed CLI usage, command behavior, supported AI tools, merge/import/build flow, and migration notes are documented in [COMMANDS.md](./COMMANDS.md).
127
+
128
+ ## Documentation
129
+
130
+ For public documentation navigation, schema references, workflow notes, and dashboard-related docs, see [docs/INDEX.md](./docs/INDEX.md).
123
131
 
124
132
  ---
125
133
 
@@ -248,7 +256,7 @@ Quarter: Complete development record — exportable, analyzable, presentable
248
256
  | **Team Leader Report** | Per-developer stats, deviation hotspots, which modules need better rules, team-wide AI maturity |
249
257
  | **Project Handover** | Full development history — someone new can see exactly what happened, what rules exist, and why |
250
258
 
251
- All data is structured JSON in `.aidevos/`. No vendor lock-in. Export it, query it, pipe it into any reporting tool. Run `aida report` to generate a summary at any time.
259
+ All data is structured JSON in `.aida/`. No vendor lock-in. Export it, query it, pipe it into any reporting tool. Run `aida report` to generate a summary at any time.
252
260
 
253
261
  ---
254
262
 
@@ -257,9 +265,9 @@ All data is structured JSON in `.aidevos/`. No vendor lock-in. Export it, query
257
265
  ```mermaid
258
266
  flowchart LR
259
267
  A["Your AI Tool\nClaude Code / Cursor"] -->|Vibe Coding| B{"AIDA MCP Server\n10 Tools"}
260
- B -->|Silent Data Collection| C[".aidevos/run.json"]
268
+ B -->|Silent Data Collection| C[".aida/run.json"]
261
269
  C -->|Visualization| D["Dashboard\nlocalhost:2375"]
262
- C -->|Pattern Analysis| E[".aidevos/rules/"]
270
+ C -->|Pattern Analysis| E[".aida/rules/"]
263
271
  E -->|AI Reads Rules| A
264
272
  ```
265
273
 
@@ -289,10 +297,10 @@ All data is local JSON. No database, no cloud.
289
297
 
290
298
  | Level | File | What it contains |
291
299
  |-------|------|-----------------|
292
- | **Run** | `.aidevos/runs/{branch}/{dev}/run.json` | Every task, bug, deviation, review, file change |
293
- | **Branch** | `.aidevos/runs/{branch}/requirement.json` | Aggregated stats per requirement |
294
- | **Project** | `.aidevos/index.json` | Cross-branch overview for team leads |
295
- | **Rules** | `.aidevos/rules/` | Sedimented project rules — your AI's growing knowledge base |
300
+ | **Run** | `.aida/runs/{branch}/{dev}/run.json` | Every task, bug, deviation, review, file change |
301
+ | **Branch** | `.aida/runs/{branch}/requirement.json` | Aggregated stats per requirement |
302
+ | **Project** | `.aida/index.json` | Cross-branch overview for team leads |
303
+ | **Rules** | `.aida/rules/` | Sedimented project rules — your AI's growing knowledge base |
296
304
 
297
305
  All structured JSON — ready for export, analysis, or feeding into reports.
298
306
 
@@ -373,6 +381,58 @@ AIDA uses [Model Context Protocol](https://modelcontextprotocol.io/) — the sta
373
381
 
374
382
  ---
375
383
 
384
+ ## 📐 Rules System — Team Workflow
385
+
386
+ Rules are the compounding asset of AIDA. Here's how they work in a team setting.
387
+
388
+ ### Architecture
389
+
390
+ ```
391
+ .aida/rules.json ← source of truth, committed to git
392
+
393
+ aida rules build
394
+
395
+ .aida/rules/*.md ← auto-generated views, gitignored
396
+
397
+ AI reads rules next session
398
+ ```
399
+
400
+ `aida init` automatically adds `.aida/rules/*.md` to your `.gitignore`. Never edit the `.md` files manually — they are always regenerated from `rules.json`.
401
+
402
+ ### Daily workflow
403
+
404
+ After pulling changes that include new rules:
405
+
406
+ ```bash
407
+ git pull
408
+ aida rules build # regenerate local rule views from updated rules.json
409
+ ```
410
+
411
+ ### Merge conflict resolution
412
+
413
+ When two developers add rules on separate branches and merge, `rules.json` may get a standard git conflict. Resolve it in one command:
414
+
415
+ ```bash
416
+ # After git merge produces a conflict in rules.json:
417
+ aida rules merge # fingerprint union — no duplicates, no lost rules
418
+ aida rules build # rebuild .md views
419
+ git add .aida/rules.json
420
+ git commit -m "merge: resolve rules conflict"
421
+ ```
422
+
423
+ `aida rules merge` uses fingerprint deduplication: if two rules have identical content, only one is kept. If they differ, both are kept and the incoming rule is renumbered to avoid ID collisions.
424
+
425
+ ### Managing rules over time
426
+
427
+ ```bash
428
+ aida rules list # list all rules grouped by category
429
+ aida rules dedupe # surface rules with >40% keyword overlap for manual review
430
+ ```
431
+
432
+ Rules have a `status` field (`active` / `deprecated`). When project conventions evolve, deprecate old rules — they stop appearing in the `.md` files your AI reads, but remain in `rules.json` as an audit trail.
433
+
434
+ ---
435
+
376
436
  ## Roadmap
377
437
 
378
438
  - [ ] Export reports as PDF / HTML (H1/H2 performance reviews)
package/README.zh-CN.md CHANGED
@@ -14,16 +14,16 @@
14
14
  { "mcpServers": { "aida": { "command": "npx", "args": ["-y", "ai-dev-analytics", "mcp"] } } }
15
15
  ```
16
16
 
17
- [![npm version](https://img.shields.io/badge/npm-v1.0.0-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
17
+ [![npm version](https://img.shields.io/badge/npm-v1.1.0-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
18
18
  [![license](https://img.shields.io/github/license/LWTlong/ai-dev-analytics?color=%23333)](./LICENSE)
19
19
  [![node](https://img.shields.io/node/v/ai-dev-analytics?color=%23339933)](https://nodejs.org)
20
- [![tests](https://img.shields.io/badge/tests-82%20passed-brightgreen)](#测试)
20
+ [![tests](https://img.shields.io/badge/tests-passing-brightgreen)](#测试)
21
21
  [![在线 Demo](https://img.shields.io/badge/🎯_在线Demo-交互式看板-FF4B4B)](https://lwtlong.github.io/ai-dev-analytics/)
22
22
  [![ai-dev-analytics MCP server](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics/badges/score.svg)](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
23
23
 
24
24
  [![ai-dev-analytics MCP server](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics/badges/card.svg)](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
25
25
 
26
- [一行接入](#-30-秒上手) · [数据驱动闭环](#-数据驱动闭环) · [数据看板](#-数据看板) · [SOP 流程](#-标准化-ai-开发流程) · [数据沉淀](#-数据沉淀与绩效汇报) · [English](./README.md)
26
+ [一行接入](#-30-秒上手) · [数据驱动闭环](#-数据驱动闭环) · [数据看板](#-数据看板) · [SOP 流程](#-标准化-ai-开发流程) · [数据沉淀](#-数据沉淀与绩效汇报) · [命令文档](./COMMANDS.md) · [文档导航](./docs/INDEX.md) · [English](./README.md)
27
27
 
28
28
  </div>
29
29
 
@@ -60,7 +60,7 @@ Vibe Coding 过程
60
60
  "9 个偏差 → 56% 幻觉, 44% 规则缺失"
61
61
 
62
62
  发现偏差规律 → AI 建议沉淀规则 → 用户确认 → 写入规则库
63
- .aidevos/rules/ ← 你的 AI 知识库在成长
63
+ .aida/rules/ ← 你的 AI 知识库在成长
64
64
 
65
65
  AI 下次读取规则 → 同样的错误被消除
66
66
 
@@ -86,7 +86,7 @@ Vibe Coding 过程
86
86
 
87
87
  ![偏差与规则趋势](https://raw.githubusercontent.com/LWTlong/ai-dev-analytics/main/docs/deviation-rule-trend.png)
88
88
 
89
- `.aidevos/rules/` 目录就是你的**项目专属 AI 知识库**。用 AI 写得越多,它对*你的项目*就越懂。
89
+ `.aida/rules/` 目录就是你的**项目专属 AI 知识库**。用 AI 写得越多,它对*你的项目*就越懂。
90
90
 
91
91
  ---
92
92
 
@@ -119,7 +119,15 @@ AIDA 全方位采集 AI 辅助开发的每个维度,转化为交互式图表
119
119
 
120
120
  ### 🔒 100% 本地。零外部请求。
121
121
 
122
- AIDA 只往项目里的 `.aidevos/` 目录写 JSON 文件。**整个代码库不包含任何外部 HTTP 请求** —— 不发遥测、不上传云端、不请求分析服务、不做任何追踪。零运行时依赖。你的代码和数据绝不会离开你的电脑。
122
+ AIDA 只往项目里的 `.aida/` 目录写 JSON 文件。**整个代码库不包含任何外部 HTTP 请求** —— 不发遥测、不上传云端、不请求分析服务、不做任何追踪。零运行时依赖。你的代码和数据绝不会离开你的电脑。
123
+
124
+ ## 命令文档
125
+
126
+ 详细 CLI 用法、命令行为、支持的 AI 工具、merge/import/build 流程、迁移说明,见 [COMMANDS.md](./COMMANDS.md)。
127
+
128
+ ## 文档导航
129
+
130
+ 公开文档导航、schema 参考、工作流说明、看板相关文档,见 [docs/INDEX.md](./docs/INDEX.md)。
123
131
 
124
132
  ---
125
133
 
@@ -248,7 +256,7 @@ AIDA 不只是可视化 —— 它**沉淀数据**。每次运行都积累结构
248
256
  | **团队 Leader 报告** | 各开发者数据、偏差热点、哪个模块需要更好的规则、团队 AI 成熟度 |
249
257
  | **项目交接** | 完整开发历史 —— 接手的人能看到做了什么、有什么规则、为什么有这些规则 |
250
258
 
251
- 所有数据都是 `.aidevos/` 里的结构化 JSON。没有厂商锁定。随时导出、查询、接入任何报表工具。运行 `aida report` 随时生成汇总。
259
+ 所有数据都是 `.aida/` 里的结构化 JSON。没有厂商锁定。随时导出、查询、接入任何报表工具。运行 `aida report` 随时生成汇总。
252
260
 
253
261
  ---
254
262
 
@@ -257,9 +265,9 @@ AIDA 不只是可视化 —— 它**沉淀数据**。每次运行都积累结构
257
265
  ```mermaid
258
266
  flowchart LR
259
267
  A["你的 AI 工具\nClaude Code / Cursor"] -->|Vibe Coding| B{"AIDA MCP Server\n10 个工具"}
260
- B -->|静默采集| C[".aidevos/run.json"]
268
+ B -->|静默采集| C[".aida/run.json"]
261
269
  C -->|可视化| D["数据看板\nlocalhost:2375"]
262
- C -->|模式分析| E[".aidevos/rules/"]
270
+ C -->|模式分析| E[".aida/rules/"]
263
271
  E -->|AI 读取规则| A
264
272
  ```
265
273
 
@@ -289,10 +297,10 @@ AI 工具在工作时自动调用 MCP 工具。你不需要手动操作 ——
289
297
 
290
298
  | 层级 | 文件 | 内容 |
291
299
  |------|------|------|
292
- | **运行** | `.aidevos/runs/{分支}/{开发者}/run.json` | 每个任务、Bug、偏差、审查、文件变更 |
293
- | **分支** | `.aidevos/runs/{分支}/requirement.json` | 分支聚合统计 |
294
- | **项目** | `.aidevos/index.json` | 跨分支总览 |
295
- | **规则** | `.aidevos/rules/` | 沉淀的项目规则 —— AI 持续增长的知识库 |
300
+ | **运行** | `.aida/runs/{分支}/{开发者}/run.json` | 每个任务、Bug、偏差、审查、文件变更 |
301
+ | **分支** | `.aida/runs/{分支}/requirement.json` | 分支聚合统计 |
302
+ | **项目** | `.aida/index.json` | 跨分支总览 |
303
+ | **规则** | `.aida/rules/` | 沉淀的项目规则 —— AI 持续增长的知识库 |
296
304
 
297
305
  全是结构化 JSON —— 随时可导出、可分析、可生成汇报。
298
306
 
@@ -373,6 +381,58 @@ AIDA 使用 [Model Context Protocol](https://modelcontextprotocol.io/) —— AI
373
381
 
374
382
  ---
375
383
 
384
+ ## 📐 规则系统 —— 团队协作流程
385
+
386
+ 规则是 AIDA 的核心复利资产。以下是团队场景下的完整使用方式。
387
+
388
+ ### 架构设计
389
+
390
+ ```
391
+ .aida/rules.json ← 唯一数据源,提交到 git
392
+
393
+ aida rules build
394
+
395
+ .aida/rules/*.md ← 自动生成的视图文件,加入 gitignore
396
+
397
+ AI 下次读取规则
398
+ ```
399
+
400
+ `aida init` 会自动将 `.aida/rules/*.md` 写入 `.gitignore`。不要手动编辑 `.md` 文件——它们始终由 `rules.json` 重新生成。
401
+
402
+ ### 日常流程
403
+
404
+ 拉取了包含新规则的代码后:
405
+
406
+ ```bash
407
+ git pull
408
+ aida rules build # 从更新后的 rules.json 重新生成本地规则视图
409
+ ```
410
+
411
+ ### 合并冲突处理
412
+
413
+ 两位开发者在不同分支各自添加了规则并合并时,`rules.json` 可能产生标准的 git 冲突。一条命令解决:
414
+
415
+ ```bash
416
+ # git merge 在 rules.json 产生冲突后执行:
417
+ aida rules merge # 按 fingerprint 做并集——不丢规则,不产生重复
418
+ aida rules build # 重建 .md 视图
419
+ git add .aida/rules.json
420
+ git commit -m "merge: resolve rules conflict"
421
+ ```
422
+
423
+ `aida rules merge` 使用指纹去重:内容完全相同只保留一条;内容不同则两条都保留,新规则自动重新编号避免 ID 冲突。
424
+
425
+ ### 规则日常维护
426
+
427
+ ```bash
428
+ aida rules list # 按分类列出所有规则
429
+ aida rules dedupe # 找出关键词重叠度 >40% 的相似规则,供手动处理
430
+ ```
431
+
432
+ 规则有 `status` 字段(`active` / `deprecated`)。项目规范变化时,将旧规则标记为 `deprecated`——它从 AI 读取的 `.md` 文件里消失,但保留在 `rules.json` 中作为审计记录。
433
+
434
+ ---
435
+
376
436
  ## Roadmap
377
437
 
378
438
  - [ ] 导出报告为 PDF / HTML(H1/H2 绩效汇报)
@@ -0,0 +1,2 @@
1
+ export declare function build(): Promise<void>;
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAoCA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAoC3C"}
@@ -0,0 +1,61 @@
1
+ import * as readline from 'node:readline/promises';
2
+ import { stdin, stdout } from 'node:process';
3
+ import { green, red, yellow } from '../../utils/display.js';
4
+ import { buildProjectArtifacts, readConfiguredTools } from '../../utils/ai-build.js';
5
+ import { configPath } from '../../utils/paths.js';
6
+ import { fileExists } from '../../utils/fs.js';
7
+ function requestedTools() {
8
+ return process.argv.slice(3);
9
+ }
10
+ async function selectTools(configured) {
11
+ const requested = requestedTools();
12
+ if (requested.length > 0)
13
+ return requested;
14
+ console.log('\n Select AI tools to build (comma-separated numbers, Enter = all):\n');
15
+ configured.forEach((tool, index) => {
16
+ console.log(` ${index + 1}) ${tool}`);
17
+ });
18
+ console.log('');
19
+ const rl = readline.createInterface({ input: stdin, output: stdout });
20
+ const answer = (await rl.question(' > ')).trim();
21
+ rl.close();
22
+ if (!answer)
23
+ return configured;
24
+ const indices = answer
25
+ .split(',')
26
+ .map((item) => parseInt(item.trim(), 10))
27
+ .filter((num) => num >= 1 && num <= configured.length);
28
+ const selected = [...new Set(indices.map((num) => configured[num - 1]))];
29
+ return selected.length > 0 ? selected : configured;
30
+ }
31
+ export async function build() {
32
+ const projectRoot = process.cwd();
33
+ if (!fileExists(configPath(projectRoot))) {
34
+ console.log(red('\n AIDA not initialized. Run `npx aida init` first.\n'));
35
+ return;
36
+ }
37
+ const configured = readConfiguredTools(projectRoot);
38
+ if (configured.length === 0) {
39
+ console.log(yellow('\n No AI tools configured in .aida/config.json.\n'));
40
+ return;
41
+ }
42
+ const targets = await selectTools(configured);
43
+ const result = buildProjectArtifacts(projectRoot, targets);
44
+ console.log(green('\n ✓ AIDA build completed') +
45
+ `: ${result.ruleViews} rule views, ${result.skillViews} skill views, ${result.commandFiles} tool command files\n`);
46
+ if (result.tools.length > 0) {
47
+ console.log(` Targets: ${result.tools.join(', ')}`);
48
+ }
49
+ if (result.mcpFiles.length > 0) {
50
+ console.log(` MCP: ${result.mcpFiles.join(', ')}`);
51
+ }
52
+ if (result.tools.includes('codex')) {
53
+ console.log(' Codex: global ~/.codex/config.toml has been updated for the aida MCP server');
54
+ }
55
+ console.log(` Tool config snapshot: ${result.toolConfigSnapshot}`);
56
+ if (result.gitignoreAdded.length > 0) {
57
+ console.log(` .gitignore: added ${result.gitignoreAdded.join(', ')}`);
58
+ }
59
+ console.log('');
60
+ }
61
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ function loadDemoData(projectRoot) {
10
10
  const demoPath = resolve(ASSETS_DIR, 'templates', 'demo-run.json');
11
11
  if (!existsSync(demoPath))
12
12
  return;
13
- const demoDir = resolve(projectRoot, '.aidevos', 'runs', 'demo-feature', 'demo-dev');
13
+ const demoDir = resolve(projectRoot, '.aida', 'runs', 'demo-feature', 'demo-dev');
14
14
  ensureDir(demoDir);
15
15
  const data = readJson(demoPath);
16
16
  writeJson(resolve(demoDir, 'run.json'), data);
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function importSources(): Promise<void>;
2
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BnD"}
@@ -0,0 +1,28 @@
1
+ import { green, red, yellow } from '../../utils/display.js';
2
+ import { configPath } from '../../utils/paths.js';
3
+ import { fileExists } from '../../utils/fs.js';
4
+ import { importProjectSources } from '../../utils/import.js';
5
+ import { buildProjectArtifacts } from '../../utils/ai-build.js';
6
+ export async function importSources() {
7
+ const projectRoot = process.cwd();
8
+ if (!fileExists(configPath(projectRoot))) {
9
+ console.log(red('\n AIDA not initialized. Run `npx aida init` first.\n'));
10
+ return;
11
+ }
12
+ const imported = importProjectSources(projectRoot);
13
+ const result = buildProjectArtifacts(projectRoot, imported.tools);
14
+ console.log(green('\n ✓ Existing project sources imported') +
15
+ `: ${imported.rulesImported} rules, ${imported.skillsImported} skills\n`);
16
+ if (imported.tools.length === 0) {
17
+ console.log(yellow(' No existing AI tool configs were discovered.\n'));
18
+ return;
19
+ }
20
+ console.log(` Tools: ${imported.tools.join(', ')}`);
21
+ console.log(` Tool config snapshot: ${imported.snapshotPath}`);
22
+ console.log(` Rebuilt: ${result.ruleViews} rule views, ${result.skillViews} skill views, ${result.commandFiles} tool command files`);
23
+ if (imported.gitignoreAdded.length > 0) {
24
+ console.log(` .gitignore: added ${imported.gitignoreAdded.join(', ')}`);
25
+ }
26
+ console.log('');
27
+ }
28
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,yCAAyC,CAAC;QAChD,KAAK,QAAQ,CAAC,aAAa,WAAW,QAAQ,CAAC,cAAc,WAAW,CACzE,CAAC;IAEF,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CACT,cAAc,MAAM,CAAC,SAAS,gBAAgB,MAAM,CAAC,UAAU,iBAAiB,MAAM,CAAC,YAAY,qBAAqB,CACzH,CAAC;IACF,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAmLA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuN1C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AA0GA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6R1C"}