ai-dev-analytics 1.1.12 → 2.0.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 (87) hide show
  1. package/README.en.md +63 -55
  2. package/README.md +49 -60
  3. package/dist/cli/commands/build.d.ts.map +1 -1
  4. package/dist/cli/commands/build.js +0 -1
  5. package/dist/cli/commands/build.js.map +1 -1
  6. package/dist/cli/commands/doctor.d.ts +2 -0
  7. package/dist/cli/commands/doctor.d.ts.map +1 -0
  8. package/dist/cli/commands/doctor.js +70 -0
  9. package/dist/cli/commands/doctor.js.map +1 -0
  10. package/dist/cli/commands/init.d.ts.map +1 -1
  11. package/dist/cli/commands/init.js +15 -176
  12. package/dist/cli/commands/init.js.map +1 -1
  13. package/dist/cli/commands/merge-data.d.ts.map +1 -1
  14. package/dist/cli/commands/merge-data.js +65 -5
  15. package/dist/cli/commands/merge-data.js.map +1 -1
  16. package/dist/cli/commands/merge.js +1 -1
  17. package/dist/cli/commands/merge.js.map +1 -1
  18. package/dist/cli/commands/migrate-legacy.d.ts.map +1 -1
  19. package/dist/cli/commands/migrate-legacy.js +7 -9
  20. package/dist/cli/commands/migrate-legacy.js.map +1 -1
  21. package/dist/cli/commands/migrate.d.ts.map +1 -1
  22. package/dist/cli/commands/migrate.js +4 -1
  23. package/dist/cli/commands/migrate.js.map +1 -1
  24. package/dist/cli/commands/reindex.d.ts.map +1 -1
  25. package/dist/cli/commands/reindex.js +4 -74
  26. package/dist/cli/commands/reindex.js.map +1 -1
  27. package/dist/cli/commands/report.d.ts.map +1 -1
  28. package/dist/cli/commands/report.js +7 -2
  29. package/dist/cli/commands/report.js.map +1 -1
  30. package/dist/cli/commands/rules.d.ts +1 -1
  31. package/dist/cli/commands/rules.d.ts.map +1 -1
  32. package/dist/cli/commands/rules.js +9 -8
  33. package/dist/cli/commands/rules.js.map +1 -1
  34. package/dist/cli/commands/skills.d.ts.map +1 -1
  35. package/dist/cli/commands/skills.js +5 -4
  36. package/dist/cli/commands/skills.js.map +1 -1
  37. package/dist/cli/commands/sync.d.ts +2 -0
  38. package/dist/cli/commands/sync.d.ts.map +1 -0
  39. package/dist/cli/commands/sync.js +37 -0
  40. package/dist/cli/commands/sync.js.map +1 -0
  41. package/dist/cli/commands/update.d.ts.map +1 -1
  42. package/dist/cli/commands/update.js +2 -1
  43. package/dist/cli/commands/update.js.map +1 -1
  44. package/dist/cli/index.js +24 -12
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/schemas/aida-project.d.ts +23 -1
  47. package/dist/schemas/aida-project.d.ts.map +1 -1
  48. package/dist/server/api.d.ts.map +1 -1
  49. package/dist/server/api.js +2 -9
  50. package/dist/server/api.js.map +1 -1
  51. package/dist/server/index.js +2 -2
  52. package/dist/server/index.js.map +1 -1
  53. package/dist/utils/ai-build.d.ts +3 -3
  54. package/dist/utils/ai-build.d.ts.map +1 -1
  55. package/dist/utils/ai-build.js +33 -86
  56. package/dist/utils/ai-build.js.map +1 -1
  57. package/dist/utils/guide.d.ts.map +1 -1
  58. package/dist/utils/guide.js +86 -63
  59. package/dist/utils/guide.js.map +1 -1
  60. package/dist/utils/memory.d.ts +2 -0
  61. package/dist/utils/memory.d.ts.map +1 -1
  62. package/dist/utils/memory.js +440 -95
  63. package/dist/utils/memory.js.map +1 -1
  64. package/dist/utils/paths.d.ts +2 -0
  65. package/dist/utils/paths.d.ts.map +1 -1
  66. package/dist/utils/paths.js +4 -0
  67. package/dist/utils/paths.js.map +1 -1
  68. package/dist/utils/project-health.d.ts +38 -0
  69. package/dist/utils/project-health.d.ts.map +1 -0
  70. package/dist/utils/project-health.js +263 -0
  71. package/dist/utils/project-health.js.map +1 -0
  72. package/dist/utils/registry.d.ts +11 -0
  73. package/dist/utils/registry.d.ts.map +1 -0
  74. package/dist/utils/registry.js +65 -0
  75. package/dist/utils/registry.js.map +1 -0
  76. package/dist/utils/rules.d.ts.map +1 -1
  77. package/dist/utils/rules.js +50 -8
  78. package/dist/utils/rules.js.map +1 -1
  79. package/dist/utils/skills.d.ts +1 -0
  80. package/dist/utils/skills.d.ts.map +1 -1
  81. package/dist/utils/skills.js +21 -5
  82. package/dist/utils/skills.js.map +1 -1
  83. package/dist/utils/summary.d.ts +8 -0
  84. package/dist/utils/summary.d.ts.map +1 -0
  85. package/dist/utils/summary.js +260 -0
  86. package/dist/utils/summary.js.map +1 -0
  87. package/package.json +2 -2
package/README.en.md CHANGED
@@ -2,90 +2,98 @@
2
2
 
3
3
  # AIDA
4
4
 
5
- ### Make Vibe Coding Measurable.
5
+ ### Make project rules, skills, and module memory the real source of truth.
6
6
 
7
- Every vibe coding session generates massive insights deviations, patterns, quality signals.<br>
8
- *But you close the terminal, and all of it vanishes. Next session, you start blind again.*<br>
9
- **AIDA captures structured data at every development checkpoint, visualizes it in a live dashboard, and distills deviation patterns into rules that make your AI write better code — every single run.**
10
-
11
- One line to integrate. Zero workflow changes.
7
+ AIDA 2.0 is no longer centered on task ledgers or run timelines. It keeps the assets that actually matter over time:
8
+ **rules, skills, module memory, and branch-level demand summaries.**
12
9
 
13
10
  ```json
14
- { "mcpServers": { "aida": { "command": "npx", "args": ["-y", "ai-dev-analytics", "mcp"] } } }
11
+ { "mcpServers": { "aida": { "command": "npx", "args": ["--registry=https://registry.npmjs.org/", "-y", "ai-dev-analytics", "mcp"] } } }
15
12
  ```
16
13
 
17
- [![npm version](https://img.shields.io/badge/npm-v1.1.7-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
14
+ [![npm version](https://img.shields.io/badge/npm-v2.0.0-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
18
15
  [![license](https://img.shields.io/github/license/LWTlong/ai-dev-analytics?color=%23333)](./LICENSE)
19
16
  [![node](https://img.shields.io/node/v/ai-dev-analytics?color=%23339933)](https://nodejs.org)
20
17
  [![tests](https://img.shields.io/badge/tests-passing-brightgreen)](#testing)
21
- [![Live Demo](https://img.shields.io/badge/🎯_Live_Demo-Interactive_Dashboard-FF4B4B)](https://lwtlong.github.io/ai-dev-analytics/)
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
-
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
18
 
26
- [Quick Start](#-30-second-setup) · [Data Loop](#-the-data-driven-loop) · [Dashboard](#-the-dashboard) · [Command Reference](./COMMANDS.md) · [Docs](./docs/INDEX.md) · [中文](./README.md)
19
+ [Chinese README](./README.md) · [Command Reference](./COMMANDS.md) · [Docs](./docs/INDEX.md)
27
20
 
28
21
  </div>
29
22
 
30
23
  ---
31
24
 
32
- ## The Insight
25
+ ## What AIDA 2.0 Keeps
26
+
27
+ The durable truth sources are:
28
+
29
+ ```text
30
+ .aida/
31
+ config.json
32
+ rules.json
33
+ skills.json
34
+ summary.json
35
+ aida-guide.md
36
+ memories/
37
+ index.json
38
+ modules/*.json
39
+ rules/*.md
40
+ ```
33
41
 
34
- Vibe coding is powerful. But it's a black box.
42
+ - `rules.json`: project-level technical rules
43
+ - `skills.json`: project-level skills registry
44
+ - `memories/index.json`: low-cost memory lookup index
45
+ - `memories/modules/*.json`: module-level business memory
46
+ - `summary.json`: branch / demand summaries
35
47
 
36
- You tell Claude to build a feature. It writes code. You ship it. But you have **zero visibility** into what actually happened:
48
+ ## What AIDA 2.0 Discards
37
49
 
38
- - How many tasks did AI complete? How long did each take?
39
- - Where did AI deviate from your project conventions? Why?
40
- - Which deviations keep recurring? What rules would prevent them?
41
- - What's the bug rate? Which phases produce the most bugs?
50
+ 2.0 intentionally removes the heavy 1.x runtime ledger model:
42
51
 
43
- Without data, you can't improve. You're just vibing — over and over, with the same blind spots.
52
+ - `run.json`
53
+ - persistent task ledgers
54
+ - timeline / events / workflow history
55
+ - `.aida/runs/**`
56
+ - `.aida/index.json`
57
+ - `.aida/tool-configs.json`
44
58
 
45
- **AIDA makes the invisible visible.** It collects structured data from every vibe coding session, renders it in a real-time dashboard, and turns deviation patterns into project rules. Your AI doesn't just code — it **learns your project**.
59
+ Migration is a cleaning rebuild, not a full carry-over.
46
60
 
47
- ---
61
+ ## Command Model
48
62
 
49
- ## 🔄 The Data-Driven Loop
63
+ The main 2.0 commands are:
50
64
 
51
- ```
52
- Vibe Coding Session
53
-
54
- AIDA silently collects structured data
55
- (tasks, deviations, bugs, reviews, files, timeline)
56
-
57
- Dashboard visualizes patterns
58
-
59
- Deviation patterns identified → AI suggests rules → user confirms → sedimented
60
- .aida/rules.json
61
-
62
- AI reads rules next session → same mistakes eliminated
65
+ ```bash
66
+ aida init
67
+ aida sync
68
+ aida build
69
+ aida doctor
70
+ aida migrate-legacy
63
71
  ```
64
72
 
65
- See the Chinese main README for the latest product positioning and examples: [README.md](./README.md).
73
+ - `init`: create the 2.0 truth-source layout
74
+ - `sync`: refresh memories, summaries, and generated tool artifacts
75
+ - `build`: rebuild generated artifacts from JSON truth sources
76
+ - `doctor`: inspect and normalize project state
77
+ - `migrate-legacy`: migrate 1.x / legacy projects into the 2.0 structure
66
78
 
67
- ---
79
+ ## Context Recovery
68
80
 
69
- ## 📊 The Dashboard
81
+ Memory recovery is intentionally layered:
70
82
 
71
- Run:
83
+ 1. read `memories/index.json`
84
+ 2. read `summary.json`
85
+ 3. only read matched `memories/modules/*.json`
72
86
 
73
- ```bash
74
- npx ai-dev-analytics dashboard
75
- ```
76
-
77
- Then open `http://localhost:2375`.
87
+ This keeps token usage low and prevents loading the full memory corpus every time.
78
88
 
79
- Live demo: [https://lwtlong.github.io/ai-dev-analytics/](https://lwtlong.github.io/ai-dev-analytics/)
80
-
81
- ---
89
+ ## Notes
82
90
 
83
- ## 30-Second Setup
91
+ - MCP is an optional structured execution channel, not the system foundation.
92
+ - CLI and MCP should operate on the same JSON truth sources.
93
+ - Built-in bundled workflow skills are no longer seeded by default in 2.0.
84
94
 
85
- Add one MCP entry:
86
-
87
- ```json
88
- { "mcpServers": { "aida": { "command": "npx", "args": ["-y", "ai-dev-analytics", "mcp"] } } }
89
- ```
95
+ For full product explanation, migration behavior, and Chinese examples, use:
90
96
 
91
- For detailed command behavior, migration notes, dedupe rules, and rerun semantics, see [COMMANDS.md](./COMMANDS.md).
97
+ - [README.md](./README.md)
98
+ - [COMMANDS.md](./COMMANDS.md)
99
+ - [docs/AIDA-2.0-DESIGN.md](./docs/AIDA-2.0-DESIGN.md)
package/README.md CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
  # AIDA
4
4
 
5
- ### 让 Vibe Coding 数据化。
5
+ ### 让 AI 项目规则、技能和模块记忆真正成为真源。
6
6
 
7
- 每一次 Vibe Coding 都在产生大量信号 —— 偏差、模式、质量数据。<br>
8
- *但你关掉终端,这些全部消失。下次对话,继续盲写。*<br>
9
- **AIDA 在每个开发节点采集结构化数据,用看板可视化,再把偏差规律沉淀成规则 —— 让你的 AI 每次运行都写出更符合预期的代码。**
7
+ 项目里真正长期有价值的,不是 task 流水账,而是:<br>
8
+ *规则、技能、模块业务记忆,以及需求最终改了什么。*<br>
9
+ **AIDA 2.0 把这些资产统一沉淀到 `.aida/*.json`,再稳定分发到 Claude / Cursor / Codex 等工具。**
10
10
 
11
- 一行配置接入,零工作流改变。
11
+ 一行配置接入,最少命令,围绕 JSON 真源工作。
12
12
 
13
13
  ```json
14
14
  { "mcpServers": { "aida": { "command": "npx", "args": ["--registry=https://registry.npmjs.org/", "-y", "ai-dev-analytics", "mcp"] } } }
15
15
  ```
16
16
 
17
- [![npm version](https://img.shields.io/badge/npm-v1.1.7-0066ff)](https://www.npmjs.com/package/ai-dev-analytics)
17
+ [![npm version](https://img.shields.io/badge/npm-v2.0.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
20
  [![tests](https://img.shields.io/badge/tests-passing-brightgreen)](#测试)
@@ -23,7 +23,7 @@
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-秒上手) · [场景操作指南](#-场景操作指南) · [数据驱动闭环](#-数据驱动闭环) · [命令速览](#-命令速览) · [重复执行与覆盖策略](#-重复执行与覆盖策略) · [规则去重与冲突判断](#-规则去重与冲突判断) · [命令文档](./COMMANDS.md) · [文档导航](./docs/INDEX.md) · [English](./README.en.md)
26
+ [一行接入](#-30-秒上手) · [2.0 真源模型](#-20-真源模型) · [场景操作指南](#-场景操作指南) · [命令速览](#-命令速览) · [重复执行与覆盖策略](#-重复执行与覆盖策略) · [规则去重与冲突判断](#-规则去重与冲突判断) · [命令文档](./COMMANDS.md) · [文档导航](./docs/INDEX.md) · [English](./README.en.md)
27
27
 
28
28
  </div>
29
29
 
@@ -31,62 +31,52 @@
31
31
 
32
32
  ## 一个洞察
33
33
 
34
- Vibe Coding 很强。但它是一个黑箱。
34
+ AI 编码很强,但项目记忆往往是散的。
35
35
 
36
- 你让 Claude 写一个功能,它写了,你 ship 了。但你对过程**零可见性**:
36
+ 你让 Claude 写一个功能,它写了,你 ship 了。但长期真正缺的是这些:
37
37
 
38
- - AI 完成了多少任务?每个任务花了多长时间?
39
- - AI 在哪里偏离了你的项目规范?为什么?
40
- - 哪些偏差反复出现?加什么规则能根治?
41
- - Bug 率多少?哪个阶段产出最多 Bug?
38
+ - 这个项目有哪些长期有效的规则?
39
+ - 这个项目有哪些真正要保留的 skills?
40
+ - 某个模块以前为什么这么写?
41
+ - 上一个需求改了哪些模块、为什么改?
42
42
 
43
- 没有数据,你就无法改进。你只是在一遍又一遍地 vibe —— 带着同样的盲区。
43
+ 没有这些真源,AI 每次都像新同事第一次进项目,靠重新扫代码碰运气。
44
44
 
45
- **AIDA 让不可见变可见。** 它在每次 vibe coding 过程中采集结构化数据,用实时看板渲染,再把偏差模式沉淀成项目规则。你的 AI 不再只是写代码 —— 它**学习你的项目**。
45
+ **AIDA 2.0 让这些资产固定下来。** 它把规则、技能、模块记忆和需求摘要沉淀成统一 JSON 真源,再分发到你实际使用的 AI 工具里。你的 AI 不再只是写代码,它开始**继承你的项目上下文**。
46
46
 
47
47
  ---
48
48
 
49
- ## 🔄 数据驱动闭环
49
+ ## 🧱 2.0 真源模型
50
50
 
51
- 这是 AIDA 的核心 —— **数据进来,规则出去,代码越来越好。**
51
+ 2.0 的核心不是 run/task 流水账,而是这 5 类真源:
52
52
 
53
53
  ```
54
- Vibe Coding 过程
55
-
56
- AIDA 静默采集结构化数据
57
- (任务、偏差、Bug、自检、文件变更、时间线)
58
-
59
- 看板可视化呈现规律
60
- "9 个偏差 → 56% 幻觉, 44% 规则缺失"
61
-
62
- 发现偏差规律 → AI 建议沉淀规则 → 用户确认 → 写入规则库
63
- .aida/rules.json ← 你的 AI 知识库在成长
64
-
65
- AI 下次读取规则 → 同样的错误被消除
66
-
67
- 循环往复 —— 每一轮,AI 输出都更接近你的预期
54
+ .aida/
55
+ config.json
56
+ rules.json
57
+ skills.json
58
+ summary.json
59
+ aida-guide.md
60
+ memories/
61
+ index.json
62
+ modules/*.json
63
+ rules/*.md
68
64
  ```
69
65
 
70
- **来自真实生产项目的数据:**
66
+ - `rules.json`:项目级技术规范真源
67
+ - `skills.json`:项目级技能真源
68
+ - `memories/index.json`:模块目录索引,低 token 检索入口
69
+ - `memories/modules/*.json`:模块正文,记录为什么这么实现、改过什么
70
+ - `summary.json`:需求/分支级轻量摘要,记录这次最终改了什么
71
71
 
72
- | 运行 | 偏差情况 | 发生了什么 | 沉淀的规则 |
73
- |------|---------|-----------|-----------|
74
- | 第 1 轮 | 47 个任务产生 23 个偏差 | AI 组件用错、布局写反、API 模式不对 | 沉淀 6 条项目专属规则 |
75
- | 第 2 轮 | **零重复偏差** | AI 读了规则,相同模式的错误归零 | — |
72
+ 2.0 会主动丢弃这些 1.x 噪音:
76
73
 
77
- **第一步:看清 AI *为什么*出错** —— 根因分布一目了然:是 AI 幻觉、规则缺失、还是上下文不足?
78
-
79
- ![偏差根因分布](https://raw.githubusercontent.com/LWTlong/ai-dev-analytics/main/docs/deviation-root-cause.png)
80
-
81
- **第二步:看清 AI *在哪*出错** —— 类别分布精准定位:UI 间距、布局结构、组件使用、API 模式。
82
-
83
- ![偏差类别分布](https://raw.githubusercontent.com/LWTlong/ai-dev-analytics/main/docs/deviation-category.png)
84
-
85
- **第三步:看规则的复利效应** —— 随着规则积累,重复偏差会逐步下降。
86
-
87
- ![偏差与规则趋势](https://raw.githubusercontent.com/LWTlong/ai-dev-analytics/main/docs/deviation-rule-trend.png)
88
-
89
- `.aida/rules.json` 就是你的**项目专属 AI 知识库**。用 AI 写得越多,它对*你的项目*就越懂。
74
+ - `run.json`
75
+ - `task` 持久化流水账
76
+ - `timeline / events / workflow`
77
+ - `.aida/runs/**`
78
+ - `.aida/index.json`
79
+ - `.aida/tool-configs.json`
90
80
 
91
81
  ---
92
82
 
@@ -216,7 +206,6 @@ aida init
216
206
 
217
207
  你会在交互里选择:
218
208
 
219
- - `collect` 或 `full` 模式
220
209
  - 需要接入的 AI 工具
221
210
  - 是否导入现有工具的规则 / skills 作为 baseline
222
211
 
@@ -224,7 +213,7 @@ aida init
224
213
 
225
214
  ```bash
226
215
  aida build
227
- aida status
216
+ aida doctor
228
217
  ```
229
218
 
230
219
  ### 2. 老项目迁移到 AIDA
@@ -531,7 +520,6 @@ AIDA 用 `fingerprint` 判断 exact duplicate。生成规则如下:
531
520
 
532
521
  - `.aida/rules/*.md`
533
522
  - `.aida/memories/modules/*.md`
534
- - `.aida/runs/*/context.md`
535
523
  - `.cursor/rules/aida/*`
536
524
  - `.codex/rules/aida/*`
537
525
  - `.claude/rules/aida/*`
@@ -548,14 +536,15 @@ AIDA 用 `fingerprint` 判断 exact duplicate。生成规则如下:
548
536
 
549
537
  ---
550
538
 
551
- ## 📁 数据沉淀与绩效汇报
539
+ ## 📁 数据沉淀与需求回顾
552
540
 
553
- AIDA 不只是可视化 —— 它**沉淀数据**。每次运行都积累结构化数据,时间越长价值越大。
541
+ AIDA 2.0 沉淀的重点不是过程流水账,而是长期有价值的结果:
554
542
 
555
- ```
556
- 1 周:47 个任务、23 个偏差、5 个 Bug、6 条规则、4064 行代码
557
- 4 周:180+ 任务、偏差率持续下降、15 条规则、完整质量历史
558
- 一个季度:完整的开发记录 —— 可导出、可分析、可汇报
559
- ```
543
+ - 项目级规则
544
+ - 项目技能
545
+ - 模块业务记忆
546
+ - 需求 / 分支级摘要
547
+
548
+ 这些数据全部都在 `.aida/` 里,以结构化 JSON 保存。你可以直接查询、导出,或接到自己的报表系统里。
560
549
 
561
- 所有数据都在 `.aida/` 里,格式是结构化 JSON。没有厂商锁定,随时可以导出、查询或接入别的报表系统。
550
+ 更重要的是,AI 下次再改同一个模块时,不需要重新从头猜项目背景,而是可以先通过 memory 索引找到这个模块以前改过什么、为什么改。
@@ -1 +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,CAiC3C"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAoCA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC3C"}
@@ -47,7 +47,6 @@ export async function build() {
47
47
  if (result.mcpFiles.length > 0) {
48
48
  console.log(` MCP: ${result.mcpFiles.join(', ')}`);
49
49
  }
50
- console.log(` Tool config snapshot: ${result.toolConfigSnapshot}`);
51
50
  if (result.gitignoreAdded.length > 0) {
52
51
  console.log(` .gitignore: added ${result.gitignoreAdded.join(', ')}`);
53
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function doctor(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAcA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAmE5C"}
@@ -0,0 +1,70 @@
1
+ import { green, red, yellow, cyan, dim } from '../../utils/display.js';
2
+ import { configPath } from '../../utils/paths.js';
3
+ import { fileExists } from '../../utils/fs.js';
4
+ import { inspectProjectHealth, normalizeProjectTruthSources } from '../../utils/project-health.js';
5
+ import { findSimilarRules, loadRegistry } from '../../utils/rules.js';
6
+ function hasFixFlag() {
7
+ return process.argv.slice(3).includes('--fix');
8
+ }
9
+ function line(ok, label, detail) {
10
+ console.log(`${ok ? green(' ✓') : yellow(' !')} ${label}: ${detail}`);
11
+ }
12
+ export async function doctor() {
13
+ const projectRoot = process.cwd();
14
+ console.log(cyan('\n AIDA Doctor\n'));
15
+ if (!fileExists(configPath(projectRoot))) {
16
+ console.log(red(' AIDA not initialized. Run `npx aida init` first.\n'));
17
+ return;
18
+ }
19
+ const fix = hasFixFlag();
20
+ if (fix) {
21
+ const normalized = normalizeProjectTruthSources(projectRoot);
22
+ console.log(green(' ✓ Normalized truth sources'));
23
+ console.log(` rules: ${normalized.rules}`);
24
+ console.log(` skills: ${normalized.skills}`);
25
+ console.log(` memories: ${normalized.memories}`);
26
+ console.log(` summary: ${normalized.summary}`);
27
+ console.log('');
28
+ }
29
+ const report = inspectProjectHealth(projectRoot);
30
+ const similarRules = findSimilarRules(loadRegistry(projectRoot)).slice(0, 10);
31
+ line(report.rules.exists && !report.rules.legacyRoot, 'rules.json', `${report.rules.count} entries`);
32
+ line(report.skills.exists && !report.skills.legacyRoot, 'skills.json', `${report.skills.count} entries`);
33
+ line(report.memories.indexExists && !report.memories.indexLegacyRoot && !report.memories.nestedLayout, 'memories', `${report.memories.moduleCount} modules`);
34
+ line(report.summary.exists, 'summary.json', `${report.summary.count} summaries`);
35
+ line(!report.runs.runtimeDirExists && report.runs.legacySchema === 0, 'legacy runtime', report.runs.runtimeDirExists ? '.aida/runs still exists' : 'clean');
36
+ line(similarRules.length === 0, 'rule duplicates', similarRules.length === 0 ? 'no near-duplicate rules' : `${similarRules.length} potential pair(s)`);
37
+ if (report.warnings.length === 0 && similarRules.length === 0) {
38
+ console.log(green('\n ✓ Project health looks good.\n'));
39
+ return;
40
+ }
41
+ if (report.warnings.length > 0) {
42
+ console.log(yellow('\n Warnings'));
43
+ for (const warning of report.warnings) {
44
+ console.log(` - ${warning}`);
45
+ }
46
+ }
47
+ if (similarRules.length > 0) {
48
+ console.log(yellow(`\n Potential duplicate rules (${similarRules.length})`));
49
+ for (const { a, b, similarity } of similarRules) {
50
+ const pct = Math.round(similarity * 100);
51
+ console.log(` - ${a.id} ↔ ${b.id} (${pct}% similar)`);
52
+ console.log(` A: ${a.content}`);
53
+ console.log(` B: ${b.content}`);
54
+ }
55
+ }
56
+ console.log('');
57
+ if (report.runs.legacySchema > 0 || report.runs.runtimeDirExists) {
58
+ console.log(dim('\n Run `aida doctor --fix` or `aida migrate-legacy` to extract 2.0 truth sources and remove legacy runtime artifacts.\n'));
59
+ }
60
+ else if (similarRules.length > 0) {
61
+ console.log(dim(' Review the pairs above. Keep both if they are materially different; merge or deprecate one if they are duplicates.\n'));
62
+ }
63
+ else if (!fix) {
64
+ console.log(dim('\n Run `aida doctor --fix` to normalize JSON truth sources and rebuild summary/index.\n'));
65
+ }
66
+ else {
67
+ console.log('');
68
+ }
69
+ }
70
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgHA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqO1C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAuCA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuJ1C"}