aidevo 1.0.0-beta.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/dist/cli/commands/dashboard.d.ts +2 -0
  4. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  5. package/dist/cli/commands/dashboard.js +70 -0
  6. package/dist/cli/commands/dashboard.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +2 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +362 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/log.d.ts +2 -0
  12. package/dist/cli/commands/log.d.ts.map +1 -0
  13. package/dist/cli/commands/log.js +438 -0
  14. package/dist/cli/commands/log.js.map +1 -0
  15. package/dist/cli/commands/migrate.d.ts +2 -0
  16. package/dist/cli/commands/migrate.d.ts.map +1 -0
  17. package/dist/cli/commands/migrate.js +183 -0
  18. package/dist/cli/commands/migrate.js.map +1 -0
  19. package/dist/cli/commands/reindex.d.ts +10 -0
  20. package/dist/cli/commands/reindex.d.ts.map +1 -0
  21. package/dist/cli/commands/reindex.js +94 -0
  22. package/dist/cli/commands/reindex.js.map +1 -0
  23. package/dist/cli/commands/report.d.ts +2 -0
  24. package/dist/cli/commands/report.d.ts.map +1 -0
  25. package/dist/cli/commands/report.js +219 -0
  26. package/dist/cli/commands/report.js.map +1 -0
  27. package/dist/cli/commands/rules.d.ts +2 -0
  28. package/dist/cli/commands/rules.d.ts.map +1 -0
  29. package/dist/cli/commands/rules.js +143 -0
  30. package/dist/cli/commands/rules.js.map +1 -0
  31. package/dist/cli/commands/start.d.ts +2 -0
  32. package/dist/cli/commands/start.d.ts.map +1 -0
  33. package/dist/cli/commands/start.js +173 -0
  34. package/dist/cli/commands/start.js.map +1 -0
  35. package/dist/cli/commands/status.d.ts +2 -0
  36. package/dist/cli/commands/status.d.ts.map +1 -0
  37. package/dist/cli/commands/status.js +74 -0
  38. package/dist/cli/commands/status.js.map +1 -0
  39. package/dist/cli/commands/update.d.ts +2 -0
  40. package/dist/cli/commands/update.d.ts.map +1 -0
  41. package/dist/cli/commands/update.js +146 -0
  42. package/dist/cli/commands/update.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +85 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/mcp/server.d.ts +10 -0
  48. package/dist/mcp/server.d.ts.map +1 -0
  49. package/dist/mcp/server.js +632 -0
  50. package/dist/mcp/server.js.map +1 -0
  51. package/dist/schemas/run-json.d.ts +252 -0
  52. package/dist/schemas/run-json.d.ts.map +1 -0
  53. package/dist/schemas/run-json.js +22 -0
  54. package/dist/schemas/run-json.js.map +1 -0
  55. package/dist/server/api.d.ts +24 -0
  56. package/dist/server/api.d.ts.map +1 -0
  57. package/dist/server/api.js +196 -0
  58. package/dist/server/api.js.map +1 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/index.d.ts.map +1 -0
  61. package/dist/server/index.js +166 -0
  62. package/dist/server/index.js.map +1 -0
  63. package/dist/utils/display.d.ts +12 -0
  64. package/dist/utils/display.d.ts.map +1 -0
  65. package/dist/utils/display.js +52 -0
  66. package/dist/utils/display.js.map +1 -0
  67. package/dist/utils/fs.d.ts +9 -0
  68. package/dist/utils/fs.d.ts.map +1 -0
  69. package/dist/utils/fs.js +43 -0
  70. package/dist/utils/fs.js.map +1 -0
  71. package/dist/utils/git.d.ts +4 -0
  72. package/dist/utils/git.d.ts.map +1 -0
  73. package/dist/utils/git.js +18 -0
  74. package/dist/utils/git.js.map +1 -0
  75. package/dist/utils/paths.d.ts +25 -0
  76. package/dist/utils/paths.d.ts.map +1 -0
  77. package/dist/utils/paths.js +45 -0
  78. package/dist/utils/paths.js.map +1 -0
  79. package/dist/utils/rules.d.ts +44 -0
  80. package/dist/utils/rules.d.ts.map +1 -0
  81. package/dist/utils/rules.js +208 -0
  82. package/dist/utils/rules.js.map +1 -0
  83. package/dist/utils/run-data.d.ts +37 -0
  84. package/dist/utils/run-data.d.ts.map +1 -0
  85. package/dist/utils/run-data.js +353 -0
  86. package/dist/utils/run-data.js.map +1 -0
  87. package/dist/utils/tokens.d.ts +26 -0
  88. package/dist/utils/tokens.d.ts.map +1 -0
  89. package/dist/utils/tokens.js +173 -0
  90. package/dist/utils/tokens.js.map +1 -0
  91. package/package.json +48 -0
  92. package/src/assets/skills/audit.md +98 -0
  93. package/src/assets/skills/bug-fixer.md +48 -0
  94. package/src/assets/skills/code-generator.md +82 -0
  95. package/src/assets/skills/commit-code.md +67 -0
  96. package/src/assets/skills/dashboard-generator.md +65 -0
  97. package/src/assets/skills/dev-flower.md +85 -0
  98. package/src/assets/skills/deviation-recorder.md +89 -0
  99. package/src/assets/skills/docx-to-markdown.md +69 -0
  100. package/src/assets/skills/mcp-reviewer.md +43 -0
  101. package/src/assets/skills/requirement-analyzer.md +103 -0
  102. package/src/assets/skills/rules-evolver.md +48 -0
  103. package/src/assets/skills/self-reviewer.md +53 -0
  104. package/src/assets/skills/task-splitter.md +58 -0
  105. package/src/assets/skills/workflow-orchestrator.md +204 -0
  106. package/src/assets/templates/demo-run.json +910 -0
  107. package/src/assets/templates/run.json +63 -0
  108. package/src/dashboard/assets/index-BMygHuaU.js +111 -0
  109. package/src/dashboard/assets/index-BW0UZ6Es.css +1 -0
  110. package/src/dashboard/index.html +13 -0
@@ -0,0 +1,208 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { resolve } from 'node:path';
3
+ import { fileExists, readJson, writeJson, writeText, ensureDir } from './fs.js';
4
+ import { aidevosDir } from './paths.js';
5
+ // ─── Paths ────────────────────────────────────────────────
6
+ export function registryPath(projectRoot) {
7
+ return resolve(aidevosDir(projectRoot), 'rules.json');
8
+ }
9
+ export function rulesViewDir(projectRoot) {
10
+ return resolve(aidevosDir(projectRoot), 'rules');
11
+ }
12
+ // ─── Fingerprint ──────────────────────────────────────────
13
+ function normalize(content) {
14
+ return content
15
+ .toLowerCase()
16
+ .replace(/[\s\n\r\t]+/g, ' ')
17
+ .replace(/[,。!?、;:""''()《》【】\.\,\!\?\;\:\"\'\(\)\[\]\{\}]/g, '')
18
+ .trim();
19
+ }
20
+ export function fingerprint(content) {
21
+ return createHash('sha256').update(normalize(content)).digest('hex').substring(0, 12);
22
+ }
23
+ // ─── Registry CRUD ────────────────────────────────────────
24
+ export function loadRegistry(projectRoot) {
25
+ const p = registryPath(projectRoot);
26
+ if (!fileExists(p))
27
+ return [];
28
+ try {
29
+ const data = readJson(p);
30
+ return Array.isArray(data) ? data : [];
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ }
36
+ export function saveRegistry(projectRoot, entries) {
37
+ writeJson(registryPath(projectRoot), entries);
38
+ }
39
+ export function nextRuleId(entries) {
40
+ const nums = entries
41
+ .map((e) => {
42
+ const m = e.id.match(/^RULE-(\d+)$/);
43
+ return m ? parseInt(m[1]) : 0;
44
+ })
45
+ .filter((n) => n > 0);
46
+ const max = nums.length > 0 ? Math.max(...nums) : 0;
47
+ return `RULE-${String(max + 1).padStart(3, '0')}`;
48
+ }
49
+ /**
50
+ * Add a rule to the registry. Returns the entry if added, or the existing entry if duplicate.
51
+ */
52
+ export function addRule(projectRoot, opts) {
53
+ const entries = loadRegistry(projectRoot);
54
+ const fp = fingerprint(opts.content);
55
+ // Check for exact duplicate by fingerprint
56
+ const existing = entries.find((e) => e.fingerprint === fp);
57
+ if (existing) {
58
+ return { entry: existing, isDuplicate: true };
59
+ }
60
+ const entry = {
61
+ id: nextRuleId(entries),
62
+ category: opts.category || 'general',
63
+ content: opts.content,
64
+ fingerprint: fp,
65
+ source: {
66
+ branch: opts.branch,
67
+ deviation: opts.deviation,
68
+ author: opts.author,
69
+ },
70
+ createdAt: new Date().toISOString(),
71
+ status: opts.status || 'active',
72
+ };
73
+ entries.push(entry);
74
+ saveRegistry(projectRoot, entries);
75
+ return { entry, isDuplicate: false };
76
+ }
77
+ // ─── Build Views ──────────────────────────────────────────
78
+ /**
79
+ * Rebuild all .aidevos/rules/*.md from rules.json.
80
+ * Returns the number of categories written.
81
+ */
82
+ export function buildRuleViews(projectRoot) {
83
+ const entries = loadRegistry(projectRoot);
84
+ const viewDir = rulesViewDir(projectRoot);
85
+ ensureDir(viewDir);
86
+ // Group by category
87
+ const groups = {};
88
+ for (const e of entries) {
89
+ if (e.status === 'deprecated')
90
+ continue;
91
+ const cat = e.category || 'general';
92
+ if (!groups[cat])
93
+ groups[cat] = [];
94
+ groups[cat].push(e);
95
+ }
96
+ // Always include iron-rules if they exist in registry
97
+ let written = 0;
98
+ for (const [cat, rules] of Object.entries(groups)) {
99
+ const lines = [];
100
+ lines.push(`<!-- AUTO-GENERATED from rules.json - DO NOT EDIT -->`);
101
+ lines.push(`# ${categoryTitle(cat)} Rules`);
102
+ lines.push('');
103
+ for (const r of rules) {
104
+ const statusTag = r.status === 'pending' ? ' [PENDING]' :
105
+ r.status === 'conflict' ? ' [CONFLICT]' : '';
106
+ lines.push(`- [${r.id}]${statusTag} ${r.content}`);
107
+ }
108
+ lines.push('');
109
+ writeText(resolve(viewDir, `${cat}.md`), lines.join('\n'));
110
+ written++;
111
+ }
112
+ // Write a combined all-rules.md for easy AI consumption
113
+ const activeCount = Object.keys(groups).length;
114
+ if (activeCount > 0) {
115
+ const allLines = [];
116
+ allLines.push(`<!-- AUTO-GENERATED from rules.json - DO NOT EDIT -->`);
117
+ allLines.push(`# All Project Rules`);
118
+ allLines.push('');
119
+ for (const [cat, rules] of Object.entries(groups)) {
120
+ allLines.push(`## ${categoryTitle(cat)}`);
121
+ allLines.push('');
122
+ for (const r of rules) {
123
+ const statusTag = r.status === 'pending' ? ' [PENDING]' :
124
+ r.status === 'conflict' ? ' [CONFLICT]' : '';
125
+ allLines.push(`- [${r.id}]${statusTag} ${r.content}`);
126
+ }
127
+ allLines.push('');
128
+ }
129
+ writeText(resolve(viewDir, '_all.md'), allLines.join('\n'));
130
+ written++;
131
+ }
132
+ return written;
133
+ }
134
+ function categoryTitle(cat) {
135
+ const titles = {
136
+ component: 'Component',
137
+ api: 'API',
138
+ style: 'Style',
139
+ i18n: 'i18n',
140
+ architecture: 'Architecture',
141
+ 'state-management': 'State Management',
142
+ routing: 'Routing',
143
+ testing: 'Testing',
144
+ process: 'Process',
145
+ general: 'General',
146
+ };
147
+ return titles[cat] || cat.charAt(0).toUpperCase() + cat.slice(1);
148
+ }
149
+ // ─── Merge ────────────────────────────────────────────────
150
+ /**
151
+ * Merge two registries (union by fingerprint). Used after git merge conflicts.
152
+ * Returns merged entries and count of new entries added.
153
+ */
154
+ export function mergeRegistries(base, incoming) {
155
+ const fpSet = new Set(base.map((e) => e.fingerprint));
156
+ const merged = [...base];
157
+ let added = 0;
158
+ for (const entry of incoming) {
159
+ if (!fpSet.has(entry.fingerprint)) {
160
+ // Reassign ID to avoid collisions
161
+ entry.id = nextRuleId(merged);
162
+ merged.push(entry);
163
+ fpSet.add(entry.fingerprint);
164
+ added++;
165
+ }
166
+ }
167
+ return { merged, added };
168
+ }
169
+ // ─── Dedupe ───────────────────────────────────────────────
170
+ /**
171
+ * Find potential duplicates by checking keyword overlap.
172
+ * Returns pairs of entries that might be duplicates or conflicts.
173
+ */
174
+ export function findSimilarRules(entries) {
175
+ const results = [];
176
+ function tokenize(s) {
177
+ return new Set(normalize(s)
178
+ .split(' ')
179
+ .filter((w) => w.length > 1));
180
+ }
181
+ function jaccard(setA, setB) {
182
+ let intersection = 0;
183
+ for (const w of setA) {
184
+ if (setB.has(w))
185
+ intersection++;
186
+ }
187
+ const union = setA.size + setB.size - intersection;
188
+ return union > 0 ? intersection / union : 0;
189
+ }
190
+ for (let i = 0; i < entries.length; i++) {
191
+ for (let j = i + 1; j < entries.length; j++) {
192
+ // Skip exact fingerprint matches (already deduplicated)
193
+ if (entries[i].fingerprint === entries[j].fingerprint)
194
+ continue;
195
+ // Only compare same category
196
+ if (entries[i].category !== entries[j].category)
197
+ continue;
198
+ const tokensA = tokenize(entries[i].content);
199
+ const tokensB = tokenize(entries[j].content);
200
+ const sim = jaccard(tokensA, tokensB);
201
+ if (sim >= 0.4) {
202
+ results.push({ a: entries[i], b: entries[j], similarity: sim });
203
+ }
204
+ }
205
+ }
206
+ return results.sort((a, b) => b.similarity - a.similarity);
207
+ }
208
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/utils/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared run.json read/write logic.
3
+ *
4
+ * Used by both CLI (log.ts) and MCP Server (server.ts).
5
+ * Single source of truth for data manipulation.
6
+ */
7
+ import type { RunData } from '../schemas/run-json.js';
8
+ export declare function now(): string;
9
+ export declare function nextId(arr: any[], prefix: string): string;
10
+ export declare function addEvent(data: RunData, type: string, eventData: Record<string, any>): void;
11
+ export declare function addTimeline(data: RunData, type: string, title: string): void;
12
+ export declare function loadConfig(projectRoot: string): Record<string, any>;
13
+ export declare function recalcMetrics(data: RunData, projectRoot?: string): void;
14
+ export declare function updateRequirement(data: RunData, projectRoot: string): void;
15
+ export declare function saveRunData(path: string, data: RunData, projectRoot: string): void;
16
+ export declare function normalizeRunData(data: RunData): RunData;
17
+ /**
18
+ * Load existing run.json for current git branch/dev.
19
+ * Returns null if not found.
20
+ */
21
+ export declare function loadRunJson(projectRoot: string): {
22
+ path: string;
23
+ data: RunData;
24
+ } | null;
25
+ /**
26
+ * Create initial RunData structure.
27
+ */
28
+ export declare function createInitialRunData(branch: string, dev: string, config: Record<string, any>): RunData;
29
+ /**
30
+ * Ensure run.json exists (lazy init).
31
+ * Creates .aidevos/, config.json, run.json, branch-level files if missing.
32
+ */
33
+ export declare function ensureRunJson(projectRoot: string): {
34
+ path: string;
35
+ data: RunData;
36
+ };
37
+ //# sourceMappingURL=run-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-data.d.ts","sourceRoot":"","sources":["../../src/utils/run-data.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,OAAO,EAIR,MAAM,wBAAwB,CAAC;AAIhC,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAE1F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5E;AAID,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMnE;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAqFvE;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAwE1E;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAKlF;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAUvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAYvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAsDT;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAqDlF"}
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Shared run.json read/write logic.
3
+ *
4
+ * Used by both CLI (log.ts) and MCP Server (server.ts).
5
+ * Single source of truth for data manipulation.
6
+ */
7
+ import { resolve } from 'node:path';
8
+ import { getBranchName, getDevName, isGitRepo } from './git.js';
9
+ import { runDir, branchDir, configPath, aidevosDir } from './paths.js';
10
+ import { ensureDir, fileExists, readJson, writeJson, writeText } from './fs.js';
11
+ // ─── Helpers ─────────────────────────────────────────────
12
+ export function now() {
13
+ return new Date().toISOString();
14
+ }
15
+ export function nextId(arr, prefix) {
16
+ const nums = arr
17
+ .map((item) => {
18
+ const id = item.taskId || item.bugId || item.deviationId || item.reviewId || item.ruleId || '';
19
+ const match = id.match(new RegExp(`^${prefix}-(\\d+)$`));
20
+ return match ? parseInt(match[1]) : 0;
21
+ })
22
+ .filter((n) => n > 0);
23
+ const max = nums.length > 0 ? Math.max(...nums) : 0;
24
+ const pad = prefix === 'RULE' ? 3 : 2;
25
+ return `${prefix}-${String(max + 1).padStart(pad, '0')}`;
26
+ }
27
+ export function addEvent(data, type, eventData) {
28
+ data.events.push({ type, time: now(), data: eventData });
29
+ }
30
+ export function addTimeline(data, type, title) {
31
+ data.timeline.push({ type, title, timestamp: now() });
32
+ }
33
+ // ─── Config ──────────────────────────────────────────────
34
+ export function loadConfig(projectRoot) {
35
+ try {
36
+ const cfgPath = configPath(projectRoot);
37
+ if (fileExists(cfgPath))
38
+ return readJson(cfgPath);
39
+ }
40
+ catch { /* ignore */ }
41
+ return {};
42
+ }
43
+ // ─── Metrics Recalculation ───────────────────────────────
44
+ export function recalcMetrics(data, projectRoot) {
45
+ const s = data.summary;
46
+ const m = data.metrics;
47
+ const totalTasks = s.totalTasks || 0;
48
+ const reviewCount = s.reviewCount || 0;
49
+ m.aiDeviationRate = totalTasks > 0 ? Math.round((s.deviationCount || 0) / totalTasks * 100 * 100) / 100 : 0;
50
+ m.bugRate = totalTasks > 0 ? Math.round((s.bugCount || 0) / totalTasks * 100 * 100) / 100 : 0;
51
+ m.reviewPassRate = reviewCount > 0 ? Math.round((s.reviewPassCount || 0) / reviewCount * 100 * 100) / 100 : 0;
52
+ m.rulesSedimentedCount = s.rulesSedimented || 0;
53
+ const totalLines = (s.linesAdded || 0) + (s.linesRemoved || 0);
54
+ m.averageLinesPerTask = totalTasks > 0 ? Math.round(totalLines / totalTasks) : 0;
55
+ if (data.meta?.startTime) {
56
+ const elapsed = (Date.now() - new Date(data.meta.startTime).getTime()) / 1000;
57
+ m.totalDevelopmentTimeSeconds = Math.round(elapsed);
58
+ const hours = elapsed / 3600;
59
+ m.developmentVelocity = hours > 0 ? Math.round((s.completedTasks || 0) / hours * 100) / 100 : 0;
60
+ }
61
+ // Node time breakdown
62
+ const nodeTimes = {};
63
+ for (const w of data.workflow) {
64
+ if (w.startTime && w.endTime) {
65
+ const sec = (new Date(w.endTime).getTime() - new Date(w.startTime).getTime()) / 1000;
66
+ if (sec > 0)
67
+ nodeTimes[w.stage] = (nodeTimes[w.stage] || 0) + sec;
68
+ }
69
+ }
70
+ let codeGenTotal = 0;
71
+ for (const t of data.tasks) {
72
+ if (t.startedAt && t.completedAt) {
73
+ const sec = (new Date(t.completedAt).getTime() - new Date(t.startedAt).getTime()) / 1000;
74
+ if (sec > 0)
75
+ codeGenTotal += sec;
76
+ }
77
+ }
78
+ if (codeGenTotal > 0)
79
+ nodeTimes['Code Generation'] = codeGenTotal;
80
+ let bugFixTotal = 0;
81
+ for (const b of data.bugs) {
82
+ if (b.reportedAt && b.fixedAt) {
83
+ const sec = (new Date(b.fixedAt).getTime() - new Date(b.reportedAt).getTime()) / 1000;
84
+ if (sec > 0)
85
+ bugFixTotal += sec;
86
+ }
87
+ }
88
+ if (bugFixTotal > 0)
89
+ nodeTimes['Bug Fix'] = bugFixTotal;
90
+ let devFixTotal = 0;
91
+ for (const d of data.deviations) {
92
+ if (d.detectedAt && d.fixedAt) {
93
+ const sec = (new Date(d.fixedAt).getTime() - new Date(d.detectedAt).getTime()) / 1000;
94
+ if (sec > 0)
95
+ devFixTotal += sec;
96
+ }
97
+ }
98
+ if (devFixTotal > 0)
99
+ nodeTimes['Deviation Fix'] = devFixTotal;
100
+ m.nodeTimeBreakdown = nodeTimes;
101
+ m.actualWorkSeconds = Math.round(Object.values(nodeTimes).reduce((a, b) => a + b, 0));
102
+ // Efficiency multiplier
103
+ const actualHours = (m.actualWorkSeconds || 0) / 3600;
104
+ if (data.cost?.estimatedManualHours && actualHours > 0) {
105
+ m.efficiencyMultiplier = Math.round(data.cost.estimatedManualHours / actualHours * 10) / 10;
106
+ }
107
+ // ROI calculation
108
+ const config = projectRoot ? loadConfig(projectRoot) : {};
109
+ const tokenPricePer1M = config.tokenPricePer1M || 0;
110
+ const hourlyRate = config.hourlyRate || 0;
111
+ const totalTokens = data.cost?.totalTokens || 0;
112
+ const estimatedManualHours = data.cost?.estimatedManualHours || 0;
113
+ if (totalTokens > 0 && tokenPricePer1M > 0) {
114
+ m.tokenCost = Math.round(totalTokens / 1000000 * tokenPricePer1M * 100) / 100;
115
+ }
116
+ if (estimatedManualHours > 0 && actualHours > 0) {
117
+ m.hoursSaved = Math.round((estimatedManualHours - actualHours) * 10) / 10;
118
+ }
119
+ if (m.hoursSaved && hourlyRate > 0) {
120
+ m.moneySaved = Math.round(m.hoursSaved * hourlyRate * 100) / 100;
121
+ }
122
+ if (m.moneySaved && m.tokenCost && m.tokenCost > 0) {
123
+ m.roi = Math.round((m.moneySaved - m.tokenCost) / m.tokenCost * 100 * 100) / 100;
124
+ }
125
+ }
126
+ // ─── Requirement Sync ────────────────────────────────────
127
+ export function updateRequirement(data, projectRoot) {
128
+ try {
129
+ const branch = data.meta?.branch;
130
+ if (!branch)
131
+ return;
132
+ const reqPath = resolve(branchDir(projectRoot, branch), 'requirement.json');
133
+ const bDir = branchDir(projectRoot, branch);
134
+ ensureDir(bDir);
135
+ let req;
136
+ if (fileExists(reqPath)) {
137
+ req = readJson(reqPath);
138
+ }
139
+ else {
140
+ req = {
141
+ branch, title: '', summary: '', prdPhases: [], modules: [], highlights: [], developers: [],
142
+ totals: { tasks: 0, completedTasks: 0, bugs: 0, deviations: 0, linesAdded: 0, linesRemoved: 0, totalTokens: 0 },
143
+ createdAt: now(), updatedAt: '',
144
+ };
145
+ }
146
+ const devName = data.meta?.developer || '';
147
+ if (!devName)
148
+ return;
149
+ const s = data.summary || {};
150
+ const m = data.metrics || {};
151
+ const reviewCount = s.reviewCount || 0;
152
+ const reviewPassCount = s.reviewPassCount || 0;
153
+ const devSummary = {
154
+ name: devName,
155
+ modules: req.modules.filter(mod => mod.assignee === devName).map(mod => mod.name),
156
+ tasks: s.totalTasks || 0,
157
+ completedTasks: s.completedTasks || 0,
158
+ bugs: s.bugCount || 0,
159
+ deviations: s.deviationCount || 0,
160
+ linesAdded: s.linesAdded || 0,
161
+ linesRemoved: s.linesRemoved || 0,
162
+ firstPassRate: reviewCount > 0 ? Math.round(reviewPassCount / reviewCount * 100) / 100 : 0,
163
+ actualWorkSeconds: m.actualWorkSeconds || 0,
164
+ totalTokens: data.cost?.totalTokens || 0,
165
+ };
166
+ const idx = req.developers.findIndex(d => d.name === devName);
167
+ if (idx >= 0)
168
+ req.developers[idx] = devSummary;
169
+ else
170
+ req.developers.push(devSummary);
171
+ req.totals = {
172
+ tasks: req.developers.reduce((a, d) => a + d.tasks, 0),
173
+ completedTasks: req.developers.reduce((a, d) => a + d.completedTasks, 0),
174
+ bugs: req.developers.reduce((a, d) => a + d.bugs, 0),
175
+ deviations: req.developers.reduce((a, d) => a + d.deviations, 0),
176
+ linesAdded: req.developers.reduce((a, d) => a + d.linesAdded, 0),
177
+ linesRemoved: req.developers.reduce((a, d) => a + d.linesRemoved, 0),
178
+ totalTokens: req.developers.reduce((a, d) => a + d.totalTokens, 0),
179
+ };
180
+ if (data.highlights?.length) {
181
+ const existing = new Set(req.highlights.map((h) => h.content));
182
+ for (const h of data.highlights) {
183
+ if (!existing.has(h.content)) {
184
+ req.highlights.push(h);
185
+ existing.add(h.content);
186
+ }
187
+ }
188
+ }
189
+ if (!req.title && data.meta?.branch) {
190
+ req.title = data.meta.branch;
191
+ }
192
+ req.updatedAt = now();
193
+ writeJson(reqPath, req);
194
+ }
195
+ catch {
196
+ // Non-critical: don't block run.json writes
197
+ }
198
+ }
199
+ // ─── Save (recalc + persist + sync) ─────────────────────
200
+ export function saveRunData(path, data, projectRoot) {
201
+ data.context.lastUpdated = now();
202
+ recalcMetrics(data, projectRoot);
203
+ writeJson(path, data);
204
+ updateRequirement(data, projectRoot);
205
+ }
206
+ // ─── Load / Normalize ────────────────────────────────────
207
+ export function normalizeRunData(data) {
208
+ for (const key of ['tasks', 'bugs', 'deviations', 'reviews', 'rules', 'files', 'timeline', 'events', 'workflow', 'highlights']) {
209
+ if (!Array.isArray(data[key]))
210
+ data[key] = [];
211
+ }
212
+ if (!data.summary)
213
+ data.summary = {};
214
+ if (!data.meta)
215
+ data.meta = {};
216
+ if (!data.context)
217
+ data.context = {};
218
+ if (!data.metrics)
219
+ data.metrics = {};
220
+ if (!data.cost)
221
+ data.cost = {};
222
+ return data;
223
+ }
224
+ /**
225
+ * Load existing run.json for current git branch/dev.
226
+ * Returns null if not found.
227
+ */
228
+ export function loadRunJson(projectRoot) {
229
+ if (!fileExists(configPath(projectRoot)))
230
+ return null;
231
+ if (!isGitRepo())
232
+ return null;
233
+ const branch = getBranchName();
234
+ const dev = getDevName();
235
+ const dir = runDir(projectRoot, branch, dev);
236
+ const p = resolve(dir, 'run.json');
237
+ if (!fileExists(p))
238
+ return null;
239
+ const data = normalizeRunData(readJson(p));
240
+ return { path: p, data };
241
+ }
242
+ /**
243
+ * Create initial RunData structure.
244
+ */
245
+ export function createInitialRunData(branch, dev, config) {
246
+ const ts = now();
247
+ return {
248
+ meta: {
249
+ schemaVersion: '2.0',
250
+ runId: branch,
251
+ project: config.project || '',
252
+ developer: dev,
253
+ branch,
254
+ aiModel: config.aiModel || '',
255
+ aiTool: config.aiTool || '',
256
+ startTime: ts,
257
+ endTime: undefined,
258
+ status: 'running',
259
+ prdPhases: [],
260
+ },
261
+ summary: {
262
+ totalTasks: 0,
263
+ completedTasks: 0,
264
+ bugCount: 0,
265
+ deviationCount: 0,
266
+ reviewCount: 0,
267
+ reviewPassCount: 0,
268
+ reviewFailCount: 0,
269
+ rulesSedimented: 0,
270
+ prdPhaseCount: 0,
271
+ filesChanged: 0,
272
+ linesAdded: 0,
273
+ linesRemoved: 0,
274
+ },
275
+ workflow: [],
276
+ tasks: [],
277
+ bugs: [],
278
+ deviations: [],
279
+ reviews: [],
280
+ files: [],
281
+ metrics: {},
282
+ timeline: [],
283
+ events: [],
284
+ rules: [],
285
+ context: {
286
+ currentPrdPhase: undefined,
287
+ currentTaskId: undefined,
288
+ currentStage: undefined,
289
+ lastUpdated: ts,
290
+ },
291
+ cost: {
292
+ totalTokens: 0,
293
+ estimatedManualHours: 0,
294
+ actualHours: 0,
295
+ tokenBreakdown: [],
296
+ },
297
+ highlights: [],
298
+ };
299
+ }
300
+ /**
301
+ * Ensure run.json exists (lazy init).
302
+ * Creates .aidevos/, config.json, run.json, branch-level files if missing.
303
+ */
304
+ export function ensureRunJson(projectRoot) {
305
+ if (!isGitRepo()) {
306
+ throw new Error('Not a git repository. AIDevOS requires git.');
307
+ }
308
+ // Ensure .aidevos/config.json exists
309
+ const dir = aidevosDir(projectRoot);
310
+ if (!fileExists(resolve(dir, 'config.json'))) {
311
+ ensureDir(dir);
312
+ ensureDir(resolve(dir, 'rules'));
313
+ ensureDir(resolve(dir, 'runs'));
314
+ writeJson(resolve(dir, 'config.json'), {
315
+ schemaVersion: '1.0',
316
+ aiTool: 'mcp',
317
+ project: resolve(projectRoot).split('/').pop() || 'unknown',
318
+ });
319
+ }
320
+ const branch = getBranchName();
321
+ const dev = getDevName();
322
+ const devDir = runDir(projectRoot, branch, dev);
323
+ const runJsonPath = resolve(devDir, 'run.json');
324
+ if (fileExists(runJsonPath)) {
325
+ const data = normalizeRunData(readJson(runJsonPath));
326
+ return { path: runJsonPath, data };
327
+ }
328
+ // Lazy create
329
+ const config = loadConfig(projectRoot);
330
+ const bDir = branchDir(projectRoot, branch);
331
+ ensureDir(bDir);
332
+ ensureDir(devDir);
333
+ const runData = createInitialRunData(branch, dev, config);
334
+ writeJson(runJsonPath, runData);
335
+ // Create shared branch-level files
336
+ const prdPath = resolve(bDir, 'prd.md');
337
+ if (!fileExists(prdPath))
338
+ writeText(prdPath, '# PRD\n\nPlace your product requirements here.\n');
339
+ const analysisPath = resolve(bDir, 'analysis.md');
340
+ if (!fileExists(analysisPath))
341
+ writeText(analysisPath, '');
342
+ const reqPath = resolve(bDir, 'requirement.json');
343
+ if (!fileExists(reqPath)) {
344
+ const ts = now();
345
+ writeJson(reqPath, {
346
+ branch, title: '', summary: '', prdPhases: [], modules: [], highlights: [], developers: [],
347
+ totals: { tasks: 0, completedTasks: 0, bugs: 0, deviations: 0, linesAdded: 0, linesRemoved: 0, totalTokens: 0 },
348
+ createdAt: ts, updatedAt: ts,
349
+ });
350
+ }
351
+ return { path: runJsonPath, data: runData };
352
+ }
353
+ //# sourceMappingURL=run-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-data.js","sourceRoot":"","sources":["../../src/utils/run-data.ts"],"names":[],"mappings":"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"}