specforge-mcp 0.1.1 → 0.2.2

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 (287) hide show
  1. package/README.md +31 -1
  2. package/dist/config/version.d.ts +2 -0
  3. package/dist/config/version.d.ts.map +1 -0
  4. package/dist/config/version.js +9 -0
  5. package/dist/config/version.js.map +1 -0
  6. package/dist/config/version.ts +11 -0
  7. package/dist/engine/detectors/library-detector-langs2.d.ts.map +1 -1
  8. package/dist/engine/detectors/library-detector-langs2.js.map +1 -1
  9. package/dist/engine/mermaid-generator.d.ts.map +1 -1
  10. package/dist/engine/mermaid-generator.js +12 -2
  11. package/dist/engine/mermaid-generator.js.map +1 -1
  12. package/dist/index.js +2 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
  15. package/dist/tools/create-spec-hu/hu-body-generators.js +7 -1
  16. package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
  17. package/dist/tools/create-spec-tech/ficha-content.d.ts.map +1 -1
  18. package/dist/tools/create-spec-tech/ficha-content.js +4 -2
  19. package/dist/tools/create-spec-tech/ficha-content.js.map +1 -1
  20. package/dist/tools/create-spec.d.ts.map +1 -1
  21. package/dist/tools/create-spec.js +4 -3
  22. package/dist/tools/create-spec.js.map +1 -1
  23. package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
  24. package/dist/tools/register-spec-tools/core-spec-tools.js +4 -0
  25. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  26. package/dist/types/spec/core.d.ts +1 -0
  27. package/dist/types/spec/core.d.ts.map +1 -1
  28. package/dist/types/spec/inputs.d.ts +1 -0
  29. package/dist/types/spec/inputs.d.ts.map +1 -1
  30. package/package.json +27 -18
  31. package/src/config/version.ts +11 -0
  32. package/dist/engine/agent-generator.test.d.ts +0 -2
  33. package/dist/engine/agent-generator.test.d.ts.map +0 -1
  34. package/dist/engine/agent-generator.test.js +0 -556
  35. package/dist/engine/agent-generator.test.js.map +0 -1
  36. package/dist/engine/analyzer.test.d.ts +0 -2
  37. package/dist/engine/analyzer.test.d.ts.map +0 -1
  38. package/dist/engine/analyzer.test.js +0 -1461
  39. package/dist/engine/analyzer.test.js.map +0 -1
  40. package/dist/engine/auditor.test.d.ts +0 -2
  41. package/dist/engine/auditor.test.d.ts.map +0 -1
  42. package/dist/engine/auditor.test.js +0 -2075
  43. package/dist/engine/auditor.test.js.map +0 -1
  44. package/dist/engine/doc-generator.test.d.ts +0 -2
  45. package/dist/engine/doc-generator.test.d.ts.map +0 -1
  46. package/dist/engine/doc-generator.test.js +0 -961
  47. package/dist/engine/doc-generator.test.js.map +0 -1
  48. package/dist/engine/estimator.test.d.ts +0 -2
  49. package/dist/engine/estimator.test.d.ts.map +0 -1
  50. package/dist/engine/estimator.test.js +0 -334
  51. package/dist/engine/estimator.test.js.map +0 -1
  52. package/dist/engine/skill-generator.test.d.ts +0 -2
  53. package/dist/engine/skill-generator.test.d.ts.map +0 -1
  54. package/dist/engine/skill-generator.test.js +0 -742
  55. package/dist/engine/skill-generator.test.js.map +0 -1
  56. package/dist/engine/validator.test.d.ts +0 -2
  57. package/dist/engine/validator.test.d.ts.map +0 -1
  58. package/dist/engine/validator.test.js +0 -2371
  59. package/dist/engine/validator.test.js.map +0 -1
  60. package/dist/engine/web-fetcher.test.d.ts +0 -2
  61. package/dist/engine/web-fetcher.test.d.ts.map +0 -1
  62. package/dist/engine/web-fetcher.test.js +0 -360
  63. package/dist/engine/web-fetcher.test.js.map +0 -1
  64. package/dist/i18n/index.test.d.ts +0 -2
  65. package/dist/i18n/index.test.d.ts.map +0 -1
  66. package/dist/i18n/index.test.js +0 -375
  67. package/dist/i18n/index.test.js.map +0 -1
  68. package/dist/index.test.d.ts +0 -2
  69. package/dist/index.test.d.ts.map +0 -1
  70. package/dist/index.test.js +0 -124
  71. package/dist/index.test.js.map +0 -1
  72. package/dist/resources/patterns.test.d.ts +0 -2
  73. package/dist/resources/patterns.test.d.ts.map +0 -1
  74. package/dist/resources/patterns.test.js +0 -142
  75. package/dist/resources/patterns.test.js.map +0 -1
  76. package/dist/resources/process.test.d.ts +0 -2
  77. package/dist/resources/process.test.d.ts.map +0 -1
  78. package/dist/resources/process.test.js +0 -48
  79. package/dist/resources/process.test.js.map +0 -1
  80. package/dist/resources/registry.test.d.ts +0 -2
  81. package/dist/resources/registry.test.d.ts.map +0 -1
  82. package/dist/resources/registry.test.js +0 -138
  83. package/dist/resources/registry.test.js.map +0 -1
  84. package/dist/resources/specs.test.d.ts +0 -2
  85. package/dist/resources/specs.test.d.ts.map +0 -1
  86. package/dist/resources/specs.test.js +0 -130
  87. package/dist/resources/specs.test.js.map +0 -1
  88. package/dist/resources/templates.test.d.ts +0 -2
  89. package/dist/resources/templates.test.d.ts.map +0 -1
  90. package/dist/resources/templates.test.js +0 -119
  91. package/dist/resources/templates.test.js.map +0 -1
  92. package/dist/smoke.test.d.ts +0 -2
  93. package/dist/smoke.test.d.ts.map +0 -1
  94. package/dist/smoke.test.js +0 -229
  95. package/dist/smoke.test.js.map +0 -1
  96. package/dist/storage/base-store.test.d.ts +0 -2
  97. package/dist/storage/base-store.test.d.ts.map +0 -1
  98. package/dist/storage/base-store.test.js +0 -180
  99. package/dist/storage/base-store.test.js.map +0 -1
  100. package/dist/storage/global-store.test.d.ts +0 -2
  101. package/dist/storage/global-store.test.d.ts.map +0 -1
  102. package/dist/storage/global-store.test.js +0 -327
  103. package/dist/storage/global-store.test.js.map +0 -1
  104. package/dist/storage/index.test.d.ts +0 -2
  105. package/dist/storage/index.test.d.ts.map +0 -1
  106. package/dist/storage/index.test.js +0 -56
  107. package/dist/storage/index.test.js.map +0 -1
  108. package/dist/storage/knowledge-store.test.d.ts +0 -2
  109. package/dist/storage/knowledge-store.test.d.ts.map +0 -1
  110. package/dist/storage/knowledge-store.test.js +0 -368
  111. package/dist/storage/knowledge-store.test.js.map +0 -1
  112. package/dist/storage/metrics-store.test.d.ts +0 -2
  113. package/dist/storage/metrics-store.test.d.ts.map +0 -1
  114. package/dist/storage/metrics-store.test.js +0 -212
  115. package/dist/storage/metrics-store.test.js.map +0 -1
  116. package/dist/storage/pattern-store.test.d.ts +0 -2
  117. package/dist/storage/pattern-store.test.d.ts.map +0 -1
  118. package/dist/storage/pattern-store.test.js +0 -224
  119. package/dist/storage/pattern-store.test.js.map +0 -1
  120. package/dist/storage/spec-store.test.d.ts +0 -2
  121. package/dist/storage/spec-store.test.d.ts.map +0 -1
  122. package/dist/storage/spec-store.test.js +0 -227
  123. package/dist/storage/spec-store.test.js.map +0 -1
  124. package/dist/tools/audit.test.d.ts +0 -2
  125. package/dist/tools/audit.test.d.ts.map +0 -1
  126. package/dist/tools/audit.test.js +0 -169
  127. package/dist/tools/audit.test.js.map +0 -1
  128. package/dist/tools/challenge-spec.test.d.ts +0 -2
  129. package/dist/tools/challenge-spec.test.d.ts.map +0 -1
  130. package/dist/tools/challenge-spec.test.js +0 -782
  131. package/dist/tools/challenge-spec.test.js.map +0 -1
  132. package/dist/tools/check-versions.test.d.ts +0 -2
  133. package/dist/tools/check-versions.test.d.ts.map +0 -1
  134. package/dist/tools/check-versions.test.js +0 -214
  135. package/dist/tools/check-versions.test.js.map +0 -1
  136. package/dist/tools/clarify-requirements.test.d.ts +0 -2
  137. package/dist/tools/clarify-requirements.test.d.ts.map +0 -1
  138. package/dist/tools/clarify-requirements.test.js +0 -161
  139. package/dist/tools/clarify-requirements.test.js.map +0 -1
  140. package/dist/tools/consult-docs.test.d.ts +0 -2
  141. package/dist/tools/consult-docs.test.d.ts.map +0 -1
  142. package/dist/tools/consult-docs.test.js +0 -140
  143. package/dist/tools/consult-docs.test.js.map +0 -1
  144. package/dist/tools/create-spec.test.d.ts +0 -2
  145. package/dist/tools/create-spec.test.d.ts.map +0 -1
  146. package/dist/tools/create-spec.test.js +0 -233
  147. package/dist/tools/create-spec.test.js.map +0 -1
  148. package/dist/tools/define-ui-contract.test.d.ts +0 -2
  149. package/dist/tools/define-ui-contract.test.d.ts.map +0 -1
  150. package/dist/tools/define-ui-contract.test.js +0 -479
  151. package/dist/tools/define-ui-contract.test.js.map +0 -1
  152. package/dist/tools/design-schema.test.d.ts +0 -2
  153. package/dist/tools/design-schema.test.d.ts.map +0 -1
  154. package/dist/tools/design-schema.test.js +0 -301
  155. package/dist/tools/design-schema.test.js.map +0 -1
  156. package/dist/tools/detect-agent.test.d.ts +0 -2
  157. package/dist/tools/detect-agent.test.d.ts.map +0 -1
  158. package/dist/tools/detect-agent.test.js +0 -133
  159. package/dist/tools/detect-agent.test.js.map +0 -1
  160. package/dist/tools/detect-drift.test.d.ts +0 -2
  161. package/dist/tools/detect-drift.test.d.ts.map +0 -1
  162. package/dist/tools/detect-drift.test.js +0 -312
  163. package/dist/tools/detect-drift.test.js.map +0 -1
  164. package/dist/tools/discover-mcps.test.d.ts +0 -2
  165. package/dist/tools/discover-mcps.test.d.ts.map +0 -1
  166. package/dist/tools/discover-mcps.test.js +0 -345
  167. package/dist/tools/discover-mcps.test.js.map +0 -1
  168. package/dist/tools/estimate.test.d.ts +0 -2
  169. package/dist/tools/estimate.test.d.ts.map +0 -1
  170. package/dist/tools/estimate.test.js +0 -137
  171. package/dist/tools/estimate.test.js.map +0 -1
  172. package/dist/tools/generate-adr.test.d.ts +0 -2
  173. package/dist/tools/generate-adr.test.d.ts.map +0 -1
  174. package/dist/tools/generate-adr.test.js +0 -206
  175. package/dist/tools/generate-adr.test.js.map +0 -1
  176. package/dist/tools/generate-checklist.test.d.ts +0 -2
  177. package/dist/tools/generate-checklist.test.d.ts.map +0 -1
  178. package/dist/tools/generate-checklist.test.js +0 -201
  179. package/dist/tools/generate-checklist.test.js.map +0 -1
  180. package/dist/tools/generate-docs.test.d.ts +0 -2
  181. package/dist/tools/generate-docs.test.d.ts.map +0 -1
  182. package/dist/tools/generate-docs.test.js +0 -183
  183. package/dist/tools/generate-docs.test.js.map +0 -1
  184. package/dist/tools/generate-execution-plan.test.d.ts +0 -2
  185. package/dist/tools/generate-execution-plan.test.d.ts.map +0 -1
  186. package/dist/tools/generate-execution-plan.test.js +0 -643
  187. package/dist/tools/generate-execution-plan.test.js.map +0 -1
  188. package/dist/tools/generate-rules.test.d.ts +0 -2
  189. package/dist/tools/generate-rules.test.d.ts.map +0 -1
  190. package/dist/tools/generate-rules.test.js +0 -148
  191. package/dist/tools/generate-rules.test.js.map +0 -1
  192. package/dist/tools/generate-skill.test.d.ts +0 -2
  193. package/dist/tools/generate-skill.test.d.ts.map +0 -1
  194. package/dist/tools/generate-skill.test.js +0 -138
  195. package/dist/tools/generate-skill.test.js.map +0 -1
  196. package/dist/tools/generate-sub-agent.test.d.ts +0 -2
  197. package/dist/tools/generate-sub-agent.test.d.ts.map +0 -1
  198. package/dist/tools/generate-sub-agent.test.js +0 -162
  199. package/dist/tools/generate-sub-agent.test.js.map +0 -1
  200. package/dist/tools/generate-tests.test.d.ts +0 -2
  201. package/dist/tools/generate-tests.test.d.ts.map +0 -1
  202. package/dist/tools/generate-tests.test.js +0 -222
  203. package/dist/tools/generate-tests.test.js.map +0 -1
  204. package/dist/tools/init-constitution.test.d.ts +0 -2
  205. package/dist/tools/init-constitution.test.d.ts.map +0 -1
  206. package/dist/tools/init-constitution.test.js +0 -398
  207. package/dist/tools/init-constitution.test.js.map +0 -1
  208. package/dist/tools/init-project.test.d.ts +0 -2
  209. package/dist/tools/init-project.test.d.ts.map +0 -1
  210. package/dist/tools/init-project.test.js +0 -158
  211. package/dist/tools/init-project.test.js.map +0 -1
  212. package/dist/tools/integrate-pm.test.d.ts +0 -2
  213. package/dist/tools/integrate-pm.test.d.ts.map +0 -1
  214. package/dist/tools/integrate-pm.test.js +0 -558
  215. package/dist/tools/integrate-pm.test.js.map +0 -1
  216. package/dist/tools/learn.test.d.ts +0 -2
  217. package/dist/tools/learn.test.d.ts.map +0 -1
  218. package/dist/tools/learn.test.js +0 -123
  219. package/dist/tools/learn.test.js.map +0 -1
  220. package/dist/tools/list-specs.test.d.ts +0 -2
  221. package/dist/tools/list-specs.test.d.ts.map +0 -1
  222. package/dist/tools/list-specs.test.js +0 -110
  223. package/dist/tools/list-specs.test.js.map +0 -1
  224. package/dist/tools/manage-context.test.d.ts +0 -2
  225. package/dist/tools/manage-context.test.d.ts.map +0 -1
  226. package/dist/tools/manage-context.test.js +0 -359
  227. package/dist/tools/manage-context.test.js.map +0 -1
  228. package/dist/tools/manage-git.test.d.ts +0 -2
  229. package/dist/tools/manage-git.test.d.ts.map +0 -1
  230. package/dist/tools/manage-git.test.js +0 -882
  231. package/dist/tools/manage-git.test.js.map +0 -1
  232. package/dist/tools/orchestrate.test.d.ts +0 -2
  233. package/dist/tools/orchestrate.test.d.ts.map +0 -1
  234. package/dist/tools/orchestrate.test.js +0 -1117
  235. package/dist/tools/orchestrate.test.js.map +0 -1
  236. package/dist/tools/reconcile-spec.test.d.ts +0 -2
  237. package/dist/tools/reconcile-spec.test.d.ts.map +0 -1
  238. package/dist/tools/reconcile-spec.test.js +0 -259
  239. package/dist/tools/reconcile-spec.test.js.map +0 -1
  240. package/dist/tools/register-platform-tools.test.d.ts +0 -2
  241. package/dist/tools/register-platform-tools.test.d.ts.map +0 -1
  242. package/dist/tools/register-platform-tools.test.js +0 -404
  243. package/dist/tools/register-platform-tools.test.js.map +0 -1
  244. package/dist/tools/register-spec-tools.test.d.ts +0 -2
  245. package/dist/tools/register-spec-tools.test.d.ts.map +0 -1
  246. package/dist/tools/register-spec-tools.test.js +0 -407
  247. package/dist/tools/register-spec-tools.test.js.map +0 -1
  248. package/dist/tools/reverse-engineer.test.d.ts +0 -2
  249. package/dist/tools/reverse-engineer.test.d.ts.map +0 -1
  250. package/dist/tools/reverse-engineer.test.js +0 -206
  251. package/dist/tools/reverse-engineer.test.js.map +0 -1
  252. package/dist/tools/schemas.d.ts +0 -20
  253. package/dist/tools/schemas.d.ts.map +0 -1
  254. package/dist/tools/schemas.js +0 -133
  255. package/dist/tools/schemas.js.map +0 -1
  256. package/dist/tools/schemas.test.d.ts +0 -2
  257. package/dist/tools/schemas.test.d.ts.map +0 -1
  258. package/dist/tools/schemas.test.js +0 -245
  259. package/dist/tools/schemas.test.js.map +0 -1
  260. package/dist/tools/set-locale.test.d.ts +0 -2
  261. package/dist/tools/set-locale.test.d.ts.map +0 -1
  262. package/dist/tools/set-locale.test.js +0 -74
  263. package/dist/tools/set-locale.test.js.map +0 -1
  264. package/dist/tools/suggest-mcps.test.d.ts +0 -2
  265. package/dist/tools/suggest-mcps.test.d.ts.map +0 -1
  266. package/dist/tools/suggest-mcps.test.js +0 -198
  267. package/dist/tools/suggest-mcps.test.js.map +0 -1
  268. package/dist/tools/suggest-stack.test.d.ts +0 -2
  269. package/dist/tools/suggest-stack.test.d.ts.map +0 -1
  270. package/dist/tools/suggest-stack.test.js +0 -181
  271. package/dist/tools/suggest-stack.test.js.map +0 -1
  272. package/dist/tools/suggest-tooling.test.d.ts +0 -2
  273. package/dist/tools/suggest-tooling.test.d.ts.map +0 -1
  274. package/dist/tools/suggest-tooling.test.js +0 -213
  275. package/dist/tools/suggest-tooling.test.js.map +0 -1
  276. package/dist/tools/summarize-spec.test.d.ts +0 -2
  277. package/dist/tools/summarize-spec.test.d.ts.map +0 -1
  278. package/dist/tools/summarize-spec.test.js +0 -180
  279. package/dist/tools/summarize-spec.test.js.map +0 -1
  280. package/dist/tools/update-status.test.d.ts +0 -2
  281. package/dist/tools/update-status.test.d.ts.map +0 -1
  282. package/dist/tools/update-status.test.js +0 -142
  283. package/dist/tools/update-status.test.js.map +0 -1
  284. package/dist/tools/validate.test.d.ts +0 -2
  285. package/dist/tools/validate.test.d.ts.map +0 -1
  286. package/dist/tools/validate.test.js +0 -137
  287. package/dist/tools/validate.test.js.map +0 -1
@@ -1,479 +0,0 @@
1
- // Tests for handleDefineUIContract
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- vi.mock('../i18n/index.js', () => ({
4
- t: (key) => key,
5
- ti: (key, vars) => `${key}:${JSON.stringify(vars)}`,
6
- }));
7
- vi.mock('../storage/index.js', () => ({
8
- specStore: { getSpec: vi.fn() },
9
- knowledgeStore: { getKnowledge: vi.fn() },
10
- }));
11
- vi.mock('node:fs/promises', () => ({
12
- readFile: vi.fn(),
13
- }));
14
- import { handleDefineUIContract } from './define-ui-contract.js';
15
- import { specStore, knowledgeStore } from '../storage/index.js';
16
- import { readFile } from 'node:fs/promises';
17
- const mockGetSpec = vi.mocked(specStore.getSpec);
18
- const mockGetKnowledge = vi.mocked(knowledgeStore.getKnowledge);
19
- const mockReadFile = vi.mocked(readFile);
20
- const baseSpec = {
21
- id: 'SPEC-001',
22
- title: 'Dashboard',
23
- type: 'feature',
24
- scope: 'feature',
25
- target: 'frontend',
26
- tags: ['ui', 'dashboard'],
27
- status: 'approved',
28
- risk: 'medium',
29
- difficulty: 3,
30
- estimation: { devHours: 8, reviewHours: 2, totalCostUsd: 100 },
31
- dependencies: [],
32
- huPath: null,
33
- fichaTecnicaPath: null,
34
- };
35
- const baseKnowledge = {
36
- language: 'typescript',
37
- framework: 'next',
38
- projectPath: '/test',
39
- stack: [],
40
- conventions: {},
41
- architecture: { primary: 'monolith', secondary: [], layers: [] },
42
- database: 'postgresql',
43
- testCommand: null,
44
- buildCommand: null,
45
- linting: { detectedLinters: [] },
46
- apiContracts: [{ type: 'REST' }],
47
- layers: [],
48
- };
49
- beforeEach(() => {
50
- vi.clearAllMocks();
51
- mockReadFile.mockRejectedValue(new Error('not found'));
52
- });
53
- describe('handleDefineUIContract', () => {
54
- it('should return error when spec not found', async () => {
55
- mockGetSpec.mockResolvedValue(null);
56
- const result = await handleDefineUIContract({
57
- specId: 'SPEC-999',
58
- projectId: 'proj-1',
59
- });
60
- expect(result.isError).toBe(true);
61
- });
62
- it('should return error for backend-only spec', async () => {
63
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'backend' });
64
- const result = await handleDefineUIContract({
65
- specId: 'SPEC-001',
66
- projectId: 'proj-1',
67
- });
68
- expect(result.isError).toBe(true);
69
- expect(result.content[0].text).toContain('no UI components');
70
- });
71
- it('should return error for database spec', async () => {
72
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'database' });
73
- const result = await handleDefineUIContract({
74
- specId: 'SPEC-001',
75
- projectId: 'proj-1',
76
- });
77
- expect(result.isError).toBe(true);
78
- });
79
- it('should return error for infrastructure spec', async () => {
80
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'infrastructure' });
81
- const result = await handleDefineUIContract({
82
- specId: 'SPEC-001',
83
- projectId: 'proj-1',
84
- });
85
- expect(result.isError).toBe(true);
86
- });
87
- it('should return error when knowledge not found', async () => {
88
- mockGetSpec.mockResolvedValue(baseSpec);
89
- mockGetKnowledge.mockResolvedValue(null);
90
- const result = await handleDefineUIContract({
91
- specId: 'SPEC-001',
92
- projectId: 'proj-1',
93
- });
94
- expect(result.isError).toBe(true);
95
- });
96
- it('should generate UI contract for frontend spec', async () => {
97
- mockGetSpec.mockResolvedValue(baseSpec);
98
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
99
- const result = await handleDefineUIContract({
100
- specId: 'SPEC-001',
101
- projectId: 'proj-1',
102
- });
103
- expect(result.isError).toBeUndefined();
104
- expect(result.content).toHaveLength(2);
105
- const data = JSON.parse(result.content[1].text);
106
- expect(data.componentTree).toBeDefined();
107
- expect(data.componentTree.length).toBeGreaterThan(0);
108
- expect(data.dataFlow).toBeDefined();
109
- expect(data.loadingStates).toBeDefined();
110
- expect(data.errorStates).toBeDefined();
111
- });
112
- it('should use provided screen names', async () => {
113
- mockGetSpec.mockResolvedValue(baseSpec);
114
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
115
- const result = await handleDefineUIContract({
116
- specId: 'SPEC-001',
117
- projectId: 'proj-1',
118
- screens: ['settings', 'profile'],
119
- });
120
- const data = JSON.parse(result.content[1].text);
121
- const names = data.componentTree.map((n) => n.name);
122
- expect(names).toContain('SettingsPage');
123
- expect(names).toContain('ProfilePage');
124
- });
125
- it('should detect form components from spec content', async () => {
126
- mockGetSpec.mockResolvedValue({
127
- ...baseSpec,
128
- title: 'User form with input submission and create',
129
- tags: ['form', 'submit'],
130
- });
131
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
132
- const result = await handleDefineUIContract({
133
- specId: 'SPEC-001',
134
- projectId: 'proj-1',
135
- screens: ['user'],
136
- });
137
- const data = JSON.parse(result.content[1].text);
138
- const pageChildren = data.componentTree[0].children;
139
- const hasForm = pageChildren.some((c) => c.name.includes('Form'));
140
- expect(hasForm).toBe(true);
141
- });
142
- it('should detect list components from spec content', async () => {
143
- mockGetSpec.mockResolvedValue({
144
- ...baseSpec,
145
- title: 'Product list display table browse',
146
- tags: ['list'],
147
- });
148
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
149
- const result = await handleDefineUIContract({
150
- specId: 'SPEC-001',
151
- projectId: 'proj-1',
152
- screens: ['products'],
153
- });
154
- const data = JSON.parse(result.content[1].text);
155
- const pageChildren = data.componentTree[0].children;
156
- const hasList = pageChildren.some((c) => c.name.includes('List'));
157
- expect(hasList).toBe(true);
158
- });
159
- it('should handle fullstack spec target', async () => {
160
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'fullstack' });
161
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
162
- const result = await handleDefineUIContract({
163
- specId: 'SPEC-001',
164
- projectId: 'proj-1',
165
- });
166
- expect(result.isError).toBeUndefined();
167
- });
168
- it('should use client type for vue framework', async () => {
169
- mockGetSpec.mockResolvedValue(baseSpec);
170
- mockGetKnowledge.mockResolvedValue({
171
- ...baseKnowledge,
172
- framework: 'vue',
173
- });
174
- const result = await handleDefineUIContract({
175
- specId: 'SPEC-001',
176
- projectId: 'proj-1',
177
- screens: ['home'],
178
- });
179
- const data = JSON.parse(result.content[1].text);
180
- expect(data.componentTree[0].type).toBe('client');
181
- });
182
- // --- Coverage for knowledge.framework ?? 'react' fallback (line 136) ---
183
- it('should default to react behavior when framework is null', async () => {
184
- mockGetSpec.mockResolvedValue(baseSpec);
185
- mockGetKnowledge.mockResolvedValue({
186
- ...baseKnowledge,
187
- framework: null,
188
- });
189
- const result = await handleDefineUIContract({
190
- specId: 'SPEC-001',
191
- projectId: 'proj-1',
192
- screens: ['home'],
193
- });
194
- expect(result.isError).toBeUndefined();
195
- const data = JSON.parse(result.content[1].text);
196
- // Without framework, defaults to 'react' which means server type for pages
197
- expect(data.componentTree[0].type).toBe('server');
198
- });
199
- // --- Coverage for readSpecContent catch blocks (lines 579-590) ---
200
- it('should read huPath content when available', async () => {
201
- mockGetSpec.mockResolvedValue({
202
- ...baseSpec,
203
- huPath: '/test/hu.md',
204
- fichaTecnicaPath: null,
205
- });
206
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
207
- mockReadFile.mockImplementation(((path) => {
208
- if (path === '/test/hu.md') {
209
- return Promise.resolve('form input submit create edit update list table grid display action button save delete confirm detail view profile info summary');
210
- }
211
- return Promise.reject(new Error('not found'));
212
- }));
213
- const result = await handleDefineUIContract({
214
- specId: 'SPEC-001',
215
- projectId: 'proj-1',
216
- screens: ['dashboard'],
217
- });
218
- expect(result.isError).toBeUndefined();
219
- const data = JSON.parse(result.content[1].text);
220
- // Should have form, list, detail, and actions components because of content keywords
221
- const children = data.componentTree[0].children;
222
- expect(children.some((c) => c.name.includes('Form'))).toBe(true);
223
- expect(children.some((c) => c.name.includes('List'))).toBe(true);
224
- expect(children.some((c) => c.name.includes('Detail'))).toBe(true);
225
- expect(children.some((c) => c.name.includes('Actions'))).toBe(true);
226
- });
227
- it('should read fichaTecnicaPath content when available', async () => {
228
- mockGetSpec.mockResolvedValue({
229
- ...baseSpec,
230
- huPath: null,
231
- fichaTecnicaPath: '/test/ficha.md',
232
- });
233
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
234
- mockReadFile.mockImplementation(((path) => {
235
- if (path === '/test/ficha.md') {
236
- return Promise.resolve('form input submit');
237
- }
238
- return Promise.reject(new Error('not found'));
239
- }));
240
- const result = await handleDefineUIContract({
241
- specId: 'SPEC-001',
242
- projectId: 'proj-1',
243
- screens: ['user'],
244
- });
245
- expect(result.isError).toBeUndefined();
246
- const data = JSON.parse(result.content[1].text);
247
- const children = data.componentTree[0].children;
248
- expect(children.some((c) => c.name.includes('Form'))).toBe(true);
249
- });
250
- it('should handle readFile errors gracefully for both paths', async () => {
251
- mockGetSpec.mockResolvedValue({
252
- ...baseSpec,
253
- huPath: '/test/missing-hu.md',
254
- fichaTecnicaPath: '/test/missing-ficha.md',
255
- });
256
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
257
- mockReadFile.mockRejectedValue(new Error('ENOENT'));
258
- const result = await handleDefineUIContract({
259
- specId: 'SPEC-001',
260
- projectId: 'proj-1',
261
- });
262
- expect(result.isError).toBeUndefined();
263
- });
264
- // --- Coverage for countComponents recursive counting (line 566-573) ---
265
- it('should count all nested components correctly', async () => {
266
- mockGetSpec.mockResolvedValue({
267
- ...baseSpec,
268
- title: 'Dashboard with list and detail view profile info',
269
- tags: ['list', 'detail'],
270
- });
271
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
272
- const result = await handleDefineUIContract({
273
- specId: 'SPEC-001',
274
- projectId: 'proj-1',
275
- screens: ['products'],
276
- });
277
- expect(result.isError).toBeUndefined();
278
- // The success message should contain a component count
279
- expect(result.content[0].text).toContain('componentCount');
280
- const data = JSON.parse(result.content[1].text);
281
- // Recursively count
282
- let totalComponents = 0;
283
- const countAll = (nodes) => {
284
- for (const node of nodes) {
285
- totalComponents++;
286
- if (node.children) {
287
- countAll(node.children);
288
- }
289
- }
290
- };
291
- countAll(data.componentTree);
292
- expect(totalComponents).toBeGreaterThan(0);
293
- });
294
- // --- Coverage for extractScreens with URL-like patterns ---
295
- it('should extract screens from spec content when no screens provided', async () => {
296
- mockGetSpec.mockResolvedValue({
297
- ...baseSpec,
298
- title: 'page settings screen admin view users modal dialog',
299
- tags: ['route'],
300
- });
301
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
302
- const result = await handleDefineUIContract({
303
- specId: 'SPEC-001',
304
- projectId: 'proj-1',
305
- });
306
- expect(result.isError).toBeUndefined();
307
- const data = JSON.parse(result.content[1].text);
308
- // Should have extracted screens from content
309
- expect(data.componentTree.length).toBeGreaterThan(0);
310
- });
311
- // --- Coverage for default screen "main" when no screens detected ---
312
- it('should use default "main" screen when no screens detected in content', async () => {
313
- mockGetSpec.mockResolvedValue({
314
- ...baseSpec,
315
- title: 'Simple feature',
316
- tags: [],
317
- });
318
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
319
- const result = await handleDefineUIContract({
320
- specId: 'SPEC-001',
321
- projectId: 'proj-1',
322
- });
323
- const data = JSON.parse(result.content[1].text);
324
- const names = data.componentTree.map((n) => n.name);
325
- expect(names).toContain('MainPage');
326
- });
327
- // --- Coverage for generic content area when only header detected (line 251-261) ---
328
- it('should add generic content area when only header component detected', async () => {
329
- mockGetSpec.mockResolvedValue({
330
- ...baseSpec,
331
- title: 'Simple static page',
332
- tags: [],
333
- });
334
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
335
- const result = await handleDefineUIContract({
336
- specId: 'SPEC-001',
337
- projectId: 'proj-1',
338
- screens: ['about'],
339
- });
340
- const data = JSON.parse(result.content[1].text);
341
- const children = data.componentTree[0].children;
342
- const hasContent = children.some((c) => c.name.includes('Content'));
343
- expect(hasContent).toBe(true);
344
- });
345
- // --- Coverage for dataFlow with Form and List clients (lines 435-451) ---
346
- it('should generate data flow entries for Form and List client components', async () => {
347
- mockGetSpec.mockResolvedValue({
348
- ...baseSpec,
349
- title: 'Product form input submit create list table grid display',
350
- tags: ['form', 'list'],
351
- });
352
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
353
- const result = await handleDefineUIContract({
354
- specId: 'SPEC-001',
355
- projectId: 'proj-1',
356
- screens: ['products'],
357
- });
358
- const data = JSON.parse(result.content[1].text);
359
- const hasFormSubmission = data.dataFlow.some((f) => f.data === 'Form submission');
360
- const hasFilterParams = data.dataFlow.some((f) => f.data.includes('Filter/sort/pagination'));
361
- expect(hasFormSubmission).toBe(true);
362
- expect(hasFilterParams).toBe(true);
363
- });
364
- // --- Coverage for loading states: Actions component (line 487-493) ---
365
- it('should generate loading states for Action components', async () => {
366
- mockGetSpec.mockResolvedValue({
367
- ...baseSpec,
368
- title: 'Settings action button save delete confirm',
369
- tags: ['actions'],
370
- });
371
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
372
- const result = await handleDefineUIContract({
373
- specId: 'SPEC-001',
374
- projectId: 'proj-1',
375
- screens: ['settings'],
376
- });
377
- const data = JSON.parse(result.content[1].text);
378
- const hasActionsLoading = data.loadingStates.some((s) => s.component.includes('Actions'));
379
- expect(hasActionsLoading).toBe(true);
380
- });
381
- // --- Coverage for error states: Form and List errors (lines 523-549) ---
382
- it('should generate error states for Form and List components', async () => {
383
- mockGetSpec.mockResolvedValue({
384
- ...baseSpec,
385
- title: 'Order form input submit create list table display',
386
- tags: ['form', 'list'],
387
- });
388
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
389
- const result = await handleDefineUIContract({
390
- specId: 'SPEC-001',
391
- projectId: 'proj-1',
392
- screens: ['orders'],
393
- });
394
- const data = JSON.parse(result.content[1].text);
395
- // Form error states
396
- const hasFormValidation = data.errorStates.some((s) => s.trigger.includes('Validation error'));
397
- const hasFormServer = data.errorStates.some((s) => s.trigger.includes('Server rejection'));
398
- // List error states
399
- const hasEmptyState = data.errorStates.some((s) => s.trigger.includes('Empty state'));
400
- const hasFetchError = data.errorStates.some((s) => s.trigger.includes('Fetch error'));
401
- expect(hasFormValidation).toBe(true);
402
- expect(hasFormServer).toBe(true);
403
- expect(hasEmptyState).toBe(true);
404
- expect(hasFetchError).toBe(true);
405
- });
406
- // --- Coverage for dataFlow without apiContracts ---
407
- it('should default to REST API type when no apiContracts defined', async () => {
408
- mockGetSpec.mockResolvedValue(baseSpec);
409
- mockGetKnowledge.mockResolvedValue({
410
- ...baseKnowledge,
411
- apiContracts: [],
412
- });
413
- const result = await handleDefineUIContract({
414
- specId: 'SPEC-001',
415
- projectId: 'proj-1',
416
- screens: ['home'],
417
- });
418
- const data = JSON.parse(result.content[1].text);
419
- const hasRestFetch = data.dataFlow.some((f) => f.method.includes('REST'));
420
- expect(hasRestFetch).toBe(true);
421
- });
422
- // --- Coverage for extractFormFields: default fields ---
423
- it('should use default form fields (name, description) when none extracted', async () => {
424
- mockGetSpec.mockResolvedValue({
425
- ...baseSpec,
426
- title: 'Create form submit',
427
- tags: ['form'],
428
- });
429
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
430
- const result = await handleDefineUIContract({
431
- specId: 'SPEC-001',
432
- projectId: 'proj-1',
433
- screens: ['item'],
434
- });
435
- const data = JSON.parse(result.content[1].text);
436
- const formComponent = data.componentTree[0].children.find((c) => c.name.includes('Form'));
437
- if (formComponent) {
438
- const fieldNames = formComponent.children.map((c) => c.name.toLowerCase());
439
- // Should have default fields name and description as children
440
- expect(fieldNames.length).toBeGreaterThanOrEqual(2);
441
- }
442
- });
443
- // --- Coverage for extractFormFields: pattern matching fields ---
444
- it('should extract form fields from spec content patterns', async () => {
445
- mockGetSpec.mockResolvedValue({
446
- ...baseSpec,
447
- title: 'Registration: field email, provide username, name input, password field',
448
- tags: ['form'],
449
- });
450
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
451
- const result = await handleDefineUIContract({
452
- specId: 'SPEC-001',
453
- projectId: 'proj-1',
454
- screens: ['register'],
455
- });
456
- const data = JSON.parse(result.content[1].text);
457
- const formComponent = data.componentTree[0].children.find((c) => c.name.includes('Form'));
458
- expect(formComponent).toBeDefined();
459
- expect(formComponent.children.length).toBeGreaterThan(0);
460
- });
461
- // --- Coverage for server component data flow method (line 431) ---
462
- it('should use server component props method for server-type children', async () => {
463
- mockGetSpec.mockResolvedValue({
464
- ...baseSpec,
465
- title: 'Detail view profile info',
466
- tags: ['detail'],
467
- });
468
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
469
- const result = await handleDefineUIContract({
470
- specId: 'SPEC-001',
471
- projectId: 'proj-1',
472
- screens: ['user'],
473
- });
474
- const data = JSON.parse(result.content[1].text);
475
- const hasServerProps = data.dataFlow.some((f) => f.method.includes('Server component props'));
476
- expect(hasServerProps).toBe(true);
477
- });
478
- });
479
- //# sourceMappingURL=define-ui-contract.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-ui-contract.test.js","sourceRoot":"","sources":["../../src/tools/define-ui-contract.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=design-schema.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-schema.test.d.ts","sourceRoot":"","sources":["../../src/tools/design-schema.test.ts"],"names":[],"mappings":""}