specforge-mcp 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/dist/index.js +0 -0
  2. package/package.json +1 -1
  3. package/dist/engine/agent-generator.test.d.ts +0 -2
  4. package/dist/engine/agent-generator.test.d.ts.map +0 -1
  5. package/dist/engine/agent-generator.test.js +0 -556
  6. package/dist/engine/agent-generator.test.js.map +0 -1
  7. package/dist/engine/analyzer.test.d.ts +0 -2
  8. package/dist/engine/analyzer.test.d.ts.map +0 -1
  9. package/dist/engine/analyzer.test.js +0 -1461
  10. package/dist/engine/analyzer.test.js.map +0 -1
  11. package/dist/engine/auditor.test.d.ts +0 -2
  12. package/dist/engine/auditor.test.d.ts.map +0 -1
  13. package/dist/engine/auditor.test.js +0 -2075
  14. package/dist/engine/auditor.test.js.map +0 -1
  15. package/dist/engine/doc-generator.test.d.ts +0 -2
  16. package/dist/engine/doc-generator.test.d.ts.map +0 -1
  17. package/dist/engine/doc-generator.test.js +0 -961
  18. package/dist/engine/doc-generator.test.js.map +0 -1
  19. package/dist/engine/estimator.test.d.ts +0 -2
  20. package/dist/engine/estimator.test.d.ts.map +0 -1
  21. package/dist/engine/estimator.test.js +0 -334
  22. package/dist/engine/estimator.test.js.map +0 -1
  23. package/dist/engine/skill-generator.test.d.ts +0 -2
  24. package/dist/engine/skill-generator.test.d.ts.map +0 -1
  25. package/dist/engine/skill-generator.test.js +0 -742
  26. package/dist/engine/skill-generator.test.js.map +0 -1
  27. package/dist/engine/validator.test.d.ts +0 -2
  28. package/dist/engine/validator.test.d.ts.map +0 -1
  29. package/dist/engine/validator.test.js +0 -2371
  30. package/dist/engine/validator.test.js.map +0 -1
  31. package/dist/engine/web-fetcher.test.d.ts +0 -2
  32. package/dist/engine/web-fetcher.test.d.ts.map +0 -1
  33. package/dist/engine/web-fetcher.test.js +0 -360
  34. package/dist/engine/web-fetcher.test.js.map +0 -1
  35. package/dist/i18n/index.test.d.ts +0 -2
  36. package/dist/i18n/index.test.d.ts.map +0 -1
  37. package/dist/i18n/index.test.js +0 -375
  38. package/dist/i18n/index.test.js.map +0 -1
  39. package/dist/index.test.d.ts +0 -2
  40. package/dist/index.test.d.ts.map +0 -1
  41. package/dist/index.test.js +0 -124
  42. package/dist/index.test.js.map +0 -1
  43. package/dist/resources/patterns.test.d.ts +0 -2
  44. package/dist/resources/patterns.test.d.ts.map +0 -1
  45. package/dist/resources/patterns.test.js +0 -142
  46. package/dist/resources/patterns.test.js.map +0 -1
  47. package/dist/resources/process.test.d.ts +0 -2
  48. package/dist/resources/process.test.d.ts.map +0 -1
  49. package/dist/resources/process.test.js +0 -48
  50. package/dist/resources/process.test.js.map +0 -1
  51. package/dist/resources/registry.test.d.ts +0 -2
  52. package/dist/resources/registry.test.d.ts.map +0 -1
  53. package/dist/resources/registry.test.js +0 -138
  54. package/dist/resources/registry.test.js.map +0 -1
  55. package/dist/resources/specs.test.d.ts +0 -2
  56. package/dist/resources/specs.test.d.ts.map +0 -1
  57. package/dist/resources/specs.test.js +0 -130
  58. package/dist/resources/specs.test.js.map +0 -1
  59. package/dist/resources/templates.test.d.ts +0 -2
  60. package/dist/resources/templates.test.d.ts.map +0 -1
  61. package/dist/resources/templates.test.js +0 -119
  62. package/dist/resources/templates.test.js.map +0 -1
  63. package/dist/smoke.test.d.ts +0 -2
  64. package/dist/smoke.test.d.ts.map +0 -1
  65. package/dist/smoke.test.js +0 -229
  66. package/dist/smoke.test.js.map +0 -1
  67. package/dist/storage/base-store.test.d.ts +0 -2
  68. package/dist/storage/base-store.test.d.ts.map +0 -1
  69. package/dist/storage/base-store.test.js +0 -180
  70. package/dist/storage/base-store.test.js.map +0 -1
  71. package/dist/storage/global-store.test.d.ts +0 -2
  72. package/dist/storage/global-store.test.d.ts.map +0 -1
  73. package/dist/storage/global-store.test.js +0 -327
  74. package/dist/storage/global-store.test.js.map +0 -1
  75. package/dist/storage/index.test.d.ts +0 -2
  76. package/dist/storage/index.test.d.ts.map +0 -1
  77. package/dist/storage/index.test.js +0 -56
  78. package/dist/storage/index.test.js.map +0 -1
  79. package/dist/storage/knowledge-store.test.d.ts +0 -2
  80. package/dist/storage/knowledge-store.test.d.ts.map +0 -1
  81. package/dist/storage/knowledge-store.test.js +0 -368
  82. package/dist/storage/knowledge-store.test.js.map +0 -1
  83. package/dist/storage/metrics-store.test.d.ts +0 -2
  84. package/dist/storage/metrics-store.test.d.ts.map +0 -1
  85. package/dist/storage/metrics-store.test.js +0 -212
  86. package/dist/storage/metrics-store.test.js.map +0 -1
  87. package/dist/storage/pattern-store.test.d.ts +0 -2
  88. package/dist/storage/pattern-store.test.d.ts.map +0 -1
  89. package/dist/storage/pattern-store.test.js +0 -224
  90. package/dist/storage/pattern-store.test.js.map +0 -1
  91. package/dist/storage/spec-store.test.d.ts +0 -2
  92. package/dist/storage/spec-store.test.d.ts.map +0 -1
  93. package/dist/storage/spec-store.test.js +0 -227
  94. package/dist/storage/spec-store.test.js.map +0 -1
  95. package/dist/tools/audit.test.d.ts +0 -2
  96. package/dist/tools/audit.test.d.ts.map +0 -1
  97. package/dist/tools/audit.test.js +0 -169
  98. package/dist/tools/audit.test.js.map +0 -1
  99. package/dist/tools/challenge-spec.test.d.ts +0 -2
  100. package/dist/tools/challenge-spec.test.d.ts.map +0 -1
  101. package/dist/tools/challenge-spec.test.js +0 -782
  102. package/dist/tools/challenge-spec.test.js.map +0 -1
  103. package/dist/tools/check-versions.test.d.ts +0 -2
  104. package/dist/tools/check-versions.test.d.ts.map +0 -1
  105. package/dist/tools/check-versions.test.js +0 -214
  106. package/dist/tools/check-versions.test.js.map +0 -1
  107. package/dist/tools/clarify-requirements.test.d.ts +0 -2
  108. package/dist/tools/clarify-requirements.test.d.ts.map +0 -1
  109. package/dist/tools/clarify-requirements.test.js +0 -161
  110. package/dist/tools/clarify-requirements.test.js.map +0 -1
  111. package/dist/tools/consult-docs.test.d.ts +0 -2
  112. package/dist/tools/consult-docs.test.d.ts.map +0 -1
  113. package/dist/tools/consult-docs.test.js +0 -140
  114. package/dist/tools/consult-docs.test.js.map +0 -1
  115. package/dist/tools/create-spec.test.d.ts +0 -2
  116. package/dist/tools/create-spec.test.d.ts.map +0 -1
  117. package/dist/tools/create-spec.test.js +0 -233
  118. package/dist/tools/create-spec.test.js.map +0 -1
  119. package/dist/tools/define-ui-contract.test.d.ts +0 -2
  120. package/dist/tools/define-ui-contract.test.d.ts.map +0 -1
  121. package/dist/tools/define-ui-contract.test.js +0 -479
  122. package/dist/tools/define-ui-contract.test.js.map +0 -1
  123. package/dist/tools/design-schema.test.d.ts +0 -2
  124. package/dist/tools/design-schema.test.d.ts.map +0 -1
  125. package/dist/tools/design-schema.test.js +0 -301
  126. package/dist/tools/design-schema.test.js.map +0 -1
  127. package/dist/tools/detect-agent.test.d.ts +0 -2
  128. package/dist/tools/detect-agent.test.d.ts.map +0 -1
  129. package/dist/tools/detect-agent.test.js +0 -133
  130. package/dist/tools/detect-agent.test.js.map +0 -1
  131. package/dist/tools/detect-drift.test.d.ts +0 -2
  132. package/dist/tools/detect-drift.test.d.ts.map +0 -1
  133. package/dist/tools/detect-drift.test.js +0 -312
  134. package/dist/tools/detect-drift.test.js.map +0 -1
  135. package/dist/tools/discover-mcps.test.d.ts +0 -2
  136. package/dist/tools/discover-mcps.test.d.ts.map +0 -1
  137. package/dist/tools/discover-mcps.test.js +0 -345
  138. package/dist/tools/discover-mcps.test.js.map +0 -1
  139. package/dist/tools/estimate.test.d.ts +0 -2
  140. package/dist/tools/estimate.test.d.ts.map +0 -1
  141. package/dist/tools/estimate.test.js +0 -137
  142. package/dist/tools/estimate.test.js.map +0 -1
  143. package/dist/tools/generate-adr.test.d.ts +0 -2
  144. package/dist/tools/generate-adr.test.d.ts.map +0 -1
  145. package/dist/tools/generate-adr.test.js +0 -206
  146. package/dist/tools/generate-adr.test.js.map +0 -1
  147. package/dist/tools/generate-checklist.test.d.ts +0 -2
  148. package/dist/tools/generate-checklist.test.d.ts.map +0 -1
  149. package/dist/tools/generate-checklist.test.js +0 -201
  150. package/dist/tools/generate-checklist.test.js.map +0 -1
  151. package/dist/tools/generate-docs.test.d.ts +0 -2
  152. package/dist/tools/generate-docs.test.d.ts.map +0 -1
  153. package/dist/tools/generate-docs.test.js +0 -183
  154. package/dist/tools/generate-docs.test.js.map +0 -1
  155. package/dist/tools/generate-execution-plan.test.d.ts +0 -2
  156. package/dist/tools/generate-execution-plan.test.d.ts.map +0 -1
  157. package/dist/tools/generate-execution-plan.test.js +0 -643
  158. package/dist/tools/generate-execution-plan.test.js.map +0 -1
  159. package/dist/tools/generate-rules.test.d.ts +0 -2
  160. package/dist/tools/generate-rules.test.d.ts.map +0 -1
  161. package/dist/tools/generate-rules.test.js +0 -148
  162. package/dist/tools/generate-rules.test.js.map +0 -1
  163. package/dist/tools/generate-skill.test.d.ts +0 -2
  164. package/dist/tools/generate-skill.test.d.ts.map +0 -1
  165. package/dist/tools/generate-skill.test.js +0 -138
  166. package/dist/tools/generate-skill.test.js.map +0 -1
  167. package/dist/tools/generate-sub-agent.test.d.ts +0 -2
  168. package/dist/tools/generate-sub-agent.test.d.ts.map +0 -1
  169. package/dist/tools/generate-sub-agent.test.js +0 -162
  170. package/dist/tools/generate-sub-agent.test.js.map +0 -1
  171. package/dist/tools/generate-tests.test.d.ts +0 -2
  172. package/dist/tools/generate-tests.test.d.ts.map +0 -1
  173. package/dist/tools/generate-tests.test.js +0 -222
  174. package/dist/tools/generate-tests.test.js.map +0 -1
  175. package/dist/tools/init-constitution.test.d.ts +0 -2
  176. package/dist/tools/init-constitution.test.d.ts.map +0 -1
  177. package/dist/tools/init-constitution.test.js +0 -398
  178. package/dist/tools/init-constitution.test.js.map +0 -1
  179. package/dist/tools/init-project.test.d.ts +0 -2
  180. package/dist/tools/init-project.test.d.ts.map +0 -1
  181. package/dist/tools/init-project.test.js +0 -158
  182. package/dist/tools/init-project.test.js.map +0 -1
  183. package/dist/tools/integrate-pm.test.d.ts +0 -2
  184. package/dist/tools/integrate-pm.test.d.ts.map +0 -1
  185. package/dist/tools/integrate-pm.test.js +0 -558
  186. package/dist/tools/integrate-pm.test.js.map +0 -1
  187. package/dist/tools/learn.test.d.ts +0 -2
  188. package/dist/tools/learn.test.d.ts.map +0 -1
  189. package/dist/tools/learn.test.js +0 -123
  190. package/dist/tools/learn.test.js.map +0 -1
  191. package/dist/tools/list-specs.test.d.ts +0 -2
  192. package/dist/tools/list-specs.test.d.ts.map +0 -1
  193. package/dist/tools/list-specs.test.js +0 -110
  194. package/dist/tools/list-specs.test.js.map +0 -1
  195. package/dist/tools/manage-context.test.d.ts +0 -2
  196. package/dist/tools/manage-context.test.d.ts.map +0 -1
  197. package/dist/tools/manage-context.test.js +0 -359
  198. package/dist/tools/manage-context.test.js.map +0 -1
  199. package/dist/tools/manage-git.test.d.ts +0 -2
  200. package/dist/tools/manage-git.test.d.ts.map +0 -1
  201. package/dist/tools/manage-git.test.js +0 -882
  202. package/dist/tools/manage-git.test.js.map +0 -1
  203. package/dist/tools/orchestrate.test.d.ts +0 -2
  204. package/dist/tools/orchestrate.test.d.ts.map +0 -1
  205. package/dist/tools/orchestrate.test.js +0 -1117
  206. package/dist/tools/orchestrate.test.js.map +0 -1
  207. package/dist/tools/reconcile-spec.test.d.ts +0 -2
  208. package/dist/tools/reconcile-spec.test.d.ts.map +0 -1
  209. package/dist/tools/reconcile-spec.test.js +0 -259
  210. package/dist/tools/reconcile-spec.test.js.map +0 -1
  211. package/dist/tools/register-platform-tools.test.d.ts +0 -2
  212. package/dist/tools/register-platform-tools.test.d.ts.map +0 -1
  213. package/dist/tools/register-platform-tools.test.js +0 -404
  214. package/dist/tools/register-platform-tools.test.js.map +0 -1
  215. package/dist/tools/register-spec-tools.test.d.ts +0 -2
  216. package/dist/tools/register-spec-tools.test.d.ts.map +0 -1
  217. package/dist/tools/register-spec-tools.test.js +0 -407
  218. package/dist/tools/register-spec-tools.test.js.map +0 -1
  219. package/dist/tools/reverse-engineer.test.d.ts +0 -2
  220. package/dist/tools/reverse-engineer.test.d.ts.map +0 -1
  221. package/dist/tools/reverse-engineer.test.js +0 -206
  222. package/dist/tools/reverse-engineer.test.js.map +0 -1
  223. package/dist/tools/schemas.d.ts +0 -20
  224. package/dist/tools/schemas.d.ts.map +0 -1
  225. package/dist/tools/schemas.js +0 -133
  226. package/dist/tools/schemas.js.map +0 -1
  227. package/dist/tools/schemas.test.d.ts +0 -2
  228. package/dist/tools/schemas.test.d.ts.map +0 -1
  229. package/dist/tools/schemas.test.js +0 -245
  230. package/dist/tools/schemas.test.js.map +0 -1
  231. package/dist/tools/set-locale.test.d.ts +0 -2
  232. package/dist/tools/set-locale.test.d.ts.map +0 -1
  233. package/dist/tools/set-locale.test.js +0 -74
  234. package/dist/tools/set-locale.test.js.map +0 -1
  235. package/dist/tools/suggest-mcps.test.d.ts +0 -2
  236. package/dist/tools/suggest-mcps.test.d.ts.map +0 -1
  237. package/dist/tools/suggest-mcps.test.js +0 -198
  238. package/dist/tools/suggest-mcps.test.js.map +0 -1
  239. package/dist/tools/suggest-stack.test.d.ts +0 -2
  240. package/dist/tools/suggest-stack.test.d.ts.map +0 -1
  241. package/dist/tools/suggest-stack.test.js +0 -181
  242. package/dist/tools/suggest-stack.test.js.map +0 -1
  243. package/dist/tools/suggest-tooling.test.d.ts +0 -2
  244. package/dist/tools/suggest-tooling.test.d.ts.map +0 -1
  245. package/dist/tools/suggest-tooling.test.js +0 -213
  246. package/dist/tools/suggest-tooling.test.js.map +0 -1
  247. package/dist/tools/summarize-spec.test.d.ts +0 -2
  248. package/dist/tools/summarize-spec.test.d.ts.map +0 -1
  249. package/dist/tools/summarize-spec.test.js +0 -180
  250. package/dist/tools/summarize-spec.test.js.map +0 -1
  251. package/dist/tools/update-status.test.d.ts +0 -2
  252. package/dist/tools/update-status.test.d.ts.map +0 -1
  253. package/dist/tools/update-status.test.js +0 -142
  254. package/dist/tools/update-status.test.js.map +0 -1
  255. package/dist/tools/validate.test.d.ts +0 -2
  256. package/dist/tools/validate.test.d.ts.map +0 -1
  257. package/dist/tools/validate.test.js +0 -137
  258. package/dist/tools/validate.test.js.map +0 -1
package/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specforge-mcp",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "SpecForge — MCP Server for Spec Driven Development. Manages specs, estimations, reverse engineering, and auto-learning across any language/framework.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=agent-generator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-generator.test.d.ts","sourceRoot":"","sources":["../../src/engine/agent-generator.test.ts"],"names":[],"mappings":""}
@@ -1,556 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-generator.test.js","sourceRoot":"","sources":["../../src/engine/agent-generator.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=analyzer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyzer.test.d.ts","sourceRoot":"","sources":["../../src/engine/analyzer.test.ts"],"names":[],"mappings":""}