ai-dev-analytics 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -13
- package/README.zh-CN.md +73 -13
- 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 +61 -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 +28 -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 +167 -183
- 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 +2 -0
- package/dist/cli/commands/migrate-dir.d.ts.map +1 -0
- package/dist/cli/commands/migrate-dir.js +85 -0
- package/dist/cli/commands/migrate-dir.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/reindex.d.ts +4 -0
- package/dist/cli/commands/reindex.d.ts.map +1 -1
- package/dist/cli/commands/reindex.js +48 -3
- package/dist/cli/commands/reindex.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 +146 -39
- 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.d.ts.map +1 -1
- package/dist/cli/commands/start.js +5 -9
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +1 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +26 -5
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +30 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +86 -57
- package/dist/mcp/server.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 +18 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +70 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git.d.ts +10 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +76 -8
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/guide.d.ts +21 -4
- package/dist/utils/guide.d.ts.map +1 -1
- package/dist/utils/guide.js +168 -16
- package/dist/utils/guide.js.map +1 -1
- package/dist/utils/import.d.ts +27 -0
- package/dist/utils/import.d.ts.map +1 -0
- package/dist/utils/import.js +298 -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/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 +2 -2
- package/dist/utils/run-data.d.ts.map +1 -1
- package/dist/utils/run-data.js +6 -11
- 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/src/dashboard/assets/index-B8QcPcg7.css +1 -0
- package/src/dashboard/assets/{index-E4BP-QJG.js → index-DcAl6lhS.js} +1 -1
- package/src/dashboard/demo/run.en.json +1169 -0
- package/src/dashboard/demo/run.zh.json +1169 -0
- package/src/dashboard/index.html +2 -2
- package/src/dashboard/assets/index-CwXn3nJb.css +0 -1
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 数据采集与规则沉淀指南
|
|
@@ -17,9 +17,16 @@ const GUIDE_CONTENT = `# AIDA 数据采集与规则沉淀指南
|
|
|
17
17
|
|
|
18
18
|
## 零、强制前置动作(严禁跳过)
|
|
19
19
|
|
|
20
|
-
**⚠️
|
|
20
|
+
**⚠️ 你正在读取本文件(aida-guide.md)。这是强制规范,严禁跳过任何步骤。**
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
**开始任何开发任务前,必须按顺序完成以下两步:**
|
|
23
|
+
|
|
24
|
+
1. **读取项目规则** → 使用 Read 工具读取 \`.aida/rules/_all.md\`,了解已沉淀的项目规则并严格遵守(文件不存在则跳过此步)
|
|
25
|
+
2. **执行数据采集流程** → 严格按照第一节规定的顺序调用 MCP 工具:\`aida_task_start\` → \`aida_log_files\` → \`aida_log_review\` → \`aida_task_done\`
|
|
26
|
+
|
|
27
|
+
不得以任何理由跳过上述步骤。
|
|
28
|
+
|
|
29
|
+
**当用户直接口述要沉淀某条项目级技术规范,或你识别到 \`rule-missing\` 类型偏差需要沉淀规则时,不要只修改本地说明文件,必须通过 AIDA MCP 的 \`aida_log_rule\` 工具写入 \`.aida/rules.json\`。**
|
|
23
30
|
|
|
24
31
|
## 一、数据采集
|
|
25
32
|
|
|
@@ -93,6 +100,14 @@ category 可选值:
|
|
|
93
100
|
- category: 分类(可选值:component, api, style, i18n, architecture, state-management, routing, testing, process, general)
|
|
94
101
|
- sourceDeviation: 关联的偏差 ID(如 DEV-01)
|
|
95
102
|
|
|
103
|
+
### 用户直接口述规则
|
|
104
|
+
|
|
105
|
+
如果用户明确口述一条应长期生效的项目级技术规范,也应按同样原则处理:
|
|
106
|
+
1. 判断它是否属于项目级技术规范,而不是业务逻辑
|
|
107
|
+
2. 如有歧义先确认
|
|
108
|
+
3. 确认后调用 \`aida_log_rule\` 写入 \`.aida/rules.json\`
|
|
109
|
+
4. 不要只把它写进某个 AI 工具自己的本地规则文件
|
|
110
|
+
|
|
96
111
|
### 阶段性回顾
|
|
97
112
|
|
|
98
113
|
完成一轮开发(多个任务完成)后:
|
|
@@ -101,16 +116,18 @@ category 可选值:
|
|
|
101
116
|
3. 如果有,汇总这些偏差模式并询问用户是否需要批量沉淀
|
|
102
117
|
`;
|
|
103
118
|
// ─── CLAUDE.md reference ────────────────────────────────
|
|
104
|
-
const CLAUDE_MARKER = '.
|
|
119
|
+
const CLAUDE_MARKER = '.aida/aida-guide.md';
|
|
105
120
|
const CLAUDE_REFERENCE = `
|
|
106
|
-
|
|
107
121
|
## AIDA
|
|
108
122
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
123
|
+
**⚠️ 严禁跳过:开始任何开发任务前,必须通过 Read 工具读取 \`.aida/aida-guide.md\` 的完整内容,并严格按照其中的规范执行。不得以任何理由跳过。**
|
|
124
|
+
**当用户直接要求沉淀规则,或你识别到需要沉淀项目级技术规范时,必须使用 AIDA MCP 的 \`aida_log_rule\` 工具写入 \`.aida/rules.json\`,不要只修改本地规则说明文件。**
|
|
125
|
+
`;
|
|
126
|
+
const CODEX_REFERENCE = `
|
|
127
|
+
## AIDA
|
|
112
128
|
|
|
113
|
-
|
|
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,20 +145,28 @@ 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
|
-
*
|
|
161
|
+
* Always overwrite .aida/aida-guide.md with the latest template content.
|
|
162
|
+
* Called by `aida rules build` to keep the guide in sync with the package version.
|
|
163
|
+
*/
|
|
164
|
+
export function updateGuide(projectRoot) {
|
|
165
|
+
ensureDir(aidaDir(projectRoot));
|
|
166
|
+
writeText(guidePath(projectRoot), GUIDE_CONTENT);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Add guide reference to AI tool instruction files (create-if-not-exists).
|
|
145
170
|
* Called by init (with explicit tool list) or ensureRunJson (auto-detect).
|
|
146
171
|
*/
|
|
147
172
|
export function syncGuideReference(projectRoot, tools) {
|
|
@@ -154,12 +179,44 @@ export function syncGuideReference(projectRoot, tools) {
|
|
|
154
179
|
case 'cursor':
|
|
155
180
|
addCursorReference(projectRoot);
|
|
156
181
|
break;
|
|
182
|
+
case 'codex':
|
|
183
|
+
addCodexReference(projectRoot);
|
|
184
|
+
break;
|
|
157
185
|
case 'lingma':
|
|
158
186
|
addLingmaReference(projectRoot);
|
|
159
187
|
break;
|
|
160
188
|
}
|
|
161
189
|
}
|
|
162
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Update guide content in all detected AI tool instruction files with latest template.
|
|
193
|
+
* Called by `aida rules build` — always overwrites so content stays in sync.
|
|
194
|
+
*/
|
|
195
|
+
export function updateGuideReferences(projectRoot, tools) {
|
|
196
|
+
const detected = tools || detectAiTools(projectRoot);
|
|
197
|
+
for (const tool of detected) {
|
|
198
|
+
switch (tool) {
|
|
199
|
+
case 'claude-code':
|
|
200
|
+
ensureGuideAtTop(projectRoot);
|
|
201
|
+
break;
|
|
202
|
+
case 'cursor': {
|
|
203
|
+
const rulesDir = resolve(projectRoot, '.cursor', 'rules', 'aidevos');
|
|
204
|
+
ensureDir(rulesDir);
|
|
205
|
+
writeText(resolve(rulesDir, 'aida-guide.md'), CURSOR_FRONTMATTER + GUIDE_CONTENT);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case 'codex':
|
|
209
|
+
ensureCodexGuideAtTop(projectRoot);
|
|
210
|
+
break;
|
|
211
|
+
case 'lingma': {
|
|
212
|
+
const rulesDir = resolve(projectRoot, '.lingma', 'rules');
|
|
213
|
+
ensureDir(rulesDir);
|
|
214
|
+
writeText(resolve(rulesDir, 'aida-guide.md'), LINGMA_FRONTMATTER + GUIDE_CONTENT);
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
163
220
|
// ─── Internal ───────────────────────────────────────────
|
|
164
221
|
function detectAiTools(projectRoot) {
|
|
165
222
|
const tools = [];
|
|
@@ -167,6 +224,8 @@ function detectAiTools(projectRoot) {
|
|
|
167
224
|
tools.push('claude-code');
|
|
168
225
|
if (fileExists(resolve(projectRoot, '.cursor', 'mcp.json')))
|
|
169
226
|
tools.push('cursor');
|
|
227
|
+
if (fileExists(resolve(projectRoot, 'AGENTS.md')))
|
|
228
|
+
tools.push('codex');
|
|
170
229
|
if (fileExists(resolve(projectRoot, '.lingma', 'mcp.json')))
|
|
171
230
|
tools.push('lingma');
|
|
172
231
|
return tools;
|
|
@@ -177,12 +236,105 @@ function addClaudeReference(projectRoot) {
|
|
|
177
236
|
const content = readText(file);
|
|
178
237
|
if (content.includes(CLAUDE_MARKER))
|
|
179
238
|
return;
|
|
180
|
-
writeText(file, content
|
|
239
|
+
writeText(file, insertAtTop(content, CLAUDE_REFERENCE.trimStart()));
|
|
181
240
|
}
|
|
182
241
|
else {
|
|
183
242
|
writeText(file, CLAUDE_REFERENCE.trim() + '\n');
|
|
184
243
|
}
|
|
185
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
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Ensure the AIDA guide reference sits near the top of CLAUDE.md with up-to-date content.
|
|
259
|
+
* Moves the section if it's buried lower in the file, and updates stale content.
|
|
260
|
+
* Called by `aida rules build` so the AI always encounters it first.
|
|
261
|
+
*/
|
|
262
|
+
export function ensureGuideAtTop(projectRoot) {
|
|
263
|
+
if (!detectAiTools(projectRoot).includes('claude-code'))
|
|
264
|
+
return;
|
|
265
|
+
const file = resolve(projectRoot, 'CLAUDE.md');
|
|
266
|
+
if (!fileExists(file))
|
|
267
|
+
return;
|
|
268
|
+
const content = readText(file);
|
|
269
|
+
const newSection = CLAUDE_REFERENCE.trimStart();
|
|
270
|
+
// Not present yet — insert at top
|
|
271
|
+
if (!content.includes(CLAUDE_MARKER)) {
|
|
272
|
+
writeText(file, insertAtTop(content, newSection));
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// Find the existing ## AIDA section boundaries
|
|
276
|
+
const aidaStart = content.indexOf('\n## AIDA\n');
|
|
277
|
+
if (aidaStart === -1)
|
|
278
|
+
return;
|
|
279
|
+
const afterAida = content.indexOf('\n## ', aidaStart + 5);
|
|
280
|
+
const aidaEnd = afterAida !== -1 ? afterAida : content.length;
|
|
281
|
+
// Check if already in the first 10 lines
|
|
282
|
+
const lines = content.split('\n');
|
|
283
|
+
const markerLine = lines.findIndex((l) => l.includes(CLAUDE_MARKER));
|
|
284
|
+
if (markerLine >= 0 && markerLine <= 10) {
|
|
285
|
+
// At top already — just update the content in place
|
|
286
|
+
const before = content.slice(0, aidaStart);
|
|
287
|
+
const after = content.slice(aidaEnd);
|
|
288
|
+
writeText(file, (before + '\n' + newSection + after).replace(/\n{3,}/g, '\n\n'));
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Buried — remove from current position and re-insert at top with latest content
|
|
292
|
+
const without = (content.slice(0, aidaStart) + content.slice(aidaEnd))
|
|
293
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
294
|
+
.trim();
|
|
295
|
+
writeText(file, insertAtTop(without, newSection) + '\n');
|
|
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
|
+
}
|
|
327
|
+
/** Insert a block right after the first heading line of a file. */
|
|
328
|
+
function insertAtTop(content, block) {
|
|
329
|
+
const trimmedBlock = block.trim();
|
|
330
|
+
const firstNewline = content.indexOf('\n');
|
|
331
|
+
if (firstNewline !== -1 && content.trimStart().startsWith('#')) {
|
|
332
|
+
const head = content.slice(0, firstNewline + 1);
|
|
333
|
+
const rest = content.slice(firstNewline + 1).replace(/^\n+/, '');
|
|
334
|
+
return head + '\n' + trimmedBlock + '\n\n' + rest;
|
|
335
|
+
}
|
|
336
|
+
return trimmedBlock + '\n\n' + content;
|
|
337
|
+
}
|
|
186
338
|
function addCursorReference(projectRoot) {
|
|
187
339
|
const rulesDir = resolve(projectRoot, '.cursor', 'rules', 'aidevos');
|
|
188
340
|
ensureDir(rulesDir);
|
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,27 @@
|
|
|
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 {};
|
|
27
|
+
//# 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"}
|
|
@@ -0,0 +1,298 @@
|
|
|
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
|
+
//# 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 */
|