ai-dev-analytics 1.1.11 → 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.
- package/README.en.md +63 -55
- package/README.md +49 -60
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +0 -1
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +70 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +17 -176
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/merge-data.d.ts.map +1 -1
- package/dist/cli/commands/merge-data.js +65 -5
- package/dist/cli/commands/merge-data.js.map +1 -1
- package/dist/cli/commands/merge.js +1 -1
- package/dist/cli/commands/merge.js.map +1 -1
- package/dist/cli/commands/migrate-legacy.d.ts.map +1 -1
- package/dist/cli/commands/migrate-legacy.js +7 -9
- package/dist/cli/commands/migrate-legacy.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +4 -1
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts.map +1 -1
- package/dist/cli/commands/reindex.js +4 -74
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +7 -2
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/rules.d.ts +1 -1
- package/dist/cli/commands/rules.d.ts.map +1 -1
- package/dist/cli/commands/rules.js +9 -8
- package/dist/cli/commands/rules.js.map +1 -1
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +5 -4
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +2 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +37 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +2 -1
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +24 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/schemas/aida-project.d.ts +23 -1
- package/dist/schemas/aida-project.d.ts.map +1 -1
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +2 -9
- package/dist/server/api.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/utils/ai-build.d.ts +3 -3
- package/dist/utils/ai-build.d.ts.map +1 -1
- package/dist/utils/ai-build.js +33 -86
- package/dist/utils/ai-build.js.map +1 -1
- package/dist/utils/guide.d.ts.map +1 -1
- package/dist/utils/guide.js +90 -55
- package/dist/utils/guide.js.map +1 -1
- package/dist/utils/memory.d.ts +2 -0
- package/dist/utils/memory.d.ts.map +1 -1
- package/dist/utils/memory.js +491 -98
- package/dist/utils/memory.js.map +1 -1
- package/dist/utils/paths.d.ts +8 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +19 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/project-health.d.ts +38 -0
- package/dist/utils/project-health.d.ts.map +1 -0
- package/dist/utils/project-health.js +263 -0
- package/dist/utils/project-health.js.map +1 -0
- package/dist/utils/registry.d.ts +11 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +65 -0
- package/dist/utils/registry.js.map +1 -0
- package/dist/utils/rules.d.ts.map +1 -1
- package/dist/utils/rules.js +50 -8
- package/dist/utils/rules.js.map +1 -1
- package/dist/utils/skills.d.ts +1 -0
- package/dist/utils/skills.d.ts.map +1 -1
- package/dist/utils/skills.js +21 -5
- package/dist/utils/skills.js.map +1 -1
- package/dist/utils/summary.d.ts +8 -0
- package/dist/utils/summary.d.ts.map +1 -0
- package/dist/utils/summary.js +260 -0
- package/dist/utils/summary.js.map +1 -0
- package/package.json +2 -2
package/README.en.md
CHANGED
|
@@ -2,90 +2,98 @@
|
|
|
2
2
|
|
|
3
3
|
# AIDA
|
|
4
4
|
|
|
5
|
-
### Make
|
|
5
|
+
### Make project rules, skills, and module memory the real source of truth.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
[](https://www.npmjs.com/package/ai-dev-analytics)
|
|
18
15
|
[](./LICENSE)
|
|
19
16
|
[](https://nodejs.org)
|
|
20
17
|
[](#testing)
|
|
21
|
-
[](https://lwtlong.github.io/ai-dev-analytics/)
|
|
22
|
-
[](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
|
|
23
|
-
|
|
24
|
-
[](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
|
|
25
18
|
|
|
26
|
-
[
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
48
|
+
## What AIDA 2.0 Discards
|
|
37
49
|
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
59
|
+
Migration is a cleaning rebuild, not a full carry-over.
|
|
46
60
|
|
|
47
|
-
|
|
61
|
+
## Command Model
|
|
48
62
|
|
|
49
|
-
|
|
63
|
+
The main 2.0 commands are:
|
|
50
64
|
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
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
|
-
|
|
81
|
+
Memory recovery is intentionally layered:
|
|
70
82
|
|
|
71
|
-
|
|
83
|
+
1. read `memories/index.json`
|
|
84
|
+
2. read `summary.json`
|
|
85
|
+
3. only read matched `memories/modules/*.json`
|
|
72
86
|
|
|
73
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
---
|
|
89
|
+
## Notes
|
|
82
90
|
|
|
83
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
### 让
|
|
5
|
+
### 让 AI 项目规则、技能和模块记忆真正成为真源。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
**AIDA
|
|
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
|
-
[](https://www.npmjs.com/package/ai-dev-analytics)
|
|
18
18
|
[](./LICENSE)
|
|
19
19
|
[](https://nodejs.org)
|
|
20
20
|
[](#测试)
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
[](https://glama.ai/mcp/servers/LWTlong/ai-dev-analytics)
|
|
25
25
|
|
|
26
|
-
[一行接入](#-30-秒上手) · [
|
|
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
|
-
|
|
34
|
+
AI 编码很强,但项目记忆往往是散的。
|
|
35
35
|
|
|
36
|
-
你让 Claude 写一个功能,它写了,你 ship
|
|
36
|
+
你让 Claude 写一个功能,它写了,你 ship 了。但长期真正缺的是这些:
|
|
37
37
|
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
38
|
+
- 这个项目有哪些长期有效的规则?
|
|
39
|
+
- 这个项目有哪些真正要保留的 skills?
|
|
40
|
+
- 某个模块以前为什么这么写?
|
|
41
|
+
- 上一个需求改了哪些模块、为什么改?
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
没有这些真源,AI 每次都像新同事第一次进项目,靠重新扫代码碰运气。
|
|
44
44
|
|
|
45
|
-
**AIDA
|
|
45
|
+
**AIDA 2.0 让这些资产固定下来。** 它把规则、技能、模块记忆和需求摘要沉淀成统一 JSON 真源,再分发到你实际使用的 AI 工具里。你的 AI 不再只是写代码,它开始**继承你的项目上下文**。
|
|
46
46
|
|
|
47
47
|
---
|
|
48
48
|
|
|
49
|
-
##
|
|
49
|
+
## 🧱 2.0 真源模型
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
2.0 的核心不是 run/task 流水账,而是这 5 类真源:
|
|
52
52
|
|
|
53
53
|
```
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-

|
|
84
|
-
|
|
85
|
-
**第三步:看规则的复利效应** —— 随着规则积累,重复偏差会逐步下降。
|
|
86
|
-
|
|
87
|
-

|
|
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
|
|
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
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
543
|
+
- 项目级规则
|
|
544
|
+
- 项目技能
|
|
545
|
+
- 模块业务记忆
|
|
546
|
+
- 需求 / 分支级摘要
|
|
547
|
+
|
|
548
|
+
这些数据全部都在 `.aida/` 里,以结构化 JSON 保存。你可以直接查询、导出,或接到自己的报表系统里。
|
|
560
549
|
|
|
561
|
-
|
|
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,
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,qBAAqB,GAAmB;IAC5C,aAAa;IACb,QAAQ;IACR,gBAAgB;IAChB,UAAU;IACV,QAAQ;IACR,OAAO;CACR,CAAC;AAEF,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,UAA0B;IACnD,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,2BAA2B,EAC3B,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB;KACpE,CAAC,CAAC,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB,CAAC;IACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,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,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE3D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4BAA4B,CAAC;QACnC,KAAK,MAAM,CAAC,SAAS,gBAAgB,MAAM,CAAC,UAAU,iBAAiB,MAAM,CAAC,YAAY,uBAAuB,CAClH,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"
|
|
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"}
|