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.
- package/README.md +28 -17
- package/README.zh-CN.md +28 -17
- package/dist/cli/commands/build.d.ts +2 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +46 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dashboard.js +1 -1
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/import.d.ts +2 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +62 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +110 -312
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/merge.d.ts +2 -0
- package/dist/cli/commands/merge.d.ts.map +1 -0
- package/dist/cli/commands/merge.js +47 -0
- package/dist/cli/commands/merge.js.map +1 -0
- package/dist/cli/commands/migrate-dir.d.ts +6 -0
- package/dist/cli/commands/migrate-dir.d.ts.map +1 -0
- package/dist/cli/commands/migrate-dir.js +98 -0
- package/dist/cli/commands/migrate-dir.js.map +1 -0
- package/dist/cli/commands/migrate-legacy.d.ts +2 -0
- package/dist/cli/commands/migrate-legacy.d.ts.map +1 -0
- package/dist/cli/commands/migrate-legacy.js +95 -0
- package/dist/cli/commands/migrate-legacy.js.map +1 -0
- package/dist/cli/commands/migrate.js +5 -5
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/report.js +1 -1
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/rules.d.ts +5 -0
- package/dist/cli/commands/rules.d.ts.map +1 -1
- package/dist/cli/commands/rules.js +143 -38
- package/dist/cli/commands/rules.js.map +1 -1
- package/dist/cli/commands/skills.d.ts +7 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +180 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/start.js +4 -4
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +14 -7
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +36 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/server/api.js +2 -2
- package/dist/server/api.js.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/utils/ai-build.d.ts +19 -0
- package/dist/utils/ai-build.d.ts.map +1 -0
- package/dist/utils/ai-build.js +278 -0
- package/dist/utils/ai-build.js.map +1 -0
- package/dist/utils/fs.d.ts +9 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +31 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/guide.d.ts +5 -4
- package/dist/utils/guide.d.ts.map +1 -1
- package/dist/utils/guide.js +80 -13
- package/dist/utils/guide.js.map +1 -1
- package/dist/utils/import.d.ts +38 -0
- package/dist/utils/import.d.ts.map +1 -0
- package/dist/utils/import.js +308 -0
- package/dist/utils/import.js.map +1 -0
- package/dist/utils/paths.d.ts +2 -2
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +8 -8
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/prompt.d.ts +15 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +193 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/rules.d.ts +6 -1
- package/dist/utils/rules.d.ts.map +1 -1
- package/dist/utils/rules.js +126 -6
- package/dist/utils/rules.js.map +1 -1
- package/dist/utils/run-data.d.ts +1 -1
- package/dist/utils/run-data.js +4 -4
- package/dist/utils/run-data.js.map +1 -1
- package/dist/utils/skills.d.ts +37 -0
- package/dist/utils/skills.d.ts.map +1 -0
- package/dist/utils/skills.js +228 -0
- package/dist/utils/skills.js.map +1 -0
- package/package.json +1 -1
- package/src/assets/skills/audit.md +6 -6
- package/src/assets/skills/bug-fixer.md +4 -4
- package/src/assets/skills/code-generator.md +4 -4
- package/src/assets/skills/dashboard-generator.md +2 -2
- package/src/assets/skills/dev-flower.md +3 -3
- package/src/assets/skills/deviation-recorder.md +7 -7
- package/src/assets/skills/mcp-reviewer.md +2 -2
- package/src/assets/skills/requirement-analyzer.md +4 -4
- package/src/assets/skills/rules-evolver.md +7 -7
- package/src/assets/skills/self-reviewer.md +4 -4
- package/src/assets/skills/task-splitter.md +5 -5
- package/src/assets/skills/workflow-orchestrator.md +11 -11
- package/src/assets/templates/demo-run.json +7 -7
package/dist/utils/guide.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* AIDA Guide — ensures data collection and rule sedimentation guidance
|
|
3
3
|
* is written to AI tool instruction files.
|
|
4
4
|
*
|
|
5
|
-
* Single source of truth: .
|
|
6
|
-
* References: CLAUDE.md (Claude Code) / .cursor/rules/ (Cursor)
|
|
5
|
+
* Single source of truth: .aida/aida-guide.md
|
|
6
|
+
* References: CLAUDE.md (Claude Code) / AGENTS.md (Codex) / .cursor/rules/ (Cursor)
|
|
7
7
|
*/
|
|
8
8
|
import { resolve } from 'node:path';
|
|
9
9
|
import { fileExists, readText, writeText, ensureDir } from './fs.js';
|
|
10
|
-
import {
|
|
10
|
+
import { aidaDir } from './paths.js';
|
|
11
11
|
// ─── Guide Content ──────────────────────────────────────
|
|
12
12
|
const GUIDE_FILENAME = 'aida-guide.md';
|
|
13
13
|
const GUIDE_CONTENT = `# AIDA 数据采集与规则沉淀指南
|
|
@@ -21,11 +21,13 @@ const GUIDE_CONTENT = `# AIDA 数据采集与规则沉淀指南
|
|
|
21
21
|
|
|
22
22
|
**开始任何开发任务前,必须按顺序完成以下两步:**
|
|
23
23
|
|
|
24
|
-
1. **读取项目规则** → 使用 Read 工具读取 \`.
|
|
24
|
+
1. **读取项目规则** → 使用 Read 工具读取 \`.aida/rules/_all.md\`,了解已沉淀的项目规则并严格遵守(文件不存在则跳过此步)
|
|
25
25
|
2. **执行数据采集流程** → 严格按照第一节规定的顺序调用 MCP 工具:\`aida_task_start\` → \`aida_log_files\` → \`aida_log_review\` → \`aida_task_done\`
|
|
26
26
|
|
|
27
27
|
不得以任何理由跳过上述步骤。
|
|
28
28
|
|
|
29
|
+
**当用户直接口述要沉淀某条项目级技术规范,或你识别到 \`rule-missing\` 类型偏差需要沉淀规则时,不要只修改本地说明文件,必须通过 AIDA MCP 的 \`aida_log_rule\` 工具写入 \`.aida/rules.json\`。**
|
|
30
|
+
|
|
29
31
|
## 一、数据采集
|
|
30
32
|
|
|
31
33
|
### 核心原则
|
|
@@ -98,6 +100,14 @@ category 可选值:
|
|
|
98
100
|
- category: 分类(可选值:component, api, style, i18n, architecture, state-management, routing, testing, process, general)
|
|
99
101
|
- sourceDeviation: 关联的偏差 ID(如 DEV-01)
|
|
100
102
|
|
|
103
|
+
### 用户直接口述规则
|
|
104
|
+
|
|
105
|
+
如果用户明确口述一条应长期生效的项目级技术规范,也应按同样原则处理:
|
|
106
|
+
1. 判断它是否属于项目级技术规范,而不是业务逻辑
|
|
107
|
+
2. 如有歧义先确认
|
|
108
|
+
3. 确认后调用 \`aida_log_rule\` 写入 \`.aida/rules.json\`
|
|
109
|
+
4. 不要只把它写进某个 AI 工具自己的本地规则文件
|
|
110
|
+
|
|
101
111
|
### 阶段性回顾
|
|
102
112
|
|
|
103
113
|
完成一轮开发(多个任务完成)后:
|
|
@@ -106,11 +116,18 @@ category 可选值:
|
|
|
106
116
|
3. 如果有,汇总这些偏差模式并询问用户是否需要批量沉淀
|
|
107
117
|
`;
|
|
108
118
|
// ─── CLAUDE.md reference ────────────────────────────────
|
|
109
|
-
const CLAUDE_MARKER = '.
|
|
119
|
+
const CLAUDE_MARKER = '.aida/aida-guide.md';
|
|
110
120
|
const CLAUDE_REFERENCE = `
|
|
111
121
|
## AIDA
|
|
112
122
|
|
|
113
|
-
**⚠️ 严禁跳过:开始任何开发任务前,必须通过 Read 工具读取 \`.
|
|
123
|
+
**⚠️ 严禁跳过:开始任何开发任务前,必须通过 Read 工具读取 \`.aida/aida-guide.md\` 的完整内容,并严格按照其中的规范执行。不得以任何理由跳过。**
|
|
124
|
+
**当用户直接要求沉淀规则,或你识别到需要沉淀项目级技术规范时,必须使用 AIDA MCP 的 \`aida_log_rule\` 工具写入 \`.aida/rules.json\`,不要只修改本地规则说明文件。**
|
|
125
|
+
`;
|
|
126
|
+
const CODEX_REFERENCE = `
|
|
127
|
+
## AIDA
|
|
128
|
+
|
|
129
|
+
**⚠️ 严禁跳过:开始任何开发任务前,必须先读取 \`.aida/aida-guide.md\`,并严格执行其中的数据采集与规则沉淀规范。**
|
|
130
|
+
**当用户直接要求沉淀规则,或你识别到需要沉淀项目级技术规范时,必须调用 \`aida_log_rule\` 写入 \`.aida/rules.json\`,不要只修改 AGENTS 或其他本地说明文件。**
|
|
114
131
|
`;
|
|
115
132
|
// ─── Cursor rule frontmatter ────────────────────────────
|
|
116
133
|
const CURSOR_FRONTMATTER = `---
|
|
@@ -128,24 +145,24 @@ globs: ['**/*']
|
|
|
128
145
|
`;
|
|
129
146
|
// ─── Public API ─────────────────────────────────────────
|
|
130
147
|
export function guidePath(projectRoot) {
|
|
131
|
-
return resolve(
|
|
148
|
+
return resolve(aidaDir(projectRoot), GUIDE_FILENAME);
|
|
132
149
|
}
|
|
133
150
|
/**
|
|
134
|
-
* Write .
|
|
151
|
+
* Write .aida/aida-guide.md if it doesn't exist.
|
|
135
152
|
*/
|
|
136
153
|
export function ensureGuide(projectRoot) {
|
|
137
154
|
const p = guidePath(projectRoot);
|
|
138
155
|
if (fileExists(p))
|
|
139
156
|
return;
|
|
140
|
-
ensureDir(
|
|
157
|
+
ensureDir(aidaDir(projectRoot));
|
|
141
158
|
writeText(p, GUIDE_CONTENT);
|
|
142
159
|
}
|
|
143
160
|
/**
|
|
144
|
-
* Always overwrite .
|
|
161
|
+
* Always overwrite .aida/aida-guide.md with the latest template content.
|
|
145
162
|
* Called by `aida rules build` to keep the guide in sync with the package version.
|
|
146
163
|
*/
|
|
147
164
|
export function updateGuide(projectRoot) {
|
|
148
|
-
ensureDir(
|
|
165
|
+
ensureDir(aidaDir(projectRoot));
|
|
149
166
|
writeText(guidePath(projectRoot), GUIDE_CONTENT);
|
|
150
167
|
}
|
|
151
168
|
/**
|
|
@@ -162,6 +179,9 @@ export function syncGuideReference(projectRoot, tools) {
|
|
|
162
179
|
case 'cursor':
|
|
163
180
|
addCursorReference(projectRoot);
|
|
164
181
|
break;
|
|
182
|
+
case 'codex':
|
|
183
|
+
addCodexReference(projectRoot);
|
|
184
|
+
break;
|
|
165
185
|
case 'lingma':
|
|
166
186
|
addLingmaReference(projectRoot);
|
|
167
187
|
break;
|
|
@@ -180,11 +200,14 @@ export function updateGuideReferences(projectRoot, tools) {
|
|
|
180
200
|
ensureGuideAtTop(projectRoot);
|
|
181
201
|
break;
|
|
182
202
|
case 'cursor': {
|
|
183
|
-
const rulesDir = resolve(projectRoot, '.cursor', 'rules', '
|
|
203
|
+
const rulesDir = resolve(projectRoot, '.cursor', 'rules', 'aida');
|
|
184
204
|
ensureDir(rulesDir);
|
|
185
205
|
writeText(resolve(rulesDir, 'aida-guide.md'), CURSOR_FRONTMATTER + GUIDE_CONTENT);
|
|
186
206
|
break;
|
|
187
207
|
}
|
|
208
|
+
case 'codex':
|
|
209
|
+
ensureCodexGuideAtTop(projectRoot);
|
|
210
|
+
break;
|
|
188
211
|
case 'lingma': {
|
|
189
212
|
const rulesDir = resolve(projectRoot, '.lingma', 'rules');
|
|
190
213
|
ensureDir(rulesDir);
|
|
@@ -201,6 +224,8 @@ function detectAiTools(projectRoot) {
|
|
|
201
224
|
tools.push('claude-code');
|
|
202
225
|
if (fileExists(resolve(projectRoot, '.cursor', 'mcp.json')))
|
|
203
226
|
tools.push('cursor');
|
|
227
|
+
if (fileExists(resolve(projectRoot, 'AGENTS.md')))
|
|
228
|
+
tools.push('codex');
|
|
204
229
|
if (fileExists(resolve(projectRoot, '.lingma', 'mcp.json')))
|
|
205
230
|
tools.push('lingma');
|
|
206
231
|
return tools;
|
|
@@ -217,6 +242,18 @@ function addClaudeReference(projectRoot) {
|
|
|
217
242
|
writeText(file, CLAUDE_REFERENCE.trim() + '\n');
|
|
218
243
|
}
|
|
219
244
|
}
|
|
245
|
+
function addCodexReference(projectRoot) {
|
|
246
|
+
const file = resolve(projectRoot, 'AGENTS.md');
|
|
247
|
+
if (fileExists(file)) {
|
|
248
|
+
const content = readText(file);
|
|
249
|
+
if (content.includes(CLAUDE_MARKER))
|
|
250
|
+
return;
|
|
251
|
+
writeText(file, insertAtTop(content, CODEX_REFERENCE.trimStart()));
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
writeText(file, CODEX_REFERENCE.trim() + '\n');
|
|
255
|
+
}
|
|
256
|
+
}
|
|
220
257
|
/**
|
|
221
258
|
* Ensure the AIDA guide reference sits near the top of CLAUDE.md with up-to-date content.
|
|
222
259
|
* Moves the section if it's buried lower in the file, and updates stale content.
|
|
@@ -257,6 +294,36 @@ export function ensureGuideAtTop(projectRoot) {
|
|
|
257
294
|
.trim();
|
|
258
295
|
writeText(file, insertAtTop(without, newSection) + '\n');
|
|
259
296
|
}
|
|
297
|
+
export function ensureCodexGuideAtTop(projectRoot) {
|
|
298
|
+
if (!detectAiTools(projectRoot).includes('codex'))
|
|
299
|
+
return;
|
|
300
|
+
const file = resolve(projectRoot, 'AGENTS.md');
|
|
301
|
+
if (!fileExists(file))
|
|
302
|
+
return;
|
|
303
|
+
const content = readText(file);
|
|
304
|
+
const newSection = CODEX_REFERENCE.trimStart();
|
|
305
|
+
if (!content.includes(CLAUDE_MARKER)) {
|
|
306
|
+
writeText(file, insertAtTop(content, newSection));
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const aidaStart = content.indexOf('\n## AIDA\n');
|
|
310
|
+
if (aidaStart === -1)
|
|
311
|
+
return;
|
|
312
|
+
const afterAida = content.indexOf('\n## ', aidaStart + 5);
|
|
313
|
+
const aidaEnd = afterAida !== -1 ? afterAida : content.length;
|
|
314
|
+
const lines = content.split('\n');
|
|
315
|
+
const markerLine = lines.findIndex((l) => l.includes(CLAUDE_MARKER));
|
|
316
|
+
if (markerLine >= 0 && markerLine <= 10) {
|
|
317
|
+
const before = content.slice(0, aidaStart);
|
|
318
|
+
const after = content.slice(aidaEnd);
|
|
319
|
+
writeText(file, (before + '\n' + newSection + after).replace(/\n{3,}/g, '\n\n'));
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const without = (content.slice(0, aidaStart) + content.slice(aidaEnd))
|
|
323
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
324
|
+
.trim();
|
|
325
|
+
writeText(file, insertAtTop(without, newSection) + '\n');
|
|
326
|
+
}
|
|
260
327
|
/** Insert a block right after the first heading line of a file. */
|
|
261
328
|
function insertAtTop(content, block) {
|
|
262
329
|
const trimmedBlock = block.trim();
|
|
@@ -269,7 +336,7 @@ function insertAtTop(content, block) {
|
|
|
269
336
|
return trimmedBlock + '\n\n' + content;
|
|
270
337
|
}
|
|
271
338
|
function addCursorReference(projectRoot) {
|
|
272
|
-
const rulesDir = resolve(projectRoot, '.cursor', 'rules', '
|
|
339
|
+
const rulesDir = resolve(projectRoot, '.cursor', 'rules', 'aida');
|
|
273
340
|
ensureDir(rulesDir);
|
|
274
341
|
const file = resolve(rulesDir, 'aida-guide.md');
|
|
275
342
|
if (fileExists(file))
|
package/dist/utils/guide.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/utils/guide.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/utils/guide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type AiToolChoice } from './ai-build.js';
|
|
2
|
+
interface ToolConfigSnapshot {
|
|
3
|
+
tool: AiToolChoice;
|
|
4
|
+
path: string;
|
|
5
|
+
format: 'json' | 'toml' | 'text';
|
|
6
|
+
content: unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectImportableTools(projectRoot: string, tools: AiToolChoice[]): AiToolChoice[];
|
|
9
|
+
export declare function importFromTool(projectRoot: string, tool: AiToolChoice): {
|
|
10
|
+
rulesImported: number;
|
|
11
|
+
skillsImported: number;
|
|
12
|
+
};
|
|
13
|
+
export declare function importExistingToolConfigs(projectRoot: string): {
|
|
14
|
+
tools: AiToolChoice[];
|
|
15
|
+
snapshots: ToolConfigSnapshot[];
|
|
16
|
+
snapshotPath: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function mergeConfiguredTools(projectRoot: string, tools: AiToolChoice[]): AiToolChoice[];
|
|
19
|
+
export declare function importProjectSources(projectRoot: string): {
|
|
20
|
+
rulesImported: number;
|
|
21
|
+
skillsImported: number;
|
|
22
|
+
tools: AiToolChoice[];
|
|
23
|
+
snapshotPath: string;
|
|
24
|
+
gitignoreAdded: string[];
|
|
25
|
+
};
|
|
26
|
+
export declare function importProjectSourcesWithBaseline(projectRoot: string, baselineTool: AiToolChoice): {
|
|
27
|
+
rulesImported: number;
|
|
28
|
+
skillsImported: number;
|
|
29
|
+
tools: AiToolChoice[];
|
|
30
|
+
snapshotPath: string;
|
|
31
|
+
gitignoreAdded: string[];
|
|
32
|
+
baseline: {
|
|
33
|
+
rulesImported: number;
|
|
34
|
+
skillsImported: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/utils/import.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAUxE,UAAU,kBAAkB;IAC1B,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;CACjB;AAgKD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAuBhG;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG;IACvE,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;CACvB,CA4DA;AAcD,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC9D,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAA;CACrB,CAmCA;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAe/F;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG;IACzD,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAcA;AAED,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,YAAY,GACzB;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5D,CAUA"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { ensureDir, fileExists, readJson, readText, writeJson } from './fs.js';
|
|
5
|
+
import { configPath } from './paths.js';
|
|
6
|
+
import { ensureBuildGitignore } from './ai-build.js';
|
|
7
|
+
import { importRulesFromViews, loadRegistry, saveRegistry, fingerprint, nextRuleId } from './rules.js';
|
|
8
|
+
import { importSkillsFromViews, loadSkillRegistry, saveSkillRegistry, skillFingerprint, nextSkillId } from './skills.js';
|
|
9
|
+
const TOOL_SOURCES = [
|
|
10
|
+
{ tool: 'claude-code', path: (projectRoot) => resolve(projectRoot, '.mcp.json'), format: 'json' },
|
|
11
|
+
{ tool: 'cursor', path: (projectRoot) => resolve(projectRoot, '.cursor', 'mcp.json'), format: 'json' },
|
|
12
|
+
{ tool: 'vscode-copilot', path: (projectRoot) => resolve(projectRoot, '.vscode', 'mcp.json'), format: 'json' },
|
|
13
|
+
{ tool: 'lingma', path: (projectRoot) => resolve(projectRoot, '.lingma', 'mcp.json'), format: 'json' },
|
|
14
|
+
{ tool: 'codex', path: (projectRoot) => resolve(projectRoot, '.aida', 'codex', 'config.toml'), format: 'toml' },
|
|
15
|
+
];
|
|
16
|
+
function toolConfigSnapshotPath(projectRoot) {
|
|
17
|
+
return resolve(projectRoot, '.aida', 'tool-configs.json');
|
|
18
|
+
}
|
|
19
|
+
function walkMarkdownFiles(rootDir) {
|
|
20
|
+
if (!fileExists(rootDir))
|
|
21
|
+
return [];
|
|
22
|
+
const result = [];
|
|
23
|
+
const stack = [rootDir];
|
|
24
|
+
while (stack.length > 0) {
|
|
25
|
+
const current = stack.pop();
|
|
26
|
+
for (const name of readdirSync(current)) {
|
|
27
|
+
const full = resolve(current, name);
|
|
28
|
+
const stat = statSync(full);
|
|
29
|
+
if (stat.isDirectory()) {
|
|
30
|
+
stack.push(full);
|
|
31
|
+
}
|
|
32
|
+
else if (name.endsWith('.md')) {
|
|
33
|
+
result.push(full);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result.sort();
|
|
38
|
+
}
|
|
39
|
+
function parseMarkdownRuleCandidates(raw) {
|
|
40
|
+
const results = [];
|
|
41
|
+
for (const line of raw.split('\n')) {
|
|
42
|
+
const trimmed = line.trim();
|
|
43
|
+
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('```') || trimmed.startsWith('>'))
|
|
44
|
+
continue;
|
|
45
|
+
const generatedMatch = trimmed.match(/^-\s+\[(?:RULE-\d+)\](?:\s+\[[A-Z]+\])?\s+(.+)$/);
|
|
46
|
+
if (generatedMatch) {
|
|
47
|
+
results.push(generatedMatch[1].trim());
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const bulletMatch = trimmed.match(/^[-*]\s+(.+)$/);
|
|
51
|
+
if (bulletMatch) {
|
|
52
|
+
results.push(bulletMatch[1].trim());
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const orderedMatch = trimmed.match(/^\d+\.\s+(.+)$/);
|
|
56
|
+
if (orderedMatch) {
|
|
57
|
+
results.push(orderedMatch[1].trim());
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return results.filter((item) => item.length > 0);
|
|
61
|
+
}
|
|
62
|
+
function mergeImportedRules(projectRoot, contents, tool) {
|
|
63
|
+
const existing = loadRegistry(projectRoot);
|
|
64
|
+
const byFingerprint = new Set(existing.map((entry) => entry.fingerprint));
|
|
65
|
+
const merged = [...existing];
|
|
66
|
+
let imported = 0;
|
|
67
|
+
for (const content of contents) {
|
|
68
|
+
const fp = fingerprint(content);
|
|
69
|
+
if (byFingerprint.has(fp))
|
|
70
|
+
continue;
|
|
71
|
+
merged.push({
|
|
72
|
+
id: nextRuleId(merged),
|
|
73
|
+
category: 'general',
|
|
74
|
+
content,
|
|
75
|
+
fingerprint: fp,
|
|
76
|
+
source: {
|
|
77
|
+
branch: `import:${tool}`,
|
|
78
|
+
deviation: null,
|
|
79
|
+
author: 'import',
|
|
80
|
+
},
|
|
81
|
+
createdAt: new Date().toISOString(),
|
|
82
|
+
status: 'active',
|
|
83
|
+
});
|
|
84
|
+
byFingerprint.add(fp);
|
|
85
|
+
imported++;
|
|
86
|
+
}
|
|
87
|
+
if (imported > 0) {
|
|
88
|
+
saveRegistry(projectRoot, merged);
|
|
89
|
+
}
|
|
90
|
+
return { total: merged.length, imported };
|
|
91
|
+
}
|
|
92
|
+
function mergeImportedSkills(projectRoot, entries, tool) {
|
|
93
|
+
const existing = loadSkillRegistry(projectRoot);
|
|
94
|
+
const byName = new Map(existing.map((entry) => [entry.name, entry]));
|
|
95
|
+
const byFingerprint = new Set(existing.map((entry) => entry.fingerprint));
|
|
96
|
+
const merged = [...existing];
|
|
97
|
+
let imported = 0;
|
|
98
|
+
for (const item of entries) {
|
|
99
|
+
const fp = skillFingerprint(item.content);
|
|
100
|
+
const existingByName = byName.get(item.name);
|
|
101
|
+
if (existingByName) {
|
|
102
|
+
existingByName.content = item.content;
|
|
103
|
+
existingByName.fingerprint = fp;
|
|
104
|
+
existingByName.updatedAt = new Date().toISOString();
|
|
105
|
+
existingByName.status = 'active';
|
|
106
|
+
existingByName.source = {
|
|
107
|
+
kind: 'local',
|
|
108
|
+
path: item.sourcePath,
|
|
109
|
+
};
|
|
110
|
+
imported++;
|
|
111
|
+
byFingerprint.add(fp);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (byFingerprint.has(fp))
|
|
115
|
+
continue;
|
|
116
|
+
const entry = {
|
|
117
|
+
id: nextSkillId(merged),
|
|
118
|
+
name: item.name,
|
|
119
|
+
content: item.content,
|
|
120
|
+
fingerprint: fp,
|
|
121
|
+
source: {
|
|
122
|
+
kind: 'local',
|
|
123
|
+
path: item.sourcePath,
|
|
124
|
+
},
|
|
125
|
+
updatedAt: new Date().toISOString(),
|
|
126
|
+
status: 'active',
|
|
127
|
+
};
|
|
128
|
+
merged.push(entry);
|
|
129
|
+
byName.set(entry.name, entry);
|
|
130
|
+
byFingerprint.add(fp);
|
|
131
|
+
imported++;
|
|
132
|
+
}
|
|
133
|
+
if (imported > 0) {
|
|
134
|
+
saveSkillRegistry(projectRoot, merged);
|
|
135
|
+
}
|
|
136
|
+
return { total: merged.length, imported };
|
|
137
|
+
}
|
|
138
|
+
export function detectImportableTools(projectRoot, tools) {
|
|
139
|
+
return tools.filter((tool) => {
|
|
140
|
+
switch (tool) {
|
|
141
|
+
case 'claude-code':
|
|
142
|
+
return fileExists(resolve(projectRoot, 'CLAUDE.md'))
|
|
143
|
+
|| fileExists(resolve(projectRoot, '.claude', 'commands'))
|
|
144
|
+
|| fileExists(resolve(projectRoot, '.mcp.json'));
|
|
145
|
+
case 'cursor':
|
|
146
|
+
return fileExists(resolve(projectRoot, '.cursor', 'rules'))
|
|
147
|
+
|| fileExists(resolve(projectRoot, '.cursor', 'skills'))
|
|
148
|
+
|| fileExists(resolve(projectRoot, '.cursor', 'mcp.json'));
|
|
149
|
+
case 'lingma':
|
|
150
|
+
return fileExists(resolve(projectRoot, '.lingma', 'rules'))
|
|
151
|
+
|| fileExists(resolve(projectRoot, '.lingma', 'mcp.json'));
|
|
152
|
+
case 'codex':
|
|
153
|
+
return fileExists(resolve(projectRoot, 'AGENTS.md'))
|
|
154
|
+
|| fileExists(resolve(process.env.HOME || homedir(), '.codex', 'config.toml'));
|
|
155
|
+
case 'vscode-copilot':
|
|
156
|
+
return fileExists(resolve(projectRoot, '.vscode', 'mcp.json'));
|
|
157
|
+
case 'windsurf':
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
export function importFromTool(projectRoot, tool) {
|
|
163
|
+
const ruleContents = [];
|
|
164
|
+
const skills = [];
|
|
165
|
+
switch (tool) {
|
|
166
|
+
case 'claude-code': {
|
|
167
|
+
const claude = resolve(projectRoot, 'CLAUDE.md');
|
|
168
|
+
if (fileExists(claude)) {
|
|
169
|
+
ruleContents.push(...parseMarkdownRuleCandidates(readText(claude)));
|
|
170
|
+
}
|
|
171
|
+
const commandDir = resolve(projectRoot, '.claude', 'commands');
|
|
172
|
+
for (const file of walkMarkdownFiles(commandDir)) {
|
|
173
|
+
const name = file.split('/').pop().replace(/\.md$/, '');
|
|
174
|
+
skills.push({
|
|
175
|
+
name,
|
|
176
|
+
content: readText(file),
|
|
177
|
+
sourcePath: file.replace(`${projectRoot}/`, ''),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case 'cursor': {
|
|
183
|
+
const rulesDir = resolve(projectRoot, '.cursor', 'rules');
|
|
184
|
+
for (const file of walkMarkdownFiles(rulesDir)) {
|
|
185
|
+
ruleContents.push(...parseMarkdownRuleCandidates(readText(file)));
|
|
186
|
+
}
|
|
187
|
+
const skillsDir = resolve(projectRoot, '.cursor', 'skills');
|
|
188
|
+
for (const file of walkMarkdownFiles(skillsDir).filter((path) => path.endsWith('SKILL.md'))) {
|
|
189
|
+
const parts = file.split('/');
|
|
190
|
+
const name = parts[parts.length - 2];
|
|
191
|
+
skills.push({
|
|
192
|
+
name,
|
|
193
|
+
content: readText(file),
|
|
194
|
+
sourcePath: file.replace(`${projectRoot}/`, ''),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
case 'lingma': {
|
|
200
|
+
const rulesDir = resolve(projectRoot, '.lingma', 'rules');
|
|
201
|
+
for (const file of walkMarkdownFiles(rulesDir)) {
|
|
202
|
+
ruleContents.push(...parseMarkdownRuleCandidates(readText(file)));
|
|
203
|
+
}
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
case 'codex': {
|
|
207
|
+
const agents = resolve(projectRoot, 'AGENTS.md');
|
|
208
|
+
if (fileExists(agents)) {
|
|
209
|
+
ruleContents.push(...parseMarkdownRuleCandidates(readText(agents)));
|
|
210
|
+
}
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case 'vscode-copilot':
|
|
214
|
+
case 'windsurf':
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
const rulesResult = mergeImportedRules(projectRoot, [...new Set(ruleContents)], tool);
|
|
218
|
+
const skillResult = mergeImportedSkills(projectRoot, skills, tool);
|
|
219
|
+
return { rulesImported: rulesResult.imported, skillsImported: skillResult.imported };
|
|
220
|
+
}
|
|
221
|
+
function readStructured(filePath) {
|
|
222
|
+
if (!fileExists(filePath))
|
|
223
|
+
return null;
|
|
224
|
+
if (filePath.endsWith('.json')) {
|
|
225
|
+
try {
|
|
226
|
+
return readJson(filePath);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return readText(filePath);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return readText(filePath);
|
|
233
|
+
}
|
|
234
|
+
export function importExistingToolConfigs(projectRoot) {
|
|
235
|
+
const snapshots = [];
|
|
236
|
+
for (const source of TOOL_SOURCES) {
|
|
237
|
+
const path = source.path(projectRoot);
|
|
238
|
+
if (!fileExists(path))
|
|
239
|
+
continue;
|
|
240
|
+
snapshots.push({
|
|
241
|
+
tool: source.tool,
|
|
242
|
+
path: path.replace(`${projectRoot}/`, ''),
|
|
243
|
+
format: source.format,
|
|
244
|
+
content: readStructured(path),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
const home = process.env.HOME || homedir();
|
|
248
|
+
const codexGlobalPath = resolve(home, '.codex', 'config.toml');
|
|
249
|
+
if (fileExists(codexGlobalPath)) {
|
|
250
|
+
snapshots.push({
|
|
251
|
+
tool: 'codex',
|
|
252
|
+
path: codexGlobalPath,
|
|
253
|
+
format: 'toml',
|
|
254
|
+
content: readText(codexGlobalPath),
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
const tools = [...new Set(snapshots.map((item) => item.tool))];
|
|
258
|
+
const snapshotPath = toolConfigSnapshotPath(projectRoot);
|
|
259
|
+
ensureDir(dirname(snapshotPath));
|
|
260
|
+
writeJson(snapshotPath, {
|
|
261
|
+
importedAt: new Date().toISOString(),
|
|
262
|
+
tools,
|
|
263
|
+
snapshots,
|
|
264
|
+
});
|
|
265
|
+
return { tools, snapshots, snapshotPath };
|
|
266
|
+
}
|
|
267
|
+
export function mergeConfiguredTools(projectRoot, tools) {
|
|
268
|
+
if (!fileExists(configPath(projectRoot)))
|
|
269
|
+
return tools;
|
|
270
|
+
const config = readJson(configPath(projectRoot));
|
|
271
|
+
const existing = Array.isArray(config.aiTools)
|
|
272
|
+
? config.aiTools
|
|
273
|
+
: config.aiTool
|
|
274
|
+
? [config.aiTool]
|
|
275
|
+
: [];
|
|
276
|
+
const merged = [...new Set([...existing, ...tools])];
|
|
277
|
+
config.aiTools = merged;
|
|
278
|
+
if (!config.aiTool && merged.length === 1) {
|
|
279
|
+
config.aiTool = merged[0];
|
|
280
|
+
}
|
|
281
|
+
writeJson(configPath(projectRoot), config);
|
|
282
|
+
return merged;
|
|
283
|
+
}
|
|
284
|
+
export function importProjectSources(projectRoot) {
|
|
285
|
+
const rules = importRulesFromViews(projectRoot);
|
|
286
|
+
const skills = importSkillsFromViews(projectRoot);
|
|
287
|
+
const toolConfigs = importExistingToolConfigs(projectRoot);
|
|
288
|
+
const tools = mergeConfiguredTools(projectRoot, toolConfigs.tools);
|
|
289
|
+
const gitignoreAdded = ensureBuildGitignore(projectRoot, tools);
|
|
290
|
+
return {
|
|
291
|
+
rulesImported: rules.imported,
|
|
292
|
+
skillsImported: skills.imported,
|
|
293
|
+
tools,
|
|
294
|
+
snapshotPath: toolConfigs.snapshotPath,
|
|
295
|
+
gitignoreAdded,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
export function importProjectSourcesWithBaseline(projectRoot, baselineTool) {
|
|
299
|
+
const baseline = importFromTool(projectRoot, baselineTool);
|
|
300
|
+
const imported = importProjectSources(projectRoot);
|
|
301
|
+
return {
|
|
302
|
+
...imported,
|
|
303
|
+
rulesImported: imported.rulesImported + baseline.rulesImported,
|
|
304
|
+
skillsImported: imported.skillsImported + baseline.skillsImported,
|
|
305
|
+
baseline,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/utils/import.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/paths.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ export declare const SKILLS_DIR: string;
|
|
|
8
8
|
export declare const TEMPLATES_DIR: string;
|
|
9
9
|
/** Dashboard HTML file */
|
|
10
10
|
export declare const DASHBOARD_FILE: string;
|
|
11
|
-
/** .
|
|
12
|
-
export declare function
|
|
11
|
+
/** .aida directory in user's project */
|
|
12
|
+
export declare function aidaDir(projectRoot?: string): string;
|
|
13
13
|
/** Runs directory */
|
|
14
14
|
export declare function runsDir(projectRoot?: string): string;
|
|
15
15
|
/** Run data directory for a specific branch + developer */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAMA,2BAA2B;AAC3B,eAAO,MAAM,YAAY,QAAiC,CAAC;AAE3D,+BAA+B;AAC/B,eAAO,MAAM,UAAU,QAAyC,CAAC;AAEjE,0BAA0B;AAC1B,eAAO,MAAM,UAAU,QAAgC,CAAC;AAExD,6BAA6B;AAC7B,eAAO,MAAM,aAAa,QAAmC,CAAC;AAE9D,0BAA0B;AAC1B,eAAO,MAAM,cAAc,QAA0D,CAAC;AAEtF,
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAMA,2BAA2B;AAC3B,eAAO,MAAM,YAAY,QAAiC,CAAC;AAE3D,+BAA+B;AAC/B,eAAO,MAAM,UAAU,QAAyC,CAAC;AAEjE,0BAA0B;AAC1B,eAAO,MAAM,UAAU,QAAgC,CAAC;AAExD,6BAA6B;AAC7B,eAAO,MAAM,aAAa,QAAmC,CAAC;AAE9D,0BAA0B;AAC1B,eAAO,MAAM,cAAc,QAA0D,CAAC;AAEtF,wCAAwC;AACxC,wBAAgB,OAAO,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAEnE;AAED,qBAAqB;AACrB,wBAAgB,OAAO,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAEnE;AAED,2DAA2D;AAC3D,wBAAgB,MAAM,CACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAGR;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED,oCAAoC;AACpC,wBAAgB,SAAS,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAErE;AAED,uBAAuB;AACvB,wBAAgB,UAAU,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAEtE"}
|