ai-dev-analytics 1.0.4 → 1.1.1

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/README.md +28 -17
  2. package/README.zh-CN.md +28 -17
  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 +46 -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 +62 -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 +110 -312
  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 +6 -0
  21. package/dist/cli/commands/migrate-dir.d.ts.map +1 -0
  22. package/dist/cli/commands/migrate-dir.js +98 -0
  23. package/dist/cli/commands/migrate-dir.js.map +1 -0
  24. package/dist/cli/commands/migrate-legacy.d.ts +2 -0
  25. package/dist/cli/commands/migrate-legacy.d.ts.map +1 -0
  26. package/dist/cli/commands/migrate-legacy.js +95 -0
  27. package/dist/cli/commands/migrate-legacy.js.map +1 -0
  28. package/dist/cli/commands/migrate.js +5 -5
  29. package/dist/cli/commands/migrate.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 +143 -38
  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.js +4 -4
  41. package/dist/cli/commands/start.js.map +1 -1
  42. package/dist/cli/commands/update.d.ts.map +1 -1
  43. package/dist/cli/commands/update.js +14 -7
  44. package/dist/cli/commands/update.js.map +1 -1
  45. package/dist/cli/index.js +36 -0
  46. package/dist/cli/index.js.map +1 -1
  47. package/dist/server/api.js +2 -2
  48. package/dist/server/api.js.map +1 -1
  49. package/dist/server/index.js +1 -1
  50. package/dist/server/index.js.map +1 -1
  51. package/dist/utils/ai-build.d.ts +19 -0
  52. package/dist/utils/ai-build.d.ts.map +1 -0
  53. package/dist/utils/ai-build.js +278 -0
  54. package/dist/utils/ai-build.js.map +1 -0
  55. package/dist/utils/fs.d.ts +9 -0
  56. package/dist/utils/fs.d.ts.map +1 -1
  57. package/dist/utils/fs.js +31 -0
  58. package/dist/utils/fs.js.map +1 -1
  59. package/dist/utils/guide.d.ts +5 -4
  60. package/dist/utils/guide.d.ts.map +1 -1
  61. package/dist/utils/guide.js +80 -13
  62. package/dist/utils/guide.js.map +1 -1
  63. package/dist/utils/import.d.ts +38 -0
  64. package/dist/utils/import.d.ts.map +1 -0
  65. package/dist/utils/import.js +308 -0
  66. package/dist/utils/import.js.map +1 -0
  67. package/dist/utils/paths.d.ts +2 -2
  68. package/dist/utils/paths.d.ts.map +1 -1
  69. package/dist/utils/paths.js +8 -8
  70. package/dist/utils/paths.js.map +1 -1
  71. package/dist/utils/prompt.d.ts +15 -0
  72. package/dist/utils/prompt.d.ts.map +1 -0
  73. package/dist/utils/prompt.js +193 -0
  74. package/dist/utils/prompt.js.map +1 -0
  75. package/dist/utils/rules.d.ts +6 -1
  76. package/dist/utils/rules.d.ts.map +1 -1
  77. package/dist/utils/rules.js +126 -6
  78. package/dist/utils/rules.js.map +1 -1
  79. package/dist/utils/run-data.d.ts +1 -1
  80. package/dist/utils/run-data.js +4 -4
  81. package/dist/utils/run-data.js.map +1 -1
  82. package/dist/utils/skills.d.ts +37 -0
  83. package/dist/utils/skills.d.ts.map +1 -0
  84. package/dist/utils/skills.js +228 -0
  85. package/dist/utils/skills.js.map +1 -0
  86. package/package.json +1 -1
  87. package/src/assets/skills/audit.md +6 -6
  88. package/src/assets/skills/bug-fixer.md +4 -4
  89. package/src/assets/skills/code-generator.md +4 -4
  90. package/src/assets/skills/dashboard-generator.md +2 -2
  91. package/src/assets/skills/dev-flower.md +3 -3
  92. package/src/assets/skills/deviation-recorder.md +7 -7
  93. package/src/assets/skills/mcp-reviewer.md +2 -2
  94. package/src/assets/skills/requirement-analyzer.md +4 -4
  95. package/src/assets/skills/rules-evolver.md +7 -7
  96. package/src/assets/skills/self-reviewer.md +4 -4
  97. package/src/assets/skills/task-splitter.md +5 -5
  98. package/src/assets/skills/workflow-orchestrator.md +11 -11
  99. package/src/assets/templates/demo-run.json +7 -7
@@ -0,0 +1,37 @@
1
+ export interface SkillRegistryEntry {
2
+ id: string;
3
+ name: string;
4
+ content: string;
5
+ fingerprint: string;
6
+ source: {
7
+ kind: 'bundled' | 'local';
8
+ path?: string;
9
+ };
10
+ updatedAt: string;
11
+ status: 'active' | 'deprecated';
12
+ }
13
+ export declare function skillsRegistryPath(projectRoot: string): string;
14
+ export declare function skillsViewDir(projectRoot: string): string;
15
+ export declare function skillFingerprint(content: string): string;
16
+ export declare function nextSkillId(entries: SkillRegistryEntry[]): string;
17
+ export declare function loadSkillRegistry(projectRoot: string): SkillRegistryEntry[];
18
+ export declare function saveSkillRegistry(projectRoot: string, entries: SkillRegistryEntry[]): void;
19
+ export declare function bundledSkillEntries(): SkillRegistryEntry[];
20
+ export declare function seedBundledSkillRegistry(projectRoot: string): SkillRegistryEntry[];
21
+ export declare function bootstrapSkillRegistry(projectRoot: string): SkillRegistryEntry[];
22
+ export declare function importSkillsFromViews(projectRoot: string): {
23
+ entries: SkillRegistryEntry[];
24
+ imported: number;
25
+ };
26
+ export declare function buildSkillViews(projectRoot: string): number;
27
+ export declare function getSkillContent(projectRoot: string, skillName: string): string | null;
28
+ export declare function updateSkillContent(projectRoot: string, skillName: string, content: string): SkillRegistryEntry | null;
29
+ export declare function mergeSkillRegistries(base: SkillRegistryEntry[], incoming: SkillRegistryEntry[]): {
30
+ merged: SkillRegistryEntry[];
31
+ added: number;
32
+ };
33
+ export declare function ensureBundledSkills(projectRoot: string): {
34
+ total: number;
35
+ added: number;
36
+ };
37
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QACN,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;QACzB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAA;CAChC;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AASD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,CASjE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAS3E;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAE1F;AASD,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAiB1D;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAIlF;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAqChF;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgE9G;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAe3D;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrF;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,kBAAkB,GAAG,IAAI,CAU3B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,QAAQ,EAAE,kBAAkB,EAAE,GAC7B;IAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgBjD;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAazF"}
@@ -0,0 +1,228 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readdirSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { ensureDir, fileExists, listDirs, readJson, readText, writeJson, writeText } from './fs.js';
5
+ import { aidaDir, SKILLS_DIR } from './paths.js';
6
+ export function skillsRegistryPath(projectRoot) {
7
+ return resolve(aidaDir(projectRoot), 'skills.json');
8
+ }
9
+ export function skillsViewDir(projectRoot) {
10
+ return resolve(aidaDir(projectRoot), 'skills');
11
+ }
12
+ function normalize(content) {
13
+ return content
14
+ .toLowerCase()
15
+ .replace(/[\s\n\r\t]+/g, ' ')
16
+ .trim();
17
+ }
18
+ export function skillFingerprint(content) {
19
+ return createHash('sha256').update(normalize(content)).digest('hex').substring(0, 12);
20
+ }
21
+ export function nextSkillId(entries) {
22
+ const nums = entries
23
+ .map((entry) => {
24
+ const match = entry.id.match(/^SKILL-(\d+)$/);
25
+ return match ? parseInt(match[1], 10) : 0;
26
+ })
27
+ .filter((n) => n > 0);
28
+ const max = nums.length > 0 ? Math.max(...nums) : 0;
29
+ return `SKILL-${String(max + 1).padStart(3, '0')}`;
30
+ }
31
+ export function loadSkillRegistry(projectRoot) {
32
+ const p = skillsRegistryPath(projectRoot);
33
+ if (!fileExists(p))
34
+ return [];
35
+ try {
36
+ const data = readJson(p);
37
+ return Array.isArray(data) ? data : [];
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ }
43
+ export function saveSkillRegistry(projectRoot, entries) {
44
+ writeJson(skillsRegistryPath(projectRoot), entries);
45
+ }
46
+ function bundledSkillNames() {
47
+ return readdirSync(SKILLS_DIR)
48
+ .filter((name) => name.endsWith('.md'))
49
+ .map((name) => name.replace(/\.md$/, ''))
50
+ .sort();
51
+ }
52
+ export function bundledSkillEntries() {
53
+ const now = new Date().toISOString();
54
+ return bundledSkillNames().map((name, index) => {
55
+ const content = readText(resolve(SKILLS_DIR, `${name}.md`));
56
+ return {
57
+ id: `SKILL-${String(index + 1).padStart(3, '0')}`,
58
+ name,
59
+ content,
60
+ fingerprint: skillFingerprint(content),
61
+ source: {
62
+ kind: 'bundled',
63
+ path: `src/assets/skills/${name}.md`,
64
+ },
65
+ updatedAt: now,
66
+ status: 'active',
67
+ };
68
+ });
69
+ }
70
+ export function seedBundledSkillRegistry(projectRoot) {
71
+ const entries = bundledSkillEntries();
72
+ saveSkillRegistry(projectRoot, entries);
73
+ return entries;
74
+ }
75
+ export function bootstrapSkillRegistry(projectRoot) {
76
+ const existing = loadSkillRegistry(projectRoot);
77
+ if (existing.length > 0)
78
+ return existing;
79
+ const localSkillDir = skillsViewDir(projectRoot);
80
+ const localSkills = listDirs(localSkillDir)
81
+ .map((name) => ({
82
+ name,
83
+ path: resolve(localSkillDir, name, 'SKILL.md'),
84
+ }))
85
+ .filter((entry) => fileExists(entry.path));
86
+ if (localSkills.length === 0) {
87
+ return seedBundledSkillRegistry(projectRoot);
88
+ }
89
+ const now = new Date().toISOString();
90
+ const entries = localSkills
91
+ .sort((a, b) => a.name.localeCompare(b.name))
92
+ .map((entry, index) => {
93
+ const content = readText(entry.path);
94
+ return {
95
+ id: `SKILL-${String(index + 1).padStart(3, '0')}`,
96
+ name: entry.name,
97
+ content,
98
+ fingerprint: skillFingerprint(content),
99
+ source: {
100
+ kind: 'local',
101
+ path: `.aida/skills/${entry.name}/SKILL.md`,
102
+ },
103
+ updatedAt: now,
104
+ status: 'active',
105
+ };
106
+ });
107
+ saveSkillRegistry(projectRoot, entries);
108
+ return entries;
109
+ }
110
+ export function importSkillsFromViews(projectRoot) {
111
+ const existing = loadSkillRegistry(projectRoot);
112
+ const now = new Date().toISOString();
113
+ const byName = new Map(existing.map((entry) => [entry.name, entry]));
114
+ const byFingerprint = new Map(existing.map((entry) => [entry.fingerprint, entry]));
115
+ const localSkillDir = skillsViewDir(projectRoot);
116
+ const localSkills = listDirs(localSkillDir)
117
+ .map((name) => ({
118
+ name,
119
+ path: resolve(localSkillDir, name, 'SKILL.md'),
120
+ }))
121
+ .filter((entry) => fileExists(entry.path))
122
+ .sort((a, b) => a.name.localeCompare(b.name));
123
+ let imported = 0;
124
+ const merged = [...existing];
125
+ for (const skill of localSkills) {
126
+ const content = readText(skill.path);
127
+ const fp = skillFingerprint(content);
128
+ const named = byName.get(skill.name);
129
+ if (named) {
130
+ if (named.fingerprint !== fp || named.content !== content || named.status !== 'active') {
131
+ named.content = content;
132
+ named.fingerprint = fp;
133
+ named.updatedAt = now;
134
+ named.status = 'active';
135
+ named.source = {
136
+ kind: 'local',
137
+ path: `.aida/skills/${skill.name}/SKILL.md`,
138
+ };
139
+ imported++;
140
+ }
141
+ byFingerprint.set(fp, named);
142
+ continue;
143
+ }
144
+ const sameContent = byFingerprint.get(fp);
145
+ if (sameContent)
146
+ continue;
147
+ const entry = {
148
+ id: nextSkillId(merged),
149
+ name: skill.name,
150
+ content,
151
+ fingerprint: fp,
152
+ source: {
153
+ kind: 'local',
154
+ path: `.aida/skills/${skill.name}/SKILL.md`,
155
+ },
156
+ updatedAt: now,
157
+ status: 'active',
158
+ };
159
+ merged.push(entry);
160
+ byName.set(entry.name, entry);
161
+ byFingerprint.set(fp, entry);
162
+ imported++;
163
+ }
164
+ if (imported > 0 || existing.length === 0) {
165
+ saveSkillRegistry(projectRoot, merged);
166
+ }
167
+ return { entries: merged, imported };
168
+ }
169
+ export function buildSkillViews(projectRoot) {
170
+ const entries = bootstrapSkillRegistry(projectRoot);
171
+ const viewDir = skillsViewDir(projectRoot);
172
+ ensureDir(viewDir);
173
+ let written = 0;
174
+ for (const entry of entries) {
175
+ if (entry.status === 'deprecated')
176
+ continue;
177
+ const destDir = resolve(viewDir, entry.name);
178
+ ensureDir(destDir);
179
+ writeText(resolve(destDir, 'SKILL.md'), entry.content);
180
+ written++;
181
+ }
182
+ return written;
183
+ }
184
+ export function getSkillContent(projectRoot, skillName) {
185
+ const entry = bootstrapSkillRegistry(projectRoot).find((item) => item.name === skillName && item.status === 'active');
186
+ return entry?.content || null;
187
+ }
188
+ export function updateSkillContent(projectRoot, skillName, content) {
189
+ const entries = bootstrapSkillRegistry(projectRoot);
190
+ const entry = entries.find((item) => item.name === skillName);
191
+ if (!entry)
192
+ return null;
193
+ entry.content = content;
194
+ entry.fingerprint = skillFingerprint(content);
195
+ entry.updatedAt = new Date().toISOString();
196
+ saveSkillRegistry(projectRoot, entries);
197
+ return entry;
198
+ }
199
+ export function mergeSkillRegistries(base, incoming) {
200
+ const fpSet = new Set(base.map((entry) => entry.fingerprint));
201
+ const merged = [...base];
202
+ let added = 0;
203
+ for (const entry of incoming) {
204
+ if (fpSet.has(entry.fingerprint))
205
+ continue;
206
+ merged.push({
207
+ ...entry,
208
+ id: nextSkillId(merged),
209
+ });
210
+ fpSet.add(entry.fingerprint);
211
+ added++;
212
+ }
213
+ return { merged, added };
214
+ }
215
+ export function ensureBundledSkills(projectRoot) {
216
+ const existing = loadSkillRegistry(projectRoot);
217
+ if (existing.length === 0) {
218
+ const seeded = seedBundledSkillRegistry(projectRoot);
219
+ return { total: seeded.length, added: seeded.length };
220
+ }
221
+ const bundled = bundledSkillEntries();
222
+ const { merged, added } = mergeSkillRegistries(existing, bundled);
223
+ if (added > 0) {
224
+ saveSkillRegistry(projectRoot, merged);
225
+ }
226
+ return { total: merged.length, added };
227
+ }
228
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-dev-analytics",
3
- "version": "1.0.4",
3
+ "version": "1.1.1",
4
4
  "description": "AI Development Analytics Platform - Track what AI actually does in your codebase",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: audit
3
- description: 扫描项目代码,生成与项目完全匹配的 AI 开发规范,直接写入 .aidevos/rules/。
4
- globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
3
+ description: 扫描项目代码,生成与项目完全匹配的 AI 开发规范,直接写入 .aida/rules/。
4
+ globs: ['.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # audit (项目审计)
@@ -23,7 +23,7 @@ globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
23
23
  ### 阶段一:加载现有规则
24
24
 
25
25
  读取并理解项目现有的所有规则来源:
26
- 1. **AIDevOS 规则**:`.aidevos/rules/*.md`
26
+ 1. **AIDevOS 规则**:`.aida/rules/*.md`
27
27
  2. **全局规则文件**:
28
28
  - Claude Code 用户:`CLAUDE.md`
29
29
  - Cursor 用户:`.cursor/rules/*/*.md`
@@ -43,7 +43,7 @@ globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
43
43
 
44
44
  ### 阶段三:规则审计
45
45
 
46
- 对现有 `.aidevos/rules/` 进行审计:
46
+ 对现有 `.aida/rules/` 进行审计:
47
47
  - **重复检测**:语义重复、约束重复
48
48
  - **冲突检测**:A 强制 vs B 禁止
49
49
  - **失配检测**:引用不存在的组件/API
@@ -51,7 +51,7 @@ globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
51
51
 
52
52
  ### 阶段四:生成规则并直接写入
53
53
 
54
- 基于真实代码生成或更新 `.aidevos/rules/` 下的规则文件:
54
+ 基于真实代码生成或更新 `.aida/rules/` 下的规则文件:
55
55
 
56
56
  | 文件 | 内容 |
57
57
  |------|------|
@@ -73,7 +73,7 @@ globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
73
73
 
74
74
  生成完成后输出:
75
75
  ```
76
- ✓ 已生成/更新 .aidevos/rules/ 下的规则文件:
76
+ ✓ 已生成/更新 .aida/rules/ 下的规则文件:
77
77
  - code-style.md
78
78
  - component-usage.md
79
79
  - api-patterns.md
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: bug-fixer
3
3
  description: 处理自检不通过或测试产生的 Bug 缺陷。基于 review 结果或用户反馈进行专项修复,并将 Bug 记录写入 run.json.bugs[]。
4
- globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
4
+ globs: ['.aida/runs/*/*/run.json', '.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # bug-fixer (缺陷修复器)
8
8
 
9
- > **铁律**:1) 修复后必须在 `run.json.bugs[]` 追加 Bug 记录并更新 `summary.bugCount` 2) 写入后输出 `✓ run.json updated: bugs[], summary` 3) 修复前必须回顾项目所有规范(`.aidevos/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`)判断是否为规范偏离 4) 如属于 AI 偏差(非功能 Bug),建议用户使用 deviation-recorder 记录
9
+ > **铁律**:1) 修复后必须在 `run.json.bugs[]` 追加 Bug 记录并更新 `summary.bugCount` 2) 写入后输出 `✓ run.json updated: bugs[], summary` 3) 修复前必须回顾项目所有规范(`.aida/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`)判断是否为规范偏离 4) 如属于 AI 偏差(非功能 Bug),建议用户使用 deviation-recorder 记录
10
10
 
11
11
  ## 角色
12
12
 
@@ -16,7 +16,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
16
16
 
17
17
  > **[run_id]**:当前需求/功能的唯一标识
18
18
  > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
- > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
19
+ > **数据根目录**:`.aida/runs/[run_id]/[dev_name]/`
20
20
  > **数据文件**:`run.json`
21
21
 
22
22
  ## 执行指令
@@ -27,7 +27,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
27
27
  2. **定位与分析:**
28
28
  - 根据 Bug 的描述或错误堆栈,定位到具体的问题文件。
29
29
  - 回顾项目所有规范,以识别是不是架构偏离问题导致的:
30
- - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件
30
+ - **AIDevOS 规则**:`.aida/rules/` 下的所有 `.md` 文件
31
31
  - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
32
32
 
33
33
  3. **修复策略执行:**
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: code-generator
3
3
  description: 严格按照 run.json.tasks[] 和项目规范生成业务代码,并更新任务状态。
4
- globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
4
+ globs: ['.aida/runs/*/*/run.json', '.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # code-generator (代码生成器)
8
8
 
9
- > **铁律**:1) 必须先读取项目所有规范再写代码(`.aidevos/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`) 2) 完成后必须更新 `run.json.tasks[].status` 和 `summary.completedTasks` 3) 写入后输出 `✓ run.json updated: tasks[], summary, files[]` 4) 禁止臆想不存在的 API / 组件 5) 禁止魔法字符串,文案必须走 i18n
9
+ > **铁律**:1) 必须先读取项目所有规范再写代码(`.aida/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`) 2) 完成后必须更新 `run.json.tasks[].status` 和 `summary.completedTasks` 3) 写入后输出 `✓ run.json updated: tasks[], summary, files[]` 4) 禁止臆想不存在的 API / 组件 5) 禁止魔法字符串,文案必须走 i18n
10
10
 
11
11
  ## 角色
12
12
 
@@ -16,7 +16,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
16
16
 
17
17
  > **[run_id]**:当前需求/功能的唯一标识
18
18
  > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
- > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
19
+ > **数据根目录**:`.aida/runs/[run_id]/[dev_name]/`
20
20
  > **数据文件**:`run.json`
21
21
 
22
22
  ## 执行指令
@@ -32,7 +32,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
32
32
 
33
33
  **a) 读取项目规范(必须):**
34
34
  - 仔细阅读项目所有规范:
35
- - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件(从 `rules.json` 自动生成的分类视图)
35
+ - **AIDevOS 规则**:`.aida/rules/` 下的所有 `.md` 文件(从 `rules.json` 自动生成的分类视图)
36
36
  - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
37
37
  - 规范包括:编码风格、组件使用、API 封装、i18n、状态管理、架构约束等。
38
38
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: dashboard-generator
3
3
  description: 根据 run.json 数据自动生成/更新数据看板。现已由 `aida dashboard` CLI 命令替代(实时 Web Dashboard)。
4
- globs: ['.aidevos/runs/*/*/run.json']
4
+ globs: ['.aida/runs/*/*/run.json']
5
5
  ---
6
6
 
7
7
  # dashboard-generator (数据看板生成器)
@@ -16,7 +16,7 @@ globs: ['.aidevos/runs/*/*/run.json']
16
16
 
17
17
  > **[run_id]**:当前需求/功能的唯一标识
18
18
  > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
- > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
19
+ > **数据根目录**:`.aida/runs/[run_id]/[dev_name]/`
20
20
  > **数据源**:`run.json`(单一数据源)
21
21
 
22
22
  ## 数据源 (run.json 字段映射)
@@ -39,13 +39,13 @@ globs: []
39
39
  - audit
40
40
 
41
41
  遍历列表:
42
- - 如果 `.aidevos/skills/[skill_name]/SKILL.md` 已存在 -> 跳过
42
+ - 如果 `.aida/skills/[skill_name]/SKILL.md` 已存在 -> 跳过
43
43
  - 如果不存在 -> 创建
44
44
 
45
45
  ### 3. 创建目录结构
46
46
 
47
47
  ```
48
- .aidevos/
48
+ .aida/
49
49
  skills/ # Skill 定义(14 个)
50
50
  rules/ # 项目规范
51
51
  iron-rules.md # 铁律(不可违反)
@@ -60,7 +60,7 @@ globs: []
60
60
 
61
61
  ### 4. 初始化 Rules 文件
62
62
 
63
- 在 `.aidevos/rules/` 下生成 `iron-rules.md`,包含 3 条铁律。
63
+ 在 `.aida/rules/` 下生成 `iron-rules.md`,包含 3 条铁律。
64
64
 
65
65
  ### 5. 初始化需求文件夹
66
66
 
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: deviation-recorder
3
3
  description: 记录 AI 代码生成产出与用户实际期望之间的偏差,修复代码并写入 run.json.deviations[],用于后续数据分析和规则优化。
4
- globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
4
+ globs: ['.aida/runs/*/*/run.json', '.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # deviation-recorder (偏差记录器)
8
8
 
9
- > **铁律**:1) 必须在 `run.json.deviations[]` 追加偏差记录并更新 `summary.deviationCount`(不可跳过) 2) 写入后输出 `✓ run.json updated: deviations[], summary` 3) 偏差是无业务逻辑的技术规范时必须沉淀规则到 `.aidevos/rules/` 并记录到 `run.json.rules[]` 4) 必须明确 rootCauseCategory 和 deviationCategory(不能留空)
9
+ > **铁律**:1) 必须在 `run.json.deviations[]` 追加偏差记录并更新 `summary.deviationCount`(不可跳过) 2) 写入后输出 `✓ run.json updated: deviations[], summary` 3) 偏差是无业务逻辑的技术规范时必须沉淀规则到 `.aida/rules/` 并记录到 `run.json.rules[]` 4) 必须明确 rootCauseCategory 和 deviationCategory(不能留空)
10
10
 
11
11
  ## 角色
12
12
 
@@ -16,7 +16,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
16
16
 
17
17
  > **[run_id]**:当前需求/功能的唯一标识
18
18
  > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
- > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
19
+ > **数据根目录**:`.aida/runs/[run_id]/[dev_name]/`
20
20
  > **数据文件**:`run.json`
21
21
 
22
22
  ## 提示
@@ -39,7 +39,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
39
39
  2. **定位与分析:**
40
40
  - 根据偏差描述,定位到具体的问题文件。
41
41
  - 回顾项目所有规范,判断是否为规则缺失或 AI 臆想导致:
42
- - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件
42
+ - **AIDevOS 规则**:`.aida/rules/` 下的所有 `.md` 文件
43
43
  - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
44
44
 
45
45
  3. **修复代码:**
@@ -74,10 +74,10 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
74
74
  - `content`: 规则描述
75
75
  - `category`: 分类(可选值:`component`, `api`, `style`, `i18n`, `architecture`, `state-management`, `routing`, `testing`, `process`, `general`)
76
76
  - `sourceDeviation`: 关联的偏差 ID(如 DEV-XX)
77
- - 规则会自动写入 `.aidevos/rules.json`(项目级注册表),并通过 fingerprint 自动去重
78
- - 工具会自动重建 `.aidevos/rules/*.md` 视图文件
77
+ - 规则会自动写入 `.aida/rules.json`(项目级注册表),并通过 fingerprint 自动去重
78
+ - 工具会自动重建 `.aida/rules/*.md` 视图文件
79
79
 
80
80
  **c) 带业务逻辑 → 不创建规则:**
81
81
  - 如果是**业务逻辑**(特定功能需求),不创建规则,只记录偏差即可。
82
82
 
83
- **注意**:规则的 source of truth 是 `.aidevos/rules.json`(提交到 git),`.aidevos/rules/*.md` 是自动生成的只读视图(已 gitignore)。并行分支的规则通过 fingerprint 自动去重,合并冲突可用 `aida rules merge` 解决。
83
+ **注意**:规则的 source of truth 是 `.aida/rules.json`(提交到 git),`.aida/rules/*.md` 是自动生成的只读视图(已 gitignore)。并行分支的规则通过 fingerprint 自动去重,合并冲突可用 `aida rules merge` 解决。
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: mcp-reviewer
3
3
  description: 使用外部审查工具或人类代码审查结果进行更高安全级别的审计,结果写入 run.json.reviews[]。
4
- globs: ['.aidevos/runs/*/*/run.json']
4
+ globs: ['.aida/runs/*/*/run.json']
5
5
  ---
6
6
 
7
7
  # mcp-reviewer (高级审查员)
@@ -22,7 +22,7 @@ globs: ['.aidevos/runs/*/*/run.json']
22
22
 
23
23
  ## 路径约定
24
24
 
25
- > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
25
+ > **数据根目录**:`.aida/runs/[run_id]/[dev_name]/`
26
26
  > **数据文件**:`run.json`
27
27
 
28
28
  ## 执行说明
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: requirement-analyzer
3
3
  description: 分析需求文档,对比 PRD 与已有代码/规则,提取需实现的功能点及约束。
4
- globs: ['.aidevos/runs/*/prd.md', '.aidevos/runs/*/prd*.md', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
4
+ globs: ['.aida/runs/*/prd.md', '.aida/runs/*/prd*.md', '.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # requirement-analyzer (需求分析器)
@@ -14,8 +14,8 @@ globs: ['.aidevos/runs/*/prd.md', '.aidevos/runs/*/prd*.md', '.aidevos/rules/*.m
14
14
 
15
15
  > **[run_id]**:当前需求/功能的唯一标识
16
16
  > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
17
- > **分支目录**:`.aidevos/runs/[run_id]/`(共享:prd.md、analysis.md、requirement.json)
18
- > **开发者目录**:`.aidevos/runs/[run_id]/[dev_name]/`(个人:run.json)
17
+ > **分支目录**:`.aida/runs/[run_id]/`(共享:prd.md、analysis.md、requirement.json)
18
+ > **开发者目录**:`.aida/runs/[run_id]/[dev_name]/`(个人:run.json)
19
19
 
20
20
  ## 执行步骤
21
21
 
@@ -37,7 +37,7 @@ globs: ['.aidevos/runs/*/prd.md', '.aidevos/runs/*/prd*.md', '.aidevos/rules/*.m
37
37
 
38
38
  **c) 读取项目规范:**
39
39
  - 读取项目所有规范,确保分析结果符合项目全局约束:
40
- - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件
40
+ - **AIDevOS 规则**:`.aida/rules/` 下的所有 `.md` 文件
41
41
  - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
42
42
 
43
43
  2. **提取核心信息:**
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: rules-evolver
3
3
  description: 根据日常开发过程中遇到的普遍问题、PR 意见、架构升级,维护并沉淀本地项目开发规范。
4
- globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
4
+ globs: ['.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # rules-evolver (规范演进者)
@@ -12,30 +12,30 @@ globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
12
12
 
13
13
  ## 角色
14
14
 
15
- 你是一个经验丰富的架构布道师。你通过审视项目中反复出现的 Code Review 反馈、新的技术栈升级,来提取并沉淀为新的最佳实践,反哺到 `.aidevos/rules/` 体系中。同时兼顾全局规则文件(`CLAUDE.md` 或 `.cursor/rules/*/*.md`)的一致性。
15
+ 你是一个经验丰富的架构布道师。你通过审视项目中反复出现的 Code Review 反馈、新的技术栈升级,来提取并沉淀为新的最佳实践,反哺到 `.aida/rules/` 体系中。同时兼顾全局规则文件(`CLAUDE.md` 或 `.cursor/rules/*/*.md`)的一致性。
16
16
 
17
17
  ## 执行说明
18
18
 
19
19
  1. 该 Skill 需要人工参与触发。
20
20
  2. 当人类架构师或开发指出特定新规则或痛点时,你负责:
21
21
  - 读取现有规则:
22
- - **规则注册表**:`.aidevos/rules.json`(唯一的真相源)
23
- - **规则视图**:`.aidevos/rules/*.md`(自动生成的分类视图)
22
+ - **规则注册表**:`.aida/rules.json`(唯一的真相源)
23
+ - **规则视图**:`.aida/rules/*.md`(自动生成的分类视图)
24
24
  - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
25
25
  - 将新规则总结、泛化后,询问用户确认,然后调用 `aida_log_rule` MCP 工具写入注册表:
26
26
  - `content`: 规则内容
27
27
  - `category`: 分类(可选值:`component`, `api`, `style`, `i18n`, `architecture`, `state-management`, `routing`, `testing`, `process`, `general`)
28
28
  - `sourceDeviation`: 关联的偏差 ID
29
29
  - 工具会自动检查 fingerprint 去重,如果规则已存在会提示
30
- - 工具会自动重建 `.aidevos/rules/*.md` 视图
30
+ - 工具会自动重建 `.aida/rules/*.md` 视图
31
31
  - 检查是否与全局规则文件冲突,如有冲突则提示用户
32
32
  3. 确保提炼出的规则具有可被 AI 自动化解析、清晰且强制性的执行标准。
33
33
  4. 你的每一次输出都将直接影响后续 code-generator 和 self-reviewer 的行为。
34
34
 
35
35
  ## 规则存储架构
36
36
 
37
- - **Source of Truth**:`.aidevos/rules.json`(JSON 数组,提交到 git)
38
- - **只读视图**:`.aidevos/rules/*.md`(按分类自动生成,已 gitignore)
37
+ - **Source of Truth**:`.aida/rules.json`(JSON 数组,提交到 git)
38
+ - **只读视图**:`.aida/rules/*.md`(按分类自动生成,已 gitignore)
39
39
  - **去重机制**:每条规则有 fingerprint(内容 hash),自动防止重复沉淀
40
40
  - **合并策略**:并行分支各自追加规则到 JSON,合并时取并集(`aida rules merge`)
41
41
 
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: self-reviewer
3
3
  description: 根据项目规范,对当前代码修改进行质量自检,将审核结果写入 run.json.reviews[],驱动代码修改反馈循环。
4
- globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
4
+ globs: ['.aida/runs/*/*/run.json', '.aida/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
5
  ---
6
6
 
7
7
  # self-reviewer (质量自检员)
8
8
 
9
- > **铁律**:1) 必须先读取项目所有规范作为检查基准(`.aidevos/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`) 2) 检查结果必须写入 `run.json.reviews[]` 并更新 `summary.reviewCount` 3) 写入后输出 `✓ run.json updated: reviews[], summary` 4) 发现问题必须给出具体文件路径和修复方案 5) 不合规必须返回 fail,不能放水
9
+ > **铁律**:1) 必须先读取项目所有规范作为检查基准(`.aida/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`) 2) 检查结果必须写入 `run.json.reviews[]` 并更新 `summary.reviewCount` 3) 写入后输出 `✓ run.json updated: reviews[], summary` 4) 发现问题必须给出具体文件路径和修复方案 5) 不合规必须返回 fail,不能放水
10
10
 
11
11
  ## 角色
12
12
 
@@ -16,7 +16,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
16
16
 
17
17
  > **[run_id]**:当前需求/功能的唯一标识
18
18
  > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
- > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
19
+ > **数据根目录**:`.aida/runs/[run_id]/[dev_name]/`
20
20
  > **数据文件**:`run.json`
21
21
 
22
22
  ## 执行指令
@@ -25,7 +25,7 @@ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.curs
25
25
 
26
26
  - 读取 `run.json.tasks[]` 中最近 `status: "done"` 的任务,确定审查范围。
27
27
  - 读取项目所有规范(非常重要):
28
- - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件(从 `rules.json` 自动生成的分类视图)
28
+ - **AIDevOS 规则**:`.aida/rules/` 下的所有 `.md` 文件(从 `rules.json` 自动生成的分类视图)
29
29
  - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
30
30
 
31
31
  2. **执行全维度自检:**