specforge-mcp 0.11.0 → 0.12.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 (431) hide show
  1. package/dist/engine/agent-generator.test.d.ts +2 -0
  2. package/dist/engine/agent-generator.test.d.ts.map +1 -0
  3. package/dist/engine/agent-generator.test.js +556 -0
  4. package/dist/engine/agent-generator.test.js.map +1 -0
  5. package/dist/engine/analyzer.test.d.ts +2 -0
  6. package/dist/engine/analyzer.test.d.ts.map +1 -0
  7. package/dist/engine/analyzer.test.js +1461 -0
  8. package/dist/engine/analyzer.test.js.map +1 -0
  9. package/dist/engine/auditor.test.d.ts +2 -0
  10. package/dist/engine/auditor.test.d.ts.map +1 -0
  11. package/dist/engine/auditor.test.js +2075 -0
  12. package/dist/engine/auditor.test.js.map +1 -0
  13. package/dist/engine/context-budget/checkpoint.d.ts +8 -0
  14. package/dist/engine/context-budget/checkpoint.d.ts.map +1 -0
  15. package/dist/engine/context-budget/checkpoint.js +79 -0
  16. package/dist/engine/context-budget/checkpoint.js.map +1 -0
  17. package/dist/engine/context-budget/compressor.d.ts +20 -0
  18. package/dist/engine/context-budget/compressor.d.ts.map +1 -0
  19. package/dist/engine/context-budget/compressor.js +122 -0
  20. package/dist/engine/context-budget/compressor.js.map +1 -0
  21. package/dist/engine/context-budget/index.d.ts +5 -0
  22. package/dist/engine/context-budget/index.d.ts.map +1 -0
  23. package/dist/engine/context-budget/index.js +6 -0
  24. package/dist/engine/context-budget/index.js.map +1 -0
  25. package/dist/engine/context-budget/optimizer.d.ts +8 -0
  26. package/dist/engine/context-budget/optimizer.d.ts.map +1 -0
  27. package/dist/engine/context-budget/optimizer.js +87 -0
  28. package/dist/engine/context-budget/optimizer.js.map +1 -0
  29. package/dist/engine/context-budget/tracker.d.ts +19 -0
  30. package/dist/engine/context-budget/tracker.d.ts.map +1 -0
  31. package/dist/engine/context-budget/tracker.js +113 -0
  32. package/dist/engine/context-budget/tracker.js.map +1 -0
  33. package/dist/engine/doc-generator.test.d.ts +2 -0
  34. package/dist/engine/doc-generator.test.d.ts.map +1 -0
  35. package/dist/engine/doc-generator.test.js +961 -0
  36. package/dist/engine/doc-generator.test.js.map +1 -0
  37. package/dist/engine/estimator.test.d.ts +2 -0
  38. package/dist/engine/estimator.test.d.ts.map +1 -0
  39. package/dist/engine/estimator.test.js +334 -0
  40. package/dist/engine/estimator.test.js.map +1 -0
  41. package/dist/engine/skill-generator.test.d.ts +2 -0
  42. package/dist/engine/skill-generator.test.d.ts.map +1 -0
  43. package/dist/engine/skill-generator.test.js +742 -0
  44. package/dist/engine/skill-generator.test.js.map +1 -0
  45. package/dist/engine/test-spec-generator/criterion-parser.d.ts +6 -0
  46. package/dist/engine/test-spec-generator/criterion-parser.d.ts.map +1 -0
  47. package/dist/engine/test-spec-generator/criterion-parser.js +96 -0
  48. package/dist/engine/test-spec-generator/criterion-parser.js.map +1 -0
  49. package/dist/engine/{test-spec-generator.d.ts → test-spec-generator/index.d.ts} +5 -2
  50. package/dist/engine/test-spec-generator/index.d.ts.map +1 -0
  51. package/dist/engine/test-spec-generator/index.js +29 -0
  52. package/dist/engine/test-spec-generator/index.js.map +1 -0
  53. package/dist/engine/test-spec-generator/labels.d.ts +5 -0
  54. package/dist/engine/test-spec-generator/labels.d.ts.map +1 -0
  55. package/dist/engine/test-spec-generator/labels.js +62 -0
  56. package/dist/engine/test-spec-generator/labels.js.map +1 -0
  57. package/dist/engine/test-spec-generator/scenario-builders.d.ts +3 -0
  58. package/dist/engine/test-spec-generator/scenario-builders.d.ts.map +1 -0
  59. package/dist/engine/test-spec-generator/scenario-builders.js +184 -0
  60. package/dist/engine/test-spec-generator/scenario-builders.js.map +1 -0
  61. package/dist/engine/validator.test.d.ts +2 -0
  62. package/dist/engine/validator.test.d.ts.map +1 -0
  63. package/dist/engine/validator.test.js +2371 -0
  64. package/dist/engine/validator.test.js.map +1 -0
  65. package/dist/engine/web-fetcher.test.d.ts +2 -0
  66. package/dist/engine/web-fetcher.test.d.ts.map +1 -0
  67. package/dist/engine/web-fetcher.test.js +360 -0
  68. package/dist/engine/web-fetcher.test.js.map +1 -0
  69. package/dist/i18n/index.test.d.ts +2 -0
  70. package/dist/i18n/index.test.d.ts.map +1 -0
  71. package/dist/i18n/index.test.js +375 -0
  72. package/dist/i18n/index.test.js.map +1 -0
  73. package/dist/index.js +0 -0
  74. package/dist/index.test.d.ts +2 -0
  75. package/dist/index.test.d.ts.map +1 -0
  76. package/dist/index.test.js +124 -0
  77. package/dist/index.test.js.map +1 -0
  78. package/dist/resources/patterns.test.d.ts +2 -0
  79. package/dist/resources/patterns.test.d.ts.map +1 -0
  80. package/dist/resources/patterns.test.js +142 -0
  81. package/dist/resources/patterns.test.js.map +1 -0
  82. package/dist/resources/process.test.d.ts +2 -0
  83. package/dist/resources/process.test.d.ts.map +1 -0
  84. package/dist/resources/process.test.js +48 -0
  85. package/dist/resources/process.test.js.map +1 -0
  86. package/dist/resources/registry.test.d.ts +2 -0
  87. package/dist/resources/registry.test.d.ts.map +1 -0
  88. package/dist/resources/registry.test.js +138 -0
  89. package/dist/resources/registry.test.js.map +1 -0
  90. package/dist/resources/specs.test.d.ts +2 -0
  91. package/dist/resources/specs.test.d.ts.map +1 -0
  92. package/dist/resources/specs.test.js +130 -0
  93. package/dist/resources/specs.test.js.map +1 -0
  94. package/dist/resources/templates.test.d.ts +2 -0
  95. package/dist/resources/templates.test.d.ts.map +1 -0
  96. package/dist/resources/templates.test.js +119 -0
  97. package/dist/resources/templates.test.js.map +1 -0
  98. package/dist/smoke.test.d.ts +2 -0
  99. package/dist/smoke.test.d.ts.map +1 -0
  100. package/dist/smoke.test.js +229 -0
  101. package/dist/smoke.test.js.map +1 -0
  102. package/dist/storage/base-store.test.d.ts +2 -0
  103. package/dist/storage/base-store.test.d.ts.map +1 -0
  104. package/dist/storage/base-store.test.js +180 -0
  105. package/dist/storage/base-store.test.js.map +1 -0
  106. package/dist/storage/checkpoint-store.d.ts +12 -0
  107. package/dist/storage/checkpoint-store.d.ts.map +1 -0
  108. package/dist/storage/checkpoint-store.js +85 -0
  109. package/dist/storage/checkpoint-store.js.map +1 -0
  110. package/dist/storage/global-store.test.d.ts +2 -0
  111. package/dist/storage/global-store.test.d.ts.map +1 -0
  112. package/dist/storage/global-store.test.js +327 -0
  113. package/dist/storage/global-store.test.js.map +1 -0
  114. package/dist/storage/index.test.d.ts +2 -0
  115. package/dist/storage/index.test.d.ts.map +1 -0
  116. package/dist/storage/index.test.js +56 -0
  117. package/dist/storage/index.test.js.map +1 -0
  118. package/dist/storage/knowledge-store.test.d.ts +2 -0
  119. package/dist/storage/knowledge-store.test.d.ts.map +1 -0
  120. package/dist/storage/knowledge-store.test.js +368 -0
  121. package/dist/storage/knowledge-store.test.js.map +1 -0
  122. package/dist/storage/metrics-store.test.d.ts +2 -0
  123. package/dist/storage/metrics-store.test.d.ts.map +1 -0
  124. package/dist/storage/metrics-store.test.js +212 -0
  125. package/dist/storage/metrics-store.test.js.map +1 -0
  126. package/dist/storage/pattern-store.test.d.ts +2 -0
  127. package/dist/storage/pattern-store.test.d.ts.map +1 -0
  128. package/dist/storage/pattern-store.test.js +224 -0
  129. package/dist/storage/pattern-store.test.js.map +1 -0
  130. package/dist/storage/spec-store.test.d.ts +2 -0
  131. package/dist/storage/spec-store.test.d.ts.map +1 -0
  132. package/dist/storage/spec-store.test.js +227 -0
  133. package/dist/storage/spec-store.test.js.map +1 -0
  134. package/dist/tools/audit.test.d.ts +2 -0
  135. package/dist/tools/audit.test.d.ts.map +1 -0
  136. package/dist/tools/audit.test.js +169 -0
  137. package/dist/tools/audit.test.js.map +1 -0
  138. package/dist/tools/challenge-spec.test.d.ts +2 -0
  139. package/dist/tools/challenge-spec.test.d.ts.map +1 -0
  140. package/dist/tools/challenge-spec.test.js +782 -0
  141. package/dist/tools/challenge-spec.test.js.map +1 -0
  142. package/dist/tools/check-versions.test.d.ts +2 -0
  143. package/dist/tools/check-versions.test.d.ts.map +1 -0
  144. package/dist/tools/check-versions.test.js +214 -0
  145. package/dist/tools/check-versions.test.js.map +1 -0
  146. package/dist/tools/clarify-requirements.test.d.ts +2 -0
  147. package/dist/tools/clarify-requirements.test.d.ts.map +1 -0
  148. package/dist/tools/clarify-requirements.test.js +161 -0
  149. package/dist/tools/clarify-requirements.test.js.map +1 -0
  150. package/dist/tools/consult-docs.test.d.ts +2 -0
  151. package/dist/tools/consult-docs.test.d.ts.map +1 -0
  152. package/dist/tools/consult-docs.test.js +140 -0
  153. package/dist/tools/consult-docs.test.js.map +1 -0
  154. package/dist/tools/context-budget.d.ts +3 -0
  155. package/dist/tools/context-budget.d.ts.map +1 -0
  156. package/dist/tools/context-budget.js +131 -0
  157. package/dist/tools/context-budget.js.map +1 -0
  158. package/dist/tools/create-spec.test.d.ts +2 -0
  159. package/dist/tools/create-spec.test.d.ts.map +1 -0
  160. package/dist/tools/create-spec.test.js +233 -0
  161. package/dist/tools/create-spec.test.js.map +1 -0
  162. package/dist/tools/define-ui-contract.test.d.ts +2 -0
  163. package/dist/tools/define-ui-contract.test.d.ts.map +1 -0
  164. package/dist/tools/define-ui-contract.test.js +479 -0
  165. package/dist/tools/define-ui-contract.test.js.map +1 -0
  166. package/dist/tools/design-schema.test.d.ts +2 -0
  167. package/dist/tools/design-schema.test.d.ts.map +1 -0
  168. package/dist/tools/design-schema.test.js +301 -0
  169. package/dist/tools/design-schema.test.js.map +1 -0
  170. package/dist/tools/detect-agent.test.d.ts +2 -0
  171. package/dist/tools/detect-agent.test.d.ts.map +1 -0
  172. package/dist/tools/detect-agent.test.js +133 -0
  173. package/dist/tools/detect-agent.test.js.map +1 -0
  174. package/dist/tools/detect-drift.test.d.ts +2 -0
  175. package/dist/tools/detect-drift.test.d.ts.map +1 -0
  176. package/dist/tools/detect-drift.test.js +312 -0
  177. package/dist/tools/detect-drift.test.js.map +1 -0
  178. package/dist/tools/discover-mcps.test.d.ts +2 -0
  179. package/dist/tools/discover-mcps.test.d.ts.map +1 -0
  180. package/dist/tools/discover-mcps.test.js +345 -0
  181. package/dist/tools/discover-mcps.test.js.map +1 -0
  182. package/dist/tools/estimate.test.d.ts +2 -0
  183. package/dist/tools/estimate.test.d.ts.map +1 -0
  184. package/dist/tools/estimate.test.js +137 -0
  185. package/dist/tools/estimate.test.js.map +1 -0
  186. package/dist/tools/generate-adr.test.d.ts +2 -0
  187. package/dist/tools/generate-adr.test.d.ts.map +1 -0
  188. package/dist/tools/generate-adr.test.js +206 -0
  189. package/dist/tools/generate-adr.test.js.map +1 -0
  190. package/dist/tools/generate-checklist.test.d.ts +2 -0
  191. package/dist/tools/generate-checklist.test.d.ts.map +1 -0
  192. package/dist/tools/generate-checklist.test.js +201 -0
  193. package/dist/tools/generate-checklist.test.js.map +1 -0
  194. package/dist/tools/generate-docs.test.d.ts +2 -0
  195. package/dist/tools/generate-docs.test.d.ts.map +1 -0
  196. package/dist/tools/generate-docs.test.js +183 -0
  197. package/dist/tools/generate-docs.test.js.map +1 -0
  198. package/dist/tools/generate-execution-plan.test.d.ts +2 -0
  199. package/dist/tools/generate-execution-plan.test.d.ts.map +1 -0
  200. package/dist/tools/generate-execution-plan.test.js +643 -0
  201. package/dist/tools/generate-execution-plan.test.js.map +1 -0
  202. package/dist/tools/generate-rules.test.d.ts +2 -0
  203. package/dist/tools/generate-rules.test.d.ts.map +1 -0
  204. package/dist/tools/generate-rules.test.js +148 -0
  205. package/dist/tools/generate-rules.test.js.map +1 -0
  206. package/dist/tools/generate-skill.test.d.ts +2 -0
  207. package/dist/tools/generate-skill.test.d.ts.map +1 -0
  208. package/dist/tools/generate-skill.test.js +138 -0
  209. package/dist/tools/generate-skill.test.js.map +1 -0
  210. package/dist/tools/generate-sub-agent.test.d.ts +2 -0
  211. package/dist/tools/generate-sub-agent.test.d.ts.map +1 -0
  212. package/dist/tools/generate-sub-agent.test.js +162 -0
  213. package/dist/tools/generate-sub-agent.test.js.map +1 -0
  214. package/dist/tools/generate-tests/dispatchers/ai-ml-dispatcher.d.ts +3 -0
  215. package/dist/tools/generate-tests/dispatchers/ai-ml-dispatcher.d.ts.map +1 -0
  216. package/dist/tools/generate-tests/dispatchers/ai-ml-dispatcher.js +33 -0
  217. package/dist/tools/generate-tests/dispatchers/ai-ml-dispatcher.js.map +1 -0
  218. package/dist/tools/generate-tests/dispatchers/database-security-dispatcher.d.ts +5 -0
  219. package/dist/tools/generate-tests/dispatchers/database-security-dispatcher.d.ts.map +1 -0
  220. package/dist/tools/generate-tests/dispatchers/database-security-dispatcher.js +25 -0
  221. package/dist/tools/generate-tests/dispatchers/database-security-dispatcher.js.map +1 -0
  222. package/dist/tools/generate-tests/dispatchers/distributed-dispatcher.d.ts +3 -0
  223. package/dist/tools/generate-tests/dispatchers/distributed-dispatcher.d.ts.map +1 -0
  224. package/dist/tools/generate-tests/dispatchers/distributed-dispatcher.js +29 -0
  225. package/dist/tools/generate-tests/dispatchers/distributed-dispatcher.js.map +1 -0
  226. package/dist/tools/generate-tests/dispatchers/frontend-dispatcher.d.ts +3 -0
  227. package/dist/tools/generate-tests/dispatchers/frontend-dispatcher.d.ts.map +1 -0
  228. package/dist/tools/generate-tests/dispatchers/frontend-dispatcher.js +34 -0
  229. package/dist/tools/generate-tests/dispatchers/frontend-dispatcher.js.map +1 -0
  230. package/dist/tools/generate-tests/dispatchers/infra-dispatcher.d.ts +3 -0
  231. package/dist/tools/generate-tests/dispatchers/infra-dispatcher.d.ts.map +1 -0
  232. package/dist/tools/generate-tests/dispatchers/infra-dispatcher.js +37 -0
  233. package/dist/tools/generate-tests/dispatchers/infra-dispatcher.js.map +1 -0
  234. package/dist/tools/generate-tests/dispatchers/protocols-dispatcher.d.ts +3 -0
  235. package/dist/tools/generate-tests/dispatchers/protocols-dispatcher.d.ts.map +1 -0
  236. package/dist/tools/generate-tests/dispatchers/protocols-dispatcher.js +27 -0
  237. package/dist/tools/generate-tests/dispatchers/protocols-dispatcher.js.map +1 -0
  238. package/dist/tools/generate-tests/generators/database/detectors.d.ts +6 -0
  239. package/dist/tools/generate-tests/generators/database/detectors.d.ts.map +1 -0
  240. package/dist/tools/generate-tests/generators/database/detectors.js +36 -0
  241. package/dist/tools/generate-tests/generators/database/detectors.js.map +1 -0
  242. package/dist/tools/generate-tests/generators/database/index.d.ts +8 -0
  243. package/dist/tools/generate-tests/generators/database/index.d.ts.map +1 -0
  244. package/dist/tools/generate-tests/generators/database/index.js +29 -0
  245. package/dist/tools/generate-tests/generators/database/index.js.map +1 -0
  246. package/dist/tools/generate-tests/generators/database/python-scaffold.d.ts +2 -0
  247. package/dist/tools/generate-tests/generators/database/python-scaffold.d.ts.map +1 -0
  248. package/dist/tools/generate-tests/generators/database/python-scaffold.js +104 -0
  249. package/dist/tools/generate-tests/generators/database/python-scaffold.js.map +1 -0
  250. package/dist/tools/generate-tests/generators/database/test-defs.d.ts +3 -0
  251. package/dist/tools/generate-tests/generators/database/test-defs.d.ts.map +1 -0
  252. package/dist/tools/generate-tests/generators/database/test-defs.js +57 -0
  253. package/dist/tools/generate-tests/generators/database/test-defs.js.map +1 -0
  254. package/dist/tools/generate-tests/generators/database/ts-scaffold.d.ts +2 -0
  255. package/dist/tools/generate-tests/generators/database/ts-scaffold.d.ts.map +1 -0
  256. package/dist/tools/generate-tests/generators/database/ts-scaffold.js +118 -0
  257. package/dist/tools/generate-tests/generators/database/ts-scaffold.js.map +1 -0
  258. package/dist/tools/generate-tests/generators/microservices/detectors.d.ts +5 -0
  259. package/dist/tools/generate-tests/generators/microservices/detectors.d.ts.map +1 -0
  260. package/dist/tools/generate-tests/generators/microservices/detectors.js +47 -0
  261. package/dist/tools/generate-tests/generators/microservices/detectors.js.map +1 -0
  262. package/dist/tools/generate-tests/generators/microservices/index.d.ts +8 -0
  263. package/dist/tools/generate-tests/generators/microservices/index.d.ts.map +1 -0
  264. package/dist/tools/generate-tests/generators/microservices/index.js +26 -0
  265. package/dist/tools/generate-tests/generators/microservices/index.js.map +1 -0
  266. package/dist/tools/generate-tests/generators/microservices/python-scaffold.d.ts +2 -0
  267. package/dist/tools/generate-tests/generators/microservices/python-scaffold.d.ts.map +1 -0
  268. package/dist/tools/generate-tests/generators/microservices/python-scaffold.js +98 -0
  269. package/dist/tools/generate-tests/generators/microservices/python-scaffold.js.map +1 -0
  270. package/dist/tools/generate-tests/generators/microservices/test-defs.d.ts +3 -0
  271. package/dist/tools/generate-tests/generators/microservices/test-defs.d.ts.map +1 -0
  272. package/dist/tools/generate-tests/generators/microservices/test-defs.js +61 -0
  273. package/dist/tools/generate-tests/generators/microservices/test-defs.js.map +1 -0
  274. package/dist/tools/generate-tests/generators/microservices/ts-scaffold.d.ts +2 -0
  275. package/dist/tools/generate-tests/generators/microservices/ts-scaffold.d.ts.map +1 -0
  276. package/dist/tools/generate-tests/generators/microservices/ts-scaffold.js +123 -0
  277. package/dist/tools/generate-tests/generators/microservices/ts-scaffold.js.map +1 -0
  278. package/dist/tools/generate-tests/generators/security/detectors.d.ts +8 -0
  279. package/dist/tools/generate-tests/generators/security/detectors.d.ts.map +1 -0
  280. package/dist/tools/generate-tests/generators/security/detectors.js +61 -0
  281. package/dist/tools/generate-tests/generators/security/detectors.js.map +1 -0
  282. package/dist/tools/generate-tests/generators/security/index.d.ts +8 -0
  283. package/dist/tools/generate-tests/generators/security/index.d.ts.map +1 -0
  284. package/dist/tools/generate-tests/generators/security/index.js +28 -0
  285. package/dist/tools/generate-tests/generators/security/index.js.map +1 -0
  286. package/dist/tools/generate-tests/generators/security/python-scaffold.d.ts +2 -0
  287. package/dist/tools/generate-tests/generators/security/python-scaffold.d.ts.map +1 -0
  288. package/dist/tools/generate-tests/generators/security/python-scaffold.js +89 -0
  289. package/dist/tools/generate-tests/generators/security/python-scaffold.js.map +1 -0
  290. package/dist/tools/generate-tests/generators/security/test-defs.d.ts +3 -0
  291. package/dist/tools/generate-tests/generators/security/test-defs.d.ts.map +1 -0
  292. package/dist/tools/generate-tests/generators/security/test-defs.js +48 -0
  293. package/dist/tools/generate-tests/generators/security/test-defs.js.map +1 -0
  294. package/dist/tools/generate-tests/generators/security/ts-scaffold.d.ts +2 -0
  295. package/dist/tools/generate-tests/generators/security/ts-scaffold.d.ts.map +1 -0
  296. package/dist/tools/generate-tests/generators/security/ts-scaffold.js +107 -0
  297. package/dist/tools/generate-tests/generators/security/ts-scaffold.js.map +1 -0
  298. package/dist/tools/generate-tests/spec-dispatcher.d.ts.map +1 -1
  299. package/dist/tools/generate-tests/spec-dispatcher.js +14 -166
  300. package/dist/tools/generate-tests/spec-dispatcher.js.map +1 -1
  301. package/dist/tools/generate-tests.test.d.ts +2 -0
  302. package/dist/tools/generate-tests.test.d.ts.map +1 -0
  303. package/dist/tools/generate-tests.test.js +222 -0
  304. package/dist/tools/generate-tests.test.js.map +1 -0
  305. package/dist/tools/init-constitution.test.d.ts +2 -0
  306. package/dist/tools/init-constitution.test.d.ts.map +1 -0
  307. package/dist/tools/init-constitution.test.js +398 -0
  308. package/dist/tools/init-constitution.test.js.map +1 -0
  309. package/dist/tools/init-project.test.d.ts +2 -0
  310. package/dist/tools/init-project.test.d.ts.map +1 -0
  311. package/dist/tools/init-project.test.js +158 -0
  312. package/dist/tools/init-project.test.js.map +1 -0
  313. package/dist/tools/integrate-pm.test.d.ts +2 -0
  314. package/dist/tools/integrate-pm.test.d.ts.map +1 -0
  315. package/dist/tools/integrate-pm.test.js +558 -0
  316. package/dist/tools/integrate-pm.test.js.map +1 -0
  317. package/dist/tools/learn.test.d.ts +2 -0
  318. package/dist/tools/learn.test.d.ts.map +1 -0
  319. package/dist/tools/learn.test.js +123 -0
  320. package/dist/tools/learn.test.js.map +1 -0
  321. package/dist/tools/list-specs.test.d.ts +2 -0
  322. package/dist/tools/list-specs.test.d.ts.map +1 -0
  323. package/dist/tools/list-specs.test.js +110 -0
  324. package/dist/tools/list-specs.test.js.map +1 -0
  325. package/dist/tools/manage-context.test.d.ts +2 -0
  326. package/dist/tools/manage-context.test.d.ts.map +1 -0
  327. package/dist/tools/manage-context.test.js +359 -0
  328. package/dist/tools/manage-context.test.js.map +1 -0
  329. package/dist/tools/manage-git.test.d.ts +2 -0
  330. package/dist/tools/manage-git.test.d.ts.map +1 -0
  331. package/dist/tools/manage-git.test.js +882 -0
  332. package/dist/tools/manage-git.test.js.map +1 -0
  333. package/dist/tools/orchestrate.test.d.ts +2 -0
  334. package/dist/tools/orchestrate.test.d.ts.map +1 -0
  335. package/dist/tools/orchestrate.test.js +1117 -0
  336. package/dist/tools/orchestrate.test.js.map +1 -0
  337. package/dist/tools/reconcile-spec.test.d.ts +2 -0
  338. package/dist/tools/reconcile-spec.test.d.ts.map +1 -0
  339. package/dist/tools/reconcile-spec.test.js +259 -0
  340. package/dist/tools/reconcile-spec.test.js.map +1 -0
  341. package/dist/tools/register-platform-tools/lifecycle-infra-tools.d.ts.map +1 -1
  342. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +37 -1
  343. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js.map +1 -1
  344. package/dist/tools/register-platform-tools.test.d.ts +2 -0
  345. package/dist/tools/register-platform-tools.test.d.ts.map +1 -0
  346. package/dist/tools/register-platform-tools.test.js +404 -0
  347. package/dist/tools/register-platform-tools.test.js.map +1 -0
  348. package/dist/tools/register-spec-tools/analysis-tools.d.ts.map +1 -1
  349. package/dist/tools/register-spec-tools/analysis-tools.js +1 -0
  350. package/dist/tools/register-spec-tools/analysis-tools.js.map +1 -1
  351. package/dist/tools/register-spec-tools.test.d.ts +2 -0
  352. package/dist/tools/register-spec-tools.test.d.ts.map +1 -0
  353. package/dist/tools/register-spec-tools.test.js +407 -0
  354. package/dist/tools/register-spec-tools.test.js.map +1 -0
  355. package/dist/tools/reverse-engineer.test.d.ts +2 -0
  356. package/dist/tools/reverse-engineer.test.d.ts.map +1 -0
  357. package/dist/tools/reverse-engineer.test.js +206 -0
  358. package/dist/tools/reverse-engineer.test.js.map +1 -0
  359. package/dist/tools/schemas/index.d.ts +1 -1
  360. package/dist/tools/schemas/index.d.ts.map +1 -1
  361. package/dist/tools/schemas/index.js +1 -1
  362. package/dist/tools/schemas/index.js.map +1 -1
  363. package/dist/tools/schemas/infra.d.ts +8 -0
  364. package/dist/tools/schemas/infra.d.ts.map +1 -1
  365. package/dist/tools/schemas/infra.js +3 -0
  366. package/dist/tools/schemas/infra.js.map +1 -1
  367. package/dist/tools/schemas.d.ts +20 -0
  368. package/dist/tools/schemas.d.ts.map +1 -0
  369. package/dist/tools/schemas.js +133 -0
  370. package/dist/tools/schemas.js.map +1 -0
  371. package/dist/tools/schemas.test.d.ts +2 -0
  372. package/dist/tools/schemas.test.d.ts.map +1 -0
  373. package/dist/tools/schemas.test.js +245 -0
  374. package/dist/tools/schemas.test.js.map +1 -0
  375. package/dist/tools/set-locale.test.d.ts +2 -0
  376. package/dist/tools/set-locale.test.d.ts.map +1 -0
  377. package/dist/tools/set-locale.test.js +74 -0
  378. package/dist/tools/set-locale.test.js.map +1 -0
  379. package/dist/tools/suggest-mcps.test.d.ts +2 -0
  380. package/dist/tools/suggest-mcps.test.d.ts.map +1 -0
  381. package/dist/tools/suggest-mcps.test.js +198 -0
  382. package/dist/tools/suggest-mcps.test.js.map +1 -0
  383. package/dist/tools/suggest-stack.test.d.ts +2 -0
  384. package/dist/tools/suggest-stack.test.d.ts.map +1 -0
  385. package/dist/tools/suggest-stack.test.js +181 -0
  386. package/dist/tools/suggest-stack.test.js.map +1 -0
  387. package/dist/tools/suggest-tooling.test.d.ts +2 -0
  388. package/dist/tools/suggest-tooling.test.d.ts.map +1 -0
  389. package/dist/tools/suggest-tooling.test.js +213 -0
  390. package/dist/tools/suggest-tooling.test.js.map +1 -0
  391. package/dist/tools/summarize-spec.test.d.ts +2 -0
  392. package/dist/tools/summarize-spec.test.d.ts.map +1 -0
  393. package/dist/tools/summarize-spec.test.js +180 -0
  394. package/dist/tools/summarize-spec.test.js.map +1 -0
  395. package/dist/tools/update-status.test.d.ts +2 -0
  396. package/dist/tools/update-status.test.d.ts.map +1 -0
  397. package/dist/tools/update-status.test.js +142 -0
  398. package/dist/tools/update-status.test.js.map +1 -0
  399. package/dist/tools/validate.test.d.ts +2 -0
  400. package/dist/tools/validate.test.d.ts.map +1 -0
  401. package/dist/tools/validate.test.js +137 -0
  402. package/dist/tools/validate.test.js.map +1 -0
  403. package/dist/types/context-budget.d.ts +90 -0
  404. package/dist/types/context-budget.d.ts.map +1 -0
  405. package/dist/types/context-budget.js +3 -0
  406. package/dist/types/context-budget.js.map +1 -0
  407. package/dist/types/index.d.ts +1 -0
  408. package/dist/types/index.d.ts.map +1 -1
  409. package/dist/types/index.js +1 -0
  410. package/dist/types/index.js.map +1 -1
  411. package/dist/types/testing.d.ts +10 -0
  412. package/dist/types/testing.d.ts.map +1 -1
  413. package/package.json +1 -1
  414. package/src/i18n/messages/en.json +8 -2
  415. package/src/i18n/messages/es.json +8 -2
  416. package/src/i18n/messages/pt.json +6 -0
  417. package/dist/engine/test-spec-generator.d.ts.map +0 -1
  418. package/dist/engine/test-spec-generator.js +0 -348
  419. package/dist/engine/test-spec-generator.js.map +0 -1
  420. package/dist/tools/generate-tests/generators/database-test-generator.d.ts +0 -11
  421. package/dist/tools/generate-tests/generators/database-test-generator.d.ts.map +0 -1
  422. package/dist/tools/generate-tests/generators/database-test-generator.js +0 -329
  423. package/dist/tools/generate-tests/generators/database-test-generator.js.map +0 -1
  424. package/dist/tools/generate-tests/generators/microservices-test-generator.d.ts +0 -10
  425. package/dist/tools/generate-tests/generators/microservices-test-generator.d.ts.map +0 -1
  426. package/dist/tools/generate-tests/generators/microservices-test-generator.js +0 -341
  427. package/dist/tools/generate-tests/generators/microservices-test-generator.js.map +0 -1
  428. package/dist/tools/generate-tests/generators/security-test-generator.d.ts +0 -11
  429. package/dist/tools/generate-tests/generators/security-test-generator.d.ts.map +0 -1
  430. package/dist/tools/generate-tests/generators/security-test-generator.js +0 -318
  431. package/dist/tools/generate-tests/generators/security-test-generator.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-generator.test.d.ts","sourceRoot":"","sources":["../../src/engine/agent-generator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,556 @@
1
+ // SpecForge — Agent Generator Engine Tests
2
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
3
+ vi.mock('node:fs/promises', () => ({
4
+ readFile: vi.fn(),
5
+ }));
6
+ import { readFile } from 'node:fs/promises';
7
+ import { generateSubAgent, generateAgentSystem, getFrameworkConfig } from './agent-generator.js';
8
+ const mockedReadFile = vi.mocked(readFile);
9
+ // === Helper factories ===
10
+ function makeKnowledge(overrides = {}) {
11
+ return {
12
+ projectId: 'proj-1',
13
+ projectPath: '/home/user/my-project',
14
+ locale: 'en',
15
+ experienceLevel: 'intermediate',
16
+ language: 'typescript',
17
+ framework: 'express',
18
+ packageManager: 'npm',
19
+ buildCommand: 'npm run build',
20
+ testCommand: 'npm test',
21
+ stack: ['typescript', 'express'],
22
+ database: 'postgresql',
23
+ architecture: {
24
+ primary: 'layered',
25
+ secondary: [],
26
+ layers: [
27
+ { name: 'API', directories: ['src/routes'], responsibility: 'HTTP', dependsOn: ['Service'], neverDependsOn: [] },
28
+ { name: 'Service', directories: ['src/services'], responsibility: 'Logic', dependsOn: [], neverDependsOn: [] },
29
+ ],
30
+ boundaries: [],
31
+ communicationPatterns: ['REST'],
32
+ deploymentUnits: ['docker'],
33
+ },
34
+ apps: [],
35
+ conventions: {},
36
+ layers: ['routes', 'services'],
37
+ environments: ['development'],
38
+ apiContracts: [],
39
+ specLocation: 'docs/sdd/specs',
40
+ envSetup: {
41
+ projectId: 'proj-1',
42
+ variables: [],
43
+ missing: [],
44
+ security: { gitignoreHasEnv: true, noSecretsInCode: true, noEnvInGit: true, noSecretsInLogs: true, usesSecretManager: false, issues: [] },
45
+ setupSteps: [],
46
+ },
47
+ linting: {
48
+ projectId: 'proj-1',
49
+ language: 'typescript',
50
+ detectedLinters: [],
51
+ missingRecommended: [],
52
+ rulesConflicts: [],
53
+ customRulesFromProject: [],
54
+ maturityScore: 0.5,
55
+ },
56
+ availableMcps: [
57
+ { name: 'sdd-mcp', command: 'npx sdd-mcp', tools: ['sdd_init_project', 'sdd_create_spec'], relevantFor: ['sdd'] },
58
+ ],
59
+ docsRegistry: {},
60
+ qualityProfile: {
61
+ enabledCategories: ['solid'],
62
+ customRules: [],
63
+ principles: ['SOLID', 'DRY'],
64
+ strictness: 'standard',
65
+ },
66
+ lastAnalyzed: '2025-01-01T00:00:00Z',
67
+ ...overrides,
68
+ };
69
+ }
70
+ function makePlatformsConfig() {
71
+ return {
72
+ platforms: {},
73
+ subAgentFrameworks: {
74
+ 'claude-agent-sdk': {
75
+ name: 'Anthropic Agent SDK',
76
+ languages: ['typescript', 'python'],
77
+ docsUrl: 'https://docs.anthropic.com/en/docs/agents',
78
+ supportsHandoffs: true,
79
+ supportsMcp: true,
80
+ },
81
+ crewai: {
82
+ name: 'CrewAI',
83
+ languages: ['python'],
84
+ docsUrl: 'https://docs.crewai.com',
85
+ supportsHandoffs: true,
86
+ supportsMcp: false,
87
+ },
88
+ langgraph: {
89
+ name: 'LangGraph',
90
+ languages: ['python'],
91
+ docsUrl: 'https://langchain-ai.github.io/langgraph',
92
+ supportsHandoffs: false,
93
+ supportsMcp: true,
94
+ },
95
+ autogen: {
96
+ name: 'AutoGen',
97
+ languages: ['python'],
98
+ docsUrl: 'https://microsoft.github.io/autogen',
99
+ supportsHandoffs: false,
100
+ supportsMcp: false,
101
+ },
102
+ mastra: {
103
+ name: 'Mastra',
104
+ languages: ['typescript'],
105
+ docsUrl: 'https://mastra.ai/docs',
106
+ supportsHandoffs: false,
107
+ supportsMcp: true,
108
+ },
109
+ 'vercel-ai-sdk': {
110
+ name: 'Vercel AI SDK',
111
+ languages: ['typescript'],
112
+ docsUrl: 'https://sdk.vercel.ai/docs',
113
+ supportsHandoffs: false,
114
+ supportsMcp: false,
115
+ },
116
+ },
117
+ };
118
+ }
119
+ // === Setup ===
120
+ beforeEach(() => {
121
+ vi.resetAllMocks();
122
+ // Reset the internal cache by reloading — we'll configure mock per test
123
+ // Clear the module-level cache by forcing the config to reload via rejecting once
124
+ // Actually, the module has a `frameworksCache` variable. Since we can't directly
125
+ // reset it, we need to clear it via side-effects.
126
+ // The cache is set once and sticks. Let's mock readFile to always succeed.
127
+ });
128
+ // Helper to set up readFile to return our config
129
+ function setupConfigMock() {
130
+ mockedReadFile.mockResolvedValue(JSON.stringify(makePlatformsConfig()));
131
+ }
132
+ // === Tests ===
133
+ describe('getFrameworkConfig', () => {
134
+ it('returns config from loaded file', async () => {
135
+ setupConfigMock();
136
+ const config = await getFrameworkConfig('claude-agent-sdk');
137
+ // First call loads from file — but cache may exist from previous test
138
+ // The important thing is the result
139
+ expect(config.name).toBe('Anthropic Agent SDK');
140
+ expect(config.languages).toContain('typescript');
141
+ expect(config.supportsHandoffs).toBe(true);
142
+ expect(config.supportsMcp).toBe(true);
143
+ });
144
+ it('returns fallback for unknown framework', async () => {
145
+ setupConfigMock();
146
+ const config = await getFrameworkConfig('unknown-framework');
147
+ expect(config.name).toBe('unknown-framework');
148
+ expect(config.languages).toEqual(['typescript']);
149
+ expect(config.docsUrl).toBe('');
150
+ expect(config.supportsHandoffs).toBe(false);
151
+ expect(config.supportsMcp).toBe(false);
152
+ });
153
+ it('uses cache on second call', async () => {
154
+ setupConfigMock();
155
+ await getFrameworkConfig('claude-agent-sdk');
156
+ await getFrameworkConfig('crewai');
157
+ // readFile should only have been called at most once (due to caching)
158
+ // If cache was already warm from a previous test, it might be 0
159
+ expect(mockedReadFile.mock.calls.length).toBeLessThanOrEqual(1);
160
+ });
161
+ });
162
+ describe('generateSubAgent', () => {
163
+ beforeEach(() => {
164
+ setupConfigMock();
165
+ });
166
+ describe('claude-agent-sdk framework', () => {
167
+ it('generates agent files for claude-agent-sdk', async () => {
168
+ const knowledge = makeKnowledge();
169
+ const result = await generateSubAgent('claude-agent-sdk', 'analyzer', 'code-analyst', ['code-analysis', 'architecture-review'], knowledge, ['sdd_audit_code'], 'You are a code analyzer.');
170
+ expect(result.framework).toBe('claude-agent-sdk');
171
+ expect(result.files).toHaveLength(1);
172
+ expect(result.files[0].path).toContain('agents/analyzer.ts');
173
+ expect(result.files[0].content).toContain('Anthropic');
174
+ expect(result.files[0].content).toContain('analyzer');
175
+ expect(result.files[0].content).toContain('code-analyst');
176
+ expect(result.agentDefinition.name).toBe('analyzer');
177
+ expect(result.agentDefinition.role).toBe('code-analyst');
178
+ expect(result.agentDefinition.tools).toContain('sdd_audit_code');
179
+ expect(result.agentDefinition.systemPrompt).toBe('You are a code analyzer.');
180
+ expect(result.installInstructions).toContain('npm install @anthropic-ai/sdk');
181
+ });
182
+ it('uses custom system prompt when provided', async () => {
183
+ const knowledge = makeKnowledge();
184
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'orchestrator', ['task-routing'], knowledge, [], 'Custom prompt here.');
185
+ expect(result.agentDefinition.systemPrompt).toBe('Custom prompt here.');
186
+ });
187
+ it('builds system prompt when not provided', async () => {
188
+ const knowledge = makeKnowledge();
189
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'code-analyst', ['code-analysis'], knowledge);
190
+ expect(result.agentDefinition.systemPrompt).toContain('test-agent');
191
+ expect(result.agentDefinition.systemPrompt).toContain('code-analyst');
192
+ expect(result.agentDefinition.systemPrompt).toContain('code-analysis');
193
+ expect(result.agentDefinition.systemPrompt).toContain('typescript');
194
+ expect(result.agentDefinition.systemPrompt).toContain('express');
195
+ expect(result.agentDefinition.systemPrompt).toContain('layered');
196
+ expect(result.agentDefinition.systemPrompt).toContain('postgresql');
197
+ expect(result.agentDefinition.systemPrompt).toContain('SOLID');
198
+ });
199
+ it('omits framework in prompt when null', async () => {
200
+ const knowledge = makeKnowledge({ framework: null });
201
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'code-analyst', ['code-analysis'], knowledge);
202
+ expect(result.agentDefinition.systemPrompt).not.toContain('Framework:');
203
+ });
204
+ it('omits quality principles when empty', async () => {
205
+ const knowledge = makeKnowledge({
206
+ qualityProfile: {
207
+ enabledCategories: [],
208
+ customRules: [],
209
+ principles: [],
210
+ strictness: 'standard',
211
+ },
212
+ });
213
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'code-analyst', ['code-analysis'], knowledge);
214
+ expect(result.agentDefinition.systemPrompt).not.toContain('Quality Principles');
215
+ });
216
+ it('infers tools when none provided', async () => {
217
+ const knowledge = makeKnowledge();
218
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'code-analyst', ['code-analysis'], knowledge);
219
+ expect(result.agentDefinition.tools).toContain('read_file');
220
+ expect(result.agentDefinition.tools).toContain('write_file');
221
+ expect(result.agentDefinition.tools).toContain('list_directory');
222
+ expect(result.agentDefinition.tools).toContain('sdd_audit_code');
223
+ // MCP tools
224
+ expect(result.agentDefinition.tools).toContain('sdd_init_project');
225
+ expect(result.agentDefinition.tools).toContain('sdd_create_spec');
226
+ });
227
+ it('deduplicates inferred tools', async () => {
228
+ const knowledge = makeKnowledge();
229
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'code-analyst', ['code-analysis'], knowledge);
230
+ const unique = new Set(result.agentDefinition.tools);
231
+ expect(unique.size).toBe(result.agentDefinition.tools.length);
232
+ });
233
+ });
234
+ describe('crewai framework', () => {
235
+ it('generates CrewAI files', async () => {
236
+ const knowledge = makeKnowledge();
237
+ const result = await generateSubAgent('crewai', 'analyst', 'code-analyst', ['code-analysis'], knowledge, ['sdd_audit_code']);
238
+ expect(result.framework).toBe('crewai');
239
+ expect(result.files).toHaveLength(1);
240
+ expect(result.files[0].path).toContain('agents/analyst_agent.py');
241
+ expect(result.files[0].content).toContain('from crewai import Agent');
242
+ expect(result.files[0].content).toContain('analyst_agent');
243
+ expect(result.installInstructions).toContain('pip install crewai');
244
+ });
245
+ it('includes allow_delegation based on handoff conditions', async () => {
246
+ const knowledge = makeKnowledge();
247
+ const result = await generateSubAgent('crewai', 'coordinator', 'orchestrator', ['task-routing'], knowledge);
248
+ // orchestrator has handoff conditions
249
+ expect(result.files[0].content).toContain('allow_delegation=True');
250
+ });
251
+ it('sets allow_delegation=False when no handoff conditions', async () => {
252
+ const knowledge = makeKnowledge();
253
+ const result = await generateSubAgent('crewai', 'worker', 'documentation', ['doc-writing'], knowledge);
254
+ // documentation role has handoffConditions=[] which is truthy in JS
255
+ expect(result.files[0].content).toContain('allow_delegation=True');
256
+ });
257
+ });
258
+ describe('langgraph framework', () => {
259
+ it('generates LangGraph files', async () => {
260
+ const knowledge = makeKnowledge();
261
+ const result = await generateSubAgent('langgraph', 'processor', 'code-implementor', ['code-generation'], knowledge);
262
+ expect(result.framework).toBe('langgraph');
263
+ expect(result.files).toHaveLength(1);
264
+ expect(result.files[0].path).toContain('agents/processor_graph.py');
265
+ expect(result.files[0].content).toContain('from langgraph.graph import StateGraph');
266
+ expect(result.files[0].content).toContain('ProcessorState');
267
+ expect(result.files[0].content).toContain('processor_node');
268
+ expect(result.installInstructions).toContain('pip install langgraph');
269
+ });
270
+ });
271
+ describe('autogen framework', () => {
272
+ it('generates AutoGen files', async () => {
273
+ const knowledge = makeKnowledge();
274
+ const result = await generateSubAgent('autogen', 'reviewer', 'code-reviewer', ['code-review'], knowledge);
275
+ expect(result.framework).toBe('autogen');
276
+ expect(result.files).toHaveLength(1);
277
+ expect(result.files[0].path).toContain('agents/reviewer_autogen.py');
278
+ expect(result.files[0].content).toContain('from autogen import AssistantAgent');
279
+ expect(result.files[0].content).toContain('reviewer_agent');
280
+ expect(result.installInstructions).toContain('pip install autogen-agentchat');
281
+ });
282
+ });
283
+ describe('mastra framework', () => {
284
+ it('generates Mastra files', async () => {
285
+ const knowledge = makeKnowledge();
286
+ const result = await generateSubAgent('mastra', 'test-agent', 'testing', ['test-generation'], knowledge);
287
+ expect(result.framework).toBe('mastra');
288
+ expect(result.files).toHaveLength(1);
289
+ expect(result.files[0].path).toContain('agents/test-agent.ts');
290
+ expect(result.files[0].content).toContain('from "@mastra/core"');
291
+ expect(result.files[0].content).toContain('testAgentAgent');
292
+ expect(result.installInstructions).toContain('npm install @mastra/core');
293
+ });
294
+ });
295
+ describe('vercel-ai-sdk framework', () => {
296
+ it('generates Vercel AI SDK files', async () => {
297
+ const knowledge = makeKnowledge();
298
+ const result = await generateSubAgent('vercel-ai-sdk', 'helper', 'documentation', ['doc-writing'], knowledge);
299
+ expect(result.framework).toBe('vercel-ai-sdk');
300
+ expect(result.files).toHaveLength(1);
301
+ expect(result.files[0].path).toContain('agents/helper.ts');
302
+ expect(result.files[0].content).toContain('from "ai"');
303
+ expect(result.files[0].content).toContain('runHelper');
304
+ expect(result.installInstructions).toContain('npm install ai @ai-sdk/anthropic');
305
+ });
306
+ });
307
+ describe('custom/generic framework', () => {
308
+ it('generates generic JSON files for custom framework', async () => {
309
+ const knowledge = makeKnowledge();
310
+ const result = await generateSubAgent('custom', 'my agent', 'orchestrator', ['task-routing'], knowledge);
311
+ expect(result.framework).toBe('custom');
312
+ expect(result.files).toHaveLength(1);
313
+ expect(result.files[0].path).toContain('agents/my-agent.json');
314
+ expect(result.files[0].format).toBe('json');
315
+ const parsed = JSON.parse(result.files[0].content);
316
+ expect(parsed.name).toBe('my agent');
317
+ expect(parsed.role).toBe('orchestrator');
318
+ });
319
+ });
320
+ describe('inferModel', () => {
321
+ it('returns sonnet for complex roles', async () => {
322
+ const knowledge = makeKnowledge();
323
+ for (const role of ['orchestrator', 'code-analyst']) {
324
+ const result = await generateSubAgent('custom', 'test', role, [], knowledge);
325
+ expect(result.agentDefinition.model).toContain('claude-sonnet');
326
+ }
327
+ });
328
+ it('returns sonnet for complex capabilities', async () => {
329
+ const knowledge = makeKnowledge();
330
+ const result = await generateSubAgent('custom', 'test', 'general', ['architecture-review'], knowledge);
331
+ expect(result.agentDefinition.model).toContain('claude-sonnet');
332
+ });
333
+ it('returns sonnet for simple roles too (current implementation)', async () => {
334
+ const knowledge = makeKnowledge();
335
+ const result = await generateSubAgent('custom', 'test', 'simple-worker', ['simple-task'], knowledge);
336
+ expect(result.agentDefinition.model).toContain('claude-sonnet');
337
+ });
338
+ });
339
+ describe('inferMaxTurns', () => {
340
+ it('returns correct turns for known roles', async () => {
341
+ const knowledge = makeKnowledge();
342
+ const roleTurns = [
343
+ { role: 'orchestrator', expected: 20 },
344
+ { role: 'code-analyst', expected: 10 },
345
+ { role: 'code-implementor', expected: 30 },
346
+ { role: 'code-reviewer', expected: 15 },
347
+ { role: 'documentation', expected: 10 },
348
+ { role: 'testing', expected: 15 },
349
+ ];
350
+ for (const { role, expected } of roleTurns) {
351
+ const result = await generateSubAgent('custom', 'test', role, [], knowledge);
352
+ expect(result.agentDefinition.maxTurns).toBe(expected);
353
+ }
354
+ });
355
+ it('returns default 10 for unknown role', async () => {
356
+ const knowledge = makeKnowledge();
357
+ const result = await generateSubAgent('custom', 'test', 'unknown-role', [], knowledge);
358
+ expect(result.agentDefinition.maxTurns).toBe(10);
359
+ });
360
+ });
361
+ describe('inferHandoffConditions', () => {
362
+ it('returns conditions for orchestrator', async () => {
363
+ const knowledge = makeKnowledge();
364
+ const result = await generateSubAgent('custom', 'test', 'orchestrator', [], knowledge);
365
+ expect(result.agentDefinition.handoffConditions.length).toBe(3);
366
+ });
367
+ it('returns conditions for code-analyst', async () => {
368
+ const knowledge = makeKnowledge();
369
+ const result = await generateSubAgent('custom', 'test', 'code-analyst', [], knowledge);
370
+ expect(result.agentDefinition.handoffConditions.length).toBe(2);
371
+ });
372
+ it('returns conditions for code-implementor', async () => {
373
+ const knowledge = makeKnowledge();
374
+ const result = await generateSubAgent('custom', 'test', 'code-implementor', [], knowledge);
375
+ expect(result.agentDefinition.handoffConditions.length).toBe(2);
376
+ });
377
+ it('returns conditions for code-reviewer', async () => {
378
+ const knowledge = makeKnowledge();
379
+ const result = await generateSubAgent('custom', 'test', 'code-reviewer', [], knowledge);
380
+ expect(result.agentDefinition.handoffConditions.length).toBe(2);
381
+ });
382
+ it('returns empty array for unknown role', async () => {
383
+ const knowledge = makeKnowledge();
384
+ const result = await generateSubAgent('custom', 'test', 'unknown', [], knowledge);
385
+ expect(result.agentDefinition.handoffConditions).toEqual([]);
386
+ });
387
+ });
388
+ describe('inferTools for different roles', () => {
389
+ it('includes orchestrator tools', async () => {
390
+ const knowledge = makeKnowledge({ availableMcps: [] });
391
+ const result = await generateSubAgent('custom', 'test', 'orchestrator', [], knowledge);
392
+ expect(result.agentDefinition.tools).toContain('sdd_init_project');
393
+ expect(result.agentDefinition.tools).toContain('sdd_orchestrate');
394
+ });
395
+ it('includes code-implementor tools', async () => {
396
+ const knowledge = makeKnowledge({ availableMcps: [] });
397
+ const result = await generateSubAgent('custom', 'test', 'code-implementor', [], knowledge);
398
+ expect(result.agentDefinition.tools).toContain('bash');
399
+ expect(result.agentDefinition.tools).toContain('sdd_validate_spec');
400
+ });
401
+ it('includes documentation tools', async () => {
402
+ const knowledge = makeKnowledge({ availableMcps: [] });
403
+ const result = await generateSubAgent('custom', 'test', 'documentation', [], knowledge);
404
+ expect(result.agentDefinition.tools).toContain('sdd_generate_docs');
405
+ });
406
+ it('includes testing tools', async () => {
407
+ const knowledge = makeKnowledge({ availableMcps: [] });
408
+ const result = await generateSubAgent('custom', 'test', 'testing', [], knowledge);
409
+ expect(result.agentDefinition.tools).toContain('sdd_generate_test_plan');
410
+ expect(result.agentDefinition.tools).toContain('bash');
411
+ });
412
+ it('includes code-reviewer tools', async () => {
413
+ const knowledge = makeKnowledge({ availableMcps: [] });
414
+ const result = await generateSubAgent('custom', 'test', 'code-reviewer', [], knowledge);
415
+ expect(result.agentDefinition.tools).toContain('sdd_audit_code');
416
+ expect(result.agentDefinition.tools).toContain('sdd_detect_drift');
417
+ });
418
+ it('returns only base tools for unknown role', async () => {
419
+ const knowledge = makeKnowledge({ availableMcps: [] });
420
+ const result = await generateSubAgent('custom', 'test', 'unknown-role', [], knowledge);
421
+ expect(result.agentDefinition.tools).toEqual(['read_file', 'write_file', 'list_directory']);
422
+ });
423
+ });
424
+ describe('install instructions', () => {
425
+ it('includes handoff message when framework supports it', async () => {
426
+ const knowledge = makeKnowledge();
427
+ const result = await generateSubAgent('claude-agent-sdk', 'test', 'orchestrator', [], knowledge);
428
+ expect(result.installInstructions).toContain('handoffs');
429
+ });
430
+ it('includes MCP message when framework supports it', async () => {
431
+ const knowledge = makeKnowledge();
432
+ const result = await generateSubAgent('claude-agent-sdk', 'test', 'orchestrator', [], knowledge);
433
+ expect(result.installInstructions).toContain('MCP tools');
434
+ });
435
+ it('omits handoff message when not supported', async () => {
436
+ const knowledge = makeKnowledge();
437
+ const result = await generateSubAgent('autogen', 'test', 'orchestrator', [], knowledge);
438
+ expect(result.installInstructions).not.toContain('handoffs');
439
+ });
440
+ it('omits MCP message when not supported', async () => {
441
+ const knowledge = makeKnowledge();
442
+ const result = await generateSubAgent('autogen', 'test', 'orchestrator', [], knowledge);
443
+ expect(result.installInstructions).not.toContain('MCP tools');
444
+ });
445
+ it('includes generated files list', async () => {
446
+ const knowledge = makeKnowledge();
447
+ const result = await generateSubAgent('claude-agent-sdk', 'test', 'orchestrator', [], knowledge);
448
+ expect(result.installInstructions).toContain('Generated files:');
449
+ expect(result.installInstructions).toContain('agents/test.ts');
450
+ });
451
+ it('omits install command for custom framework', async () => {
452
+ const knowledge = makeKnowledge();
453
+ const result = await generateSubAgent('custom', 'test', 'orchestrator', [], knowledge);
454
+ // No specific install command for custom
455
+ expect(result.installInstructions).not.toContain('npm install');
456
+ expect(result.installInstructions).not.toContain('pip install');
457
+ });
458
+ });
459
+ });
460
+ describe('generateAgentSystem', () => {
461
+ beforeEach(() => {
462
+ setupConfigMock();
463
+ });
464
+ it('generates a full multi-agent system with 4 agents', async () => {
465
+ const knowledge = makeKnowledge();
466
+ const agents = await generateAgentSystem('claude-agent-sdk', knowledge);
467
+ expect(agents).toHaveLength(4);
468
+ expect(agents[0].agentDefinition.name).toBe('coordinator');
469
+ expect(agents[0].agentDefinition.role).toBe('orchestrator');
470
+ expect(agents[1].agentDefinition.name).toBe('analyst');
471
+ expect(agents[1].agentDefinition.role).toBe('code-analyst');
472
+ expect(agents[2].agentDefinition.name).toBe('implementor');
473
+ expect(agents[2].agentDefinition.role).toBe('code-implementor');
474
+ expect(agents[3].agentDefinition.name).toBe('reviewer');
475
+ expect(agents[3].agentDefinition.role).toBe('code-reviewer');
476
+ });
477
+ it('coordinator has a custom system prompt', async () => {
478
+ const knowledge = makeKnowledge();
479
+ const agents = await generateAgentSystem('claude-agent-sdk', knowledge);
480
+ const coordinator = agents[0];
481
+ expect(coordinator.agentDefinition.systemPrompt).toContain('coordinator agent');
482
+ expect(coordinator.agentDefinition.systemPrompt).toContain('SDD workflow');
483
+ expect(coordinator.agentDefinition.systemPrompt).toContain('typescript');
484
+ expect(coordinator.agentDefinition.systemPrompt).toContain('express');
485
+ expect(coordinator.agentDefinition.systemPrompt).toContain('layered');
486
+ expect(coordinator.agentDefinition.systemPrompt).toContain('docs/sdd/specs');
487
+ });
488
+ it('coordinator prompt handles null framework', async () => {
489
+ const knowledge = makeKnowledge({ framework: null });
490
+ const agents = await generateAgentSystem('claude-agent-sdk', knowledge);
491
+ expect(agents[0].agentDefinition.systemPrompt).toContain('Framework: none');
492
+ });
493
+ it('each agent has specific tools', async () => {
494
+ const knowledge = makeKnowledge();
495
+ const agents = await generateAgentSystem('claude-agent-sdk', knowledge);
496
+ expect(agents[0].agentDefinition.tools).toContain('sdd_orchestrate');
497
+ expect(agents[1].agentDefinition.tools).toContain('sdd_audit_code');
498
+ expect(agents[2].agentDefinition.tools).toContain('sdd_validate_spec');
499
+ expect(agents[3].agentDefinition.tools).toContain('sdd_generate_checklist');
500
+ });
501
+ it('works with crewai framework', async () => {
502
+ const knowledge = makeKnowledge();
503
+ const agents = await generateAgentSystem('crewai', knowledge);
504
+ expect(agents).toHaveLength(4);
505
+ for (const agent of agents) {
506
+ expect(agent.framework).toBe('crewai');
507
+ expect(agent.files[0].path).toContain('.py');
508
+ }
509
+ });
510
+ });
511
+ describe('loadFrameworks error handling', () => {
512
+ it('returns fallback config when file read fails', async () => {
513
+ // We need to force a fresh load. Since the cache is module-level,
514
+ // and we already loaded successfully, the cache is already warm.
515
+ // This test verifies the getFrameworkConfig fallback for unknown frameworks.
516
+ const config = await getFrameworkConfig('totally-unknown');
517
+ expect(config.name).toBe('totally-unknown');
518
+ expect(config.languages).toEqual(['typescript']);
519
+ });
520
+ });
521
+ describe('escapeTemplateLiteral', () => {
522
+ it('escapes backticks and template expressions in generated code', async () => {
523
+ setupConfigMock();
524
+ const knowledge = makeKnowledge();
525
+ const result = await generateSubAgent('claude-agent-sdk', 'test-agent', 'code-analyst', ['code-analysis'], knowledge, [], 'Use `code` and ${expression} in prompt');
526
+ expect(result.files[0].content).toContain('\\`code\\`');
527
+ expect(result.files[0].content).toContain('\\${expression}');
528
+ });
529
+ });
530
+ describe('name transformations', () => {
531
+ it('converts agent name to camelCase', async () => {
532
+ setupConfigMock();
533
+ const knowledge = makeKnowledge();
534
+ const result = await generateSubAgent('claude-agent-sdk', 'my-cool-agent', 'orchestrator', [], knowledge);
535
+ expect(result.files[0].content).toContain('myCoolAgentAgent');
536
+ });
537
+ it('converts agent name to PascalCase in LangGraph', async () => {
538
+ setupConfigMock();
539
+ const knowledge = makeKnowledge();
540
+ const result = await generateSubAgent('langgraph', 'my-cool-agent', 'orchestrator', [], knowledge);
541
+ expect(result.files[0].content).toContain('MyCoolAgentState');
542
+ });
543
+ it('converts spaces to underscores for Python frameworks', async () => {
544
+ setupConfigMock();
545
+ const knowledge = makeKnowledge();
546
+ const result = await generateSubAgent('crewai', 'my cool agent', 'orchestrator', [], knowledge);
547
+ expect(result.files[0].path).toContain('my_cool_agent');
548
+ });
549
+ it('converts spaces to hyphens for TS frameworks', async () => {
550
+ setupConfigMock();
551
+ const knowledge = makeKnowledge();
552
+ const result = await generateSubAgent('mastra', 'my cool agent', 'orchestrator', [], knowledge);
553
+ expect(result.files[0].path).toContain('my-cool-agent');
554
+ });
555
+ });
556
+ //# sourceMappingURL=agent-generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-generator.test.js","sourceRoot":"","sources":["../../src/engine/agent-generator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analyzer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.test.d.ts","sourceRoot":"","sources":["../../src/engine/analyzer.test.ts"],"names":[],"mappings":""}