ai-dev-analytics 2.0.0 → 2.0.2

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 (180) 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 +109 -11
  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/merge-data.d.ts +0 -1
  13. package/dist/cli/commands/merge-data.d.ts.map +1 -1
  14. package/dist/cli/commands/merge-data.js +2 -12
  15. package/dist/cli/commands/merge-data.js.map +1 -1
  16. package/dist/cli/commands/merge.js +4 -4
  17. package/dist/cli/commands/merge.js.map +1 -1
  18. package/dist/cli/commands/rules.d.ts +0 -10
  19. package/dist/cli/commands/rules.d.ts.map +1 -1
  20. package/dist/cli/commands/rules.js +7 -33
  21. package/dist/cli/commands/rules.js.map +1 -1
  22. package/dist/cli/commands/skills.d.ts +0 -5
  23. package/dist/cli/commands/skills.d.ts.map +1 -1
  24. package/dist/cli/commands/skills.js +4 -24
  25. package/dist/cli/commands/skills.js.map +1 -1
  26. package/dist/cli/commands/sync.d.ts.map +1 -1
  27. package/dist/cli/commands/sync.js +6 -15
  28. package/dist/cli/commands/sync.js.map +1 -1
  29. package/dist/cli/index.js +25 -90
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/{schemas/run-json.d.ts → internal/runtime/schema.d.ts} +4 -18
  32. package/dist/internal/runtime/schema.d.ts.map +1 -0
  33. package/dist/{schemas/run-json.js → internal/runtime/schema.js} +5 -9
  34. package/dist/internal/runtime/schema.js.map +1 -0
  35. package/dist/{utils/run-data.d.ts → internal/runtime/state.d.ts} +7 -8
  36. package/dist/internal/runtime/state.d.ts.map +1 -0
  37. package/dist/{utils/run-data.js → internal/runtime/state.js} +11 -12
  38. package/dist/internal/runtime/state.js.map +1 -0
  39. package/dist/{utils → internal/runtime}/summary.d.ts +2 -2
  40. package/dist/internal/runtime/summary.d.ts.map +1 -0
  41. package/dist/{utils → internal/runtime}/summary.js +4 -4
  42. package/dist/internal/runtime/summary.js.map +1 -0
  43. package/dist/internal/runtime/tokens.d.ts.map +1 -0
  44. package/dist/internal/runtime/tokens.js.map +1 -0
  45. package/dist/mcp/server.js +9 -8
  46. package/dist/mcp/server.js.map +1 -1
  47. package/dist/schemas/aida-project.d.ts +4 -0
  48. package/dist/schemas/aida-project.d.ts.map +1 -1
  49. package/dist/schemas/rules.d.ts +15 -0
  50. package/dist/schemas/rules.d.ts.map +1 -0
  51. package/dist/schemas/rules.js +5 -0
  52. package/dist/schemas/rules.js.map +1 -0
  53. package/dist/services/project-build.d.ts +44 -0
  54. package/dist/services/project-build.d.ts.map +1 -0
  55. package/dist/services/project-build.js +32 -0
  56. package/dist/services/project-build.js.map +1 -0
  57. package/dist/services/project-health.d.ts +14 -0
  58. package/dist/services/project-health.d.ts.map +1 -0
  59. package/dist/services/project-health.js +19 -0
  60. package/dist/services/project-health.js.map +1 -0
  61. package/dist/services/security-audit.d.ts +59 -0
  62. package/dist/services/security-audit.d.ts.map +1 -0
  63. package/dist/services/security-audit.js +638 -0
  64. package/dist/services/security-audit.js.map +1 -0
  65. package/dist/utils/ai-build.d.ts +0 -5
  66. package/dist/utils/ai-build.d.ts.map +1 -1
  67. package/dist/utils/ai-build.js +2 -35
  68. package/dist/utils/ai-build.js.map +1 -1
  69. package/dist/utils/guide.d.ts +3 -3
  70. package/dist/utils/guide.js +6 -6
  71. package/dist/utils/import.d.ts.map +1 -1
  72. package/dist/utils/import.js +4 -15
  73. package/dist/utils/import.js.map +1 -1
  74. package/dist/utils/paths.d.ts +0 -10
  75. package/dist/utils/paths.d.ts.map +1 -1
  76. package/dist/utils/paths.js +1 -17
  77. package/dist/utils/paths.js.map +1 -1
  78. package/dist/utils/project-health.d.ts +1 -0
  79. package/dist/utils/project-health.d.ts.map +1 -1
  80. package/dist/utils/project-health.js +26 -3
  81. package/dist/utils/project-health.js.map +1 -1
  82. package/dist/utils/rules.d.ts +11 -1
  83. package/dist/utils/rules.d.ts.map +1 -1
  84. package/dist/utils/rules.js +27 -1
  85. package/dist/utils/rules.js.map +1 -1
  86. package/dist/utils/skills.d.ts +6 -10
  87. package/dist/utils/skills.d.ts.map +1 -1
  88. package/dist/utils/skills.js +23 -67
  89. package/dist/utils/skills.js.map +1 -1
  90. package/package.json +12 -14
  91. package/dist/cli/commands/build.d.ts +0 -2
  92. package/dist/cli/commands/build.d.ts.map +0 -1
  93. package/dist/cli/commands/build.js +0 -55
  94. package/dist/cli/commands/build.js.map +0 -1
  95. package/dist/cli/commands/dashboard.d.ts +0 -2
  96. package/dist/cli/commands/dashboard.d.ts.map +0 -1
  97. package/dist/cli/commands/dashboard.js +0 -70
  98. package/dist/cli/commands/dashboard.js.map +0 -1
  99. package/dist/cli/commands/import.d.ts +0 -2
  100. package/dist/cli/commands/import.d.ts.map +0 -1
  101. package/dist/cli/commands/import.js +0 -71
  102. package/dist/cli/commands/import.js.map +0 -1
  103. package/dist/cli/commands/log.d.ts +0 -2
  104. package/dist/cli/commands/log.d.ts.map +0 -1
  105. package/dist/cli/commands/log.js +0 -440
  106. package/dist/cli/commands/log.js.map +0 -1
  107. package/dist/cli/commands/migrate-dir.d.ts +0 -6
  108. package/dist/cli/commands/migrate-dir.d.ts.map +0 -1
  109. package/dist/cli/commands/migrate-dir.js +0 -125
  110. package/dist/cli/commands/migrate-dir.js.map +0 -1
  111. package/dist/cli/commands/migrate-legacy.d.ts +0 -2
  112. package/dist/cli/commands/migrate-legacy.d.ts.map +0 -1
  113. package/dist/cli/commands/migrate-legacy.js +0 -141
  114. package/dist/cli/commands/migrate-legacy.js.map +0 -1
  115. package/dist/cli/commands/migrate.d.ts +0 -2
  116. package/dist/cli/commands/migrate.d.ts.map +0 -1
  117. package/dist/cli/commands/migrate.js +0 -303
  118. package/dist/cli/commands/migrate.js.map +0 -1
  119. package/dist/cli/commands/reindex.d.ts +0 -14
  120. package/dist/cli/commands/reindex.d.ts.map +0 -1
  121. package/dist/cli/commands/reindex.js +0 -69
  122. package/dist/cli/commands/reindex.js.map +0 -1
  123. package/dist/cli/commands/report.d.ts +0 -2
  124. package/dist/cli/commands/report.d.ts.map +0 -1
  125. package/dist/cli/commands/report.js +0 -224
  126. package/dist/cli/commands/report.js.map +0 -1
  127. package/dist/cli/commands/start.d.ts +0 -2
  128. package/dist/cli/commands/start.d.ts.map +0 -1
  129. package/dist/cli/commands/start.js +0 -155
  130. package/dist/cli/commands/start.js.map +0 -1
  131. package/dist/cli/commands/status.d.ts +0 -2
  132. package/dist/cli/commands/status.d.ts.map +0 -1
  133. package/dist/cli/commands/status.js +0 -70
  134. package/dist/cli/commands/status.js.map +0 -1
  135. package/dist/cli/commands/update.d.ts +0 -2
  136. package/dist/cli/commands/update.d.ts.map +0 -1
  137. package/dist/cli/commands/update.js +0 -74
  138. package/dist/cli/commands/update.js.map +0 -1
  139. package/dist/schemas/run-json.d.ts.map +0 -1
  140. package/dist/schemas/run-json.js.map +0 -1
  141. package/dist/server/api.d.ts +0 -30
  142. package/dist/server/api.d.ts.map +0 -1
  143. package/dist/server/api.js +0 -232
  144. package/dist/server/api.js.map +0 -1
  145. package/dist/server/index.d.ts +0 -2
  146. package/dist/server/index.d.ts.map +0 -1
  147. package/dist/server/index.js +0 -228
  148. package/dist/server/index.js.map +0 -1
  149. package/dist/utils/run-data.d.ts.map +0 -1
  150. package/dist/utils/run-data.js.map +0 -1
  151. package/dist/utils/summary.d.ts.map +0 -1
  152. package/dist/utils/summary.js.map +0 -1
  153. package/dist/utils/tokens.d.ts.map +0 -1
  154. package/dist/utils/tokens.js.map +0 -1
  155. package/src/assets/skills/audit.md +0 -98
  156. package/src/assets/skills/bug-fixer.md +0 -43
  157. package/src/assets/skills/code-generator.md +0 -71
  158. package/src/assets/skills/commit-code.md +0 -67
  159. package/src/assets/skills/dashboard-generator.md +0 -65
  160. package/src/assets/skills/dev-flower.md +0 -85
  161. package/src/assets/skills/deviation-recorder.md +0 -83
  162. package/src/assets/skills/docx-to-markdown.md +0 -69
  163. package/src/assets/skills/mcp-reviewer.md +0 -38
  164. package/src/assets/skills/requirement-analyzer.md +0 -103
  165. package/src/assets/skills/rules-evolver.md +0 -47
  166. package/src/assets/skills/self-reviewer.md +0 -49
  167. package/src/assets/skills/task-splitter.md +0 -60
  168. package/src/assets/skills/workflow-orchestrator.md +0 -209
  169. package/src/assets/templates/demo-run.json +0 -910
  170. package/src/assets/templates/run.json +0 -63
  171. package/src/dashboard/assets/index-B8QcPcg7.css +0 -1
  172. package/src/dashboard/assets/index-DcAl6lhS.js +0 -111
  173. package/src/dashboard/demo/overview.json +0 -71
  174. package/src/dashboard/demo/run.en.json +0 -1169
  175. package/src/dashboard/demo/run.json +0 -2667
  176. package/src/dashboard/demo/run.zh.json +0 -1169
  177. package/src/dashboard/demo/runs.json +0 -19
  178. package/src/dashboard/index.html +0 -13
  179. /package/dist/{utils → internal/runtime}/tokens.d.ts +0 -0
  180. /package/dist/{utils → internal/runtime}/tokens.js +0 -0
@@ -1,74 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { writeText, readText, fileExists, } from '../../utils/fs.js';
3
- import { bold, green, cyan, dim, yellow } from '../../utils/display.js';
4
- import { updateGuide, updateGuideReferences } from '../../utils/guide.js';
5
- import { loadSkillRegistry, seedBundledSkillRegistry } from '../../utils/skills.js';
6
- import { buildProjectArtifacts, readConfiguredTools } from '../../utils/ai-build.js';
7
- import * as readline from 'node:readline/promises';
8
- import { stdin, stdout } from 'node:process';
9
- export async function update() {
10
- const projectRoot = process.cwd();
11
- const aidevos = resolve(projectRoot, '.aida');
12
- const configPath = resolve(aidevos, 'config.json');
13
- console.log(`\n ${bold('AIDA')} - Update Skills ${dim('(legacy command)')}\n`);
14
- // Check if initialized
15
- if (!fileExists(configPath)) {
16
- console.log(yellow(' AIDevOS is not initialized in this project.'));
17
- console.log(dim(' Run `aida init` first.\n'));
18
- return;
19
- }
20
- // Read config
21
- const config = JSON.parse(readText(configPath));
22
- const tool = config.aiTool;
23
- console.log(` Project: ${cyan(config.project)}`);
24
- console.log(` AI Tool: ${cyan(tool)}`);
25
- console.log('');
26
- const existingSkills = loadSkillRegistry(projectRoot);
27
- console.log(` Found ${existingSkills.length} skills in .aida/skills.json`);
28
- console.log(dim(' Prefer `aida sync` / `aida doctor` in 2.0 flows; this command only refreshes bundled skills.\n'));
29
- console.log('');
30
- // Ask confirmation
31
- const rl = readline.createInterface({ input: stdin, output: stdout });
32
- console.log(' This will replace skills.json with the latest bundled skill set and rebuild local AI tool artifacts.');
33
- console.log(dim(' Old skills.json will be backed up to .aida/skills-backup-*.json\n'));
34
- const answer = (await rl.question(' Continue? (y/N) > ')).trim().toLowerCase();
35
- rl.close();
36
- if (answer !== 'y' && answer !== 'yes') {
37
- console.log(yellow('\n Update cancelled.\n'));
38
- return;
39
- }
40
- console.log('');
41
- // Backup existing skills.json
42
- if (existingSkills.length > 0) {
43
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('T')[0];
44
- const backupPath = resolve(aidevos, `skills-backup-${timestamp}.json`);
45
- writeText(backupPath, JSON.stringify(existingSkills, null, 2) + '\n');
46
- console.log(green(' ✓ Backed up') + ` current skills.json to ${backupPath.replace(`${projectRoot}/`, '')}`);
47
- }
48
- const seeded = seedBundledSkillRegistry(projectRoot);
49
- console.log(green(' ✓ Updated') + ` ${seeded.length} bundled skills in .aida/skills.json`);
50
- // Update guide and AI tool rule files
51
- updateGuide(projectRoot);
52
- updateGuideReferences(projectRoot);
53
- console.log(green(' ✓ Updated') + ' .aida/aida-guide.md and AI tool rule files');
54
- const tools = readConfiguredTools(projectRoot);
55
- if (tools.length > 0) {
56
- const built = buildProjectArtifacts(projectRoot, tools);
57
- console.log(green(' ✓ Rebuilt') + ` ${built.ruleFiles} rule files, ${built.skillFiles} skill files, ${built.commandFiles} tool command files`);
58
- }
59
- // Ensure .gitignore has required entries
60
- const gitignorePath = resolve(projectRoot, '.gitignore');
61
- const gitignoreEntries = ['.aida/index.json', '.aida/tool-configs.json'];
62
- const gitignoreExisting = fileExists(gitignorePath) ? readText(gitignorePath) : '';
63
- const toAdd = gitignoreEntries.filter((e) => !gitignoreExisting.includes(e));
64
- if (toAdd.length > 0) {
65
- writeText(gitignorePath, gitignoreExisting.trimEnd() + '\n\n# AIDA - auto-generated files\n' + toAdd.join('\n') + '\n');
66
- console.log(green(' ✓ Updated') + ` .gitignore (added ${toAdd.join(', ')})`);
67
- }
68
- console.log(`
69
- ${green('✓ Done!')} All skills have been updated to the latest version.
70
-
71
- ${dim('Note: If you have customized any skills, check the backup directory.')}
72
- `);
73
- }
74
- //# sourceMappingURL=update.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU7C,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEhF,uBAAuB;IACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,+CAA+C,CAAC,CACxD,CAAC;QACF,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,4BAA4B,CAAC,CAClC,CAAC;QACF,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,MAAM,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,WAAW,cAAc,CAAC,MAAM,8BAA8B,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAAC,CAAC;IACrH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,mBAAmB;IACnB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC;IACtH,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChF,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,8BAA8B;IAC9B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,iBAAiB,SAAS,OAAO,CAAC,CAAC;QACvE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,2BAA2B,UAAU,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,sCAAsC,CAAC,CAAC;IAE5F,sCAAsC;IACtC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzB,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,6CAA6C,CAAC,CAAC;IAElF,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,KAAK,CAAC,SAAS,gBAAgB,KAAK,CAAC,UAAU,iBAAiB,KAAK,CAAC,YAAY,qBAAqB,CAAC,CAAC;IAClJ,CAAC;IAED,yCAAyC;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CACP,aAAa,EACb,iBAAiB,CAAC,OAAO,EAAE,GAAG,qCAAqC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAC9F,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC;IACV,KAAK,CAAC,SAAS,CAAC;;IAEhB,GAAG,CAAC,sEAAsE,CAAC;CAC9E,CAAC,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-json.d.ts","sourceRoot":"","sources":["../../src/schemas/run-json.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-json.js","sourceRoot":"","sources":["../../src/schemas/run-json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkSH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc;IACnD,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CACtD,CAAA;AAEV,gEAAgE;AAChE,iCAAiC;AACjC,gEAAgE;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAA;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,CAAU,CAAA;AACnG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,OAAO,CAAU,CAAA;AACtK,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAA;AAC7J,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAA;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAU,CAAA;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAU,CAAA;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAA"}
@@ -1,30 +0,0 @@
1
- import type { IndexData, RequirementData } from '../schemas/run-json.js';
2
- export interface RunSummary {
3
- runId: string;
4
- branch: string;
5
- developer: string;
6
- aiModel: string;
7
- status: string;
8
- startTime: string;
9
- totalTasks: number;
10
- completedTasks: number;
11
- deviationCount: number;
12
- bugCount: number;
13
- reviewPassRate: number;
14
- rulesSedimented: number;
15
- filesChanged: number;
16
- totalDevTimeSeconds: number;
17
- actualWorkSeconds: number;
18
- }
19
- export declare function getAllRuns(runsDir: string): RunSummary[];
20
- export declare function getRunData(runsDir: string, branch: string, dev: string, projectRoot?: string): Record<string, any> | null;
21
- export declare function getRequirementData(runsDir: string, branch: string): RequirementData | null;
22
- export declare function getIndexData(projectRoot: string): IndexData | null;
23
- export declare function updateRunCost(runsDir: string, branch: string, dev: string, updates: {
24
- estimatedManualHours?: number;
25
- }, projectRoot: string): boolean;
26
- export declare function updateProjectConfig(projectRoot: string, updates: {
27
- hourlyRate?: number;
28
- }): boolean;
29
- export declare function getAggregatedData(runsDir: string): Record<string, any>;
30
- //# sourceMappingURL=api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CA0DxD;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAkC5B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,eAAe,GAAG,IAAI,CAQxB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAElE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAkBT;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAeT;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAsFtE"}
@@ -1,232 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync, readdirSync, statSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { recalcMetrics } from '../utils/run-data.js';
4
- import { loadIndexData as loadProjectIndexData } from '../utils/summary.js';
5
- export function getAllRuns(runsDir) {
6
- const runs = [];
7
- if (!existsSync(runsDir))
8
- return runs;
9
- let branches;
10
- try {
11
- branches = readdirSync(runsDir).filter((f) => statSync(resolve(runsDir, f)).isDirectory());
12
- }
13
- catch {
14
- return runs;
15
- }
16
- for (const branch of branches) {
17
- const branchDir = resolve(runsDir, branch);
18
- let devs;
19
- try {
20
- devs = readdirSync(branchDir).filter((f) => {
21
- const p = resolve(branchDir, f);
22
- return statSync(p).isDirectory() && existsSync(resolve(p, 'run.json'));
23
- });
24
- }
25
- catch {
26
- continue;
27
- }
28
- for (const dev of devs) {
29
- const runJson = resolve(branchDir, dev, 'run.json');
30
- if (!existsSync(runJson))
31
- continue;
32
- try {
33
- const data = JSON.parse(readFileSync(runJson, 'utf-8'));
34
- const summary = data.summary || {};
35
- const meta = data.meta || {};
36
- const metrics = data.metrics || {};
37
- runs.push({
38
- runId: `${branch}/${dev}`,
39
- branch: meta.branch || branch,
40
- developer: meta.developer || dev,
41
- aiModel: meta.aiModel || '',
42
- status: meta.status || 'unknown',
43
- startTime: meta.startTime || '',
44
- totalTasks: summary.totalTasks || 0,
45
- completedTasks: summary.completedTasks || 0,
46
- deviationCount: summary.deviationCount || 0,
47
- bugCount: summary.bugCount || 0,
48
- reviewPassRate: metrics.reviewPassRate || 0,
49
- rulesSedimented: summary.rulesSedimented || 0,
50
- filesChanged: summary.filesChanged || 0,
51
- totalDevTimeSeconds: metrics.totalDevelopmentTimeSeconds || 0,
52
- actualWorkSeconds: metrics.actualWorkSeconds || 0,
53
- });
54
- }
55
- catch {
56
- /* skip invalid run.json */
57
- }
58
- }
59
- }
60
- return runs;
61
- }
62
- export function getRunData(runsDir, branch, dev, projectRoot) {
63
- const runJson = resolve(runsDir, branch, dev, 'run.json');
64
- if (!existsSync(runJson))
65
- return null;
66
- try {
67
- const data = JSON.parse(readFileSync(runJson, 'utf-8'));
68
- // Normalize: ensure all expected top-level fields exist
69
- data.meta = data.meta || {};
70
- data.summary = data.summary || {};
71
- data.metrics = data.metrics || {};
72
- data.workflow = Array.isArray(data.workflow) ? data.workflow : [];
73
- data.tasks = Array.isArray(data.tasks) ? data.tasks : [];
74
- data.bugs = Array.isArray(data.bugs) ? data.bugs : [];
75
- data.deviations = Array.isArray(data.deviations) ? data.deviations : [];
76
- data.reviews = Array.isArray(data.reviews) ? data.reviews : [];
77
- data.files = Array.isArray(data.files) ? data.files : [];
78
- data.timeline = Array.isArray(data.timeline) ? data.timeline : [];
79
- data.events = Array.isArray(data.events) ? data.events : [];
80
- data.rules = Array.isArray(data.rules) ? data.rules : [];
81
- data.highlights = Array.isArray(data.highlights) ? data.highlights : [];
82
- data.cost = data.cost || {};
83
- data.context = data.context || {};
84
- // Ensure prdPhaseCount is populated
85
- if (data.summary.prdPhaseCount == null && data.meta.prdPhases) {
86
- data.summary.prdPhaseCount = data.meta.prdPhases.length;
87
- }
88
- // Always recalc metrics with latest formula
89
- if (projectRoot) {
90
- recalcMetrics(data, projectRoot);
91
- }
92
- return data;
93
- }
94
- catch {
95
- return null;
96
- }
97
- }
98
- export function getRequirementData(runsDir, branch) {
99
- const reqPath = resolve(runsDir, branch, 'requirement.json');
100
- if (!existsSync(reqPath))
101
- return null;
102
- try {
103
- return JSON.parse(readFileSync(reqPath, 'utf-8'));
104
- }
105
- catch {
106
- return null;
107
- }
108
- }
109
- export function getIndexData(projectRoot) {
110
- return loadProjectIndexData(projectRoot);
111
- }
112
- export function updateRunCost(runsDir, branch, dev, updates, projectRoot) {
113
- const runJson = resolve(runsDir, branch, dev, 'run.json');
114
- if (!existsSync(runJson))
115
- return false;
116
- try {
117
- const data = JSON.parse(readFileSync(runJson, 'utf-8'));
118
- if (!data.cost)
119
- data.cost = {};
120
- if (updates.estimatedManualHours != null) {
121
- data.cost.estimatedManualHours = updates.estimatedManualHours;
122
- }
123
- recalcMetrics(data, projectRoot);
124
- data.context = data.context || {};
125
- data.context.lastUpdated = new Date().toISOString();
126
- writeFileSync(runJson, JSON.stringify(data, null, 2), 'utf-8');
127
- return true;
128
- }
129
- catch {
130
- return false;
131
- }
132
- }
133
- export function updateProjectConfig(projectRoot, updates) {
134
- const cfgPath = resolve(projectRoot, '.aida', 'config.json');
135
- try {
136
- let cfg = {};
137
- if (existsSync(cfgPath)) {
138
- cfg = JSON.parse(readFileSync(cfgPath, 'utf-8'));
139
- }
140
- if (updates.hourlyRate != null) {
141
- cfg.hourlyRate = updates.hourlyRate;
142
- }
143
- writeFileSync(cfgPath, JSON.stringify(cfg, null, 2), 'utf-8');
144
- return true;
145
- }
146
- catch {
147
- return false;
148
- }
149
- }
150
- export function getAggregatedData(runsDir) {
151
- const runs = getAllRuns(runsDir);
152
- const allTasks = [];
153
- const allDeviations = [];
154
- const allBugs = [];
155
- const allReviews = [];
156
- const allRules = [];
157
- const allTimeline = [];
158
- const allWorkflow = [];
159
- const allFiles = [];
160
- const allHighlights = [];
161
- const prdPhasesSet = new Set();
162
- let totalTasks = 0, completedTasks = 0, deviationCount = 0, bugCount = 0;
163
- let reviewCount = 0, reviewPassCount = 0, reviewFailCount = 0;
164
- let rulesSedimented = 0, filesChanged = 0, prdPhaseCount = 0;
165
- for (const run of runs) {
166
- const parts = run.runId.split('/');
167
- if (parts.length < 2)
168
- continue;
169
- const data = getRunData(runsDir, parts[0], parts[1]);
170
- if (!data)
171
- continue;
172
- allTasks.push(...(data.tasks || []));
173
- allDeviations.push(...(data.deviations || []));
174
- allBugs.push(...(data.bugs || []));
175
- allReviews.push(...(data.reviews || []));
176
- allRules.push(...(data.rules || []));
177
- allTimeline.push(...(data.timeline || []));
178
- allWorkflow.push(...(data.workflow || []));
179
- allFiles.push(...(data.files || []));
180
- allHighlights.push(...(data.highlights || []));
181
- const s = data.summary || {};
182
- totalTasks += s.totalTasks || 0;
183
- completedTasks += s.completedTasks || 0;
184
- deviationCount += s.deviationCount || 0;
185
- bugCount += s.bugCount || 0;
186
- reviewCount += s.reviewCount || 0;
187
- reviewPassCount += s.reviewPassCount || 0;
188
- reviewFailCount += s.reviewFailCount || 0;
189
- rulesSedimented += s.rulesSedimented || 0;
190
- filesChanged += s.filesChanged || 0;
191
- const meta = data.meta || {};
192
- if (meta.prdPhases) {
193
- meta.prdPhases.forEach((p) => prdPhasesSet.add(p));
194
- }
195
- }
196
- prdPhaseCount = prdPhasesSet.size;
197
- // Sort timeline by timestamp
198
- allTimeline.sort((a, b) => {
199
- const ta = a.timestamp || '';
200
- const tb = b.timestamp || '';
201
- return ta < tb ? -1 : ta > tb ? 1 : 0;
202
- });
203
- return {
204
- meta: {
205
- branch: 'All Runs',
206
- developer: `${runs.length} runs`,
207
- aiModel: '',
208
- status: 'aggregated',
209
- startTime: runs.length > 0 ? runs.reduce((min, r) => r.startTime < min ? r.startTime : min, runs[0].startTime) : '',
210
- prdPhases: [...prdPhasesSet],
211
- },
212
- summary: {
213
- totalTasks, completedTasks, deviationCount, bugCount,
214
- reviewCount, reviewPassCount, reviewFailCount,
215
- rulesSedimented, filesChanged, prdPhaseCount,
216
- },
217
- metrics: {},
218
- tasks: allTasks,
219
- deviations: allDeviations,
220
- bugs: allBugs,
221
- reviews: allReviews,
222
- rules: allRules,
223
- timeline: allTimeline,
224
- workflow: allWorkflow,
225
- files: allFiles,
226
- highlights: allHighlights,
227
- events: [],
228
- context: {},
229
- cost: {},
230
- };
231
- }
232
- //# sourceMappingURL=api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAoB5E,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAC5C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAChC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YAEnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC;oBACR,KAAK,EAAE,GAAG,MAAM,IAAI,GAAG,EAAE;oBACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;oBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;oBAChC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;oBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;oBAChC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;oBAC/B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;oBACnC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC;oBAC3C,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC;oBAC3C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;oBAC/B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC;oBAC3C,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,CAAC;oBAC7C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC;oBACvC,mBAAmB,EAAE,OAAO,CAAC,2BAA2B,IAAI,CAAC;oBAC7D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,CAAC;iBAClD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,MAAc,EACd,GAAW,EACX,WAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,wDAAwD;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,oCAAoC;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC1D,CAAC;QACD,4CAA4C;QAC5C,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAAc;IAEd,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,MAAc,EACd,GAAW,EACX,OAA0C,EAC1C,WAAmB;IAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,oBAAoB,IAAI,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAChE,CAAC;QACD,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,OAAgC;IAEhC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,IAAI,GAAG,GAAwB,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC/B,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,CAAC;QACD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAU,EAAE,CAAC;IAChC,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAU,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,IAAI,UAAU,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;IACzE,IAAI,WAAW,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;IAC9D,IAAI,eAAe,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;IAE7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACnC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAE/C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC7B,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;QAChC,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;QACxC,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;QACxC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC5B,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QAClC,eAAe,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;QAC1C,eAAe,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;QAC1C,eAAe,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;QAC1C,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC;IAElC,6BAA6B;IAC7B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,OAAO;YAChC,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;YACnH,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC;SAC7B;QACD,OAAO,EAAE;YACP,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ;YACpD,WAAW,EAAE,eAAe,EAAE,eAAe;YAC7C,eAAe,EAAE,YAAY,EAAE,aAAa;SAC7C;QACD,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,aAAa;QACzB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,EAAE;KACT,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function startServer(port: number, projectRoot: string): Promise<void>;
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAkCA,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA2Mf"}
@@ -1,228 +0,0 @@
1
- import { createServer } from 'node:http';
2
- import { readFileSync, watch, existsSync } from 'node:fs';
3
- import { resolve, extname } from 'node:path';
4
- import { PACKAGE_ROOT } from '../utils/paths.js';
5
- import { getAllRuns, getRunData, getAggregatedData, getRequirementData, getIndexData, updateRunCost, updateProjectConfig } from './api.js';
6
- import { rebuildSummaryIndex } from '../utils/summary.js';
7
- const DASHBOARD_DIR = resolve(PACKAGE_ROOT, 'src', 'dashboard');
8
- const sseClients = new Set();
9
- const MIME_TYPES = {
10
- '.html': 'text/html; charset=utf-8',
11
- '.js': 'application/javascript',
12
- '.css': 'text/css',
13
- '.json': 'application/json',
14
- '.svg': 'image/svg+xml',
15
- '.png': 'image/png',
16
- '.ico': 'image/x-icon',
17
- };
18
- function serveStatic(filePath, res) {
19
- if (!existsSync(filePath))
20
- return false;
21
- try {
22
- const content = readFileSync(filePath);
23
- const ext = extname(filePath);
24
- res.writeHead(200, { 'Content-Type': MIME_TYPES[ext] || 'application/octet-stream' });
25
- res.end(content);
26
- return true;
27
- }
28
- catch {
29
- return false;
30
- }
31
- }
32
- export async function startServer(port, projectRoot) {
33
- const theRunsDir = resolve(projectRoot, '.aida', 'runs');
34
- const server = createServer((req, res) => {
35
- const url = req.url || '/';
36
- res.setHeader('Access-Control-Allow-Origin', '*');
37
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
38
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
39
- if (req.method === 'OPTIONS') {
40
- res.writeHead(204);
41
- res.end();
42
- return;
43
- }
44
- // POST API routes
45
- if (req.method === 'POST' && url.startsWith('/api/runs/') && url.endsWith('/cost')) {
46
- const middle = decodeURIComponent(url.replace('/api/runs/', '').replace('/cost', ''));
47
- const parts = middle.split('/');
48
- if (parts.length >= 2) {
49
- const branch = parts[0];
50
- const dev = parts[1];
51
- if (branch.includes('..') || dev.includes('..') || branch.includes('\0') || dev.includes('\0')) {
52
- res.writeHead(403, { 'Content-Type': 'application/json' });
53
- res.end(JSON.stringify({ error: 'Forbidden' }));
54
- return;
55
- }
56
- let body = '';
57
- req.on('data', (chunk) => { body += chunk; });
58
- req.on('end', () => {
59
- try {
60
- const updates = JSON.parse(body);
61
- const ok = updateRunCost(theRunsDir, branch, dev, updates, projectRoot);
62
- res.writeHead(ok ? 200 : 404, { 'Content-Type': 'application/json' });
63
- res.end(JSON.stringify({ success: ok }));
64
- }
65
- catch {
66
- res.writeHead(400, { 'Content-Type': 'application/json' });
67
- res.end(JSON.stringify({ error: 'Invalid JSON' }));
68
- }
69
- });
70
- return;
71
- }
72
- }
73
- if (req.method === 'POST' && url === '/api/config') {
74
- let body = '';
75
- req.on('data', (chunk) => { body += chunk; });
76
- req.on('end', () => {
77
- try {
78
- const updates = JSON.parse(body);
79
- const ok = updateProjectConfig(projectRoot, updates);
80
- // After config change, recalc all runs to pick up new hourlyRate
81
- if (ok && updates.hourlyRate != null) {
82
- const runs = getAllRuns(theRunsDir);
83
- for (const run of runs) {
84
- const p = run.runId.split('/');
85
- if (p.length >= 2)
86
- updateRunCost(theRunsDir, p[0], p[1], {}, projectRoot);
87
- }
88
- }
89
- res.writeHead(ok ? 200 : 500, { 'Content-Type': 'application/json' });
90
- res.end(JSON.stringify({ success: ok }));
91
- }
92
- catch {
93
- res.writeHead(400, { 'Content-Type': 'application/json' });
94
- res.end(JSON.stringify({ error: 'Invalid JSON' }));
95
- }
96
- });
97
- return;
98
- }
99
- // API routes
100
- if (url === '/api/runs') {
101
- const runs = getAllRuns(theRunsDir);
102
- res.writeHead(200, { 'Content-Type': 'application/json' });
103
- res.end(JSON.stringify(runs));
104
- return;
105
- }
106
- if (url === '/api/aggregate') {
107
- const data = getAggregatedData(theRunsDir);
108
- res.writeHead(200, { 'Content-Type': 'application/json' });
109
- res.end(JSON.stringify(data));
110
- return;
111
- }
112
- if (url === '/api/overview') {
113
- const data = getIndexData(projectRoot);
114
- res.writeHead(200, { 'Content-Type': 'application/json' });
115
- res.end(JSON.stringify(data || { project: '', updatedAt: '', runs: [] }));
116
- return;
117
- }
118
- if (url.startsWith('/api/requirement/')) {
119
- const branch = decodeURIComponent(url.replace('/api/requirement/', ''));
120
- if (branch.includes('..') || branch.includes('\0')) {
121
- res.writeHead(403, { 'Content-Type': 'application/json' });
122
- res.end(JSON.stringify({ error: 'Forbidden' }));
123
- return;
124
- }
125
- const data = getRequirementData(theRunsDir, branch);
126
- if (data) {
127
- res.writeHead(200, { 'Content-Type': 'application/json' });
128
- res.end(JSON.stringify(data));
129
- return;
130
- }
131
- res.writeHead(404, { 'Content-Type': 'application/json' });
132
- res.end(JSON.stringify({ error: 'Requirement not found' }));
133
- return;
134
- }
135
- if (url.startsWith('/api/runs/')) {
136
- const parts = decodeURIComponent(url.replace('/api/runs/', '')).split('/');
137
- if (parts.length >= 2) {
138
- const branch = parts[0];
139
- const dev = parts[1];
140
- // Reject path traversal attempts
141
- if (branch.includes('..') || dev.includes('..') || branch.includes('\0') || dev.includes('\0')) {
142
- res.writeHead(403, { 'Content-Type': 'application/json' });
143
- res.end(JSON.stringify({ error: 'Forbidden' }));
144
- return;
145
- }
146
- const data = getRunData(theRunsDir, branch, dev, projectRoot);
147
- if (data) {
148
- res.writeHead(200, { 'Content-Type': 'application/json' });
149
- res.end(JSON.stringify(data));
150
- return;
151
- }
152
- }
153
- res.writeHead(404, { 'Content-Type': 'application/json' });
154
- res.end(JSON.stringify({ error: 'Run not found' }));
155
- return;
156
- }
157
- if (url === '/api/events') {
158
- res.writeHead(200, {
159
- 'Content-Type': 'text/event-stream',
160
- 'Cache-Control': 'no-cache',
161
- Connection: 'keep-alive',
162
- });
163
- res.write('data: {"type":"connected"}\n\n');
164
- sseClients.add(res);
165
- req.on('close', () => sseClients.delete(res));
166
- return;
167
- }
168
- // Static file serving from dashboard build output
169
- const safePath = url.split('?')[0].split('#')[0];
170
- if (safePath !== '/' && safePath !== '/index.html') {
171
- const filePath = resolve(DASHBOARD_DIR, safePath.replace(/^\//, ''));
172
- if (!filePath.startsWith(DASHBOARD_DIR)) {
173
- res.writeHead(403);
174
- res.end('Forbidden');
175
- return;
176
- }
177
- if (serveStatic(filePath, res))
178
- return;
179
- }
180
- // SPA fallback: serve index.html
181
- const indexPath = resolve(DASHBOARD_DIR, 'index.html');
182
- if (serveStatic(indexPath, res))
183
- return;
184
- res.writeHead(404);
185
- res.end('Dashboard not found. Run `pnpm build` in the dashboard/ directory.');
186
- });
187
- // Watch for run.json changes with debounce
188
- if (existsSync(theRunsDir)) {
189
- let debounceTimer = null;
190
- watch(theRunsDir, { recursive: true }, (_eventType, filename) => {
191
- if (!filename?.endsWith('run.json') && !filename?.endsWith('requirement.json'))
192
- return;
193
- if (debounceTimer)
194
- clearTimeout(debounceTimer);
195
- debounceTimer = setTimeout(() => {
196
- // Rebuild index so overview stays fresh
197
- try {
198
- rebuildSummaryIndex(projectRoot);
199
- }
200
- catch { /* best-effort */ }
201
- const event = JSON.stringify({
202
- type: 'run_updated',
203
- file: filename,
204
- time: new Date().toISOString(),
205
- });
206
- for (const client of sseClients) {
207
- try {
208
- client.write(`data: ${event}\n\n`);
209
- }
210
- catch {
211
- sseClients.delete(client);
212
- }
213
- }
214
- }, 300);
215
- });
216
- }
217
- return new Promise((resolvePromise, reject) => {
218
- server.on('error', (err) => {
219
- if (err.code === 'EADDRINUSE') {
220
- console.error(`\n Port ${port} is already in use. Use --port to specify another port.\n`);
221
- process.exit(1);
222
- }
223
- reject(err);
224
- });
225
- server.listen(port, () => resolvePromise());
226
- });
227
- }
228
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}