ai-dev-analytics 1.0.4 → 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.
Files changed (91) hide show
  1. package/README.md +25 -17
  2. package/README.zh-CN.md +25 -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 +61 -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 +28 -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 +113 -249
  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 +2 -0
  21. package/dist/cli/commands/migrate-dir.d.ts.map +1 -0
  22. package/dist/cli/commands/migrate-dir.js +85 -0
  23. package/dist/cli/commands/migrate-dir.js.map +1 -0
  24. package/dist/cli/commands/migrate.js +5 -5
  25. package/dist/cli/commands/migrate.js.map +1 -1
  26. package/dist/cli/commands/report.js +1 -1
  27. package/dist/cli/commands/report.js.map +1 -1
  28. package/dist/cli/commands/rules.d.ts +5 -0
  29. package/dist/cli/commands/rules.d.ts.map +1 -1
  30. package/dist/cli/commands/rules.js +143 -38
  31. package/dist/cli/commands/rules.js.map +1 -1
  32. package/dist/cli/commands/skills.d.ts +7 -0
  33. package/dist/cli/commands/skills.d.ts.map +1 -0
  34. package/dist/cli/commands/skills.js +180 -0
  35. package/dist/cli/commands/skills.js.map +1 -0
  36. package/dist/cli/commands/start.js +4 -4
  37. package/dist/cli/commands/start.js.map +1 -1
  38. package/dist/cli/commands/update.d.ts.map +1 -1
  39. package/dist/cli/commands/update.js +14 -7
  40. package/dist/cli/commands/update.js.map +1 -1
  41. package/dist/cli/index.js +30 -0
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/server/api.js +2 -2
  44. package/dist/server/api.js.map +1 -1
  45. package/dist/server/index.js +1 -1
  46. package/dist/server/index.js.map +1 -1
  47. package/dist/utils/ai-build.d.ts +19 -0
  48. package/dist/utils/ai-build.d.ts.map +1 -0
  49. package/dist/utils/ai-build.js +278 -0
  50. package/dist/utils/ai-build.js.map +1 -0
  51. package/dist/utils/fs.d.ts +9 -0
  52. package/dist/utils/fs.d.ts.map +1 -1
  53. package/dist/utils/fs.js +31 -0
  54. package/dist/utils/fs.js.map +1 -1
  55. package/dist/utils/guide.d.ts +5 -4
  56. package/dist/utils/guide.d.ts.map +1 -1
  57. package/dist/utils/guide.js +78 -11
  58. package/dist/utils/guide.js.map +1 -1
  59. package/dist/utils/import.d.ts +27 -0
  60. package/dist/utils/import.d.ts.map +1 -0
  61. package/dist/utils/import.js +298 -0
  62. package/dist/utils/import.js.map +1 -0
  63. package/dist/utils/paths.d.ts +2 -2
  64. package/dist/utils/paths.d.ts.map +1 -1
  65. package/dist/utils/paths.js +8 -8
  66. package/dist/utils/paths.js.map +1 -1
  67. package/dist/utils/rules.d.ts +6 -1
  68. package/dist/utils/rules.d.ts.map +1 -1
  69. package/dist/utils/rules.js +126 -6
  70. package/dist/utils/rules.js.map +1 -1
  71. package/dist/utils/run-data.d.ts +1 -1
  72. package/dist/utils/run-data.js +4 -4
  73. package/dist/utils/run-data.js.map +1 -1
  74. package/dist/utils/skills.d.ts +37 -0
  75. package/dist/utils/skills.d.ts.map +1 -0
  76. package/dist/utils/skills.js +228 -0
  77. package/dist/utils/skills.js.map +1 -0
  78. package/package.json +1 -1
  79. package/src/assets/skills/audit.md +6 -6
  80. package/src/assets/skills/bug-fixer.md +4 -4
  81. package/src/assets/skills/code-generator.md +4 -4
  82. package/src/assets/skills/dashboard-generator.md +2 -2
  83. package/src/assets/skills/dev-flower.md +3 -3
  84. package/src/assets/skills/deviation-recorder.md +7 -7
  85. package/src/assets/skills/mcp-reviewer.md +2 -2
  86. package/src/assets/skills/requirement-analyzer.md +4 -4
  87. package/src/assets/skills/rules-evolver.md +7 -7
  88. package/src/assets/skills/self-reviewer.md +4 -4
  89. package/src/assets/skills/task-splitter.md +5 -5
  90. package/src/assets/skills/workflow-orchestrator.md +11 -11
  91. package/src/assets/templates/demo-run.json +7 -7
@@ -0,0 +1,278 @@
1
+ import { dirname, resolve } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ import { buildRuleViews } from './rules.js';
4
+ import { bootstrapSkillRegistry, buildSkillViews, getSkillContent } from './skills.js';
5
+ import { ensureGuide, updateGuide, updateGuideReferences } from './guide.js';
6
+ import { configPath } from './paths.js';
7
+ import { ensureDir, fileExists, readJson, readText, writeJson, writeText } from './fs.js';
8
+ export const QUICK_COMMANDS = [
9
+ { name: 'workflow', skill: 'workflow-orchestrator' },
10
+ { name: 'audit', skill: 'audit' },
11
+ { name: 'deviation', skill: 'deviation-recorder' },
12
+ { name: 'self-reviewer', skill: 'self-reviewer' },
13
+ { name: 'bug-fixer', skill: 'bug-fixer' },
14
+ { name: 'rules-evolver', skill: 'rules-evolver' },
15
+ ];
16
+ const MCP_SERVER_ENTRY = {
17
+ command: 'npx',
18
+ args: ['-y', 'ai-dev-analytics', 'mcp'],
19
+ };
20
+ const MCP_CONFIG_JSON = JSON.stringify({
21
+ mcpServers: {
22
+ aida: MCP_SERVER_ENTRY,
23
+ },
24
+ }, null, 2);
25
+ const CODEX_CONFIG_TOML = `[mcp_servers.aida]
26
+ command = "npx"
27
+ args = ["-y", "ai-dev-analytics", "mcp"]
28
+ `;
29
+ export function readConfiguredTools(projectRoot) {
30
+ if (!fileExists(configPath(projectRoot)))
31
+ return [];
32
+ const config = readJson(configPath(projectRoot));
33
+ if (Array.isArray(config.aiTools) && config.aiTools.length > 0) {
34
+ return [...new Set(config.aiTools)];
35
+ }
36
+ return config.aiTool ? [config.aiTool] : [];
37
+ }
38
+ export function normalizeRequestedTools(projectRoot, requested = []) {
39
+ const configured = readConfiguredTools(projectRoot);
40
+ if (requested.length === 0 || requested.includes('all'))
41
+ return configured;
42
+ const valid = new Set(['claude-code', 'cursor', 'vscode-copilot', 'windsurf', 'lingma', 'codex']);
43
+ return requested.filter((tool) => valid.has(tool));
44
+ }
45
+ function writeJsonMerge(filePath) {
46
+ if (fileExists(filePath)) {
47
+ try {
48
+ const existing = JSON.parse(readText(filePath));
49
+ existing.mcpServers = existing.mcpServers || {};
50
+ existing.mcpServers.aida = MCP_SERVER_ENTRY;
51
+ writeText(filePath, JSON.stringify(existing, null, 2) + '\n');
52
+ return;
53
+ }
54
+ catch {
55
+ // Fall through to overwrite invalid JSON.
56
+ }
57
+ }
58
+ writeText(filePath, MCP_CONFIG_JSON + '\n');
59
+ }
60
+ function mergeCodexToml(raw) {
61
+ const trimmed = raw.trim();
62
+ const block = CODEX_CONFIG_TOML.trim();
63
+ const pattern = /\[mcp_servers\.aida\][\s\S]*?(?=\n\[|$)/m;
64
+ if (!trimmed)
65
+ return `${block}\n`;
66
+ if (pattern.test(trimmed)) {
67
+ return `${trimmed.replace(pattern, block).trim()}\n`;
68
+ }
69
+ return `${trimmed}\n\n${block}\n`;
70
+ }
71
+ function syncCodexGlobalConfig() {
72
+ const home = process.env.HOME || homedir();
73
+ const codexDir = resolve(home, '.codex');
74
+ const codexConfigPath = resolve(codexDir, 'config.toml');
75
+ ensureDir(dirname(codexConfigPath));
76
+ const existing = fileExists(codexConfigPath) ? readText(codexConfigPath) : '';
77
+ writeText(codexConfigPath, mergeCodexToml(existing));
78
+ return codexConfigPath;
79
+ }
80
+ function toolConfigSnapshotPath(projectRoot) {
81
+ return resolve(projectRoot, '.aida', 'tool-configs.json');
82
+ }
83
+ function readJsonIfExists(filePath) {
84
+ if (!fileExists(filePath))
85
+ return null;
86
+ try {
87
+ return JSON.parse(readText(filePath));
88
+ }
89
+ catch {
90
+ return readText(filePath);
91
+ }
92
+ }
93
+ function writeToolConfigSnapshot(projectRoot, tools, codexGlobalPath) {
94
+ const snapshots = [];
95
+ if (tools.includes('claude-code')) {
96
+ snapshots.push({
97
+ tool: 'claude-code',
98
+ path: '.mcp.json',
99
+ format: 'json',
100
+ content: readJsonIfExists(resolve(projectRoot, '.mcp.json')),
101
+ });
102
+ }
103
+ if (tools.includes('cursor')) {
104
+ snapshots.push({
105
+ tool: 'cursor',
106
+ path: '.cursor/mcp.json',
107
+ format: 'json',
108
+ content: readJsonIfExists(resolve(projectRoot, '.cursor', 'mcp.json')),
109
+ });
110
+ }
111
+ if (tools.includes('vscode-copilot')) {
112
+ snapshots.push({
113
+ tool: 'vscode-copilot',
114
+ path: '.vscode/mcp.json',
115
+ format: 'json',
116
+ content: readJsonIfExists(resolve(projectRoot, '.vscode', 'mcp.json')),
117
+ });
118
+ }
119
+ if (tools.includes('lingma')) {
120
+ snapshots.push({
121
+ tool: 'lingma',
122
+ path: '.lingma/mcp.json',
123
+ format: 'json',
124
+ content: readJsonIfExists(resolve(projectRoot, '.lingma', 'mcp.json')),
125
+ });
126
+ }
127
+ if (tools.includes('codex')) {
128
+ snapshots.push({
129
+ tool: 'codex',
130
+ path: '.aida/codex/config.toml',
131
+ format: 'toml',
132
+ content: fileExists(resolve(projectRoot, '.aida', 'codex', 'config.toml'))
133
+ ? readText(resolve(projectRoot, '.aida', 'codex', 'config.toml'))
134
+ : '',
135
+ });
136
+ if (codexGlobalPath) {
137
+ snapshots.push({
138
+ tool: 'codex',
139
+ path: codexGlobalPath,
140
+ format: 'toml',
141
+ content: readText(codexGlobalPath),
142
+ });
143
+ }
144
+ }
145
+ writeJson(toolConfigSnapshotPath(projectRoot), {
146
+ generatedAt: new Date().toISOString(),
147
+ tools,
148
+ snapshots,
149
+ });
150
+ return toolConfigSnapshotPath(projectRoot);
151
+ }
152
+ export function writeMcpConfig(projectRoot, tools) {
153
+ const written = [];
154
+ for (const tool of tools) {
155
+ switch (tool) {
156
+ case 'claude-code':
157
+ writeJsonMerge(resolve(projectRoot, '.mcp.json'));
158
+ written.push('.mcp.json');
159
+ break;
160
+ case 'cursor': {
161
+ const dir = resolve(projectRoot, '.cursor');
162
+ ensureDir(dir);
163
+ writeJsonMerge(resolve(dir, 'mcp.json'));
164
+ written.push('.cursor/mcp.json');
165
+ break;
166
+ }
167
+ case 'vscode-copilot': {
168
+ const dir = resolve(projectRoot, '.vscode');
169
+ ensureDir(dir);
170
+ writeJsonMerge(resolve(dir, 'mcp.json'));
171
+ written.push('.vscode/mcp.json');
172
+ break;
173
+ }
174
+ case 'lingma': {
175
+ const dir = resolve(projectRoot, '.lingma');
176
+ ensureDir(dir);
177
+ writeJsonMerge(resolve(dir, 'mcp.json'));
178
+ written.push('.lingma/mcp.json');
179
+ break;
180
+ }
181
+ case 'codex': {
182
+ const dir = resolve(projectRoot, '.aida', 'codex');
183
+ ensureDir(dir);
184
+ writeText(resolve(dir, 'config.toml'), CODEX_CONFIG_TOML);
185
+ const globalPath = syncCodexGlobalConfig();
186
+ written.push(`.aida/codex/config.toml (synced to ${globalPath})`);
187
+ break;
188
+ }
189
+ case 'windsurf':
190
+ written.push('(windsurf: manual config needed)');
191
+ break;
192
+ }
193
+ }
194
+ return written;
195
+ }
196
+ function buildClaudeCommands(projectRoot) {
197
+ const dir = resolve(projectRoot, '.claude', 'commands');
198
+ ensureDir(dir);
199
+ let written = 0;
200
+ for (const cmd of QUICK_COMMANDS) {
201
+ const content = getSkillContent(projectRoot, cmd.skill);
202
+ if (!content)
203
+ continue;
204
+ writeText(resolve(dir, `${cmd.name}.md`), content);
205
+ written++;
206
+ }
207
+ return written;
208
+ }
209
+ function buildCursorCommands(projectRoot) {
210
+ let written = 0;
211
+ for (const cmd of QUICK_COMMANDS) {
212
+ const content = getSkillContent(projectRoot, cmd.skill);
213
+ if (!content)
214
+ continue;
215
+ const dir = resolve(projectRoot, '.cursor', 'skills', cmd.name);
216
+ ensureDir(dir);
217
+ writeText(resolve(dir, 'SKILL.md'), content);
218
+ written++;
219
+ }
220
+ return written;
221
+ }
222
+ export function ensureBuildGitignore(projectRoot, tools) {
223
+ const gitignorePath = resolve(projectRoot, '.gitignore');
224
+ const existing = fileExists(gitignorePath) ? readText(gitignorePath) : '';
225
+ const entries = [
226
+ '.aida/rules/*.md',
227
+ '.aida/skills/*/SKILL.md',
228
+ '.aida/index.json',
229
+ '.aida/tool-configs.json',
230
+ ];
231
+ if (tools.includes('claude-code')) {
232
+ entries.push('.mcp.json', '.claude/commands/*.md');
233
+ }
234
+ if (tools.includes('cursor')) {
235
+ entries.push('.cursor/mcp.json', '.cursor/skills/', '.cursor/rules/aidevos/');
236
+ }
237
+ if (tools.includes('vscode-copilot')) {
238
+ entries.push('.vscode/mcp.json');
239
+ }
240
+ if (tools.includes('lingma')) {
241
+ entries.push('.lingma/mcp.json', '.lingma/rules/');
242
+ }
243
+ if (tools.includes('codex')) {
244
+ entries.push('.aida/codex/config.toml');
245
+ }
246
+ const toAdd = entries.filter((entry) => !existing.includes(entry));
247
+ if (toAdd.length > 0) {
248
+ writeText(gitignorePath, existing.trimEnd() + '\n\n# AIDA - generated local AI tool artifacts\n' + toAdd.join('\n') + '\n');
249
+ }
250
+ return toAdd;
251
+ }
252
+ export function buildProjectArtifacts(projectRoot, requestedTools = []) {
253
+ const tools = normalizeRequestedTools(projectRoot, requestedTools);
254
+ bootstrapSkillRegistry(projectRoot);
255
+ const ruleViews = buildRuleViews(projectRoot);
256
+ const skillViews = buildSkillViews(projectRoot);
257
+ const mcpFiles = writeMcpConfig(projectRoot, tools);
258
+ let commandFiles = 0;
259
+ if (tools.includes('claude-code'))
260
+ commandFiles += buildClaudeCommands(projectRoot);
261
+ if (tools.includes('cursor'))
262
+ commandFiles += buildCursorCommands(projectRoot);
263
+ ensureGuide(projectRoot);
264
+ updateGuide(projectRoot);
265
+ updateGuideReferences(projectRoot, tools);
266
+ const toolConfigSnapshot = writeToolConfigSnapshot(projectRoot, tools);
267
+ const gitignoreAdded = ensureBuildGitignore(projectRoot, tools);
268
+ return {
269
+ tools,
270
+ ruleViews,
271
+ skillViews,
272
+ mcpFiles,
273
+ commandFiles,
274
+ gitignoreAdded,
275
+ toolConfigSnapshot,
276
+ };
277
+ }
278
+ //# sourceMappingURL=ai-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-build.js","sourceRoot":"","sources":["../../src/utils/ai-build.ts"],"names":[],"mappings":"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"}
@@ -15,4 +15,13 @@ export declare function extractConflictSections(raw: string): {
15
15
  ours: string;
16
16
  theirs: string;
17
17
  } | null;
18
+ /**
19
+ * Parse one side of a JSON merge-conflict section into a normalized array payload.
20
+ * Supports:
21
+ * - full arrays: `[{}, {}]`
22
+ * - single objects: `{}`
23
+ * - empty object / null / empty string => `[]`
24
+ * - array fragments extracted from inside a larger array: `{...}, {...}`
25
+ */
26
+ export declare function parseConflictJsonArray<T = Record<string, unknown>>(raw: string): T[];
18
27
  //# sourceMappingURL=fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAUA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGzD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAE/D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAUvC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GACV;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA6BzC"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAUA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGzD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAE/D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAUvC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GACV;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA6BzC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAoBpF"}
package/dist/utils/fs.js CHANGED
@@ -79,4 +79,35 @@ export function extractConflictSections(raw) {
79
79
  theirs: theirsLines.join('\n').trim(),
80
80
  };
81
81
  }
82
+ /**
83
+ * Parse one side of a JSON merge-conflict section into a normalized array payload.
84
+ * Supports:
85
+ * - full arrays: `[{}, {}]`
86
+ * - single objects: `{}`
87
+ * - empty object / null / empty string => `[]`
88
+ * - array fragments extracted from inside a larger array: `{...}, {...}`
89
+ */
90
+ export function parseConflictJsonArray(raw) {
91
+ const trimmed = raw.trim();
92
+ if (!trimmed || trimmed === 'null' || trimmed === '{}')
93
+ return [];
94
+ try {
95
+ const parsed = JSON.parse(trimmed);
96
+ if (Array.isArray(parsed))
97
+ return parsed;
98
+ if (parsed && typeof parsed === 'object') {
99
+ return Object.keys(parsed).length === 0 ? [] : [parsed];
100
+ }
101
+ }
102
+ catch {
103
+ // Fall through to fragment parsing.
104
+ }
105
+ try {
106
+ const parsed = JSON.parse(`[${trimmed}]`);
107
+ return Array.isArray(parsed) ? parsed : [];
108
+ }
109
+ catch {
110
+ return [];
111
+ }
112
+ }
82
113
  //# sourceMappingURL=fs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,16 @@
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: .aidevos/aida-guide.md
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
  export declare function guidePath(projectRoot: string): string;
9
9
  /**
10
- * Write .aidevos/aida-guide.md if it doesn't exist.
10
+ * Write .aida/aida-guide.md if it doesn't exist.
11
11
  */
12
12
  export declare function ensureGuide(projectRoot: string): void;
13
13
  /**
14
- * Always overwrite .aidevos/aida-guide.md with the latest template content.
14
+ * Always overwrite .aida/aida-guide.md with the latest template content.
15
15
  * Called by `aida rules build` to keep the guide in sync with the package version.
16
16
  */
17
17
  export declare function updateGuide(projectRoot: string): void;
@@ -31,4 +31,5 @@ export declare function updateGuideReferences(projectRoot: string, tools?: strin
31
31
  * Called by `aida rules build` so the AI always encounters it first.
32
32
  */
33
33
  export declare function ensureGuideAtTop(projectRoot: string): void;
34
+ export declare function ensureCodexGuideAtTop(projectRoot: string): void;
34
35
  //# sourceMappingURL=guide.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/utils/guide.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwIH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAKrD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAe9E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAqBjF;AAuBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAqC1D"}
1
+ {"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/utils/guide.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0JH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAKrD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAkB9E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAwBjF;AAmCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAqC1D;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAgC/D"}
@@ -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: .aidevos/aida-guide.md
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 { aidevosDir } from './paths.js';
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 工具读取 \`.aidevos/rules/_all.md\`,了解已沉淀的项目规则并严格遵守(文件不存在则跳过此步)
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 = '.aidevos/aida-guide.md';
119
+ const CLAUDE_MARKER = '.aida/aida-guide.md';
110
120
  const CLAUDE_REFERENCE = `
111
121
  ## AIDA
112
122
 
113
- **⚠️ 严禁跳过:开始任何开发任务前,必须通过 Read 工具读取 \`.aidevos/aida-guide.md\` 的完整内容,并严格按照其中的规范执行。不得以任何理由跳过。**
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(aidevosDir(projectRoot), GUIDE_FILENAME);
148
+ return resolve(aidaDir(projectRoot), GUIDE_FILENAME);
132
149
  }
133
150
  /**
134
- * Write .aidevos/aida-guide.md if it doesn't exist.
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(aidevosDir(projectRoot));
157
+ ensureDir(aidaDir(projectRoot));
141
158
  writeText(p, GUIDE_CONTENT);
142
159
  }
143
160
  /**
144
- * Always overwrite .aidevos/aida-guide.md with the latest template content.
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(aidevosDir(projectRoot));
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;
@@ -185,6 +205,9 @@ export function updateGuideReferences(projectRoot, tools) {
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();
@@ -1 +1 @@
1
- {"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/utils/guide.ts"],"names":[],"mappings":"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"}
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"}