ai-dev-analytics 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.en.md +34 -48
  2. package/README.md +52 -458
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +64 -9
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +4 -0
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/memory.d.ts.map +1 -1
  10. package/dist/cli/commands/memory.js +3 -13
  11. package/dist/cli/commands/memory.js.map +1 -1
  12. package/dist/cli/commands/rules.d.ts +0 -10
  13. package/dist/cli/commands/rules.d.ts.map +1 -1
  14. package/dist/cli/commands/rules.js +7 -33
  15. package/dist/cli/commands/rules.js.map +1 -1
  16. package/dist/cli/commands/skills.d.ts +0 -5
  17. package/dist/cli/commands/skills.d.ts.map +1 -1
  18. package/dist/cli/commands/skills.js +4 -24
  19. package/dist/cli/commands/skills.js.map +1 -1
  20. package/dist/cli/commands/sync.d.ts.map +1 -1
  21. package/dist/cli/commands/sync.js +6 -15
  22. package/dist/cli/commands/sync.js.map +1 -1
  23. package/dist/cli/index.js +19 -90
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/{schemas/run-json.d.ts → internal/runtime/schema.d.ts} +4 -18
  26. package/dist/internal/runtime/schema.d.ts.map +1 -0
  27. package/dist/{schemas/run-json.js → internal/runtime/schema.js} +5 -9
  28. package/dist/internal/runtime/schema.js.map +1 -0
  29. package/dist/{utils/run-data.d.ts → internal/runtime/state.d.ts} +7 -8
  30. package/dist/internal/runtime/state.d.ts.map +1 -0
  31. package/dist/{utils/run-data.js → internal/runtime/state.js} +11 -12
  32. package/dist/internal/runtime/state.js.map +1 -0
  33. package/dist/{utils → internal/runtime}/summary.d.ts +2 -2
  34. package/dist/internal/runtime/summary.d.ts.map +1 -0
  35. package/dist/{utils → internal/runtime}/summary.js +4 -4
  36. package/dist/internal/runtime/summary.js.map +1 -0
  37. package/dist/internal/runtime/tokens.d.ts.map +1 -0
  38. package/dist/internal/runtime/tokens.js.map +1 -0
  39. package/dist/mcp/server.js +9 -8
  40. package/dist/mcp/server.js.map +1 -1
  41. package/dist/schemas/aida-project.d.ts +4 -0
  42. package/dist/schemas/aida-project.d.ts.map +1 -1
  43. package/dist/schemas/rules.d.ts +15 -0
  44. package/dist/schemas/rules.d.ts.map +1 -0
  45. package/dist/schemas/rules.js +5 -0
  46. package/dist/schemas/rules.js.map +1 -0
  47. package/dist/services/project-build.d.ts +44 -0
  48. package/dist/services/project-build.d.ts.map +1 -0
  49. package/dist/services/project-build.js +32 -0
  50. package/dist/services/project-build.js.map +1 -0
  51. package/dist/services/project-health.d.ts +14 -0
  52. package/dist/services/project-health.d.ts.map +1 -0
  53. package/dist/services/project-health.js +19 -0
  54. package/dist/services/project-health.js.map +1 -0
  55. package/dist/services/security-audit.d.ts +59 -0
  56. package/dist/services/security-audit.d.ts.map +1 -0
  57. package/dist/services/security-audit.js +638 -0
  58. package/dist/services/security-audit.js.map +1 -0
  59. package/dist/utils/ai-build.d.ts +0 -5
  60. package/dist/utils/ai-build.d.ts.map +1 -1
  61. package/dist/utils/ai-build.js +2 -35
  62. package/dist/utils/ai-build.js.map +1 -1
  63. package/dist/utils/guide.d.ts +3 -3
  64. package/dist/utils/guide.js +6 -6
  65. package/dist/utils/import.d.ts.map +1 -1
  66. package/dist/utils/import.js +4 -15
  67. package/dist/utils/import.js.map +1 -1
  68. package/dist/utils/paths.d.ts +0 -10
  69. package/dist/utils/paths.d.ts.map +1 -1
  70. package/dist/utils/paths.js +1 -17
  71. package/dist/utils/paths.js.map +1 -1
  72. package/dist/utils/project-health.d.ts +1 -0
  73. package/dist/utils/project-health.d.ts.map +1 -1
  74. package/dist/utils/project-health.js +26 -3
  75. package/dist/utils/project-health.js.map +1 -1
  76. package/dist/utils/rules.d.ts +11 -1
  77. package/dist/utils/rules.d.ts.map +1 -1
  78. package/dist/utils/rules.js +27 -1
  79. package/dist/utils/rules.js.map +1 -1
  80. package/dist/utils/skills.d.ts +6 -10
  81. package/dist/utils/skills.d.ts.map +1 -1
  82. package/dist/utils/skills.js +23 -67
  83. package/dist/utils/skills.js.map +1 -1
  84. package/package.json +12 -14
  85. package/dist/cli/commands/build.d.ts +0 -2
  86. package/dist/cli/commands/build.d.ts.map +0 -1
  87. package/dist/cli/commands/build.js +0 -55
  88. package/dist/cli/commands/build.js.map +0 -1
  89. package/dist/cli/commands/dashboard.d.ts +0 -2
  90. package/dist/cli/commands/dashboard.d.ts.map +0 -1
  91. package/dist/cli/commands/dashboard.js +0 -70
  92. package/dist/cli/commands/dashboard.js.map +0 -1
  93. package/dist/cli/commands/import.d.ts +0 -2
  94. package/dist/cli/commands/import.d.ts.map +0 -1
  95. package/dist/cli/commands/import.js +0 -71
  96. package/dist/cli/commands/import.js.map +0 -1
  97. package/dist/cli/commands/log.d.ts +0 -2
  98. package/dist/cli/commands/log.d.ts.map +0 -1
  99. package/dist/cli/commands/log.js +0 -440
  100. package/dist/cli/commands/log.js.map +0 -1
  101. package/dist/cli/commands/merge-data.d.ts +0 -20
  102. package/dist/cli/commands/merge-data.d.ts.map +0 -1
  103. package/dist/cli/commands/merge-data.js +0 -634
  104. package/dist/cli/commands/merge-data.js.map +0 -1
  105. package/dist/cli/commands/merge.d.ts +0 -2
  106. package/dist/cli/commands/merge.d.ts.map +0 -1
  107. package/dist/cli/commands/merge.js +0 -82
  108. package/dist/cli/commands/merge.js.map +0 -1
  109. package/dist/cli/commands/migrate-dir.d.ts +0 -6
  110. package/dist/cli/commands/migrate-dir.d.ts.map +0 -1
  111. package/dist/cli/commands/migrate-dir.js +0 -125
  112. package/dist/cli/commands/migrate-dir.js.map +0 -1
  113. package/dist/cli/commands/migrate-legacy.d.ts +0 -2
  114. package/dist/cli/commands/migrate-legacy.d.ts.map +0 -1
  115. package/dist/cli/commands/migrate-legacy.js +0 -141
  116. package/dist/cli/commands/migrate-legacy.js.map +0 -1
  117. package/dist/cli/commands/migrate.d.ts +0 -2
  118. package/dist/cli/commands/migrate.d.ts.map +0 -1
  119. package/dist/cli/commands/migrate.js +0 -303
  120. package/dist/cli/commands/migrate.js.map +0 -1
  121. package/dist/cli/commands/reindex.d.ts +0 -14
  122. package/dist/cli/commands/reindex.d.ts.map +0 -1
  123. package/dist/cli/commands/reindex.js +0 -69
  124. package/dist/cli/commands/reindex.js.map +0 -1
  125. package/dist/cli/commands/report.d.ts +0 -2
  126. package/dist/cli/commands/report.d.ts.map +0 -1
  127. package/dist/cli/commands/report.js +0 -224
  128. package/dist/cli/commands/report.js.map +0 -1
  129. package/dist/cli/commands/start.d.ts +0 -2
  130. package/dist/cli/commands/start.d.ts.map +0 -1
  131. package/dist/cli/commands/start.js +0 -155
  132. package/dist/cli/commands/start.js.map +0 -1
  133. package/dist/cli/commands/status.d.ts +0 -2
  134. package/dist/cli/commands/status.d.ts.map +0 -1
  135. package/dist/cli/commands/status.js +0 -70
  136. package/dist/cli/commands/status.js.map +0 -1
  137. package/dist/cli/commands/update.d.ts +0 -2
  138. package/dist/cli/commands/update.d.ts.map +0 -1
  139. package/dist/cli/commands/update.js +0 -74
  140. package/dist/cli/commands/update.js.map +0 -1
  141. package/dist/schemas/run-json.d.ts.map +0 -1
  142. package/dist/schemas/run-json.js.map +0 -1
  143. package/dist/server/api.d.ts +0 -30
  144. package/dist/server/api.d.ts.map +0 -1
  145. package/dist/server/api.js +0 -232
  146. package/dist/server/api.js.map +0 -1
  147. package/dist/server/index.d.ts +0 -2
  148. package/dist/server/index.d.ts.map +0 -1
  149. package/dist/server/index.js +0 -228
  150. package/dist/server/index.js.map +0 -1
  151. package/dist/utils/run-data.d.ts.map +0 -1
  152. package/dist/utils/run-data.js.map +0 -1
  153. package/dist/utils/summary.d.ts.map +0 -1
  154. package/dist/utils/summary.js.map +0 -1
  155. package/dist/utils/tokens.d.ts.map +0 -1
  156. package/dist/utils/tokens.js.map +0 -1
  157. package/src/assets/skills/audit.md +0 -98
  158. package/src/assets/skills/bug-fixer.md +0 -43
  159. package/src/assets/skills/code-generator.md +0 -71
  160. package/src/assets/skills/commit-code.md +0 -67
  161. package/src/assets/skills/dashboard-generator.md +0 -65
  162. package/src/assets/skills/dev-flower.md +0 -85
  163. package/src/assets/skills/deviation-recorder.md +0 -83
  164. package/src/assets/skills/docx-to-markdown.md +0 -69
  165. package/src/assets/skills/mcp-reviewer.md +0 -38
  166. package/src/assets/skills/requirement-analyzer.md +0 -103
  167. package/src/assets/skills/rules-evolver.md +0 -47
  168. package/src/assets/skills/self-reviewer.md +0 -49
  169. package/src/assets/skills/task-splitter.md +0 -60
  170. package/src/assets/skills/workflow-orchestrator.md +0 -209
  171. package/src/assets/templates/demo-run.json +0 -910
  172. package/src/assets/templates/run.json +0 -63
  173. package/src/dashboard/assets/index-B8QcPcg7.css +0 -1
  174. package/src/dashboard/assets/index-DcAl6lhS.js +0 -111
  175. package/src/dashboard/demo/overview.json +0 -71
  176. package/src/dashboard/demo/run.en.json +0 -1169
  177. package/src/dashboard/demo/run.json +0 -2667
  178. package/src/dashboard/demo/run.zh.json +0 -1169
  179. package/src/dashboard/demo/runs.json +0 -19
  180. package/src/dashboard/index.html +0 -13
  181. /package/dist/{utils → internal/runtime}/tokens.d.ts +0 -0
  182. /package/dist/{utils → internal/runtime}/tokens.js +0 -0
@@ -1,303 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { readdirSync, statSync } from 'node:fs';
3
- import { fileExists, readJson, writeJson } from '../../utils/fs.js';
4
- import { green, cyan, red, yellow } from '../../utils/display.js';
5
- import { recalcMetrics } from '../../utils/run-data.js';
6
- import { normalizeProjectTruthSources } from '../../utils/project-health.js';
7
- // ─── Category mapping (old → new enum) ──────────────────
8
- const DEVIATION_CAT_MAP = {
9
- 'ui-spacing': 'ui-spacing',
10
- 'layout': 'layout',
11
- 'component-usage': 'component-usage',
12
- 'i18n': 'i18n',
13
- 'api': 'api',
14
- 'logic': 'logic',
15
- 'architecture': 'architecture',
16
- 'style': 'style',
17
- 'process': 'process',
18
- 'other': 'other',
19
- // Old values not in new enum → map to closest
20
- 'styling': 'style',
21
- 'workflow': 'process',
22
- 'state-management': 'logic',
23
- 'feature-incomplete': 'other',
24
- };
25
- const ROOT_CAUSE_MAP = {
26
- 'rule-missing': 'rule-missing',
27
- 'context-insufficient': 'context-insufficient',
28
- 'hallucination': 'hallucination',
29
- 'misunderstanding': 'misunderstanding',
30
- 'reference-copy': 'reference-copy',
31
- 'process-omission': 'process-omission',
32
- 'other': 'other',
33
- // Old values
34
- 'skill-execution': 'process-omission',
35
- 'ai-logic-error': 'hallucination',
36
- 'task-omission': 'process-omission',
37
- };
38
- // ─── Migrators ──────────────────────────────────────────
39
- function migrateBug(old) {
40
- return {
41
- bugId: old.bugId || old.id || '',
42
- title: old.title,
43
- severity: old.severity || 'medium',
44
- source: old.source || 'self-review',
45
- status: old.status || 'open',
46
- files: old.files || [],
47
- fix: old.fix || null,
48
- taskId: old.taskId || old.task || null,
49
- reportedAt: old.reportedAt || old.createdAt || new Date().toISOString(),
50
- fixedAt: old.fixedAt || null,
51
- };
52
- }
53
- function migrateDeviation(old) {
54
- return {
55
- deviationId: old.deviationId || old.id || '',
56
- title: old.title,
57
- rootCauseCategory: ROOT_CAUSE_MAP[old.rootCauseCategory] || 'other',
58
- deviationCategory: DEVIATION_CAT_MAP[old.deviationCategory] || 'other',
59
- aiOutput: old.aiOutput || '',
60
- expectedOutput: old.expectedOutput || old.expected || '',
61
- files: old.files || [],
62
- ruleSedimented: old.ruleSedimented ?? null,
63
- detectedAt: old.detectedAt || old.createdAt || new Date().toISOString(),
64
- fixedAt: old.fixedAt || null,
65
- };
66
- }
67
- function migrateReview(old) {
68
- let issueCount = old.issueCount || 0;
69
- let issuesArray = [];
70
- if (typeof old.issues === 'number') {
71
- issueCount = old.issues;
72
- }
73
- else if (Array.isArray(old.issues)) {
74
- issuesArray = old.issues;
75
- issueCount = old.issues.length;
76
- }
77
- return {
78
- reviewId: old.reviewId || old.id || '',
79
- taskId: old.taskId || null,
80
- result: old.result || 'pass',
81
- issueCount,
82
- scope: old.scope || '',
83
- reviewedAt: old.reviewedAt || old.createdAt || new Date().toISOString(),
84
- issues: issuesArray,
85
- };
86
- }
87
- function migrateRule(old) {
88
- return {
89
- ruleId: old.ruleId || old.id || '',
90
- content: old.content,
91
- sourceDeviation: old.sourceDeviation || null,
92
- sedimentedAt: old.sedimentedAt || old.createdAt || new Date().toISOString(),
93
- file: old.file || '',
94
- ...(old.status === 'pending' ? { status: 'pending' } : {}),
95
- };
96
- }
97
- function migrateFile(old) {
98
- return {
99
- path: old.path || old.filePath || '',
100
- changeType: old.changeType || 'modified',
101
- linesAdded: old.linesAdded || 0,
102
- linesRemoved: old.linesRemoved || 0,
103
- changeCount: old.changeCount || 1,
104
- lastModified: old.lastModified || old.changedAt || new Date().toISOString(),
105
- };
106
- }
107
- // ─── Full migration ─────────────────────────────────────
108
- function migrateRunJson(data, projectName) {
109
- const meta = data.meta || {};
110
- const summary = data.summary || {};
111
- const now = new Date().toISOString();
112
- // Migrate meta
113
- const newMeta = {
114
- schemaVersion: '2.0',
115
- runId: meta.branch || meta.runId || '',
116
- project: meta.project || projectName || '',
117
- developer: meta.developer || '',
118
- branch: meta.branch || '',
119
- aiModel: meta.aiModel || '',
120
- aiTool: meta.aiTool || '',
121
- startTime: meta.startTime || now,
122
- endTime: meta.endTime || undefined,
123
- status: meta.status || 'running',
124
- prdPhases: meta.prdPhases || [],
125
- };
126
- // Migrate entities
127
- const bugs = (data.bugs || []).map((b) => migrateBug(b));
128
- const deviations = (data.deviations || []).map((d) => migrateDeviation(d));
129
- const reviews = (data.reviews || []).map((r) => migrateReview(r));
130
- const rules = (data.rules || []).map((r) => migrateRule(r));
131
- const files = (data.files || []).map((f) => migrateFile(f));
132
- const tasks = data.tasks || [];
133
- // Ensure tasks have startedAt
134
- for (const t of tasks) {
135
- if (!t.startedAt && t.createdAt)
136
- t.startedAt = t.createdAt;
137
- }
138
- // Rebuild summary from actual data
139
- const newSummary = {
140
- totalTasks: tasks.length,
141
- completedTasks: tasks.filter((t) => t.status === 'done').length,
142
- bugCount: bugs.length,
143
- deviationCount: deviations.length,
144
- reviewCount: reviews.length,
145
- reviewPassCount: reviews.filter((r) => r.result === 'pass').length,
146
- reviewFailCount: reviews.filter((r) => r.result === 'fail').length,
147
- rulesSedimented: rules.filter((r) => r.status !== 'pending').length,
148
- prdPhaseCount: summary.prdPhaseCount || 0,
149
- filesChanged: files.length,
150
- linesAdded: files.reduce((s, f) => s + (f.linesAdded || 0), 0),
151
- linesRemoved: files.reduce((s, f) => s + (f.linesRemoved || 0), 0),
152
- };
153
- // Build timeline from existing data
154
- const timeline = data.timeline || [];
155
- if (timeline.length === 0) {
156
- // Generate timeline from tasks
157
- for (const t of tasks) {
158
- if (t.createdAt) {
159
- timeline.push({ type: 'task', title: `${t.taskId}: ${t.title}`, timestamp: t.createdAt });
160
- }
161
- if (t.completedAt) {
162
- timeline.push({ type: 'task-done', title: `${t.taskId}: ${t.title}`, timestamp: t.completedAt });
163
- }
164
- }
165
- for (const b of bugs) {
166
- if (b.reportedAt) {
167
- timeline.push({ type: 'bug', title: `${b.bugId}: ${b.title}`, timestamp: b.reportedAt });
168
- }
169
- if (b.fixedAt) {
170
- timeline.push({ type: 'bug-fix', title: `${b.bugId}: ${b.title}`, timestamp: b.fixedAt });
171
- }
172
- }
173
- for (const d of deviations) {
174
- if (d.detectedAt) {
175
- timeline.push({ type: 'deviation', title: `${d.deviationId}: ${d.title}`, timestamp: d.detectedAt });
176
- }
177
- }
178
- for (const r of reviews) {
179
- if (r.reviewedAt) {
180
- timeline.push({ type: 'review', title: `${r.reviewId}: ${r.result}`, timestamp: r.reviewedAt });
181
- }
182
- }
183
- timeline.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
184
- }
185
- const migrated = {
186
- meta: newMeta,
187
- summary: newSummary,
188
- metrics: {},
189
- context: data.context || { lastUpdated: now },
190
- tasks,
191
- bugs,
192
- deviations,
193
- reviews,
194
- rules,
195
- files,
196
- timeline,
197
- events: data.events || [],
198
- workflow: data.workflow || [],
199
- cost: data.cost || { totalTokens: 0, estimatedManualHours: 0, actualHours: 0, tokenBreakdown: [] },
200
- highlights: data.highlights || [],
201
- };
202
- // Recalculate metrics
203
- recalcMetrics(migrated);
204
- return migrated;
205
- }
206
- // ─── File discovery ─────────────────────────────────────
207
- function findAllRunJsonFiles(baseDir) {
208
- const results = [];
209
- function walk(dir) {
210
- try {
211
- const items = readdirSync(dir);
212
- for (const item of items) {
213
- const fullPath = resolve(dir, item);
214
- try {
215
- const stat = statSync(fullPath);
216
- if (stat.isDirectory()) {
217
- walk(fullPath);
218
- }
219
- else if (item === 'run.json') {
220
- results.push(fullPath);
221
- }
222
- }
223
- catch { /* skip */ }
224
- }
225
- }
226
- catch { /* skip */ }
227
- }
228
- walk(baseDir);
229
- return results;
230
- }
231
- // ─── CLI entry point ────────────────────────────────────
232
- export async function migrate() {
233
- const projectRoot = process.cwd();
234
- const aidaDir = resolve(projectRoot, '.aida/runs');
235
- if (!fileExists(aidaDir)) {
236
- console.log(yellow('\n No .aida/runs directory found.\n'));
237
- return;
238
- }
239
- // Read project name from config
240
- let projectName = '';
241
- const configPath = resolve(projectRoot, '.aida/config.json');
242
- if (fileExists(configPath)) {
243
- try {
244
- const cfg = readJson(configPath);
245
- projectName = cfg.project || '';
246
- }
247
- catch { /* ignore */ }
248
- }
249
- console.log(cyan('\n AIDevo Data Migration\n'));
250
- console.log(' Searching for run.json files...\n');
251
- const runJsonFiles = findAllRunJsonFiles(aidaDir);
252
- if (runJsonFiles.length === 0) {
253
- console.log(yellow(' No run.json files found.\n'));
254
- return;
255
- }
256
- console.log(` Found ${runJsonFiles.length} run.json file(s):\n`);
257
- runJsonFiles.forEach((f) => console.log(` ${f.replace(projectRoot, '.')}`));
258
- console.log('\n Starting migration...\n');
259
- let successCount = 0;
260
- let errorCount = 0;
261
- for (const filePath of runJsonFiles) {
262
- try {
263
- const data = readJson(filePath);
264
- // Check if already at schema 2.0
265
- if (data.meta?.schemaVersion === '2.0' && data.cost && Array.isArray(data.highlights)) {
266
- console.log(green(` ✓ ${filePath.replace(projectRoot, '.')} (already v2.0)`));
267
- successCount++;
268
- continue;
269
- }
270
- // Backup original
271
- const backupPath = filePath.replace('.json', '.backup.json');
272
- writeJson(backupPath, data);
273
- // Perform migration
274
- const migrated = migrateRunJson(data, projectName);
275
- // Write migrated data
276
- writeJson(filePath, migrated);
277
- // Summary of what changed
278
- const stats = [
279
- `${migrated.tasks.length} tasks`,
280
- `${migrated.bugs.length} bugs`,
281
- `${migrated.deviations.length} deviations`,
282
- `${migrated.reviews.length} reviews`,
283
- `${migrated.timeline.length} timeline entries`,
284
- ].join(', ');
285
- console.log(green(` ✓ ${filePath.replace(projectRoot, '.')}`));
286
- console.log(` ${stats}`);
287
- successCount++;
288
- }
289
- catch (error) {
290
- console.log(red(` ✗ ${filePath.replace(projectRoot, '.')}: ${error}`));
291
- errorCount++;
292
- }
293
- }
294
- console.log(`\n ${green('Migration complete!')}`);
295
- console.log(` Success: ${successCount}`);
296
- if (errorCount > 0) {
297
- console.log(` ${red(`Errors: ${errorCount}`)}`);
298
- }
299
- const normalized = normalizeProjectTruthSources(projectRoot);
300
- console.log(` Truth sources normalized: ${normalized.rules} rules, ${normalized.skills} skills, ${normalized.memories} memories, ${normalized.summary} summaries`);
301
- console.log(`\n ${yellow('Note:')} Original files backed up as *.backup.json\n`);
302
- }
303
- //# sourceMappingURL=migrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Core reindex logic - can be called from CLI or programmatically (e.g. dashboard startup).
3
- * Returns the number of runs indexed, or -1 on error.
4
- */
5
- export declare function buildIndex(projectRoot: string): number;
6
- /**
7
- * CLI entry point for `aida reindex`
8
- *
9
- * Also auto-resolves git merge conflicts in index.json and config.json:
10
- * - index.json: rebuilt from source (requirement.json files) — authoritative
11
- * - config.json: merges aiTools as union, keeps ours for scalar fields
12
- */
13
- export declare function reindex(): Promise<void>;
14
- //# sourceMappingURL=reindex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reindex.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/reindex.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAoD7C"}
@@ -1,69 +0,0 @@
1
- import { configPath, indexPath } from '../../utils/paths.js';
2
- import { fileExists, readText, writeJson, extractConflictSections } from '../../utils/fs.js';
3
- import { green, red, yellow } from '../../utils/display.js';
4
- import { rebuildSummaryIndex } from '../../utils/summary.js';
5
- /**
6
- * Core reindex logic - can be called from CLI or programmatically (e.g. dashboard startup).
7
- * Returns the number of runs indexed, or -1 on error.
8
- */
9
- export function buildIndex(projectRoot) {
10
- return rebuildSummaryIndex(projectRoot);
11
- }
12
- /**
13
- * CLI entry point for `aida reindex`
14
- *
15
- * Also auto-resolves git merge conflicts in index.json and config.json:
16
- * - index.json: rebuilt from source (requirement.json files) — authoritative
17
- * - config.json: merges aiTools as union, keeps ours for scalar fields
18
- */
19
- export async function reindex() {
20
- const projectRoot = process.cwd();
21
- if (!fileExists(configPath(projectRoot))) {
22
- console.log(red('\n AIDA not initialized. Run `npx aida init` first.\n'));
23
- return;
24
- }
25
- // Auto-resolve config.json conflict if present
26
- const cfgPath = configPath(projectRoot);
27
- const cfgRaw = readText(cfgPath);
28
- if (cfgRaw.includes('<<<<<<<') || cfgRaw.includes('>>>>>>>')) {
29
- console.log(yellow('\n Merge conflict detected in config.json. Resolving...\n'));
30
- const sections = extractConflictSections(cfgRaw);
31
- if (sections) {
32
- try {
33
- const oursConfig = JSON.parse(sections.ours || '{}');
34
- const theirsConfig = JSON.parse(sections.theirs || '{}');
35
- // Union of aiTools, keep ours for all other scalar fields
36
- const merged = { ...oursConfig };
37
- const theirTools = theirsConfig.aiTools || [];
38
- const ourTools = oursConfig.aiTools || [];
39
- merged.aiTools = [...new Set([...ourTools, ...theirTools])];
40
- writeJson(cfgPath, merged);
41
- console.log(green(' ✓ config.json resolved\n'));
42
- }
43
- catch {
44
- console.log(red(' Could not parse config.json conflict. Please resolve manually.\n'));
45
- }
46
- }
47
- else {
48
- console.log(red(' Could not parse config.json conflict markers. Please resolve manually.\n'));
49
- }
50
- }
51
- // Auto-resolve index.json conflict: just rebuild from source
52
- const idxPath = indexPath(projectRoot);
53
- if (fileExists(idxPath)) {
54
- const idxRaw = readText(idxPath);
55
- if (idxRaw.includes('<<<<<<<') || idxRaw.includes('>>>>>>>')) {
56
- console.log(yellow('\n Merge conflict detected in index.json. Rebuilding from source...\n'));
57
- const count = buildIndex(projectRoot);
58
- console.log(green(` ✓ index.json rebuilt`) + `: ${count} runs indexed (conflict resolved)\n`);
59
- return;
60
- }
61
- }
62
- const count = buildIndex(projectRoot);
63
- if (count < 0) {
64
- console.log(red('\n No runs directory found or failed to read.\n'));
65
- return;
66
- }
67
- console.log(green(`\n ✓ Index rebuilt`) + `: ${count} runs indexed\n`);
68
- }
69
- //# sourceMappingURL=reindex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reindex.js","sourceRoot":"","sources":["../../../src/cli/commands/reindex.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function report(): Promise<void>;
2
- //# sourceMappingURL=report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AA0LA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAgE5C"}
@@ -1,224 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { configPath, indexPath } from '../../utils/paths.js';
3
- import { fileExists, writeText } from '../../utils/fs.js';
4
- import { green, red, cyan, yellow } from '../../utils/display.js';
5
- import { getDevName } from '../../utils/git.js';
6
- import { loadIndexData } from '../../utils/summary.js';
7
- function parseReportFlags(args) {
8
- const flags = {};
9
- for (let i = 0; i < args.length; i++) {
10
- if (args[i].startsWith('--') && i + 1 < args.length && !args[i + 1].startsWith('--')) {
11
- flags[args[i].substring(2)] = args[i + 1];
12
- i++;
13
- }
14
- }
15
- return flags;
16
- }
17
- function formatDuration(seconds) {
18
- if (seconds < 60)
19
- return `${Math.round(seconds)}s`;
20
- if (seconds < 3600)
21
- return `${Math.round(seconds / 60)}min`;
22
- const h = Math.floor(seconds / 3600);
23
- const m = Math.round((seconds % 3600) / 60);
24
- return m > 0 ? `${h}h ${m}min` : `${h}h`;
25
- }
26
- function filterByPeriod(runs, period) {
27
- if (!period)
28
- return runs;
29
- const now = new Date();
30
- let startDate;
31
- let endDate;
32
- // Support: 2026-H1, 2026-H2, 2026, 2026-Q1, etc.
33
- const yearMatch = period.match(/^(\d{4})$/);
34
- const h1Match = period.match(/^(\d{4})-H1$/i);
35
- const h2Match = period.match(/^(\d{4})-H2$/i);
36
- const qMatch = period.match(/^(\d{4})-Q(\d)$/i);
37
- if (h1Match) {
38
- const y = parseInt(h1Match[1]);
39
- startDate = new Date(`${y}-01-01T00:00:00Z`);
40
- endDate = new Date(`${y}-07-01T00:00:00Z`);
41
- }
42
- else if (h2Match) {
43
- const y = parseInt(h2Match[1]);
44
- startDate = new Date(`${y}-07-01T00:00:00Z`);
45
- endDate = new Date(`${y + 1}-01-01T00:00:00Z`);
46
- }
47
- else if (qMatch) {
48
- const y = parseInt(qMatch[1]);
49
- const q = parseInt(qMatch[2]);
50
- const startMonth = (q - 1) * 3;
51
- startDate = new Date(y, startMonth, 1);
52
- endDate = new Date(y, startMonth + 3, 1);
53
- }
54
- else if (yearMatch) {
55
- const y = parseInt(yearMatch[1]);
56
- startDate = new Date(`${y}-01-01T00:00:00Z`);
57
- endDate = new Date(`${y + 1}-01-01T00:00:00Z`);
58
- }
59
- else {
60
- return runs;
61
- }
62
- return runs.filter(r => {
63
- if (!r.startTime)
64
- return false;
65
- const t = new Date(r.startTime);
66
- return t >= startDate && t < endDate;
67
- });
68
- }
69
- function generateMyReport(runs, devName, period) {
70
- const myRuns = runs.filter(r => r.developers.some(d => d.name === devName));
71
- const lines = [];
72
- lines.push(`# ${period || 'All Time'} Report - ${devName}`);
73
- lines.push('');
74
- // Summary stats
75
- let totalTasks = 0, totalCompleted = 0, totalBugs = 0, totalDeviations = 0;
76
- let totalLinesAdded = 0, totalTokens = 0, totalWorkSeconds = 0;
77
- for (const run of myRuns) {
78
- const dev = run.developers.find(d => d.name === devName);
79
- if (!dev)
80
- continue;
81
- totalTasks += dev.tasks;
82
- totalCompleted += dev.completedTasks;
83
- totalBugs += dev.bugs;
84
- totalDeviations += dev.deviations;
85
- totalLinesAdded += dev.linesAdded;
86
- totalTokens += dev.totalTokens;
87
- totalWorkSeconds += dev.actualWorkSeconds;
88
- }
89
- lines.push('## Summary');
90
- lines.push('');
91
- lines.push(`- Requirements completed: ${myRuns.length}`);
92
- lines.push(`- Total tasks: ${totalTasks} (completed: ${totalCompleted})`);
93
- lines.push(`- Total bugs: ${totalBugs}`);
94
- lines.push(`- Total deviations: ${totalDeviations}`);
95
- lines.push(`- Code: +${totalLinesAdded} lines`);
96
- lines.push(`- AI work time: ${formatDuration(totalWorkSeconds)}`);
97
- if (totalTokens > 0)
98
- lines.push(`- Token consumption: ${(totalTokens / 1000000).toFixed(2)}M`);
99
- lines.push('');
100
- // Per-requirement breakdown
101
- lines.push('## Requirements');
102
- lines.push('');
103
- lines.push('| Requirement | Tasks | Bugs | Deviations | Lines | Status |');
104
- lines.push('|---|---|---|---|---|---|');
105
- for (const run of myRuns) {
106
- const dev = run.developers.find(d => d.name === devName);
107
- if (!dev)
108
- continue;
109
- lines.push(`| ${run.title || run.branch} | ${dev.tasks} | ${dev.bugs} | ${dev.deviations} | +${dev.linesAdded} | ${run.status} |`);
110
- }
111
- lines.push('');
112
- // Highlights
113
- const allHighlights = myRuns.flatMap(r => r.highlights || []);
114
- if (allHighlights.length > 0) {
115
- lines.push('## Highlights');
116
- lines.push('');
117
- for (const h of allHighlights) {
118
- lines.push(`- ${h.content}`);
119
- }
120
- lines.push('');
121
- }
122
- return lines.join('\n');
123
- }
124
- function generateTeamReport(runs, period) {
125
- const lines = [];
126
- lines.push(`# ${period || 'All Time'} Team Report`);
127
- lines.push('');
128
- // Collect all developers
129
- const devMap = new Map();
130
- for (const run of runs) {
131
- for (const dev of run.developers) {
132
- const existing = devMap.get(dev.name) || { tasks: 0, completed: 0, bugs: 0, deviations: 0, lines: 0, tokens: 0, workSeconds: 0, runs: 0 };
133
- existing.tasks += dev.tasks;
134
- existing.completed += dev.completedTasks;
135
- existing.bugs += dev.bugs;
136
- existing.deviations += dev.deviations;
137
- existing.lines += dev.linesAdded;
138
- existing.tokens += dev.totalTokens;
139
- existing.workSeconds += dev.actualWorkSeconds;
140
- existing.runs += 1;
141
- devMap.set(dev.name, existing);
142
- }
143
- }
144
- lines.push('## Overview');
145
- lines.push('');
146
- lines.push(`- Total requirements: ${runs.length}`);
147
- lines.push(`- Team members: ${devMap.size}`);
148
- lines.push('');
149
- lines.push('## Team Members');
150
- lines.push('');
151
- lines.push('| Developer | Requirements | Tasks | Bugs | Deviations | Lines | AI Time |');
152
- lines.push('|---|---|---|---|---|---|---|');
153
- for (const [name, stats] of devMap) {
154
- lines.push(`| ${name} | ${stats.runs} | ${stats.tasks} | ${stats.bugs} | ${stats.deviations} | +${stats.lines} | ${formatDuration(stats.workSeconds)} |`);
155
- }
156
- lines.push('');
157
- // All requirements
158
- lines.push('## Requirements');
159
- lines.push('');
160
- lines.push('| Requirement | Status | Tasks | Developers | Highlights |');
161
- lines.push('|---|---|---|---|---|');
162
- for (const run of runs) {
163
- const devNames = run.developers.map(d => d.name).join(', ');
164
- const topHighlight = run.highlights?.[0]?.content || '-';
165
- lines.push(`| ${run.title || run.branch} | ${run.status} | ${run.totals.tasks} | ${devNames} | ${topHighlight} |`);
166
- }
167
- lines.push('');
168
- return lines.join('\n');
169
- }
170
- export async function report() {
171
- const projectRoot = process.cwd();
172
- if (!fileExists(configPath(projectRoot))) {
173
- console.log(red('\n AIDA not initialized. Run `npx aida init` first.\n'));
174
- return;
175
- }
176
- const args = process.argv.slice(3);
177
- const flags = parseReportFlags(args);
178
- const scope = flags.scope || 'me';
179
- const period = flags.period || '';
180
- // Ensure index exists
181
- const idxPath = indexPath(projectRoot);
182
- if (!fileExists(idxPath)) {
183
- console.log(yellow('\n Index not found. Running reindex first...\n'));
184
- const { reindex } = await import('./reindex.js');
185
- await reindex();
186
- }
187
- if (!fileExists(idxPath)) {
188
- console.log(red('\n No data available for report.\n'));
189
- return;
190
- }
191
- const index = loadIndexData(projectRoot);
192
- if (!index) {
193
- console.log(red('\n No data available for report.\n'));
194
- return;
195
- }
196
- let runs = index.runs || [];
197
- // Filter by period
198
- if (period) {
199
- runs = filterByPeriod(runs, period);
200
- if (runs.length === 0) {
201
- console.log(yellow(`\n No runs found for period: ${period}\n`));
202
- return;
203
- }
204
- }
205
- let content;
206
- const devName = getDevName();
207
- switch (scope) {
208
- case 'me':
209
- content = generateMyReport(runs, devName, period);
210
- break;
211
- case 'team':
212
- case 'project':
213
- content = generateTeamReport(runs, period);
214
- break;
215
- default:
216
- console.log(red(`\n Invalid --scope: "${scope}". Must be one of: me, team, project\n`));
217
- return;
218
- }
219
- const outputPath = resolve(projectRoot, '.aida', `report-${scope}-${period || 'all'}.md`);
220
- writeText(outputPath, content);
221
- console.log(green('\n ✓ Report generated') + `: ${outputPath}\n`);
222
- console.log(` ${cyan('Tip')}: Use this file as input for AI to generate a performance review draft.\n`);
223
- }
224
- //# sourceMappingURL=report.js.map