@girardelli/architect-agents 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/dist/src/core/agent-generator/context-enricher.d.ts +17 -0
  2. package/dist/src/core/agent-generator/context-enricher.js +51 -0
  3. package/dist/src/core/agent-generator/context-enricher.js.map +1 -0
  4. package/dist/src/core/agent-generator/detectors/base-detector.d.ts +8 -0
  5. package/dist/src/core/agent-generator/detectors/base-detector.js +12 -0
  6. package/dist/src/core/agent-generator/detectors/base-detector.js.map +1 -0
  7. package/dist/src/core/agent-generator/detectors/dart-detector.d.ts +5 -0
  8. package/dist/src/core/agent-generator/detectors/dart-detector.js +16 -0
  9. package/dist/src/core/agent-generator/detectors/dart-detector.js.map +1 -0
  10. package/dist/src/core/agent-generator/detectors/framework-registry.d.ts +5 -0
  11. package/dist/src/core/agent-generator/detectors/framework-registry.js +81 -0
  12. package/dist/src/core/agent-generator/detectors/framework-registry.js.map +1 -0
  13. package/dist/src/core/agent-generator/detectors/go-detector.d.ts +5 -0
  14. package/dist/src/core/agent-generator/detectors/go-detector.js +25 -0
  15. package/dist/src/core/agent-generator/detectors/go-detector.js.map +1 -0
  16. package/dist/src/core/agent-generator/detectors/java-detector.d.ts +5 -0
  17. package/dist/src/core/agent-generator/detectors/java-detector.js +44 -0
  18. package/dist/src/core/agent-generator/detectors/java-detector.js.map +1 -0
  19. package/dist/src/core/agent-generator/detectors/node-detector.d.ts +5 -0
  20. package/dist/src/core/agent-generator/detectors/node-detector.js +28 -0
  21. package/dist/src/core/agent-generator/detectors/node-detector.js.map +1 -0
  22. package/dist/src/core/agent-generator/detectors/php-detector.d.ts +5 -0
  23. package/dist/src/core/agent-generator/detectors/php-detector.js +28 -0
  24. package/dist/src/core/agent-generator/detectors/php-detector.js.map +1 -0
  25. package/dist/src/core/agent-generator/detectors/python-detector.d.ts +7 -0
  26. package/dist/src/core/agent-generator/detectors/python-detector.js +116 -0
  27. package/dist/src/core/agent-generator/detectors/python-detector.js.map +1 -0
  28. package/dist/src/core/agent-generator/detectors/ruby-detector.d.ts +5 -0
  29. package/dist/src/core/agent-generator/detectors/ruby-detector.js +23 -0
  30. package/dist/src/core/agent-generator/detectors/ruby-detector.js.map +1 -0
  31. package/dist/src/core/agent-generator/detectors/rust-detector.d.ts +5 -0
  32. package/dist/src/core/agent-generator/detectors/rust-detector.js +18 -0
  33. package/dist/src/core/agent-generator/detectors/rust-detector.js.map +1 -0
  34. package/dist/src/core/agent-generator/detectors/structure-detector.d.ts +4 -0
  35. package/dist/src/core/agent-generator/detectors/structure-detector.js +35 -0
  36. package/dist/src/core/agent-generator/detectors/structure-detector.js.map +1 -0
  37. package/dist/src/core/agent-generator/detectors/toolchain-detector.d.ts +5 -0
  38. package/dist/src/core/agent-generator/detectors/toolchain-detector.js +164 -0
  39. package/dist/src/core/agent-generator/detectors/toolchain-detector.js.map +1 -0
  40. package/dist/src/core/agent-generator/domain-inferrer.d.ts +51 -0
  41. package/dist/src/core/agent-generator/domain-inferrer.js +585 -0
  42. package/dist/src/core/agent-generator/domain-inferrer.js.map +1 -0
  43. package/dist/src/core/agent-generator/engines/audit-engine.d.ts +8 -0
  44. package/dist/src/core/agent-generator/engines/audit-engine.js +84 -0
  45. package/dist/src/core/agent-generator/engines/audit-engine.js.map +1 -0
  46. package/dist/src/core/agent-generator/engines/context-builder.d.ts +12 -0
  47. package/dist/src/core/agent-generator/engines/context-builder.js +84 -0
  48. package/dist/src/core/agent-generator/engines/context-builder.js.map +1 -0
  49. package/dist/src/core/agent-generator/engines/generation-engine.d.ts +7 -0
  50. package/dist/src/core/agent-generator/engines/generation-engine.js +160 -0
  51. package/dist/src/core/agent-generator/engines/generation-engine.js.map +1 -0
  52. package/dist/src/core/agent-generator/engines/generation-engine_deps.d.ts +21 -0
  53. package/dist/src/core/agent-generator/engines/generation-engine_deps.js +17 -0
  54. package/dist/src/core/agent-generator/engines/generation-engine_deps.js.map +1 -0
  55. package/dist/src/core/agent-generator/engines/suggestion-engine.d.ts +13 -0
  56. package/dist/src/core/agent-generator/engines/suggestion-engine.js +171 -0
  57. package/dist/src/core/agent-generator/engines/suggestion-engine.js.map +1 -0
  58. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.d.ts +8 -0
  59. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.js +5 -0
  60. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.js.map +1 -0
  61. package/dist/src/core/agent-generator/enrichers/analysis-helpers.d.ts +9 -0
  62. package/dist/src/core/agent-generator/enrichers/analysis-helpers.js +51 -0
  63. package/dist/src/core/agent-generator/enrichers/analysis-helpers.js.map +1 -0
  64. package/dist/src/core/agent-generator/enrichers/description-generator.d.ts +4 -0
  65. package/dist/src/core/agent-generator/enrichers/description-generator.js +82 -0
  66. package/dist/src/core/agent-generator/enrichers/description-generator.js.map +1 -0
  67. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.d.ts +7 -0
  68. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.js +90 -0
  69. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.js.map +1 -0
  70. package/dist/src/core/agent-generator/enrichers/layer-classifier.d.ts +12 -0
  71. package/dist/src/core/agent-generator/enrichers/layer-classifier.js +152 -0
  72. package/dist/src/core/agent-generator/enrichers/layer-classifier.js.map +1 -0
  73. package/dist/src/core/agent-generator/enrichers/module-extractor.d.ts +10 -0
  74. package/dist/src/core/agent-generator/enrichers/module-extractor.js +173 -0
  75. package/dist/src/core/agent-generator/enrichers/module-extractor.js.map +1 -0
  76. package/dist/src/core/agent-generator/framework-detector.d.ts +17 -0
  77. package/dist/src/core/agent-generator/framework-detector.js +56 -0
  78. package/dist/src/core/agent-generator/framework-detector.js.map +1 -0
  79. package/dist/src/core/agent-generator/index.d.ts +25 -0
  80. package/dist/src/core/agent-generator/index.js +37 -0
  81. package/dist/src/core/agent-generator/index.js.map +1 -0
  82. package/dist/src/core/agent-generator/stack-detector.d.ts +13 -0
  83. package/dist/src/core/agent-generator/stack-detector.js +124 -0
  84. package/dist/src/core/agent-generator/stack-detector.js.map +1 -0
  85. package/dist/src/core/agent-generator/templates/core/agents.d.ts +9 -0
  86. package/dist/src/core/agent-generator/templates/core/agents.js +1127 -0
  87. package/dist/src/core/agent-generator/templates/core/agents.js.map +1 -0
  88. package/dist/src/core/agent-generator/templates/core/architecture-rules.d.ts +6 -0
  89. package/dist/src/core/agent-generator/templates/core/architecture-rules.js +275 -0
  90. package/dist/src/core/agent-generator/templates/core/architecture-rules.js.map +1 -0
  91. package/dist/src/core/agent-generator/templates/core/general-rules.d.ts +7 -0
  92. package/dist/src/core/agent-generator/templates/core/general-rules.js +301 -0
  93. package/dist/src/core/agent-generator/templates/core/general-rules.js.map +1 -0
  94. package/dist/src/core/agent-generator/templates/core/hooks-generator.d.ts +20 -0
  95. package/dist/src/core/agent-generator/templates/core/hooks-generator.js +235 -0
  96. package/dist/src/core/agent-generator/templates/core/hooks-generator.js.map +1 -0
  97. package/dist/src/core/agent-generator/templates/core/index-md.d.ts +6 -0
  98. package/dist/src/core/agent-generator/templates/core/index-md.js +247 -0
  99. package/dist/src/core/agent-generator/templates/core/index-md.js.map +1 -0
  100. package/dist/src/core/agent-generator/templates/core/orchestrator.d.ts +7 -0
  101. package/dist/src/core/agent-generator/templates/core/orchestrator.js +423 -0
  102. package/dist/src/core/agent-generator/templates/core/orchestrator.js.map +1 -0
  103. package/dist/src/core/agent-generator/templates/core/preflight.d.ts +7 -0
  104. package/dist/src/core/agent-generator/templates/core/preflight.js +213 -0
  105. package/dist/src/core/agent-generator/templates/core/preflight.js.map +1 -0
  106. package/dist/src/core/agent-generator/templates/core/quality-gates.d.ts +10 -0
  107. package/dist/src/core/agent-generator/templates/core/quality-gates.js +255 -0
  108. package/dist/src/core/agent-generator/templates/core/quality-gates.js.map +1 -0
  109. package/dist/src/core/agent-generator/templates/core/security-rules.d.ts +6 -0
  110. package/dist/src/core/agent-generator/templates/core/security-rules.js +529 -0
  111. package/dist/src/core/agent-generator/templates/core/security-rules.js.map +1 -0
  112. package/dist/src/core/agent-generator/templates/core/skills-generator.d.ts +18 -0
  113. package/dist/src/core/agent-generator/templates/core/skills-generator.js +547 -0
  114. package/dist/src/core/agent-generator/templates/core/skills-generator.js.map +1 -0
  115. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.d.ts +6 -0
  116. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.js +238 -0
  117. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.js.map +1 -0
  118. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.d.ts +7 -0
  119. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.js +321 -0
  120. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.js.map +1 -0
  121. package/dist/src/core/agent-generator/templates/core/workflow-review.d.ts +6 -0
  122. package/dist/src/core/agent-generator/templates/core/workflow-review.js +105 -0
  123. package/dist/src/core/agent-generator/templates/core/workflow-review.js.map +1 -0
  124. package/dist/src/core/agent-generator/templates/domain/index.d.ts +21 -0
  125. package/dist/src/core/agent-generator/templates/domain/index.js +1179 -0
  126. package/dist/src/core/agent-generator/templates/domain/index.js.map +1 -0
  127. package/dist/src/core/agent-generator/templates/helpers/base-helpers.d.ts +10 -0
  128. package/dist/src/core/agent-generator/templates/helpers/base-helpers.js +20 -0
  129. package/dist/src/core/agent-generator/templates/helpers/base-helpers.js.map +1 -0
  130. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.d.ts +2 -0
  131. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.js +77 -0
  132. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.js.map +1 -0
  133. package/dist/src/core/agent-generator/templates/helpers/security-helpers.d.ts +2 -0
  134. package/dist/src/core/agent-generator/templates/helpers/security-helpers.js +182 -0
  135. package/dist/src/core/agent-generator/templates/helpers/security-helpers.js.map +1 -0
  136. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.d.ts +4 -0
  137. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.js +69 -0
  138. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.js.map +1 -0
  139. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.d.ts +2 -0
  140. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.js +275 -0
  141. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.js.map +1 -0
  142. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.d.ts +6 -0
  143. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.js +56 -0
  144. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.js.map +1 -0
  145. package/dist/src/core/agent-generator/templates/stack/index.d.ts +7 -0
  146. package/dist/src/core/agent-generator/templates/stack/index.js +695 -0
  147. package/dist/src/core/agent-generator/templates/stack/index.js.map +1 -0
  148. package/dist/src/core/agent-generator/templates/template-helpers.d.ts +11 -0
  149. package/dist/src/core/agent-generator/templates/template-helpers.js +12 -0
  150. package/dist/src/core/agent-generator/templates/template-helpers.js.map +1 -0
  151. package/dist/src/core/agent-generator/types/agent.d.ts +39 -0
  152. package/dist/src/core/agent-generator/types/agent.js +27 -0
  153. package/dist/src/core/agent-generator/types/agent.js.map +1 -0
  154. package/dist/src/core/agent-generator/types/domain.d.ts +58 -0
  155. package/dist/src/core/agent-generator/types/domain.js +2 -0
  156. package/dist/src/core/agent-generator/types/domain.js.map +1 -0
  157. package/dist/src/core/agent-generator/types/stack.d.ts +36 -0
  158. package/dist/src/core/agent-generator/types/stack.js +2 -0
  159. package/dist/src/core/agent-generator/types/stack.js.map +1 -0
  160. package/dist/src/core/agent-generator/types/template.d.ts +29 -0
  161. package/dist/src/core/agent-generator/types/template.js +2 -0
  162. package/dist/src/core/agent-generator/types/template.js.map +1 -0
  163. package/dist/src/core/agent-runtime/ai-provider.d.ts +33 -0
  164. package/dist/src/core/agent-runtime/ai-provider.js +146 -0
  165. package/dist/src/core/agent-runtime/ai-provider.js.map +1 -0
  166. package/dist/src/core/agent-runtime/executor.d.ts +13 -0
  167. package/dist/src/core/agent-runtime/executor.js +138 -0
  168. package/dist/src/core/agent-runtime/executor.js.map +1 -0
  169. package/dist/src/core/agent-runtime/human-gate.d.ts +16 -0
  170. package/dist/src/core/agent-runtime/human-gate.js +70 -0
  171. package/dist/src/core/agent-runtime/human-gate.js.map +1 -0
  172. package/dist/tests/agent-generator.test.d.ts +1 -0
  173. package/dist/tests/agent-generator.test.js +349 -0
  174. package/dist/tests/agent-generator.test.js.map +1 -0
  175. package/dist/tests/agent-runtime.test.d.ts +1 -0
  176. package/dist/tests/agent-runtime.test.js +107 -0
  177. package/dist/tests/agent-runtime.test.js.map +1 -0
  178. package/dist/tests/context-enricher.test.d.ts +1 -0
  179. package/dist/tests/context-enricher.test.js +875 -0
  180. package/dist/tests/context-enricher.test.js.map +1 -0
  181. package/dist/tests/framework-detector.test.d.ts +1 -0
  182. package/dist/tests/framework-detector.test.js +882 -0
  183. package/dist/tests/framework-detector.test.js.map +1 -0
  184. package/dist/tests/stack-detector.test.d.ts +1 -0
  185. package/dist/tests/stack-detector.test.js +183 -0
  186. package/dist/tests/stack-detector.test.js.map +1 -0
  187. package/dist/tests/template-generation.test.d.ts +1 -0
  188. package/dist/tests/template-generation.test.js +571 -0
  189. package/dist/tests/template-generation.test.js.map +1 -0
  190. package/dist/tests/template-helpers.test.d.ts +1 -0
  191. package/dist/tests/template-helpers.test.js +967 -0
  192. package/dist/tests/template-helpers.test.js.map +1 -0
  193. package/package.json +24 -0
  194. package/src/core/agent-generator/context-enricher.ts +67 -0
  195. package/src/core/agent-generator/detectors/base-detector.ts +18 -0
  196. package/src/core/agent-generator/detectors/dart-detector.ts +17 -0
  197. package/src/core/agent-generator/detectors/framework-registry.ts +82 -0
  198. package/src/core/agent-generator/detectors/go-detector.ts +26 -0
  199. package/src/core/agent-generator/detectors/java-detector.ts +46 -0
  200. package/src/core/agent-generator/detectors/node-detector.ts +28 -0
  201. package/src/core/agent-generator/detectors/php-detector.ts +28 -0
  202. package/src/core/agent-generator/detectors/python-detector.ts +125 -0
  203. package/src/core/agent-generator/detectors/ruby-detector.ts +24 -0
  204. package/src/core/agent-generator/detectors/rust-detector.ts +19 -0
  205. package/src/core/agent-generator/detectors/structure-detector.ts +38 -0
  206. package/src/core/agent-generator/detectors/toolchain-detector.ts +181 -0
  207. package/src/core/agent-generator/domain-inferrer.ts +630 -0
  208. package/src/core/agent-generator/engines/audit-engine.ts +98 -0
  209. package/src/core/agent-generator/engines/context-builder.ts +96 -0
  210. package/src/core/agent-generator/engines/generation-engine.ts +184 -0
  211. package/src/core/agent-generator/engines/generation-engine_deps.ts +21 -0
  212. package/src/core/agent-generator/engines/suggestion-engine.ts +202 -0
  213. package/src/core/agent-generator/engines/suggestion-engine_deps.ts +8 -0
  214. package/src/core/agent-generator/enrichers/analysis-helpers.ts +58 -0
  215. package/src/core/agent-generator/enrichers/description-generator.ts +91 -0
  216. package/src/core/agent-generator/enrichers/endpoint-extractor.ts +114 -0
  217. package/src/core/agent-generator/enrichers/layer-classifier.ts +156 -0
  218. package/src/core/agent-generator/enrichers/module-extractor.ts +203 -0
  219. package/src/core/agent-generator/framework-detector.ts +66 -0
  220. package/src/core/agent-generator/index.ts +55 -0
  221. package/src/core/agent-generator/stack-detector.ts +115 -0
  222. package/src/core/agent-generator/templates/core/agents.ts +1168 -0
  223. package/src/core/agent-generator/templates/core/architecture-rules.ts +288 -0
  224. package/src/core/agent-generator/templates/core/general-rules.ts +306 -0
  225. package/src/core/agent-generator/templates/core/hooks-generator.ts +244 -0
  226. package/src/core/agent-generator/templates/core/index-md.ts +261 -0
  227. package/src/core/agent-generator/templates/core/orchestrator.ts +462 -0
  228. package/src/core/agent-generator/templates/core/preflight.ts +216 -0
  229. package/src/core/agent-generator/templates/core/quality-gates.ts +257 -0
  230. package/src/core/agent-generator/templates/core/security-rules.ts +544 -0
  231. package/src/core/agent-generator/templates/core/skills-generator.ts +586 -0
  232. package/src/core/agent-generator/templates/core/workflow-fix-bug.ts +240 -0
  233. package/src/core/agent-generator/templates/core/workflow-new-feature.ts +323 -0
  234. package/src/core/agent-generator/templates/core/workflow-review.ts +107 -0
  235. package/src/core/agent-generator/templates/domain/index.ts +1204 -0
  236. package/src/core/agent-generator/templates/helpers/base-helpers.ts +33 -0
  237. package/src/core/agent-generator/templates/helpers/cross-ref-helpers.ts +79 -0
  238. package/src/core/agent-generator/templates/helpers/security-helpers.ts +198 -0
  239. package/src/core/agent-generator/templates/helpers/stack-helpers.ts +80 -0
  240. package/src/core/agent-generator/templates/helpers/structure-helpers.ts +293 -0
  241. package/src/core/agent-generator/templates/helpers/summary-helpers.ts +67 -0
  242. package/src/core/agent-generator/templates/stack/index.ts +705 -0
  243. package/src/core/agent-generator/templates/template-helpers.ts +12 -0
  244. package/src/core/agent-generator/types/agent.ts +65 -0
  245. package/src/core/agent-generator/types/domain.ts +63 -0
  246. package/src/core/agent-generator/types/stack.ts +38 -0
  247. package/src/core/agent-generator/types/template.ts +31 -0
  248. package/src/core/agent-runtime/ai-provider.ts +178 -0
  249. package/src/core/agent-runtime/executor.ts +148 -0
  250. package/src/core/agent-runtime/human-gate.ts +69 -0
  251. package/tests/agent-generator.test.ts +428 -0
  252. package/tests/agent-runtime.test.ts +125 -0
  253. package/tests/context-enricher.test.ts +972 -0
  254. package/tests/framework-detector.test.ts +1172 -0
  255. package/tests/stack-detector.test.ts +241 -0
  256. package/tests/template-generation.test.ts +709 -0
  257. package/tests/template-helpers.test.ts +1130 -0
  258. package/tsconfig.json +14 -0
@@ -0,0 +1,66 @@
1
+ import { AnalysisReport } from '@girardelli/architect-core/src/core/types/core.js';
2
+ import { FrameworkInfo, DetectedToolchain } from './types/stack.js';
3
+ import { PythonDetector } from './detectors/python-detector.js';
4
+ import { NodeDetector } from './detectors/node-detector.js';
5
+ import { JavaDetector } from './detectors/java-detector.js';
6
+ import { PhpDetector } from './detectors/php-detector.js';
7
+ import { GoDetector } from './detectors/go-detector.js';
8
+ import { RubyDetector } from './detectors/ruby-detector.js';
9
+ import { DartDetector } from './detectors/dart-detector.js';
10
+ import { RustDetector } from './detectors/rust-detector.js';
11
+ import { ToolchainDetector } from './detectors/toolchain-detector.js';
12
+ import { StructureDetector } from './detectors/structure-detector.js';
13
+
14
+ /**
15
+ * FrameworkDetector — Detects actual frameworks and toolchain from dependency files.
16
+ * Re-architected as a Strategy/Registry Facade.
17
+ */
18
+ export class FrameworkDetector {
19
+ private detectors = [
20
+ new PythonDetector(),
21
+ new NodeDetector(),
22
+ new JavaDetector(),
23
+ new PhpDetector(),
24
+ new GoDetector(),
25
+ new RubyDetector(),
26
+ new DartDetector(),
27
+ new RustDetector()
28
+ ];
29
+ private toolchainDetector = new ToolchainDetector();
30
+ private structureDetector = new StructureDetector();
31
+
32
+ detect(projectPath: string, report: AnalysisReport): {
33
+ frameworks: FrameworkInfo[];
34
+ primaryFramework: FrameworkInfo | null;
35
+ toolchain: DetectedToolchain;
36
+ projectStructure: 'clean-architecture' | 'mvc' | 'modular' | 'flat' | 'monorepo' | 'unknown';
37
+ } {
38
+ const frameworks: FrameworkInfo[] = [];
39
+
40
+ // Run all detectors
41
+ for (const detector of this.detectors) {
42
+ detector.detect(projectPath, frameworks);
43
+ }
44
+
45
+ // Deduplicate by name
46
+ const seen = new Set<string>();
47
+ const unique = frameworks.filter(f => {
48
+ if (seen.has(f.name)) return false;
49
+ seen.add(f.name);
50
+ return true;
51
+ });
52
+
53
+ // Sort: web frameworks first, then by confidence
54
+ unique.sort((a, b) => {
55
+ if (a.category === 'web' && b.category !== 'web') return -1;
56
+ if (a.category !== 'web' && b.category === 'web') return 1;
57
+ return b.confidence - a.confidence;
58
+ });
59
+
60
+ const primaryFramework = unique.find(f => f.category === 'web') || null;
61
+ const toolchain = this.toolchainDetector.detectToolchain(projectPath, report, primaryFramework, unique);
62
+ const projectStructure = this.structureDetector.detectProjectStructure(report);
63
+
64
+ return { frameworks: unique, primaryFramework, toolchain, projectStructure };
65
+ }
66
+ }
@@ -0,0 +1,55 @@
1
+ import { join } from "path";
2
+ import { existsSync } from "fs";
3
+ import { AnalysisReport } from '@girardelli/architect-core/src/core/types/core.js';
4
+ import { RefactoringPlan } from '@girardelli/architect-core/src/core/types/rules.js';
5
+ import { StackInfo, FrameworkInfo, DetectedToolchain } from './types/stack.js';
6
+ import { AgentAuditFinding, AgentItem, AgentItemStatus, AgentSuggestion} from './types/agent.js';
7
+ import { EnrichedTemplateContext } from './types/template.js';
8
+ import { DomainInsights, ModuleDetail, DetectedEndpoint } from './types/domain.js';
9
+
10
+ import { ContextBuilder } from "./engines/context-builder.js";
11
+ import { AuditEngine } from "./engines/audit-engine.js";
12
+ import { SuggestionEngine } from "./engines/suggestion-engine.js";
13
+ import { GenerationEngine } from "./engines/generation-engine.js";
14
+ import { StackDetector } from "./stack-detector.js";
15
+
16
+ export type { StackInfo, AgentAuditFinding, AgentItem, AgentItemStatus, AgentSuggestion, EnrichedTemplateContext, DomainInsights, ModuleDetail, DetectedEndpoint, FrameworkInfo, DetectedToolchain };
17
+
18
+ /**
19
+ * Agent Generator v3.2 — Enterprise-Grade
20
+ *
21
+ * Generates or audits .agent/ directories with enterprise-grade
22
+ * agent frameworks. Delegated to specialized engines.
23
+ */
24
+ export class AgentGenerator {
25
+ private stackDetector = new StackDetector();
26
+ private contextBuilder = new ContextBuilder();
27
+ private auditEngine = new AuditEngine();
28
+ private suggestionEngine = new SuggestionEngine();
29
+ private generationEngine = new GenerationEngine();
30
+
31
+ suggest(report: AnalysisReport, plan: RefactoringPlan, projectPath: string): AgentSuggestion {
32
+ return this.suggestionEngine.suggest(report, plan, projectPath);
33
+ }
34
+
35
+ generate(
36
+ report: AnalysisReport,
37
+ plan: RefactoringPlan,
38
+ projectPath: string,
39
+ outputDir?: string
40
+ ): { generated: string[]; audit: AgentAuditFinding[] } {
41
+ const cleanReport = this.contextBuilder.sanitizeReport(report);
42
+ const stack = this.stackDetector.detect(cleanReport);
43
+ const agentDir = outputDir || join(projectPath, '.agent');
44
+ const isExisting = existsSync(agentDir);
45
+
46
+ if (isExisting) {
47
+ const audit = this.auditEngine.auditExisting(agentDir, stack, cleanReport, plan);
48
+ const generated = this.generationEngine.generateMissing(agentDir, audit, cleanReport, plan, stack, projectPath);
49
+ return { generated, audit };
50
+ }
51
+
52
+ const generated = this.generationEngine.generateFull(agentDir, cleanReport, plan, stack, projectPath);
53
+ return { generated, audit: [] };
54
+ }
55
+ }
@@ -0,0 +1,115 @@
1
+ import { AnalysisReport } from '@girardelli/architect-core/src/core/types/core.js';
2
+ import { StackInfo } from './types/stack.js';
3
+
4
+ /**
5
+ * Detects the technology stack from an AnalysisReport.
6
+ *
7
+ * v5.1: Uses report.projectInfo.frameworks (precise, from scanner v5.0)
8
+ * instead of naive string-matching on file paths.
9
+ */
10
+ export class StackDetector {
11
+ detect(report: AnalysisReport): StackInfo {
12
+ const files = report.dependencyGraph.nodes;
13
+ const extensions = new Set<string>();
14
+ const languages = new Set<string>();
15
+ const frameworks = new Set<string>();
16
+
17
+ for (const file of files) {
18
+ const ext = file.split('.').pop()?.toLowerCase() || '';
19
+ extensions.add(ext);
20
+ }
21
+
22
+ // ── Language Detection ──
23
+ if (extensions.has('py')) languages.add('Python');
24
+ if (extensions.has('ts') || extensions.has('tsx')) languages.add('TypeScript');
25
+ if (extensions.has('js') || extensions.has('jsx')) languages.add('JavaScript');
26
+ if (extensions.has('dart')) languages.add('Dart');
27
+ if (extensions.has('go')) languages.add('Go');
28
+ if (extensions.has('rs')) languages.add('Rust');
29
+ if (extensions.has('java') || extensions.has('kt')) languages.add('Java/Kotlin');
30
+ if (extensions.has('rb')) languages.add('Ruby');
31
+ if (extensions.has('php')) languages.add('PHP');
32
+ if (extensions.has('cs')) languages.add('C#');
33
+
34
+ // ── Framework Detection: Trust report.projectInfo.frameworks ──
35
+ // These come from scanner v5.0 which reads actual package.json dependencies
36
+ const reportFrameworks = report.projectInfo?.frameworks || [];
37
+ for (const fw of reportFrameworks) {
38
+ frameworks.add(fw);
39
+ }
40
+
41
+ // ── Derived Properties ──
42
+ const primary = languages.size > 0 ? [...languages][0] : 'Unknown';
43
+
44
+ // Frontend frameworks that indicate hasFrontend
45
+ const FRONTEND_FRAMEWORKS = new Set([
46
+ 'Angular', 'Vue', 'Vue.js', 'Next.js', 'React', 'Nuxt', 'Nuxt.js',
47
+ 'Svelte', 'SvelteKit', 'Remix', 'Gatsby', 'Vite',
48
+ ]);
49
+
50
+ // Backend frameworks that indicate hasBackend (language-based is fallback)
51
+ const BACKEND_FRAMEWORKS = new Set([
52
+ 'Express', 'Express.js', 'NestJS', 'Fastify', 'Koa', 'Hapi',
53
+ 'Django', 'Flask', 'FastAPI', 'Spring Boot', 'Laravel', 'Rails',
54
+ 'Ruby on Rails', 'Gin', 'Echo', 'Fiber', 'Actix Web', 'Rocket',
55
+ 'Probot', 'MCP SDK',
56
+ ]);
57
+
58
+ const MOBILE_FRAMEWORKS = new Set(['Flutter', 'React Native', 'Expo']);
59
+
60
+ const hasBackend = [...frameworks].some(f => BACKEND_FRAMEWORKS.has(f)) ||
61
+ languages.has('Python') || languages.has('TypeScript') ||
62
+ languages.has('Go') || languages.has('Java/Kotlin') || languages.has('Ruby') ||
63
+ languages.has('PHP') || languages.has('C#') || languages.has('Rust');
64
+
65
+ const hasFrontend = [...frameworks].some(f => FRONTEND_FRAMEWORKS.has(f)) ||
66
+ extensions.has('tsx') || extensions.has('jsx');
67
+
68
+ const hasMobile = [...frameworks].some(f => MOBILE_FRAMEWORKS.has(f)) ||
69
+ languages.has('Dart');
70
+
71
+ const allFiles = files.join(' ').toLowerCase();
72
+ const hasDatabase = allFiles.includes('migration') || allFiles.includes('entity') ||
73
+ allFiles.includes('model') || allFiles.includes('schema') ||
74
+ allFiles.includes('prisma') || allFiles.includes('typeorm');
75
+
76
+ const testFramework = this.detectTestFramework(languages, frameworks);
77
+ const packageManager = this.detectPackageManager(languages);
78
+
79
+ return {
80
+ primary,
81
+ languages: [...languages],
82
+ frameworks: [...frameworks],
83
+ hasBackend,
84
+ hasFrontend,
85
+ hasMobile,
86
+ hasDatabase,
87
+ testFramework,
88
+ packageManager,
89
+ };
90
+ }
91
+
92
+ private detectTestFramework(languages: Set<string>, frameworks: Set<string>): string {
93
+ if (languages.has('Dart')) return 'flutter_test';
94
+ if (languages.has('Python')) return 'pytest';
95
+ if (languages.has('Go')) return 'go test';
96
+ if (languages.has('Java/Kotlin')) return 'JUnit';
97
+ if (languages.has('Ruby')) return 'RSpec';
98
+ if (languages.has('C#')) return 'xUnit';
99
+ if (languages.has('Rust')) return 'cargo test';
100
+ if (frameworks.has('Angular')) return 'Jest + Jasmine';
101
+ return 'Jest';
102
+ }
103
+
104
+ private detectPackageManager(languages: Set<string>): string {
105
+ if (languages.has('Python')) return 'pip';
106
+ if (languages.has('Go')) return 'go mod';
107
+ if (languages.has('Dart')) return 'pub';
108
+ if (languages.has('Ruby')) return 'bundler';
109
+ if (languages.has('Java/Kotlin')) return 'gradle/maven';
110
+ if (languages.has('Rust')) return 'cargo';
111
+ if (languages.has('PHP')) return 'composer';
112
+ if (languages.has('C#')) return 'nuget';
113
+ return 'npm';
114
+ }
115
+ }