aios-core 2.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 (607) hide show
  1. package/.aios-core/.session/current-session.json +14 -0
  2. package/.aios-core/cli/commands/generate/index.js +222 -0
  3. package/.aios-core/cli/commands/manifest/index.js +46 -0
  4. package/.aios-core/cli/commands/manifest/regenerate.js +96 -0
  5. package/.aios-core/cli/commands/manifest/validate.js +66 -0
  6. package/.aios-core/cli/commands/mcp/add.js +234 -0
  7. package/.aios-core/cli/commands/mcp/index.js +76 -0
  8. package/.aios-core/cli/commands/mcp/link.js +217 -0
  9. package/.aios-core/cli/commands/mcp/setup.js +164 -0
  10. package/.aios-core/cli/commands/mcp/status.js +183 -0
  11. package/.aios-core/cli/commands/metrics/cleanup.js +91 -0
  12. package/.aios-core/cli/commands/metrics/index.js +65 -0
  13. package/.aios-core/cli/commands/metrics/record.js +154 -0
  14. package/.aios-core/cli/commands/metrics/seed.js +126 -0
  15. package/.aios-core/cli/commands/metrics/show.js +209 -0
  16. package/.aios-core/cli/commands/migrate/analyze.js +353 -0
  17. package/.aios-core/cli/commands/migrate/backup.js +352 -0
  18. package/.aios-core/cli/commands/migrate/execute.js +292 -0
  19. package/.aios-core/cli/commands/migrate/index.js +441 -0
  20. package/.aios-core/cli/commands/migrate/rollback.js +323 -0
  21. package/.aios-core/cli/commands/migrate/update-imports.js +396 -0
  22. package/.aios-core/cli/commands/migrate/validate.js +452 -0
  23. package/.aios-core/cli/commands/qa/index.js +56 -0
  24. package/.aios-core/cli/commands/qa/run.js +163 -0
  25. package/.aios-core/cli/commands/qa/status.js +195 -0
  26. package/.aios-core/cli/commands/workers/formatters/info-formatter.js +274 -0
  27. package/.aios-core/cli/commands/workers/formatters/list-table.js +265 -0
  28. package/.aios-core/cli/commands/workers/formatters/list-tree.js +159 -0
  29. package/.aios-core/cli/commands/workers/index.js +56 -0
  30. package/.aios-core/cli/commands/workers/info.js +194 -0
  31. package/.aios-core/cli/commands/workers/list.js +214 -0
  32. package/.aios-core/cli/commands/workers/search-filters.js +185 -0
  33. package/.aios-core/cli/commands/workers/search-keyword.js +310 -0
  34. package/.aios-core/cli/commands/workers/search-semantic.js +293 -0
  35. package/.aios-core/cli/commands/workers/search.js +154 -0
  36. package/.aios-core/cli/commands/workers/utils/pagination.js +102 -0
  37. package/.aios-core/cli/index.js +128 -0
  38. package/.aios-core/cli/utils/output-formatter-cli.js +232 -0
  39. package/.aios-core/cli/utils/score-calculator.js +221 -0
  40. package/.aios-core/core/README.md +229 -0
  41. package/.aios-core/core/config/config-cache.js +233 -0
  42. package/.aios-core/core/config/config-loader.js +277 -0
  43. package/.aios-core/core/data/agent-config-requirements.yaml +368 -0
  44. package/.aios-core/core/data/aios-kb.md +924 -0
  45. package/.aios-core/core/data/workflow-patterns.yaml +267 -0
  46. package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
  47. package/.aios-core/core/docs/component-creation-guide.md +458 -0
  48. package/.aios-core/core/docs/session-update-pattern.md +307 -0
  49. package/.aios-core/core/docs/template-syntax.md +267 -0
  50. package/.aios-core/core/docs/troubleshooting-guide.md +625 -0
  51. package/.aios-core/core/elicitation/agent-elicitation.js +272 -0
  52. package/.aios-core/core/elicitation/elicitation-engine.js +479 -0
  53. package/.aios-core/core/elicitation/session-manager.js +320 -0
  54. package/.aios-core/core/elicitation/task-elicitation.js +281 -0
  55. package/.aios-core/core/elicitation/workflow-elicitation.js +315 -0
  56. package/.aios-core/core/index.esm.js +42 -0
  57. package/.aios-core/core/index.js +76 -0
  58. package/.aios-core/core/manifest/manifest-generator.js +386 -0
  59. package/.aios-core/core/manifest/manifest-validator.js +429 -0
  60. package/.aios-core/core/mcp/config-migrator.js +340 -0
  61. package/.aios-core/core/mcp/global-config-manager.js +369 -0
  62. package/.aios-core/core/mcp/index.js +34 -0
  63. package/.aios-core/core/mcp/os-detector.js +188 -0
  64. package/.aios-core/core/mcp/symlink-manager.js +413 -0
  65. package/.aios-core/core/migration/migration-config.yaml +83 -0
  66. package/.aios-core/core/migration/module-mapping.yaml +89 -0
  67. package/.aios-core/core/quality-gates/base-layer.js +134 -0
  68. package/.aios-core/core/quality-gates/checklist-generator.js +329 -0
  69. package/.aios-core/core/quality-gates/focus-area-recommender.js +359 -0
  70. package/.aios-core/core/quality-gates/human-review-orchestrator.js +529 -0
  71. package/.aios-core/core/quality-gates/layer1-precommit.js +336 -0
  72. package/.aios-core/core/quality-gates/layer2-pr-automation.js +324 -0
  73. package/.aios-core/core/quality-gates/layer3-human-review.js +348 -0
  74. package/.aios-core/core/quality-gates/notification-manager.js +550 -0
  75. package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -0
  76. package/.aios-core/core/quality-gates/quality-gate-manager.js +601 -0
  77. package/.aios-core/core/registry/README.md +179 -0
  78. package/.aios-core/core/registry/build-registry.js +452 -0
  79. package/.aios-core/core/registry/registry-loader.js +330 -0
  80. package/.aios-core/core/registry/registry-schema.json +166 -0
  81. package/.aios-core/core/registry/service-registry.json +6586 -0
  82. package/.aios-core/core/registry/validate-registry.js +340 -0
  83. package/.aios-core/core/session/context-detector.js +229 -0
  84. package/.aios-core/core/session/context-loader.js +288 -0
  85. package/.aios-core/core/utils/output-formatter.js +298 -0
  86. package/.aios-core/core/utils/security-utils.js +333 -0
  87. package/.aios-core/core/utils/yaml-validator.js +419 -0
  88. package/.aios-core/core-config.yaml +382 -0
  89. package/.aios-core/data/agent-config-requirements.yaml +368 -0
  90. package/.aios-core/data/aios-kb.md +924 -0
  91. package/.aios-core/data/technical-preferences.md +4 -0
  92. package/.aios-core/data/workflow-patterns.yaml +267 -0
  93. package/.aios-core/development/README.md +142 -0
  94. package/.aios-core/development/agent-teams/team-all.yaml +15 -0
  95. package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -0
  96. package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -0
  97. package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -0
  98. package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -0
  99. package/.aios-core/development/agents/aios-master.md +339 -0
  100. package/.aios-core/development/agents/analyst.md +195 -0
  101. package/.aios-core/development/agents/architect.md +359 -0
  102. package/.aios-core/development/agents/data-engineer.md +468 -0
  103. package/.aios-core/development/agents/dev.md +390 -0
  104. package/.aios-core/development/agents/devops.md +398 -0
  105. package/.aios-core/development/agents/pm.md +198 -0
  106. package/.aios-core/development/agents/po.md +256 -0
  107. package/.aios-core/development/agents/qa.md +312 -0
  108. package/.aios-core/development/agents/sm.md +220 -0
  109. package/.aios-core/development/agents/ux-design-expert.md +451 -0
  110. package/.aios-core/development/scripts/agent-assignment-resolver.js +231 -0
  111. package/.aios-core/development/scripts/agent-config-loader.js +624 -0
  112. package/.aios-core/development/scripts/agent-exit-hooks.js +96 -0
  113. package/.aios-core/development/scripts/apply-inline-greeting-all-agents.js +146 -0
  114. package/.aios-core/development/scripts/audit-agent-config.js +380 -0
  115. package/.aios-core/development/scripts/backlog-manager.js +404 -0
  116. package/.aios-core/development/scripts/batch-update-agents-session-context.js +95 -0
  117. package/.aios-core/development/scripts/decision-context.js +228 -0
  118. package/.aios-core/development/scripts/decision-log-generator.js +293 -0
  119. package/.aios-core/development/scripts/decision-log-indexer.js +284 -0
  120. package/.aios-core/development/scripts/decision-recorder.js +168 -0
  121. package/.aios-core/development/scripts/dev-context-loader.js +297 -0
  122. package/.aios-core/development/scripts/generate-greeting.js +160 -0
  123. package/.aios-core/development/scripts/greeting-builder.js +866 -0
  124. package/.aios-core/development/scripts/greeting-config-cli.js +85 -0
  125. package/.aios-core/development/scripts/greeting-preference-manager.js +145 -0
  126. package/.aios-core/development/scripts/migrate-task-to-v2.js +377 -0
  127. package/.aios-core/development/scripts/story-index-generator.js +337 -0
  128. package/.aios-core/development/scripts/story-manager.js +375 -0
  129. package/.aios-core/development/scripts/story-update-hook.js +259 -0
  130. package/.aios-core/development/scripts/task-identifier-resolver.js +145 -0
  131. package/.aios-core/development/scripts/test-greeting-system.js +142 -0
  132. package/.aios-core/development/scripts/validate-task-v2.js +319 -0
  133. package/.aios-core/development/scripts/workflow-navigator.js +214 -0
  134. package/.aios-core/development/tasks/add-mcp.md +319 -0
  135. package/.aios-core/development/tasks/advanced-elicitation.md +319 -0
  136. package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +342 -0
  137. package/.aios-core/development/tasks/analyze-framework.md +697 -0
  138. package/.aios-core/development/tasks/analyze-performance.md +637 -0
  139. package/.aios-core/development/tasks/apply-qa-fixes.md +340 -0
  140. package/.aios-core/development/tasks/architect-analyze-impact.md +827 -0
  141. package/.aios-core/development/tasks/audit-codebase.md +429 -0
  142. package/.aios-core/development/tasks/audit-tailwind-config.md +270 -0
  143. package/.aios-core/development/tasks/audit-utilities.md +358 -0
  144. package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -0
  145. package/.aios-core/development/tasks/brownfield-create-epic.md +486 -0
  146. package/.aios-core/development/tasks/brownfield-create-story.md +357 -0
  147. package/.aios-core/development/tasks/build-component.md +478 -0
  148. package/.aios-core/development/tasks/calculate-roi.md +455 -0
  149. package/.aios-core/development/tasks/ci-cd-configuration.md +764 -0
  150. package/.aios-core/development/tasks/cleanup-utilities.md +670 -0
  151. package/.aios-core/development/tasks/collaborative-edit.md +1109 -0
  152. package/.aios-core/development/tasks/compose-molecule.md +284 -0
  153. package/.aios-core/development/tasks/consolidate-patterns.md +414 -0
  154. package/.aios-core/development/tasks/correct-course.md +280 -0
  155. package/.aios-core/development/tasks/create-agent.md +322 -0
  156. package/.aios-core/development/tasks/create-brownfield-story.md +727 -0
  157. package/.aios-core/development/tasks/create-deep-research-prompt.md +499 -0
  158. package/.aios-core/development/tasks/create-doc.md +316 -0
  159. package/.aios-core/development/tasks/create-next-story.md +774 -0
  160. package/.aios-core/development/tasks/create-suite.md +284 -0
  161. package/.aios-core/development/tasks/create-task.md +372 -0
  162. package/.aios-core/development/tasks/create-workflow.md +371 -0
  163. package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -0
  164. package/.aios-core/development/tasks/db-apply-migration.md +381 -0
  165. package/.aios-core/development/tasks/db-bootstrap.md +642 -0
  166. package/.aios-core/development/tasks/db-domain-modeling.md +693 -0
  167. package/.aios-core/development/tasks/db-dry-run.md +293 -0
  168. package/.aios-core/development/tasks/db-env-check.md +260 -0
  169. package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -0
  170. package/.aios-core/development/tasks/db-explain.md +631 -0
  171. package/.aios-core/development/tasks/db-impersonate.md +495 -0
  172. package/.aios-core/development/tasks/db-load-csv.md +593 -0
  173. package/.aios-core/development/tasks/db-policy-apply.md +653 -0
  174. package/.aios-core/development/tasks/db-rls-audit.md +411 -0
  175. package/.aios-core/development/tasks/db-rollback.md +739 -0
  176. package/.aios-core/development/tasks/db-run-sql.md +613 -0
  177. package/.aios-core/development/tasks/db-schema-audit.md +1011 -0
  178. package/.aios-core/development/tasks/db-seed.md +390 -0
  179. package/.aios-core/development/tasks/db-smoke-test.md +351 -0
  180. package/.aios-core/development/tasks/db-snapshot.md +569 -0
  181. package/.aios-core/development/tasks/db-supabase-setup.md +712 -0
  182. package/.aios-core/development/tasks/db-verify-order.md +515 -0
  183. package/.aios-core/development/tasks/deprecate-component.md +957 -0
  184. package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -0
  185. package/.aios-core/development/tasks/dev-backlog-debt.md +469 -0
  186. package/.aios-core/development/tasks/dev-develop-story.md +846 -0
  187. package/.aios-core/development/tasks/dev-improve-code-quality.md +873 -0
  188. package/.aios-core/development/tasks/dev-optimize-performance.md +1034 -0
  189. package/.aios-core/development/tasks/dev-suggest-refactoring.md +871 -0
  190. package/.aios-core/development/tasks/dev-validate-next-story.md +349 -0
  191. package/.aios-core/development/tasks/document-project.md +553 -0
  192. package/.aios-core/development/tasks/environment-bootstrap.md +1311 -0
  193. package/.aios-core/development/tasks/execute-checklist.md +301 -0
  194. package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -0
  195. package/.aios-core/development/tasks/extend-pattern.md +269 -0
  196. package/.aios-core/development/tasks/extract-tokens.md +467 -0
  197. package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -0
  198. package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +261 -0
  199. package/.aios-core/development/tasks/generate-documentation.md +284 -0
  200. package/.aios-core/development/tasks/generate-migration-strategy.md +522 -0
  201. package/.aios-core/development/tasks/generate-shock-report.md +501 -0
  202. package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -0
  203. package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -0
  204. package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -0
  205. package/.aios-core/development/tasks/github-devops-version-management.md +483 -0
  206. package/.aios-core/development/tasks/improve-self.md +823 -0
  207. package/.aios-core/development/tasks/index-docs.md +388 -0
  208. package/.aios-core/development/tasks/init-project-status.md +506 -0
  209. package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -0
  210. package/.aios-core/development/tasks/kb-mode-interaction.md +284 -0
  211. package/.aios-core/development/tasks/learn-patterns.md +901 -0
  212. package/.aios-core/development/tasks/mcp-workflow.md +437 -0
  213. package/.aios-core/development/tasks/modify-agent.md +382 -0
  214. package/.aios-core/development/tasks/modify-task.md +425 -0
  215. package/.aios-core/development/tasks/modify-workflow.md +466 -0
  216. package/.aios-core/development/tasks/po-backlog-add.md +370 -0
  217. package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -0
  218. package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -0
  219. package/.aios-core/development/tasks/po-pull-story.md +316 -0
  220. package/.aios-core/development/tasks/po-stories-index.md +351 -0
  221. package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -0
  222. package/.aios-core/development/tasks/po-sync-story.md +303 -0
  223. package/.aios-core/development/tasks/pr-automation.md +701 -0
  224. package/.aios-core/development/tasks/propose-modification.md +843 -0
  225. package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -0
  226. package/.aios-core/development/tasks/qa-gate.md +374 -0
  227. package/.aios-core/development/tasks/qa-generate-tests.md +1175 -0
  228. package/.aios-core/development/tasks/qa-nfr-assess.md +558 -0
  229. package/.aios-core/development/tasks/qa-review-proposal.md +1158 -0
  230. package/.aios-core/development/tasks/qa-review-story.md +683 -0
  231. package/.aios-core/development/tasks/qa-risk-profile.md +567 -0
  232. package/.aios-core/development/tasks/qa-run-tests.md +277 -0
  233. package/.aios-core/development/tasks/qa-test-design.md +388 -0
  234. package/.aios-core/development/tasks/qa-trace-requirements.md +477 -0
  235. package/.aios-core/development/tasks/release-management.md +723 -0
  236. package/.aios-core/development/tasks/security-audit.md +554 -0
  237. package/.aios-core/development/tasks/security-scan.md +790 -0
  238. package/.aios-core/development/tasks/setup-database.md +741 -0
  239. package/.aios-core/development/tasks/setup-design-system.md +462 -0
  240. package/.aios-core/development/tasks/setup-github.md +874 -0
  241. package/.aios-core/development/tasks/setup-llm-routing.md +229 -0
  242. package/.aios-core/development/tasks/setup-mcp-docker.md +584 -0
  243. package/.aios-core/development/tasks/shard-doc.md +538 -0
  244. package/.aios-core/development/tasks/sm-create-next-story.md +480 -0
  245. package/.aios-core/development/tasks/sync-documentation.md +865 -0
  246. package/.aios-core/development/tasks/tailwind-upgrade.md +294 -0
  247. package/.aios-core/development/tasks/test-as-user.md +621 -0
  248. package/.aios-core/development/tasks/test-validation-task.md +171 -0
  249. package/.aios-core/development/tasks/undo-last.md +347 -0
  250. package/.aios-core/development/tasks/update-manifest.md +410 -0
  251. package/.aios-core/development/tasks/ux-create-wireframe.md +617 -0
  252. package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -0
  253. package/.aios-core/development/tasks/ux-user-research.md +559 -0
  254. package/.aios-core/development/tasks/validate-next-story.md +423 -0
  255. package/.aios-core/development/tasks/validate-structure.md +243 -0
  256. package/.aios-core/development/workflows/README.md +84 -0
  257. package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -0
  258. package/.aios-core/development/workflows/brownfield-service.yaml +187 -0
  259. package/.aios-core/development/workflows/brownfield-ui.yaml +197 -0
  260. package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -0
  261. package/.aios-core/development/workflows/greenfield-service.yaml +206 -0
  262. package/.aios-core/development/workflows/greenfield-ui.yaml +235 -0
  263. package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
  264. package/.aios-core/docs/component-creation-guide.md +458 -0
  265. package/.aios-core/docs/session-update-pattern.md +307 -0
  266. package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -0
  267. package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -0
  268. package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -0
  269. package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -0
  270. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -0
  271. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -0
  272. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -0
  273. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -0
  274. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -0
  275. package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -0
  276. package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -0
  277. package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -0
  278. package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -0
  279. package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -0
  280. package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -0
  281. package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -0
  282. package/.aios-core/docs/template-syntax.md +267 -0
  283. package/.aios-core/docs/troubleshooting-guide.md +625 -0
  284. package/.aios-core/elicitation/agent-elicitation.js +272 -0
  285. package/.aios-core/elicitation/task-elicitation.js +281 -0
  286. package/.aios-core/elicitation/workflow-elicitation.js +315 -0
  287. package/.aios-core/index.d.ts +8 -0
  288. package/.aios-core/index.esm.js +16 -0
  289. package/.aios-core/index.js +16 -0
  290. package/.aios-core/infrastructure/README.md +126 -0
  291. package/.aios-core/infrastructure/index.js +199 -0
  292. package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -0
  293. package/.aios-core/infrastructure/integrations/pm-adapters/clickup-adapter.js +345 -0
  294. package/.aios-core/infrastructure/integrations/pm-adapters/github-adapter.js +392 -0
  295. package/.aios-core/infrastructure/integrations/pm-adapters/jira-adapter.js +448 -0
  296. package/.aios-core/infrastructure/integrations/pm-adapters/local-adapter.js +175 -0
  297. package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +122 -0
  298. package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +89 -0
  299. package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +780 -0
  300. package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +950 -0
  301. package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +425 -0
  302. package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +132 -0
  303. package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +381 -0
  304. package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +203 -0
  305. package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +24 -0
  306. package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +51 -0
  307. package/.aios-core/infrastructure/scripts/aios-validator.js +294 -0
  308. package/.aios-core/infrastructure/scripts/approval-workflow.js +643 -0
  309. package/.aios-core/infrastructure/scripts/atomic-layer-classifier.js +308 -0
  310. package/.aios-core/infrastructure/scripts/backup-manager.js +607 -0
  311. package/.aios-core/infrastructure/scripts/batch-creator.js +608 -0
  312. package/.aios-core/infrastructure/scripts/branch-manager.js +391 -0
  313. package/.aios-core/infrastructure/scripts/capability-analyzer.js +535 -0
  314. package/.aios-core/infrastructure/scripts/clickup-helpers.js +226 -0
  315. package/.aios-core/infrastructure/scripts/code-quality-improver.js +1312 -0
  316. package/.aios-core/infrastructure/scripts/commit-message-generator.js +850 -0
  317. package/.aios-core/infrastructure/scripts/component-generator.js +738 -0
  318. package/.aios-core/infrastructure/scripts/component-metadata.js +627 -0
  319. package/.aios-core/infrastructure/scripts/component-search.js +277 -0
  320. package/.aios-core/infrastructure/scripts/config-cache.js +322 -0
  321. package/.aios-core/infrastructure/scripts/config-loader.js +349 -0
  322. package/.aios-core/infrastructure/scripts/conflict-resolver.js +675 -0
  323. package/.aios-core/infrastructure/scripts/coverage-analyzer.js +882 -0
  324. package/.aios-core/infrastructure/scripts/dependency-analyzer.js +638 -0
  325. package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +703 -0
  326. package/.aios-core/infrastructure/scripts/diff-generator.js +129 -0
  327. package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
  328. package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +329 -0
  329. package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +282 -0
  330. package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
  331. package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +313 -0
  332. package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
  333. package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +358 -0
  334. package/.aios-core/infrastructure/scripts/documentation-synchronizer.js +1432 -0
  335. package/.aios-core/infrastructure/scripts/framework-analyzer.js +746 -0
  336. package/.aios-core/infrastructure/scripts/git-config-detector.js +293 -0
  337. package/.aios-core/infrastructure/scripts/git-wrapper.js +443 -0
  338. package/.aios-core/infrastructure/scripts/improvement-engine.js +758 -0
  339. package/.aios-core/infrastructure/scripts/improvement-validator.js +710 -0
  340. package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +267 -0
  341. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.cmd +80 -0
  342. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.sh +62 -0
  343. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.cmd +26 -0
  344. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.sh +18 -0
  345. package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +970 -0
  346. package/.aios-core/infrastructure/scripts/modification-validator.js +555 -0
  347. package/.aios-core/infrastructure/scripts/output-formatter.js +297 -0
  348. package/.aios-core/infrastructure/scripts/performance-analyzer.js +758 -0
  349. package/.aios-core/infrastructure/scripts/performance-and-error-resolver.js +258 -0
  350. package/.aios-core/infrastructure/scripts/performance-optimizer.js +1902 -0
  351. package/.aios-core/infrastructure/scripts/performance-tracker.js +452 -0
  352. package/.aios-core/infrastructure/scripts/pm-adapter-factory.js +181 -0
  353. package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -0
  354. package/.aios-core/infrastructure/scripts/project-status-loader.js +445 -0
  355. package/.aios-core/infrastructure/scripts/refactoring-suggester.js +1139 -0
  356. package/.aios-core/infrastructure/scripts/repository-detector.js +64 -0
  357. package/.aios-core/infrastructure/scripts/sandbox-tester.js +618 -0
  358. package/.aios-core/infrastructure/scripts/security-checker.js +359 -0
  359. package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +375 -0
  360. package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +410 -0
  361. package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +285 -0
  362. package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +262 -0
  363. package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +468 -0
  364. package/.aios-core/infrastructure/scripts/spot-check-validator.js +149 -0
  365. package/.aios-core/infrastructure/scripts/status-mapper.js +115 -0
  366. package/.aios-core/infrastructure/scripts/template-engine.js +240 -0
  367. package/.aios-core/infrastructure/scripts/template-validator.js +279 -0
  368. package/.aios-core/infrastructure/scripts/test-generator.js +844 -0
  369. package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1081 -0
  370. package/.aios-core/infrastructure/scripts/test-utilities-fast.js +126 -0
  371. package/.aios-core/infrastructure/scripts/test-utilities.js +200 -0
  372. package/.aios-core/infrastructure/scripts/tool-resolver.js +360 -0
  373. package/.aios-core/infrastructure/scripts/transaction-manager.js +590 -0
  374. package/.aios-core/infrastructure/scripts/usage-analytics.js +634 -0
  375. package/.aios-core/infrastructure/scripts/validate-output-pattern.js +213 -0
  376. package/.aios-core/infrastructure/scripts/visual-impact-generator.js +1056 -0
  377. package/.aios-core/infrastructure/scripts/yaml-validator.js +397 -0
  378. package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -0
  379. package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +182 -0
  380. package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
  381. package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -0
  382. package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -0
  383. package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -0
  384. package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -0
  385. package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
  386. package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
  387. package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
  388. package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
  389. package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
  390. package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
  391. package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
  392. package/.aios-core/infrastructure/tests/project-status-loader.test.js +394 -0
  393. package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -0
  394. package/.aios-core/infrastructure/tests/utilities-audit-results.json +501 -0
  395. package/.aios-core/infrastructure/tests/validate-module.js +97 -0
  396. package/.aios-core/infrastructure/tools/README.md +222 -0
  397. package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -0
  398. package/.aios-core/infrastructure/tools/cli/llm-routing.yaml +126 -0
  399. package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -0
  400. package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -0
  401. package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -0
  402. package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -0
  403. package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -0
  404. package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -0
  405. package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -0
  406. package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -0
  407. package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -0
  408. package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -0
  409. package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -0
  410. package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -0
  411. package/.aios-core/install-manifest.yaml +347 -0
  412. package/.aios-core/manifests/agents.csv +1 -0
  413. package/.aios-core/manifests/schema/manifest-schema.json +190 -0
  414. package/.aios-core/manifests/tasks.csv +121 -0
  415. package/.aios-core/manifests/workers.csv +204 -0
  416. package/.aios-core/package.json +103 -0
  417. package/.aios-core/product/README.md +56 -0
  418. package/.aios-core/product/checklists/architect-checklist.md +444 -0
  419. package/.aios-core/product/checklists/change-checklist.md +183 -0
  420. package/.aios-core/product/checklists/database-design-checklist.md +119 -0
  421. package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -0
  422. package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -0
  423. package/.aios-core/product/checklists/pm-checklist.md +376 -0
  424. package/.aios-core/product/checklists/po-master-checklist.md +442 -0
  425. package/.aios-core/product/checklists/pre-push-checklist.md +108 -0
  426. package/.aios-core/product/checklists/release-checklist.md +122 -0
  427. package/.aios-core/product/checklists/story-dod-checklist.md +102 -0
  428. package/.aios-core/product/checklists/story-draft-checklist.md +216 -0
  429. package/.aios-core/product/data/brainstorming-techniques.md +37 -0
  430. package/.aios-core/product/data/elicitation-methods.md +135 -0
  431. package/.aios-core/product/data/mode-selection-best-practices.md +471 -0
  432. package/.aios-core/product/data/test-levels-framework.md +149 -0
  433. package/.aios-core/product/data/test-priorities-matrix.md +175 -0
  434. package/.aios-core/product/templates/1mcp-config.yaml +225 -0
  435. package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -0
  436. package/.aios-core/product/templates/activation-instructions-template.md +258 -0
  437. package/.aios-core/product/templates/adr.hbs +125 -0
  438. package/.aios-core/product/templates/agent-template.yaml +121 -0
  439. package/.aios-core/product/templates/architecture-tmpl.yaml +651 -0
  440. package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +156 -0
  441. package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +476 -0
  442. package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +280 -0
  443. package/.aios-core/product/templates/changelog-template.md +134 -0
  444. package/.aios-core/product/templates/command-rationalization-matrix.md +152 -0
  445. package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +293 -0
  446. package/.aios-core/product/templates/component-react-tmpl.tsx +98 -0
  447. package/.aios-core/product/templates/dbdr.hbs +241 -0
  448. package/.aios-core/product/templates/design-story-tmpl.yaml +587 -0
  449. package/.aios-core/product/templates/ds-artifact-analysis.md +70 -0
  450. package/.aios-core/product/templates/engine/elicitation.js +298 -0
  451. package/.aios-core/product/templates/engine/index.js +308 -0
  452. package/.aios-core/product/templates/engine/loader.js +231 -0
  453. package/.aios-core/product/templates/engine/renderer.js +343 -0
  454. package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -0
  455. package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -0
  456. package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -0
  457. package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -0
  458. package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -0
  459. package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -0
  460. package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -0
  461. package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -0
  462. package/.aios-core/product/templates/engine/validator.js +294 -0
  463. package/.aios-core/product/templates/epic.hbs +212 -0
  464. package/.aios-core/product/templates/eslintrc-security.json +32 -0
  465. package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +206 -0
  466. package/.aios-core/product/templates/front-end-spec-tmpl.yaml +349 -0
  467. package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +805 -0
  468. package/.aios-core/product/templates/github-actions-cd.yml +212 -0
  469. package/.aios-core/product/templates/github-actions-ci.yml +172 -0
  470. package/.aios-core/product/templates/github-pr-template.md +67 -0
  471. package/.aios-core/product/templates/gordon-mcp.yaml +140 -0
  472. package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -0
  473. package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -0
  474. package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -0
  475. package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -0
  476. package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -0
  477. package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -0
  478. package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -0
  479. package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -0
  480. package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -0
  481. package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -0
  482. package/.aios-core/product/templates/market-research-tmpl.yaml +252 -0
  483. package/.aios-core/product/templates/mcp-workflow.js +271 -0
  484. package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -0
  485. package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -0
  486. package/.aios-core/product/templates/personalized-agent-template.md +258 -0
  487. package/.aios-core/product/templates/personalized-checklist-template.md +340 -0
  488. package/.aios-core/product/templates/personalized-task-template-v2.md +905 -0
  489. package/.aios-core/product/templates/personalized-task-template.md +344 -0
  490. package/.aios-core/product/templates/personalized-template-file.yaml +322 -0
  491. package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -0
  492. package/.aios-core/product/templates/pmdr.hbs +186 -0
  493. package/.aios-core/product/templates/prd-tmpl.yaml +202 -0
  494. package/.aios-core/product/templates/prd-v2.0.hbs +216 -0
  495. package/.aios-core/product/templates/prd.hbs +201 -0
  496. package/.aios-core/product/templates/project-brief-tmpl.yaml +221 -0
  497. package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -0
  498. package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -0
  499. package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -0
  500. package/.aios-core/product/templates/shock-report-tmpl.html +502 -0
  501. package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -0
  502. package/.aios-core/product/templates/story-tmpl.yaml +332 -0
  503. package/.aios-core/product/templates/story.hbs +263 -0
  504. package/.aios-core/product/templates/task-execution-report.md +495 -0
  505. package/.aios-core/product/templates/task-template.md +123 -0
  506. package/.aios-core/product/templates/task.hbs +170 -0
  507. package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -0
  508. package/.aios-core/product/templates/tmpl-migration-script.sql +91 -0
  509. package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -0
  510. package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -0
  511. package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -0
  512. package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -0
  513. package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -0
  514. package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -0
  515. package/.aios-core/product/templates/tmpl-seed-data.sql +140 -0
  516. package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -0
  517. package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -0
  518. package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -0
  519. package/.aios-core/product/templates/tmpl-trigger.sql +152 -0
  520. package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -0
  521. package/.aios-core/product/templates/tmpl-view.sql +177 -0
  522. package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -0
  523. package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -0
  524. package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -0
  525. package/.aios-core/product/templates/workflow-template.yaml +134 -0
  526. package/.aios-core/quality/metrics-collector.js +572 -0
  527. package/.aios-core/quality/metrics-hook.js +260 -0
  528. package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -0
  529. package/.aios-core/quality/seed-metrics.js +336 -0
  530. package/.aios-core/scripts/README.md +354 -0
  531. package/.aios-core/scripts/aios-doc-template.md +325 -0
  532. package/.aios-core/scripts/batch-migrate-phase1.ps1 +36 -0
  533. package/.aios-core/scripts/batch-migrate-phase2.ps1 +88 -0
  534. package/.aios-core/scripts/batch-migrate-phase3.ps1 +45 -0
  535. package/.aios-core/scripts/command-execution-hook.js +201 -0
  536. package/.aios-core/scripts/context-detector.js +226 -0
  537. package/.aios-core/scripts/elicitation-engine.js +385 -0
  538. package/.aios-core/scripts/elicitation-session-manager.js +300 -0
  539. package/.aios-core/scripts/migrate-framework-docs.sh +300 -0
  540. package/.aios-core/scripts/session-context-loader.js +286 -0
  541. package/.aios-core/scripts/test-template-system.js +941 -0
  542. package/.aios-core/scripts/validate-phase1.ps1 +35 -0
  543. package/.aios-core/scripts/workflow-management.md +69 -0
  544. package/.aios-core/tasks/find-component.md.legacy +391 -0
  545. package/.aios-core/tasks/generate-commit-message.md.legacy +426 -0
  546. package/.aios-core/tasks/generate-migration.md.legacy +382 -0
  547. package/.aios-core/tasks/rollback-modification.md.legacy +307 -0
  548. package/.aios-core/tasks/update-tests.md.legacy +283 -0
  549. package/.aios-core/user-guide.md +1413 -0
  550. package/.aios-core/working-in-the-brownfield.md +361 -0
  551. package/.claude/CLAUDE.md +221 -0
  552. package/LICENSE +48 -0
  553. package/README.md +703 -0
  554. package/bin/aios-init-old.js +532 -0
  555. package/bin/aios-init-v4.js +390 -0
  556. package/bin/aios-init.backup-v1.1.4.js +352 -0
  557. package/bin/aios-init.js +736 -0
  558. package/bin/aios-minimal.js +26 -0
  559. package/bin/aios.js +279 -0
  560. package/bin/migrate-pm-config.js +219 -0
  561. package/bin/modules/env-config.js +436 -0
  562. package/bin/modules/mcp-installer.js +383 -0
  563. package/bin/utils/install-errors.js +339 -0
  564. package/bin/utils/install-transaction.js +445 -0
  565. package/index.d.ts +19 -0
  566. package/index.esm.js +21 -0
  567. package/index.js +94 -0
  568. package/package.json +161 -0
  569. package/packages/installer/package.json +39 -0
  570. package/packages/installer/src/config/configure-environment.js +312 -0
  571. package/packages/installer/src/config/templates/core-config-template.js +183 -0
  572. package/packages/installer/src/config/templates/env-template.js +127 -0
  573. package/packages/installer/src/config/validation/config-validator.js +243 -0
  574. package/packages/installer/src/detection/detect-project-type.js +81 -0
  575. package/packages/installer/src/wizard/wizard.js +244 -0
  576. package/packages/installer/tests/integration/environment-configuration.test.js +328 -0
  577. package/packages/installer/tests/integration/wizard-detection.test.js +349 -0
  578. package/packages/installer/tests/unit/config-validator.test.js +315 -0
  579. package/packages/installer/tests/unit/detection/detect-project-type.test.js +401 -0
  580. package/packages/installer/tests/unit/env-template.test.js +185 -0
  581. package/src/config/ide-configs.js +189 -0
  582. package/src/installer/aios-core-installer.js +319 -0
  583. package/src/installer/dependency-installer.js +335 -0
  584. package/src/utils/aios-colors.js +234 -0
  585. package/src/wizard/feedback.js +218 -0
  586. package/src/wizard/ide-config-generator.js +488 -0
  587. package/src/wizard/ide-selector.js +84 -0
  588. package/src/wizard/index.js +589 -0
  589. package/src/wizard/questions.js +249 -0
  590. package/src/wizard/validation/index.js +120 -0
  591. package/src/wizard/validation/report-generator.js +269 -0
  592. package/src/wizard/validation/troubleshooting-system.js +346 -0
  593. package/src/wizard/validation/validators/config-validator.js +362 -0
  594. package/src/wizard/validation/validators/dependency-validator.js +333 -0
  595. package/src/wizard/validation/validators/file-structure-validator.js +181 -0
  596. package/src/wizard/validation/validators/mcp-health-checker.js +310 -0
  597. package/src/wizard/validators.js +274 -0
  598. package/templates/squad/LICENSE +21 -0
  599. package/templates/squad/README.md +37 -0
  600. package/templates/squad/agents/example-agent.yaml +36 -0
  601. package/templates/squad/package.json +19 -0
  602. package/templates/squad/squad.yaml +25 -0
  603. package/templates/squad/tasks/example-task.yaml +46 -0
  604. package/templates/squad/templates/example-template.md +24 -0
  605. package/templates/squad/tests/example-agent.test.js +53 -0
  606. package/templates/squad/workflows/example-workflow.yaml +54 -0
  607. package/tools/package-builder.js +35 -0
@@ -0,0 +1,844 @@
1
+ const fs = require('fs').promises;
2
+ const path = require('path');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * Test generator for AIOS-FULLSTACK automated test generation
7
+ * Orchestrates test file creation using the template system
8
+ */
9
+ class TestGenerator {
10
+ constructor(options = {}) {
11
+ this.rootPath = options.rootPath || process.cwd();
12
+ this.templateSystem = options.templateSystem;
13
+ this.generationCache = new Map();
14
+ this.generationStats = {
15
+ total_generated: 0,
16
+ successful: 0,
17
+ failed: 0,
18
+ generation_time: 0,
19
+ };
20
+ }
21
+
22
+ /**
23
+ * Initialize test generator
24
+ */
25
+ async initialize() {
26
+ try {
27
+ if (!this.templateSystem) {
28
+ throw new Error('Template system not provided');
29
+ }
30
+
31
+ // Ensure template system is initialized
32
+ if (typeof this.templateSystem.initialize === 'function') {
33
+ await this.templateSystem.initialize();
34
+ }
35
+
36
+ console.log(chalk.green('✅ Test generator initialized'));
37
+ return true;
38
+
39
+ } catch (_error) {
40
+ console.error(chalk.red(`Failed to initialize test generator: ${error.message}`));
41
+ throw error;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Generate test file for a component
47
+ */
48
+ async generateTestFile(component, testFile, config) {
49
+ const startTime = Date.now();
50
+
51
+ try {
52
+ console.log(chalk.blue(`🧪 Generating ${testFile.test_type} test for ${component.name}`));
53
+
54
+ // Validate inputs
55
+ this.validateGenerationInputs(component, testFile, config);
56
+
57
+ // Generate test content using template system
58
+ const testContent = await this.generateTestContent(component, testFile, config);
59
+
60
+ // Apply post-processing
61
+ const processedContent = await this.postProcessTestContent(testContent, component, config);
62
+
63
+ // Update generation stats
64
+ this.updateGenerationStats(true, Date.now() - startTime);
65
+
66
+ console.log(chalk.green(`✅ Generated ${testFile.test_type} test for ${component.name}`));
67
+
68
+ return processedContent;
69
+
70
+ } catch (_error) {
71
+ this.updateGenerationStats(false, Date.now() - startTime);
72
+ console.error(chalk.red(`Failed to generate test for ${component.name}: ${error.message}`));
73
+ throw error;
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Generate multiple test files for a component
79
+ */
80
+ async generateTestSuite(component, testSuite, config) {
81
+ const generatedFiles = [];
82
+ const errors = [];
83
+
84
+ console.log(chalk.blue(`📋 Generating test suite for ${component.name}`));
85
+ console.log(chalk.gray(` Test files: ${testSuite.test_files.length}`));
86
+
87
+ for (const testFile of testSuite.test_files) {
88
+ try {
89
+ const testContent = await this.generateTestFile(component, testFile, config);
90
+
91
+ generatedFiles.push({
92
+ file_path: testFile.file_path,
93
+ test_type: testFile.test_type,
94
+ content: testContent,
95
+ test_count: testFile.test_count,
96
+ });
97
+
98
+ } catch (_error) {
99
+ errors.push({
100
+ file_path: testFile.file_path,
101
+ test_type: testFile.test_type,
102
+ error: error.message,
103
+ });
104
+ }
105
+ }
106
+
107
+ const result = {
108
+ component_id: component.id,
109
+ generated_files: generatedFiles,
110
+ errors: errors,
111
+ success_rate: generatedFiles.length / testSuite.test_files.length,
112
+ };
113
+
114
+ console.log(chalk.green(`✅ Test suite generated for ${component.name}`));
115
+ console.log(chalk.gray(` Generated: ${generatedFiles.length}/${testSuite.test_files.length} files`));
116
+ console.log(chalk.gray(` Success rate: ${Math.round(result.success_rate * 100)}%`));
117
+
118
+ return result;
119
+ }
120
+
121
+ /**
122
+ * Generate test content using template system
123
+ */
124
+ async generateTestContent(component, testFile, config) {
125
+ // Use template system to generate base content
126
+ const baseContent = await this.templateSystem.generateTestContent(component, testFile, config);
127
+
128
+ // Enhance with component-specific analysis
129
+ const enhancedContent = await this.enhanceTestContent(baseContent, component, testFile, config);
130
+
131
+ // Apply framework-specific optimizations
132
+ const optimizedContent = await this.optimizeForFramework(enhancedContent, config.framework);
133
+
134
+ return optimizedContent;
135
+ }
136
+
137
+ /**
138
+ * Enhance test content with component-specific logic
139
+ */
140
+ async enhanceTestContent(baseContent, component, testFile, config) {
141
+ let enhancedContent = baseContent;
142
+
143
+ try {
144
+ // Analyze component to identify testable elements
145
+ const componentAnalysis = await this.analyzeComponent(component);
146
+
147
+ // Add component-specific test cases
148
+ const additionalTestCases = await this.generateAdditionalTestCases(
149
+ componentAnalysis,
150
+ testFile.test_type,
151
+ config,
152
+ );
153
+
154
+ if (additionalTestCases.length > 0) {
155
+ enhancedContent = this.injectAdditionalTestCases(enhancedContent, additionalTestCases);
156
+ }
157
+
158
+ // Add dynamic imports if needed
159
+ const dynamicImports = await this.generateDynamicImports(componentAnalysis, config);
160
+ if (dynamicImports) {
161
+ enhancedContent = this.injectDynamicImports(enhancedContent, dynamicImports);
162
+ }
163
+
164
+ // Add component-specific setup/teardown
165
+ const setupTeardown = await this.generateSetupTeardown(componentAnalysis, testFile.test_type);
166
+ if (setupTeardown) {
167
+ enhancedContent = this.injectSetupTeardown(enhancedContent, setupTeardown);
168
+ }
169
+
170
+ } catch (_error) {
171
+ console.warn(chalk.yellow(`Failed to enhance test content: ${error.message}`));
172
+ // Return base content if enhancement fails
173
+ }
174
+
175
+ return enhancedContent;
176
+ }
177
+
178
+ /**
179
+ * Analyze component to identify testable elements
180
+ */
181
+ async analyzeComponent(component) {
182
+ const analysis = {
183
+ component_id: component.id,
184
+ type: component.type,
185
+ name: component.name,
186
+ file_path: component.filePath,
187
+ exports: [],
188
+ functions: [],
189
+ classes: [],
190
+ dependencies: [],
191
+ async_operations: false,
192
+ error_handling: false,
193
+ configuration: null,
194
+ };
195
+
196
+ try {
197
+ if (!component.filePath) {
198
+ return analysis;
199
+ }
200
+
201
+ // Read component file
202
+ const content = await fs.readFile(component.filePath, 'utf-8');
203
+
204
+ if (component.type === 'util') {
205
+ // Analyze JavaScript utility
206
+ analysis.exports = this.extractExports(content);
207
+ analysis.functions = this.extractFunctions(content);
208
+ analysis.classes = this.extractClasses(content);
209
+ analysis.dependencies = this.extractDependencies(content);
210
+ analysis.async_operations = content.includes('async') || content.includes('await');
211
+ analysis.error_handling = content.includes('try') || content.includes('catch');
212
+ } else if (component.type === 'agent') {
213
+ // Analyze agent markdown
214
+ analysis.configuration = this.extractAgentConfig(content);
215
+ } else if (component.type === 'workflow') {
216
+ // Analyze workflow YAML
217
+ analysis.configuration = this.extractWorkflowConfig(content);
218
+ } else if (component.type === 'task') {
219
+ // Analyze task markdown with embedded JavaScript
220
+ analysis.functions = this.extractFunctions(content);
221
+ analysis.configuration = this.extractTaskConfig(content);
222
+ }
223
+
224
+ } catch (_error) {
225
+ console.warn(chalk.yellow(`Failed to analyze component ${component.id}: ${error.message}`));
226
+ }
227
+
228
+ return analysis;
229
+ }
230
+
231
+ /**
232
+ * Generate additional test cases based on component analysis
233
+ */
234
+ async generateAdditionalTestCases(componentAnalysis, _testType, config) {
235
+ const additionalCases = [];
236
+
237
+ // Generate test cases for exported functions
238
+ for (const func of componentAnalysis.functions) {
239
+ if (func.visibility === 'public') {
240
+ additionalCases.push(...this.generateFunctionTestCases(func, _testType, config));
241
+ }
242
+ }
243
+
244
+ // Generate test cases for classes
245
+ for (const cls of componentAnalysis.classes) {
246
+ additionalCases.push(...this.generateClassTestCases(cls, _testType, config));
247
+ }
248
+
249
+ // Generate async/error handling test cases
250
+ if (componentAnalysis.async_operations) {
251
+ additionalCases.push(...this.generateAsyncTestCases(_testType, config));
252
+ }
253
+
254
+ if (componentAnalysis.error_handling) {
255
+ additionalCases.push(...this.generateErrorHandlingTestCases(_testType, config));
256
+ }
257
+
258
+ return additionalCases;
259
+ }
260
+
261
+ /**
262
+ * Generate test cases for a function
263
+ */
264
+ generateFunctionTestCases(func, _testType, config) {
265
+ const testCases = [];
266
+
267
+ // Basic functionality test
268
+ testCases.push({
269
+ name: `should execute ${func.name} successfully`,
270
+ type: 'functionality',
271
+ setup: func.async ? 'const result = await ' : 'const result = ',
272
+ assertions: [
273
+ 'expect(result).toBeDefined();',
274
+ func.async ? 'expect(typeof result).toBe(\'object\');' : 'expect(result).toBeTruthy();',
275
+ ],
276
+ });
277
+
278
+ // Parameter validation test
279
+ if (func.parameters && func.parameters.length > 0) {
280
+ testCases.push({
281
+ name: `should handle invalid parameters for ${func.name}`,
282
+ type: 'validation',
283
+ setup: `const invalidCall = () => ${func.name}();`,
284
+ assertions: [
285
+ 'expect(invalidCall).toThrow();',
286
+ ],
287
+ });
288
+ }
289
+
290
+ // Edge case tests for complex functions
291
+ if (config.qualityLevel === 'comprehensive') {
292
+ testCases.push({
293
+ name: `should handle edge cases for ${func.name}`,
294
+ type: 'edge_case',
295
+ setup: `// Edge case testing for ${func.name}`,
296
+ assertions: [
297
+ '// Add edge case assertions here',
298
+ ],
299
+ });
300
+ }
301
+
302
+ return testCases;
303
+ }
304
+
305
+ /**
306
+ * Generate test cases for a class
307
+ */
308
+ generateClassTestCases(cls, _testType, config) {
309
+ const testCases = [];
310
+
311
+ // Constructor test
312
+ testCases.push({
313
+ name: `should instantiate ${cls.name} correctly`,
314
+ type: 'instantiation',
315
+ setup: `const instance = new ${cls.name}();`,
316
+ assertions: [
317
+ `expect(instance).toBeInstanceOf(${cls.name});`,
318
+ 'expect(instance).toBeDefined();',
319
+ ],
320
+ });
321
+
322
+ // Method tests
323
+ for (const method of cls.methods || []) {
324
+ testCases.push({
325
+ name: `should execute ${cls.name}.${method.name} correctly`,
326
+ type: 'method',
327
+ setup: `const instance = new ${cls.name}();\nconst result = ${method.async ? 'await ' : ''}instance.${method.name}();`,
328
+ assertions: [
329
+ 'expect(result).toBeDefined();',
330
+ ],
331
+ });
332
+ }
333
+
334
+ return testCases;
335
+ }
336
+
337
+ /**
338
+ * Generate async operation test cases
339
+ */
340
+ generateAsyncTestCases(_testType, config) {
341
+ return [
342
+ {
343
+ name: 'should handle async operations correctly',
344
+ type: 'async',
345
+ setup: '// Async operation test setup',
346
+ assertions: [
347
+ '// Add async-specific assertions',
348
+ 'expect(result).resolves.toBeDefined();',
349
+ ],
350
+ },
351
+ {
352
+ name: 'should handle async operation timeouts',
353
+ type: 'timeout',
354
+ setup: '// Timeout test setup',
355
+ assertions: [
356
+ 'expect(longRunningOperation).rejects.toThrow("timeout");',
357
+ ],
358
+ },
359
+ ];
360
+ }
361
+
362
+ /**
363
+ * Generate error handling test cases
364
+ */
365
+ generateErrorHandlingTestCases(_testType, config) {
366
+ return [
367
+ {
368
+ name: 'should handle errors gracefully',
369
+ type: 'error_handling',
370
+ setup: '// Error simulation setup',
371
+ assertions: [
372
+ 'expect(errorHandlerFunction).not.toThrow();',
373
+ 'expect(result.error).toBeDefined();',
374
+ ],
375
+ },
376
+ ];
377
+ }
378
+
379
+ /**
380
+ * Optimize content for specific test framework
381
+ */
382
+ async optimizeForFramework(content, framework) {
383
+ switch (framework) {
384
+ case 'jest':
385
+ return this.optimizeForJest(content);
386
+ case 'mocha':
387
+ return this.optimizeForMocha(content);
388
+ case 'vitest':
389
+ return this.optimizeForVitest(content);
390
+ default:
391
+ return content;
392
+ }
393
+ }
394
+
395
+ /**
396
+ * Optimize for Jest framework
397
+ */
398
+ optimizeForJest(content) {
399
+ // Add Jest-specific optimizations
400
+ let optimized = content;
401
+
402
+ // Add jest-specific expect extensions if needed
403
+ if (content.includes('toBeInstanceOf') && !content.includes('expect.extend')) {
404
+ optimized = `const { expect } = require('@jest/globals');\n\n${optimized}`;
405
+ }
406
+
407
+ // Add performance timing for slow tests
408
+ if (content.includes('async') && content.length > 5000) {
409
+ optimized = optimized.replace(
410
+ /describe\('([^']+)', \(\) => \{/,
411
+ "describe('$1', () => {\n jest.setTimeout(10000);\n",
412
+ );
413
+ }
414
+
415
+ return optimized;
416
+ }
417
+
418
+ /**
419
+ * Optimize for Mocha framework
420
+ */
421
+ optimizeForMocha(content) {
422
+ // Add Mocha-specific optimizations
423
+ let optimized = content;
424
+
425
+ // Set timeout for async tests
426
+ if (content.includes('async')) {
427
+ optimized = optimized.replace(
428
+ /describe\('([^']+)', function\(\) \{/,
429
+ "describe('$1', function() {\n this.timeout(5000);\n",
430
+ );
431
+ }
432
+
433
+ return optimized;
434
+ }
435
+
436
+ /**
437
+ * Optimize for Vitest framework
438
+ */
439
+ optimizeForVitest(content) {
440
+ // Add Vitest-specific optimizations
441
+ let optimized = content;
442
+
443
+ // Use vi mock utilities
444
+ optimized = optimized.replace(/jest\.mock/g, 'vi.mock');
445
+ optimized = optimized.replace(/jest\.spyOn/g, 'vi.spyOn');
446
+
447
+ return optimized;
448
+ }
449
+
450
+ /**
451
+ * Post-process test content
452
+ */
453
+ async postProcessTestContent(content, component, config) {
454
+ let processed = content;
455
+
456
+ // Replace template variables
457
+ processed = this.replaceTemplateVariables(processed, component, config);
458
+
459
+ // Format code
460
+ processed = this.formatTestCode(processed);
461
+
462
+ // Add generation metadata
463
+ processed = this.addGenerationMetadata(processed, component, config);
464
+
465
+ // Validate syntax
466
+ await this.validateTestSyntax(processed, config.framework);
467
+
468
+ return processed;
469
+ }
470
+
471
+ /**
472
+ * Replace template variables with actual values
473
+ */
474
+ replaceTemplateVariables(content, component, config) {
475
+ let result = content;
476
+
477
+ // Replace component variables
478
+ result = result.replace(/\${data\.component\.name}/g, component.name);
479
+ result = result.replace(/\${data\.component\.type}/g, component.type);
480
+ result = result.replace(/\${this\.toClassName\(data\.component\.name\)}/g, this.toClassName(component.name));
481
+
482
+ // Replace config variables
483
+ result = result.replace(/\${data\.config\.framework}/g, config.framework);
484
+ result = result.replace(/\${data\.metadata\.generatedAt}/g, new Date().toISOString());
485
+
486
+ return result;
487
+ }
488
+
489
+ /**
490
+ * Format test code
491
+ */
492
+ formatTestCode(content) {
493
+ // Basic code formatting
494
+ let formatted = content;
495
+
496
+ // Fix indentation
497
+ formatted = formatted.replace(/\n {2,}/g, match => '\n' + ' '.repeat(Math.floor(match.length / 2)));
498
+
499
+ // Remove excessive blank lines
500
+ formatted = formatted.replace(/\n{3,}/g, '\n\n');
501
+
502
+ // Ensure proper spacing around blocks
503
+ formatted = formatted.replace(/}\n{/g, '}\n\n{');
504
+
505
+ return formatted.trim();
506
+ }
507
+
508
+ /**
509
+ * Add generation metadata as comments
510
+ */
511
+ addGenerationMetadata(content, component, config) {
512
+ const metadata = `
513
+ // Generated by AIOS Test Generator
514
+ // Generated at: ${new Date().toISOString()}
515
+ // Component: ${component.type}/${component.name}
516
+ // Framework: ${config.framework}
517
+ // Quality Level: ${config.qualityLevel}
518
+
519
+ ${content}`;
520
+
521
+ return metadata;
522
+ }
523
+
524
+ /**
525
+ * Validate test syntax
526
+ */
527
+ async validateTestSyntax(content, framework) {
528
+ try {
529
+ // Basic syntax validation
530
+ if (framework === 'jest' || framework === 'vitest') {
531
+ // Check for required Jest/Vitest patterns
532
+ if (!content.includes('describe(') && !content.includes('test(') && !content.includes('it(')) {
533
+ throw new Error('No test cases found');
534
+ }
535
+ } else if (framework === 'mocha') {
536
+ // Check for required Mocha patterns
537
+ if (!content.includes('describe(') && !content.includes('it(')) {
538
+ throw new Error('No test cases found');
539
+ }
540
+ }
541
+
542
+ // Check for balanced brackets
543
+ const openBrackets = (content.match(/\{/g) || []).length;
544
+ const closeBrackets = (content.match(/\}/g) || []).length;
545
+
546
+ if (openBrackets !== closeBrackets) {
547
+ throw new Error('Unbalanced brackets in generated test');
548
+ }
549
+
550
+ } catch (_error) {
551
+ console.warn(chalk.yellow(`Test syntax validation warning: ${error.message}`));
552
+ }
553
+ }
554
+
555
+ // Helper methods for content injection and analysis
556
+
557
+ injectAdditionalTestCases(content, testCases) {
558
+ if (testCases.length === 0) return content;
559
+
560
+ const additionalTests = testCases.map(testCase => {
561
+ let caseContent = ` it('${testCase.name}', async () => {\n`;
562
+
563
+ if (testCase.setup) {
564
+ caseContent += ` ${testCase.setup}\n\n`;
565
+ }
566
+
567
+ caseContent += testCase.assertions.map(assertion => ` ${assertion}`).join('\n');
568
+ caseContent += '\n });';
569
+
570
+ return caseContent;
571
+ }).join('\n\n');
572
+
573
+ // Find insertion point (before closing of describe block)
574
+ const insertionPoint = content.lastIndexOf('});');
575
+ if (insertionPoint !== -1) {
576
+ return content.slice(0, insertionPoint) + '\n\n' + additionalTests + '\n\n' + content.slice(insertionPoint);
577
+ }
578
+
579
+ return content + '\n\n' + additionalTests;
580
+ }
581
+
582
+ injectDynamicImports(content, imports) {
583
+ if (!imports) return content;
584
+
585
+ const importSection = imports.join('\n');
586
+ const existingImports = content.match(/^(const|import|require).*$/gm);
587
+
588
+ if (existingImports && existingImports.length > 0) {
589
+ // Add after existing imports
590
+ const lastImportIndex = content.lastIndexOf(existingImports[existingImports.length - 1]);
591
+ const insertionPoint = lastImportIndex + existingImports[existingImports.length - 1].length;
592
+ return content.slice(0, insertionPoint) + '\n' + importSection + content.slice(insertionPoint);
593
+ } else {
594
+ // Add at the beginning
595
+ return importSection + '\n\n' + content;
596
+ }
597
+ }
598
+
599
+ injectSetupTeardown(content, setupTeardown) {
600
+ if (!setupTeardown) return content;
601
+
602
+ let injected = content;
603
+
604
+ // Find describe block and inject setup/teardown
605
+ const describeMatch = content.match(/describe\([^{]+\{/);
606
+ if (describeMatch) {
607
+ const insertionPoint = describeMatch.index + describeMatch[0].length;
608
+ injected = content.slice(0, insertionPoint) + '\n' + setupTeardown + content.slice(insertionPoint);
609
+ }
610
+
611
+ return injected;
612
+ }
613
+
614
+ // Component analysis helper methods
615
+
616
+ extractExports(content) {
617
+ const exports = [];
618
+
619
+ // Extract module.exports
620
+ const moduleExports = content.match(/module\.exports\s*=\s*([^;]+)/);
621
+ if (moduleExports) {
622
+ exports.push({ type: 'module.exports', value: moduleExports[1] });
623
+ }
624
+
625
+ // Extract named exports
626
+ const namedExports = content.match(/exports\.(\w+)/g);
627
+ if (namedExports) {
628
+ namedExports.forEach(exp => {
629
+ const name = exp.replace('exports.', '');
630
+ exports.push({ type: 'named', name: name });
631
+ });
632
+ }
633
+
634
+ return exports;
635
+ }
636
+
637
+ extractFunctions(content) {
638
+ const functions = [];
639
+
640
+ // Extract function declarations
641
+ const functionDeclarations = content.match(/(?:async\s+)?function\s+(\w+)\s*\([^)]*\)/g);
642
+ if (functionDeclarations) {
643
+ functionDeclarations.forEach(func => {
644
+ const match = func.match(/(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)/);
645
+ if (match) {
646
+ functions.push({
647
+ name: match[1],
648
+ parameters: match[2] ? match[2].split(',').map(p => p.trim()) : [],
649
+ async: func.includes('async'),
650
+ visibility: 'public',
651
+ });
652
+ }
653
+ });
654
+ }
655
+
656
+ // Extract arrow functions
657
+ const arrowFunctions = content.match(/(\w+)\s*=\s*(?:async\s+)?\([^)]*\)\s*=>/g);
658
+ if (arrowFunctions) {
659
+ arrowFunctions.forEach(func => {
660
+ const match = func.match(/(\w+)\s*=\s*(async\s+)?\(([^)]*)\)\s*=>/);
661
+ if (match) {
662
+ functions.push({
663
+ name: match[1],
664
+ parameters: match[3] ? match[3].split(',').map(p => p.trim()) : [],
665
+ async: !!match[2],
666
+ visibility: 'public',
667
+ });
668
+ }
669
+ });
670
+ }
671
+
672
+ return functions;
673
+ }
674
+
675
+ extractClasses(content) {
676
+ const classes = [];
677
+
678
+ const classDeclarations = content.match(/class\s+(\w+)(?:\s+extends\s+\w+)?\s*\{[^}]*\}/g);
679
+ if (classDeclarations) {
680
+ classDeclarations.forEach(cls => {
681
+ const nameMatch = cls.match(/class\s+(\w+)/);
682
+ if (nameMatch) {
683
+ const methods = cls.match(/(\w+)\s*\([^)]*\)\s*\{/g) || [];
684
+ classes.push({
685
+ name: nameMatch[1],
686
+ methods: methods.map(method => {
687
+ const methodMatch = method.match(/(\w+)\s*\(/);
688
+ return {
689
+ name: methodMatch ? methodMatch[1] : 'unknown',
690
+ async: method.includes('async'),
691
+ };
692
+ }).filter(m => m.name !== 'constructor'),
693
+ });
694
+ }
695
+ });
696
+ }
697
+
698
+ return classes;
699
+ }
700
+
701
+ extractDependencies(content) {
702
+ const dependencies = [];
703
+
704
+ const requires = content.match(/require\(['"]([^'"]+)['"]\)/g);
705
+ if (requires) {
706
+ requires.forEach(req => {
707
+ const match = req.match(/require\(['"]([^'"]+)['"]\)/);
708
+ if (match) {
709
+ dependencies.push({
710
+ name: match[1],
711
+ type: match[1].startsWith('./') || match[1].startsWith('../') ? 'local' : 'external',
712
+ });
713
+ }
714
+ });
715
+ }
716
+
717
+ return dependencies;
718
+ }
719
+
720
+ extractAgentConfig(content) {
721
+ const yamlMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
722
+ if (yamlMatch) {
723
+ try {
724
+ const yaml = require('js-yaml');
725
+ return yaml.load(yamlMatch[1]);
726
+ } catch (_error) {
727
+ return null;
728
+ }
729
+ }
730
+ return null;
731
+ }
732
+
733
+ extractWorkflowConfig(content) {
734
+ try {
735
+ const yaml = require('js-yaml');
736
+ return yaml.load(content);
737
+ } catch (_error) {
738
+ return null;
739
+ }
740
+ }
741
+
742
+ extractTaskConfig(content) {
743
+ // Extract YAML frontmatter from task markdown
744
+ return this.extractAgentConfig(content);
745
+ }
746
+
747
+ generateDynamicImports(componentAnalysis, config) {
748
+ const imports = [];
749
+
750
+ // Add imports for dependencies
751
+ for (const dep of componentAnalysis.dependencies) {
752
+ if (dep.type === 'local') {
753
+ imports.push(`const ${this.toVariableName(dep.name)} = require('${dep.name}');`);
754
+ }
755
+ }
756
+
757
+ // Add framework-specific test utilities
758
+ if (config.framework === 'jest') {
759
+ if (componentAnalysis.async_operations) {
760
+ imports.push('const { jest } = require(\'@jest/globals\');');
761
+ }
762
+ }
763
+
764
+ return imports.length > 0 ? imports : null;
765
+ }
766
+
767
+ generateSetupTeardown(componentAnalysis, testType) {
768
+ const setup = [];
769
+
770
+ if (componentAnalysis.type === 'util' && componentAnalysis.classes.length > 0) {
771
+ setup.push(' let instance;\n');
772
+ setup.push(` beforeEach(() => {\n instance = new ${componentAnalysis.classes[0].name}();\n });\n`);
773
+ setup.push(' afterEach(() => {\n if (instance && instance.cleanup) instance.cleanup();\n });\n');
774
+ }
775
+
776
+ return setup.length > 0 ? setup.join('\n') : null;
777
+ }
778
+
779
+ // Utility methods
780
+
781
+ validateGenerationInputs(component, testFile, config) {
782
+ if (!component || !component.name) {
783
+ throw new Error('Invalid component: missing name');
784
+ }
785
+
786
+ if (!testFile || !testFile.test_type) {
787
+ throw new Error('Invalid test file: missing test_type');
788
+ }
789
+
790
+ if (!config || !config.framework) {
791
+ throw new Error('Invalid config: missing framework');
792
+ }
793
+
794
+ const validFrameworks = ['jest', 'mocha', 'vitest'];
795
+ if (!validFrameworks.includes(config.framework)) {
796
+ throw new Error(`Unsupported framework: ${config.framework}`);
797
+ }
798
+ }
799
+
800
+ updateGenerationStats(success, duration) {
801
+ this.generationStats.total_generated++;
802
+ if (success) {
803
+ this.generationStats.successful++;
804
+ } else {
805
+ this.generationStats.failed++;
806
+ }
807
+ this.generationStats.generation_time += duration;
808
+ }
809
+
810
+ toClassName(name) {
811
+ return name.split('-')
812
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1))
813
+ .join('');
814
+ }
815
+
816
+ toVariableName(_path) {
817
+ return path.split('/').pop().replace(/[-\.]/g, '_');
818
+ }
819
+
820
+ /**
821
+ * Get generation statistics
822
+ */
823
+ getGenerationStats() {
824
+ return {
825
+ ...this.generationStats,
826
+ success_rate: this.generationStats.total_generated > 0
827
+ ? this.generationStats.successful / this.generationStats.total_generated
828
+ : 0,
829
+ average_generation_time: this.generationStats.total_generated > 0
830
+ ? this.generationStats.generation_time / this.generationStats.total_generated
831
+ : 0,
832
+ };
833
+ }
834
+
835
+ /**
836
+ * Clear generation cache
837
+ */
838
+ clearCache() {
839
+ this.generationCache.clear();
840
+ console.log(chalk.gray('Test generation cache cleared'));
841
+ }
842
+ }
843
+
844
+ module.exports = TestGenerator;