@oalacea/daemon 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +147 -141
  3. package/bin/Dockerfile +75 -74
  4. package/dist/cli/cli.d.ts +42 -0
  5. package/dist/cli/cli.d.ts.map +1 -0
  6. package/dist/cli/cli.js +89 -0
  7. package/dist/cli/cli.js.map +1 -0
  8. package/dist/cli/commands/detect.command.d.ts +39 -0
  9. package/dist/cli/commands/detect.command.d.ts.map +1 -0
  10. package/dist/cli/commands/detect.command.js +111 -0
  11. package/dist/cli/commands/detect.command.js.map +1 -0
  12. package/dist/cli/commands/index.d.ts +14 -0
  13. package/dist/cli/commands/index.d.ts.map +1 -0
  14. package/dist/cli/commands/index.js +11 -0
  15. package/dist/cli/commands/index.js.map +1 -0
  16. package/dist/cli/commands/init.command.d.ts +41 -0
  17. package/dist/cli/commands/init.command.d.ts.map +1 -0
  18. package/dist/cli/commands/init.command.js +111 -0
  19. package/dist/cli/commands/init.command.js.map +1 -0
  20. package/dist/cli/commands/test.command.d.ts +58 -0
  21. package/dist/cli/commands/test.command.d.ts.map +1 -0
  22. package/dist/cli/commands/test.command.js +180 -0
  23. package/dist/cli/commands/test.command.js.map +1 -0
  24. package/dist/cli/index.d.ts +8 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +10 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/core/config/daemon.config.d.ts +32 -0
  29. package/dist/core/config/daemon.config.d.ts.map +1 -0
  30. package/dist/core/config/daemon.config.js +83 -0
  31. package/dist/core/config/daemon.config.js.map +1 -0
  32. package/dist/core/config/index.d.ts +5 -0
  33. package/dist/core/config/index.d.ts.map +1 -0
  34. package/dist/core/config/index.js +5 -0
  35. package/dist/core/config/index.js.map +1 -0
  36. package/dist/core/constants.d.ts +36 -0
  37. package/dist/core/constants.d.ts.map +1 -0
  38. package/dist/core/constants.js +56 -0
  39. package/dist/core/constants.js.map +1 -0
  40. package/dist/core/types/common.types.d.ts +250 -0
  41. package/dist/core/types/common.types.d.ts.map +1 -0
  42. package/dist/core/types/common.types.js +7 -0
  43. package/dist/core/types/common.types.js.map +1 -0
  44. package/dist/core/types/detection.types.d.ts +232 -0
  45. package/dist/core/types/detection.types.d.ts.map +1 -0
  46. package/dist/core/types/detection.types.js +22 -0
  47. package/dist/core/types/detection.types.js.map +1 -0
  48. package/dist/core/types/docker.types.d.ts +322 -0
  49. package/dist/core/types/docker.types.d.ts.map +1 -0
  50. package/dist/core/types/docker.types.js +7 -0
  51. package/dist/core/types/docker.types.js.map +1 -0
  52. package/dist/core/types/index.d.ts +11 -0
  53. package/dist/core/types/index.d.ts.map +1 -0
  54. package/dist/core/types/index.js +7 -0
  55. package/dist/core/types/index.js.map +1 -0
  56. package/dist/core/types/project.types.d.ts +74 -0
  57. package/dist/core/types/project.types.d.ts.map +1 -0
  58. package/dist/core/types/project.types.js +7 -0
  59. package/dist/core/types/project.types.js.map +1 -0
  60. package/dist/core/types/shared.types.d.ts +118 -0
  61. package/dist/core/types/shared.types.d.ts.map +1 -0
  62. package/dist/core/types/shared.types.js +7 -0
  63. package/dist/core/types/shared.types.js.map +1 -0
  64. package/dist/core/types/test.types.d.ts +230 -0
  65. package/dist/core/types/test.types.d.ts.map +1 -0
  66. package/dist/core/types/test.types.js +7 -0
  67. package/dist/core/types/test.types.js.map +1 -0
  68. package/dist/services/detection/__tests__/framework-detector.test.d.ts +5 -0
  69. package/dist/services/detection/__tests__/framework-detector.test.d.ts.map +1 -0
  70. package/dist/services/detection/__tests__/framework-detector.test.js +52 -0
  71. package/dist/services/detection/__tests__/framework-detector.test.js.map +1 -0
  72. package/dist/services/detection/framework-detector.d.ts +179 -0
  73. package/dist/services/detection/framework-detector.d.ts.map +1 -0
  74. package/dist/services/detection/framework-detector.js +636 -0
  75. package/dist/services/detection/framework-detector.js.map +1 -0
  76. package/dist/services/detection/index.d.ts +10 -0
  77. package/dist/services/detection/index.d.ts.map +1 -0
  78. package/dist/services/detection/index.js +7 -0
  79. package/dist/services/detection/index.js.map +1 -0
  80. package/dist/services/docker/__tests__/docker-manager.test.d.ts +5 -0
  81. package/dist/services/docker/__tests__/docker-manager.test.d.ts.map +1 -0
  82. package/dist/services/docker/__tests__/docker-manager.test.js +67 -0
  83. package/dist/services/docker/__tests__/docker-manager.test.js.map +1 -0
  84. package/dist/services/docker/docker-manager.d.ts +157 -0
  85. package/dist/services/docker/docker-manager.d.ts.map +1 -0
  86. package/dist/services/docker/docker-manager.js +516 -0
  87. package/dist/services/docker/docker-manager.js.map +1 -0
  88. package/dist/services/docker/index.d.ts +9 -0
  89. package/dist/services/docker/index.d.ts.map +1 -0
  90. package/dist/services/docker/index.js +9 -0
  91. package/dist/services/docker/index.js.map +1 -0
  92. package/dist/services/index.d.ts +10 -0
  93. package/dist/services/index.d.ts.map +1 -0
  94. package/dist/services/index.js +8 -0
  95. package/dist/services/index.js.map +1 -0
  96. package/dist/shared/errors/__tests__/base.error.test.d.ts +5 -0
  97. package/dist/shared/errors/__tests__/base.error.test.d.ts.map +1 -0
  98. package/dist/shared/errors/__tests__/base.error.test.js +61 -0
  99. package/dist/shared/errors/__tests__/base.error.test.js.map +1 -0
  100. package/dist/shared/errors/__tests__/command.error.test.d.ts +5 -0
  101. package/dist/shared/errors/__tests__/command.error.test.d.ts.map +1 -0
  102. package/dist/shared/errors/__tests__/command.error.test.js +62 -0
  103. package/dist/shared/errors/__tests__/command.error.test.js.map +1 -0
  104. package/dist/shared/errors/__tests__/file.error.test.d.ts +5 -0
  105. package/dist/shared/errors/__tests__/file.error.test.d.ts.map +1 -0
  106. package/dist/shared/errors/__tests__/file.error.test.js +75 -0
  107. package/dist/shared/errors/__tests__/file.error.test.js.map +1 -0
  108. package/dist/shared/errors/__tests__/index.test.d.ts +5 -0
  109. package/dist/shared/errors/__tests__/index.test.d.ts.map +1 -0
  110. package/dist/shared/errors/__tests__/index.test.js +62 -0
  111. package/dist/shared/errors/__tests__/index.test.js.map +1 -0
  112. package/dist/shared/errors/__tests__/validation.error.test.d.ts +5 -0
  113. package/dist/shared/errors/__tests__/validation.error.test.d.ts.map +1 -0
  114. package/dist/shared/errors/__tests__/validation.error.test.js +79 -0
  115. package/dist/shared/errors/__tests__/validation.error.test.js.map +1 -0
  116. package/dist/shared/errors/base.error.d.ts +54 -0
  117. package/dist/shared/errors/base.error.d.ts.map +1 -0
  118. package/dist/shared/errors/base.error.js +85 -0
  119. package/dist/shared/errors/base.error.js.map +1 -0
  120. package/dist/shared/errors/command.error.d.ts +58 -0
  121. package/dist/shared/errors/command.error.d.ts.map +1 -0
  122. package/dist/shared/errors/command.error.js +102 -0
  123. package/dist/shared/errors/command.error.js.map +1 -0
  124. package/dist/shared/errors/detection.error.d.ts +42 -0
  125. package/dist/shared/errors/detection.error.d.ts.map +1 -0
  126. package/dist/shared/errors/detection.error.js +82 -0
  127. package/dist/shared/errors/detection.error.js.map +1 -0
  128. package/dist/shared/errors/docker.error.d.ts +142 -0
  129. package/dist/shared/errors/docker.error.d.ts.map +1 -0
  130. package/dist/shared/errors/docker.error.js +172 -0
  131. package/dist/shared/errors/docker.error.js.map +1 -0
  132. package/dist/shared/errors/file.error.d.ts +66 -0
  133. package/dist/shared/errors/file.error.d.ts.map +1 -0
  134. package/dist/shared/errors/file.error.js +93 -0
  135. package/dist/shared/errors/file.error.js.map +1 -0
  136. package/dist/shared/errors/index.d.ts +56 -0
  137. package/dist/shared/errors/index.d.ts.map +1 -0
  138. package/dist/shared/errors/index.js +86 -0
  139. package/dist/shared/errors/index.js.map +1 -0
  140. package/dist/shared/errors/validation.error.d.ts +67 -0
  141. package/dist/shared/errors/validation.error.d.ts.map +1 -0
  142. package/dist/shared/errors/validation.error.js +97 -0
  143. package/dist/shared/errors/validation.error.js.map +1 -0
  144. package/dist/shared/templates/index.d.ts +2 -0
  145. package/dist/shared/templates/index.d.ts.map +1 -0
  146. package/dist/shared/templates/index.js +2 -0
  147. package/dist/shared/templates/index.js.map +1 -0
  148. package/dist/shared/templates/prompt-builder.d.ts +2 -0
  149. package/dist/shared/templates/prompt-builder.d.ts.map +1 -0
  150. package/dist/shared/templates/prompt-builder.js +2 -0
  151. package/dist/shared/templates/prompt-builder.js.map +1 -0
  152. package/dist/shared/templates/template-engine.d.ts +2 -0
  153. package/dist/shared/templates/template-engine.d.ts.map +1 -0
  154. package/dist/shared/templates/template-engine.js +2 -0
  155. package/dist/shared/templates/template-engine.js.map +1 -0
  156. package/dist/shared/utils/__tests__/command-executor.test.d.ts +5 -0
  157. package/dist/shared/utils/__tests__/command-executor.test.d.ts.map +1 -0
  158. package/dist/shared/utils/__tests__/command-executor.test.js +45 -0
  159. package/dist/shared/utils/__tests__/command-executor.test.js.map +1 -0
  160. package/dist/shared/utils/__tests__/file-helper.test.d.ts +5 -0
  161. package/dist/shared/utils/__tests__/file-helper.test.d.ts.map +1 -0
  162. package/dist/shared/utils/__tests__/file-helper.test.js +71 -0
  163. package/dist/shared/utils/__tests__/file-helper.test.js.map +1 -0
  164. package/dist/shared/utils/__tests__/logger.test.d.ts +5 -0
  165. package/dist/shared/utils/__tests__/logger.test.d.ts.map +1 -0
  166. package/dist/shared/utils/__tests__/logger.test.js +83 -0
  167. package/dist/shared/utils/__tests__/logger.test.js.map +1 -0
  168. package/dist/shared/utils/command-executer.d.ts +2 -0
  169. package/dist/shared/utils/command-executer.d.ts.map +1 -0
  170. package/dist/shared/utils/command-executer.js +2 -0
  171. package/dist/shared/utils/command-executer.js.map +1 -0
  172. package/dist/shared/utils/command-executor.d.ts +255 -0
  173. package/dist/shared/utils/command-executor.d.ts.map +1 -0
  174. package/dist/shared/utils/command-executor.js +287 -0
  175. package/dist/shared/utils/command-executor.js.map +1 -0
  176. package/dist/shared/utils/file-helper.d.ts +86 -0
  177. package/dist/shared/utils/file-helper.d.ts.map +1 -0
  178. package/dist/shared/utils/file-helper.js +323 -0
  179. package/dist/shared/utils/file-helper.js.map +1 -0
  180. package/dist/shared/utils/index.d.ts +9 -0
  181. package/dist/shared/utils/index.d.ts.map +1 -0
  182. package/dist/shared/utils/index.js +9 -0
  183. package/dist/shared/utils/index.js.map +1 -0
  184. package/dist/shared/utils/logger.d.ts +163 -0
  185. package/dist/shared/utils/logger.d.ts.map +1 -0
  186. package/dist/shared/utils/logger.js +389 -0
  187. package/dist/shared/utils/logger.js.map +1 -0
  188. package/package.json +53 -34
  189. package/prompts/DEPS_EFFICIENCY.md +558 -558
  190. package/prompts/E2E.md +491 -491
  191. package/prompts/EXECUTE.md +1060 -1060
  192. package/prompts/INTEGRATION_API.md +484 -484
  193. package/prompts/INTEGRATION_DB.md +425 -425
  194. package/prompts/PERF_API.md +433 -433
  195. package/prompts/PERF_DB.md +430 -430
  196. package/prompts/PERF_FRONT.md +357 -357
  197. package/prompts/REMEDIATION.md +482 -482
  198. package/prompts/UNIT.md +260 -260
  199. package/templates/README.md +38 -38
  200. package/templates/k6/load-test.js +54 -54
  201. package/templates/playwright/e2e.spec.ts +61 -61
  202. package/templates/vitest/angular-component.test.ts +38 -38
  203. package/templates/vitest/api.test.ts +51 -51
  204. package/templates/vitest/component.test.ts +27 -27
  205. package/templates/vitest/hook.test.ts +36 -36
  206. package/templates/vitest/solid-component.test.ts +34 -34
  207. package/templates/vitest/svelte-component.test.ts +33 -33
  208. package/templates/vitest/vue-component.test.ts +39 -39
  209. package/CHANGELOG.md +0 -38
  210. package/agents/deps-analyzer.js +0 -366
  211. package/agents/detector.js +0 -570
  212. package/agents/fix-engine.js +0 -305
  213. package/agents/lighthouse-scanner.js +0 -405
  214. package/agents/perf-analyzer.js +0 -294
  215. package/agents/perf-front-analyzer.js +0 -229
  216. package/agents/test-generator.js +0 -387
  217. package/agents/test-runner.js +0 -318
  218. package/bin/cli.js +0 -449
  219. package/lib/config.js +0 -250
  220. package/lib/docker.js +0 -207
  221. package/lib/reporter.js +0 -297
  222. package/scripts/dev.js +0 -106
@@ -0,0 +1,636 @@
1
+ /**
2
+ * Framework Detector Service
3
+ *
4
+ * Detects the web framework used in a project based on:
5
+ * - package.json dependencies
6
+ * - Configuration files
7
+ * - Project structure
8
+ *
9
+ * Ported from agents/detector.js FRAMEWORK_PATTERNS
10
+ */
11
+ import { readFile, access, constants } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ /**
14
+ * Framework detection patterns
15
+ *
16
+ * Derived from agents/detector.js FRAMEWORK_PATTERNS
17
+ */
18
+ const FRAMEWORK_PATTERNS = [
19
+ {
20
+ name: 'Next.js',
21
+ patterns: [
22
+ { type: 'package-json', file: 'package.json', pattern: /"next"\s*:/, scope: 'both', priority: 10 },
23
+ { type: 'file-exists', file: 'next.config.js', shouldExist: true, priority: 8 },
24
+ { type: 'file-exists', file: 'next.config.mjs', shouldExist: true, priority: 8 },
25
+ { type: 'file-exists', file: 'next.config.ts', shouldExist: true, priority: 8 },
26
+ ],
27
+ confidenceThreshold: 0.5,
28
+ },
29
+ {
30
+ name: 'Remix',
31
+ patterns: [
32
+ { type: 'package-json', file: 'package.json', pattern: /"@remix-run\/node"\s*:/, scope: 'both', priority: 10 },
33
+ { type: 'file-exists', file: 'remix.config.js', shouldExist: true, priority: 8 },
34
+ { type: 'file-exists', file: 'remix.config.ts', shouldExist: true, priority: 8 },
35
+ ],
36
+ confidenceThreshold: 0.5,
37
+ },
38
+ {
39
+ name: 'SvelteKit',
40
+ patterns: [
41
+ { type: 'package-json', file: 'package.json', pattern: /"@sveltejs\/kit"\s*:/, scope: 'both', priority: 10 },
42
+ { type: 'file-exists', file: 'svelte.config.js', shouldExist: true, priority: 8 },
43
+ ],
44
+ confidenceThreshold: 0.5,
45
+ },
46
+ {
47
+ name: 'Nuxt',
48
+ patterns: [
49
+ { type: 'package-json', file: 'package.json', pattern: /"nuxt"\s*:/, scope: 'both', priority: 10 },
50
+ { type: 'file-exists', file: 'nuxt.config.ts', shouldExist: true, priority: 8 },
51
+ { type: 'file-exists', file: 'nuxt.config.js', shouldExist: true, priority: 8 },
52
+ ],
53
+ confidenceThreshold: 0.5,
54
+ },
55
+ {
56
+ name: 'Vite + React',
57
+ patterns: [
58
+ { type: 'package-json', file: 'package.json', pattern: /"vite"\s*:/, scope: 'both', priority: 5 },
59
+ { type: 'package-json', file: 'package.json', pattern: /"react"\s*:/, scope: 'both', priority: 5 },
60
+ ],
61
+ excludes: ['Next.js', 'Remix', 'SvelteKit', 'Nuxt'],
62
+ confidenceThreshold: 0.6,
63
+ },
64
+ {
65
+ name: 'Vite + Vue',
66
+ patterns: [
67
+ { type: 'package-json', file: 'package.json', pattern: /"vite"\s*:/, scope: 'both', priority: 5 },
68
+ { type: 'package-json', file: 'package.json', pattern: /"vue"\s*:/, scope: 'both', priority: 5 },
69
+ ],
70
+ confidenceThreshold: 0.6,
71
+ },
72
+ {
73
+ name: 'Vite + Svelte',
74
+ patterns: [
75
+ { type: 'package-json', file: 'package.json', pattern: /"vite"\s*:/, scope: 'both', priority: 5 },
76
+ { type: 'package-json', file: 'package.json', pattern: /"svelte"\s*:/, scope: 'both', priority: 5 },
77
+ ],
78
+ confidenceThreshold: 0.6,
79
+ },
80
+ {
81
+ name: 'Astro',
82
+ patterns: [
83
+ { type: 'package-json', file: 'package.json', pattern: /"astro"\s*:/, scope: 'both', priority: 10 },
84
+ ],
85
+ confidenceThreshold: 0.5,
86
+ },
87
+ {
88
+ name: 'Gatsby',
89
+ patterns: [
90
+ { type: 'package-json', file: 'package.json', pattern: /"gatsby"\s*:/, scope: 'both', priority: 10 },
91
+ ],
92
+ confidenceThreshold: 0.5,
93
+ },
94
+ {
95
+ name: 'Angular',
96
+ patterns: [
97
+ { type: 'file-exists', file: 'angular.json', shouldExist: true, priority: 10 },
98
+ ],
99
+ confidenceThreshold: 0.5,
100
+ },
101
+ ];
102
+ /**
103
+ * Backend framework patterns for fallback detection
104
+ */
105
+ const BACKEND_FRAMEWORKS = [
106
+ {
107
+ name: 'Express',
108
+ patterns: [
109
+ { type: 'package-json', file: 'package.json', pattern: /"express"\s*:/, scope: 'dependencies', priority: 10 },
110
+ ],
111
+ confidenceThreshold: 0.5,
112
+ },
113
+ {
114
+ name: 'Fastify',
115
+ patterns: [
116
+ { type: 'package-json', file: 'package.json', pattern: /"fastify"\s*:/, scope: 'dependencies', priority: 10 },
117
+ ],
118
+ confidenceThreshold: 0.5,
119
+ },
120
+ {
121
+ name: 'Hono',
122
+ patterns: [
123
+ { type: 'package-json', file: 'package.json', pattern: /"hono"\s*:/, scope: 'dependencies', priority: 10 },
124
+ ],
125
+ confidenceThreshold: 0.5,
126
+ },
127
+ {
128
+ name: 'Koa',
129
+ patterns: [
130
+ { type: 'package-json', file: 'package.json', pattern: /"koa"\s*:/, scope: 'dependencies', priority: 10 },
131
+ ],
132
+ confidenceThreshold: 0.5,
133
+ },
134
+ {
135
+ name: 'NestJS',
136
+ patterns: [
137
+ { type: 'package-json', file: 'package.json', pattern: /"@nestjs\/core"\s*:/, scope: 'dependencies', priority: 10 },
138
+ ],
139
+ confidenceThreshold: 0.5,
140
+ },
141
+ ];
142
+ /**
143
+ * Framework Detector Service
144
+ *
145
+ * Detects web frameworks from project structure and dependencies
146
+ */
147
+ export class FrameworkDetector {
148
+ cache = new Map();
149
+ cacheTtl;
150
+ patterns;
151
+ includeBackend;
152
+ /**
153
+ * Create a new FrameworkDetector
154
+ */
155
+ constructor(options = {}) {
156
+ this.cacheTtl = options.cacheTtl ?? 300_000; // 5 minutes
157
+ this.includeBackend = options.includeBackend ?? true;
158
+ this.patterns = this.buildPatternList(options.customPatterns);
159
+ }
160
+ /**
161
+ * Build combined pattern list
162
+ */
163
+ buildPatternList(customPatterns) {
164
+ const basePatterns = [...FRAMEWORK_PATTERNS];
165
+ if (this.includeBackend) {
166
+ basePatterns.push(...BACKEND_FRAMEWORKS);
167
+ }
168
+ if (customPatterns) {
169
+ basePatterns.push(...customPatterns);
170
+ }
171
+ return basePatterns;
172
+ }
173
+ /**
174
+ * Detect framework for a project directory
175
+ *
176
+ * @param projectPath - Path to project root
177
+ * @returns Detection result with framework and confidence
178
+ */
179
+ async detect(projectPath) {
180
+ const scores = await this.detectWithScore(projectPath);
181
+ if (scores.length === 0) {
182
+ return {
183
+ value: 'Unknown',
184
+ confidence: 0,
185
+ evidence: ['No framework patterns matched'],
186
+ };
187
+ }
188
+ const top = scores[0];
189
+ if (!top) {
190
+ return {
191
+ value: 'Unknown',
192
+ confidence: 0,
193
+ evidence: ['No framework patterns matched'],
194
+ };
195
+ }
196
+ const alternatives = scores.slice(1).map((s) => ({
197
+ value: s.framework,
198
+ confidence: s.score,
199
+ }));
200
+ return {
201
+ value: top.framework,
202
+ confidence: top.score,
203
+ evidence: top.evidence,
204
+ alternatives,
205
+ };
206
+ }
207
+ /**
208
+ * Detect all matching frameworks with scores
209
+ *
210
+ * @param projectPath - Path to project root
211
+ * @returns Array of frameworks sorted by confidence score
212
+ */
213
+ async detectWithScore(projectPath) {
214
+ const cacheKey = this.getCacheKey(projectPath);
215
+ const cached = this.getFromCache(cacheKey);
216
+ if (cached && cached.value !== null) {
217
+ return [
218
+ {
219
+ framework: cached.value,
220
+ score: cached.confidence,
221
+ evidence: cached.evidence,
222
+ },
223
+ ];
224
+ }
225
+ const pkg = await this.readPackageJson(projectPath);
226
+ const results = [];
227
+ for (const frameworkPattern of this.patterns) {
228
+ const score = await this.scoreFramework(projectPath, frameworkPattern, pkg);
229
+ if (score.score >= frameworkPattern.confidenceThreshold) {
230
+ results.push(score);
231
+ }
232
+ }
233
+ // Sort by score descending
234
+ results.sort((a, b) => b.score - a.score);
235
+ // Cache the best result
236
+ if (results.length > 0) {
237
+ this.setToCache(cacheKey, {
238
+ value: results[0].framework,
239
+ confidence: results[0].score,
240
+ evidence: results[0].evidence,
241
+ });
242
+ }
243
+ return results;
244
+ }
245
+ /**
246
+ * Score a single framework pattern
247
+ */
248
+ async scoreFramework(projectPath, frameworkPattern, pkg) {
249
+ let totalScore = 0;
250
+ let maxScore = 0;
251
+ const evidence = [];
252
+ for (const pattern of frameworkPattern.patterns) {
253
+ maxScore += pattern.priority;
254
+ switch (pattern.type) {
255
+ case 'file-exists': {
256
+ const exists = await this.fileExists(join(projectPath, pattern.file));
257
+ if (exists === pattern.shouldExist) {
258
+ totalScore += pattern.priority;
259
+ evidence.push(pattern.shouldExist
260
+ ? `Found ${pattern.file}`
261
+ : `Confirmed ${pattern.file} does not exist`);
262
+ }
263
+ break;
264
+ }
265
+ case 'package-json': {
266
+ if (pkg) {
267
+ const deps = this.getDeps(pkg, pattern.scope);
268
+ const content = JSON.stringify(deps);
269
+ if (pattern.pattern.test(content)) {
270
+ totalScore += pattern.priority;
271
+ evidence.push(`Pattern matched in ${pattern.scope}`);
272
+ }
273
+ }
274
+ break;
275
+ }
276
+ case 'content-match': {
277
+ const filePath = join(projectPath, pattern.file);
278
+ try {
279
+ const content = await readFile(filePath, 'utf-8');
280
+ if (pattern.pattern.test(content)) {
281
+ totalScore += pattern.priority;
282
+ evidence.push(`Pattern matched in ${pattern.file}`);
283
+ }
284
+ }
285
+ catch {
286
+ // File not readable
287
+ }
288
+ break;
289
+ }
290
+ }
291
+ }
292
+ // Normalize score to 0-1
293
+ const normalizedScore = maxScore > 0 ? totalScore / maxScore : 0;
294
+ return {
295
+ framework: frameworkPattern.name,
296
+ score: normalizedScore,
297
+ evidence,
298
+ };
299
+ }
300
+ /**
301
+ * Get all supported framework names
302
+ *
303
+ * @returns Array of framework names
304
+ */
305
+ getSupportedFrameworks() {
306
+ return this.patterns.map((p) => p.name);
307
+ }
308
+ /**
309
+ * Get patterns for a specific framework
310
+ *
311
+ * @param framework - Framework name
312
+ * @returns Framework pattern or undefined
313
+ */
314
+ getFrameworkPattern(framework) {
315
+ return this.patterns.find((p) => p.name === framework);
316
+ }
317
+ /**
318
+ * Check if a framework is detected with high confidence
319
+ *
320
+ * @param projectPath - Path to project root
321
+ * @param framework - Framework to check
322
+ * @param threshold - Minimum confidence threshold (default: 0.7)
323
+ * @returns True if framework is detected with confidence >= threshold
324
+ */
325
+ async isFramework(projectPath, framework, threshold = 0.7) {
326
+ const result = await this.detect(projectPath);
327
+ return result.value === framework && result.confidence >= threshold;
328
+ }
329
+ /**
330
+ * Get all detected frameworks as a ranked list
331
+ *
332
+ * @param projectPath - Path to project root
333
+ * @returns Array of framework names ranked by confidence
334
+ */
335
+ async getRankedList(projectPath) {
336
+ const scores = await this.detectWithScore(projectPath);
337
+ return scores.map((s) => s.framework);
338
+ }
339
+ /**
340
+ * Clear the detection cache
341
+ */
342
+ clearCache() {
343
+ this.cache.clear();
344
+ }
345
+ /**
346
+ * Get cache statistics
347
+ */
348
+ getCacheStats() {
349
+ return {
350
+ size: this.cache.size,
351
+ keys: Array.from(this.cache.keys()),
352
+ };
353
+ }
354
+ /**
355
+ * Read and parse package.json
356
+ */
357
+ async readPackageJson(projectPath) {
358
+ try {
359
+ const pkgPath = join(projectPath, 'package.json');
360
+ const content = await readFile(pkgPath, 'utf-8');
361
+ return JSON.parse(content);
362
+ }
363
+ catch {
364
+ return null;
365
+ }
366
+ }
367
+ /**
368
+ * Get dependencies based on scope
369
+ */
370
+ getDeps(pkg, scope) {
371
+ if (scope === 'both') {
372
+ return { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
373
+ }
374
+ return pkg[scope] ?? {};
375
+ }
376
+ /**
377
+ * Check if file exists
378
+ */
379
+ async fileExists(filePath) {
380
+ try {
381
+ await access(filePath, constants.F_OK);
382
+ return true;
383
+ }
384
+ catch {
385
+ return false;
386
+ }
387
+ }
388
+ /**
389
+ * Get cache key for project path
390
+ */
391
+ getCacheKey(projectPath) {
392
+ return projectPath;
393
+ }
394
+ /**
395
+ * Get cached result if available and not expired
396
+ */
397
+ getFromCache(key) {
398
+ const entry = this.cache.get(key);
399
+ if (!entry)
400
+ return null;
401
+ const now = Date.now();
402
+ if (now - entry.timestamp > this.cacheTtl) {
403
+ this.cache.delete(key);
404
+ return null;
405
+ }
406
+ return entry.result;
407
+ }
408
+ /**
409
+ * Store result in cache
410
+ */
411
+ setToCache(key, result) {
412
+ this.cache.set(key, {
413
+ result: { ...result },
414
+ timestamp: Date.now(),
415
+ });
416
+ }
417
+ /**
418
+ * Detect all project information (framework, language, test runner, database)
419
+ *
420
+ * @param projectPath - Path to project root
421
+ * @param options - Detection options
422
+ * @returns Complete detection results
423
+ */
424
+ async detectAll(projectPath, options) {
425
+ const startTime = Date.now();
426
+ // Detect framework
427
+ const frameworkResult = await this.detect(projectPath);
428
+ // Detect language (from framework + package.json)
429
+ const languageResult = await this.detectLanguage(projectPath);
430
+ // Detect test runner
431
+ const testRunnerResult = await this.detectTestRunner(projectPath);
432
+ // Detect database
433
+ const databaseResult = await this.detectDatabase(projectPath);
434
+ // Count test files
435
+ const testCounts = await this.countTestFiles(projectPath);
436
+ // Get coverage (placeholder for now)
437
+ const coverage = null;
438
+ // Detect dependencies (basic implementation)
439
+ const dependencies = [];
440
+ const pkg = await this.readPackageJson(projectPath);
441
+ if (pkg) {
442
+ const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
443
+ for (const [name, version] of Object.entries(allDeps)) {
444
+ dependencies.push({
445
+ category: 'Framework',
446
+ packageName: name,
447
+ version,
448
+ });
449
+ }
450
+ }
451
+ return {
452
+ framework: frameworkResult,
453
+ language: languageResult,
454
+ testRunner: testRunnerResult,
455
+ database: databaseResult,
456
+ testCounts,
457
+ coverage,
458
+ duration: Date.now() - startTime,
459
+ dependencies,
460
+ timestamp: new Date(),
461
+ };
462
+ }
463
+ /**
464
+ * Detect project language
465
+ */
466
+ async detectLanguage(projectPath) {
467
+ const pkg = await this.readPackageJson(projectPath);
468
+ // Check for TypeScript
469
+ const hasTs = pkg?.devDependencies?.typescript || pkg?.dependencies?.typescript;
470
+ const hasTsConfig = await this.fileExists(join(projectPath, 'tsconfig.json'));
471
+ if (hasTs || hasTsConfig) {
472
+ return {
473
+ value: 'TypeScript',
474
+ confidence: hasTsConfig ? 0.9 : 0.7,
475
+ evidence: hasTsConfig ? ['Found tsconfig.json'] : ['Found typescript in dependencies'],
476
+ };
477
+ }
478
+ return {
479
+ value: 'JavaScript',
480
+ confidence: 0.5,
481
+ evidence: ['Default language assumption'],
482
+ };
483
+ }
484
+ /**
485
+ * Detect test runner
486
+ */
487
+ async detectTestRunner(projectPath) {
488
+ const pkg = await this.readPackageJson(projectPath);
489
+ const deps = { ...(pkg?.dependencies ?? {}), ...(pkg?.devDependencies ?? {}) };
490
+ if ('vitest' in deps) {
491
+ return {
492
+ value: 'Vitest',
493
+ confidence: 0.9,
494
+ evidence: ['Found vitest in dependencies'],
495
+ };
496
+ }
497
+ if ('jest' in deps) {
498
+ return {
499
+ value: 'Jest',
500
+ confidence: 0.9,
501
+ evidence: ['Found jest in dependencies'],
502
+ };
503
+ }
504
+ if ('mocha' in deps) {
505
+ return {
506
+ value: 'Mocha',
507
+ confidence: 0.8,
508
+ evidence: ['Found mocha in dependencies'],
509
+ };
510
+ }
511
+ // Default to vitest
512
+ return {
513
+ value: 'Vitest',
514
+ confidence: 0.3,
515
+ evidence: ['Default test runner'],
516
+ };
517
+ }
518
+ /**
519
+ * Detect database
520
+ */
521
+ async detectDatabase(projectPath) {
522
+ const pkg = await this.readPackageJson(projectPath);
523
+ const deps = { ...(pkg?.dependencies ?? {}), ...(pkg?.devDependencies ?? {}) };
524
+ if ('@prisma/client' in deps || 'prisma' in deps) {
525
+ return {
526
+ value: 'Prisma',
527
+ confidence: 0.9,
528
+ evidence: ['Found Prisma in dependencies'],
529
+ };
530
+ }
531
+ if ('@tanstack/react-query' in deps) {
532
+ return {
533
+ value: 'None',
534
+ confidence: 0.6,
535
+ evidence: ['Found TanStack Query (likely API client)'],
536
+ };
537
+ }
538
+ return {
539
+ value: 'None',
540
+ confidence: 1,
541
+ evidence: ['No database detected'],
542
+ };
543
+ }
544
+ /**
545
+ * Count test files in project
546
+ */
547
+ async countTestFiles(projectPath) {
548
+ const { readdir } = await import('node:fs/promises');
549
+ const { join } = await import('node:path');
550
+ let total = 0;
551
+ let inSrc = 0;
552
+ let outsideSrc = 0;
553
+ const testExtensions = ['.test.ts', '.test.tsx', '.test.js', '.test.jsx', '.spec.ts', '.spec.tsx', '.spec.js', '.spec.jsx'];
554
+ try {
555
+ const entries = await readdir(projectPath, { withFileTypes: true });
556
+ for (const entry of entries) {
557
+ if (entry.isDirectory() && entry.name === 'src') {
558
+ const srcTests = await this.countTestsInDir(join(projectPath, 'src'), testExtensions);
559
+ inSrc = srcTests;
560
+ total += srcTests;
561
+ }
562
+ else if (entry.isDirectory() && (entry.name === 'tests' || entry.name === 'test')) {
563
+ const testFiles = await this.countTestsInDir(join(projectPath, entry.name), testExtensions);
564
+ outsideSrc += testFiles;
565
+ total += testFiles;
566
+ }
567
+ else if (entry.isFile() && testExtensions.some((ext) => entry.name.endsWith(ext))) {
568
+ outsideSrc++;
569
+ total++;
570
+ }
571
+ }
572
+ }
573
+ catch {
574
+ // Ignore errors
575
+ }
576
+ return {
577
+ total,
578
+ inSrc,
579
+ outsideSrc,
580
+ byExtension: {},
581
+ };
582
+ }
583
+ /**
584
+ * Recursively count test files in directory
585
+ */
586
+ async countTestsInDir(dirPath, testExtensions) {
587
+ const { readdir } = await import('node:fs/promises');
588
+ const { join } = await import('node:path');
589
+ let count = 0;
590
+ try {
591
+ const entries = await readdir(dirPath, { withFileTypes: true });
592
+ for (const entry of entries) {
593
+ const fullPath = join(dirPath, entry.name);
594
+ if (entry.isDirectory()) {
595
+ // Skip node_modules and other common directories
596
+ if (['node_modules', '.git', 'dist', 'build'].includes(entry.name)) {
597
+ continue;
598
+ }
599
+ count += await this.countTestsInDir(fullPath, testExtensions);
600
+ }
601
+ else if (testExtensions.some((ext) => entry.name.endsWith(ext))) {
602
+ count++;
603
+ }
604
+ }
605
+ }
606
+ catch {
607
+ // Ignore errors
608
+ }
609
+ return count;
610
+ }
611
+ }
612
+ /**
613
+ * Default framework detector instance
614
+ */
615
+ let defaultDetector = null;
616
+ /**
617
+ * Get or create default framework detector
618
+ */
619
+ export function getFrameworkDetector(options) {
620
+ if (!defaultDetector) {
621
+ defaultDetector = new FrameworkDetector(options);
622
+ }
623
+ return defaultDetector;
624
+ }
625
+ /**
626
+ * Quick detection function using default detector
627
+ *
628
+ * @param projectPath - Path to project root
629
+ * @returns Detected framework or null
630
+ */
631
+ export async function detectFramework(projectPath) {
632
+ const detector = getFrameworkDetector();
633
+ const result = await detector.detect(projectPath);
634
+ return result.value ?? 'Unknown';
635
+ }
636
+ //# sourceMappingURL=framework-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-detector.js","sourceRoot":"","sources":["../../../src/services/detection/framework-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Detection Services Barrel Export
3
+ *
4
+ * Central export point for all detection-related services
5
+ */
6
+ export { FrameworkDetector, getFrameworkDetector, detectFramework } from './framework-detector.js';
7
+ export type { FrameworkDetectorOptions, FrameworkScore, } from './framework-detector.js';
8
+ export type { Framework, Language, TestRunner, DatabaseInfo, PackageJson, } from '../../core/types/project.types.js';
9
+ export type { PatternType, BasePattern, FileExistsPattern, PackageJsonPattern, ContentMatchPattern, DetectionPattern, FrameworkPattern, DatabasePattern, TestRunnerPattern, DetectionResult, DetectionError, DetectionOptions, TestStrategy, } from '../../core/types/detection.types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/detection/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnG,YAAY,EACV,wBAAwB,EACxB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,mCAAmC,CAAC;AAE3C,YAAY,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,qCAAqC,CAAC"}