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,206 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- vi.mock('../i18n/index.js', () => ({
3
- ti: vi.fn((_key, params) => `translated:${JSON.stringify(params)}`),
4
- }));
5
- vi.mock('../storage/index.js', () => ({
6
- specStore: {
7
- createSpec: vi.fn(),
8
- },
9
- knowledgeStore: {
10
- getKnowledge: vi.fn(),
11
- },
12
- }));
13
- vi.mock('../engine/estimator.js', () => ({
14
- inferDifficulty: vi.fn(() => 2),
15
- }));
16
- vi.mock('node:fs/promises', () => ({
17
- readFile: vi.fn(),
18
- stat: vi.fn(),
19
- }));
20
- vi.mock('glob', () => ({
21
- glob: vi.fn(),
22
- }));
23
- import { handleReverseEngineer } from './reverse-engineer.js';
24
- import { specStore, knowledgeStore } from '../storage/index.js';
25
- import { stat, readFile } from 'node:fs/promises';
26
- import { glob } from 'glob';
27
- beforeEach(() => {
28
- vi.clearAllMocks();
29
- });
30
- describe('handleReverseEngineer', () => {
31
- it('should return error when path not found', async () => {
32
- vi.mocked(stat).mockRejectedValue(new Error('ENOENT'));
33
- const result = await handleReverseEngineer({
34
- path: '/nonexistent',
35
- projectId: 'proj-123',
36
- });
37
- expect(result.isError).toBe(true);
38
- });
39
- it('should analyze a directory successfully', async () => {
40
- vi.mocked(stat)
41
- .mockResolvedValueOnce(undefined) // first call: validate path exists
42
- .mockResolvedValueOnce({ isDirectory: () => true }); // second call: check if dir
43
- vi.mocked(glob).mockResolvedValue(['src/index.ts', 'src/utils.ts']);
44
- vi.mocked(readFile).mockResolvedValue('import express from "express";\nexport async function handleRequest() { await fetch(); }');
45
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue({ projectPath: '/test' });
46
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
47
- const result = await handleReverseEngineer({
48
- path: '/test/src',
49
- projectId: 'proj-123',
50
- });
51
- expect(result.isError).toBeUndefined();
52
- expect(result.content).toHaveLength(2);
53
- const parsed = JSON.parse(result.content[1].text);
54
- expect(parsed.specId).toBeDefined();
55
- expect(parsed.analysis.filesAnalyzed).toBe(2);
56
- expect(specStore.createSpec).toHaveBeenCalled();
57
- });
58
- it('should analyze a single file', async () => {
59
- vi.mocked(stat)
60
- .mockResolvedValueOnce(undefined) // first call: validate path
61
- .mockResolvedValueOnce({ isDirectory: () => false }); // second call: check type
62
- vi.mocked(readFile).mockResolvedValue('export class UserService { }\nexport function getUser() {}');
63
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue(null);
64
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
65
- const result = await handleReverseEngineer({
66
- path: '/test/src/user-service.ts',
67
- projectId: 'proj-123',
68
- });
69
- expect(result.isError).toBeUndefined();
70
- const parsed = JSON.parse(result.content[1].text);
71
- expect(parsed.analysis.filesAnalyzed).toBe(1);
72
- });
73
- it('should return error for too many files in shallow mode', async () => {
74
- vi.mocked(stat)
75
- .mockResolvedValueOnce(undefined)
76
- .mockResolvedValueOnce({ isDirectory: () => true });
77
- const manyFiles = Array.from({ length: 201 }, (_, i) => `file${i}.ts`);
78
- vi.mocked(glob).mockResolvedValue(manyFiles);
79
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue(null);
80
- const result = await handleReverseEngineer({
81
- path: '/test/src',
82
- projectId: 'proj-123',
83
- depth: 'shallow',
84
- });
85
- expect(result.isError).toBe(true);
86
- });
87
- it('should handle deep mode', async () => {
88
- vi.mocked(stat)
89
- .mockResolvedValueOnce(undefined)
90
- .mockResolvedValueOnce({ isDirectory: () => true });
91
- vi.mocked(glob).mockResolvedValue(['src/index.ts']);
92
- vi.mocked(readFile).mockResolvedValue('const x = 1;');
93
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue(null);
94
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
95
- const result = await handleReverseEngineer({
96
- path: '/test/src',
97
- projectId: 'proj-123',
98
- depth: 'deep',
99
- });
100
- expect(result.isError).toBeUndefined();
101
- });
102
- it('should detect patterns like React hooks', async () => {
103
- vi.mocked(stat)
104
- .mockResolvedValueOnce(undefined)
105
- .mockResolvedValueOnce({ isDirectory: () => true });
106
- vi.mocked(glob).mockResolvedValue(['component/App.tsx']);
107
- vi.mocked(readFile).mockResolvedValue('import React from "react";\nconst [state, setState] = useState(0);\nuseEffect(() => {}, []);');
108
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue({ projectPath: '/test' });
109
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
110
- const result = await handleReverseEngineer({
111
- path: '/test/src',
112
- projectId: 'proj-123',
113
- });
114
- const parsed = JSON.parse(result.content[1].text);
115
- expect(parsed.analysis.patternsDetected).toContain('React hooks');
116
- });
117
- it('should skip unreadable files', async () => {
118
- vi.mocked(stat)
119
- .mockResolvedValueOnce(undefined)
120
- .mockResolvedValueOnce({ isDirectory: () => true });
121
- vi.mocked(glob).mockResolvedValue(['readable.ts', 'unreadable.ts']);
122
- vi.mocked(readFile).mockImplementation(((path) => {
123
- if (String(path).includes('unreadable')) {
124
- return Promise.reject(new Error('Permission denied'));
125
- }
126
- return Promise.resolve('export const x = 1;');
127
- }));
128
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue(null);
129
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
130
- const result = await handleReverseEngineer({
131
- path: '/test/src',
132
- projectId: 'proj-123',
133
- });
134
- expect(result.isError).toBeUndefined();
135
- });
136
- it('should skip undefined entries in files array', async () => {
137
- vi.mocked(stat)
138
- .mockResolvedValueOnce(undefined)
139
- .mockResolvedValueOnce({ isDirectory: () => true });
140
- // Create an array with gaps (sparse array) to trigger the `if (!file) continue`
141
- const sparseFiles = [];
142
- sparseFiles[0] = 'src/index.ts';
143
- sparseFiles[2] = 'src/utils.ts'; // index 1 is empty/undefined
144
- vi.mocked(glob).mockResolvedValue(sparseFiles);
145
- vi.mocked(readFile).mockResolvedValue('export const x = 1;');
146
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue(null);
147
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
148
- const result = await handleReverseEngineer({
149
- path: '/test/src',
150
- projectId: 'proj-123',
151
- });
152
- expect(result.isError).toBeUndefined();
153
- });
154
- it('should detect application layer from file paths', async () => {
155
- vi.mocked(stat)
156
- .mockResolvedValueOnce(undefined)
157
- .mockResolvedValueOnce({ isDirectory: () => true });
158
- vi.mocked(glob).mockResolvedValue([
159
- 'service/user-service.ts',
160
- ]);
161
- vi.mocked(readFile).mockResolvedValue('export class UserService { }');
162
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue({ projectPath: '/test' });
163
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
164
- const result = await handleReverseEngineer({
165
- path: '/test/src',
166
- projectId: 'proj-123',
167
- });
168
- const parsed = JSON.parse(result.content[1].text);
169
- expect(parsed.analysis.layersIdentified).toContain('application');
170
- });
171
- it('should detect domain layer from file paths', async () => {
172
- vi.mocked(stat)
173
- .mockResolvedValueOnce(undefined)
174
- .mockResolvedValueOnce({ isDirectory: () => true });
175
- vi.mocked(glob).mockResolvedValue([
176
- 'domain/user-entity.ts',
177
- ]);
178
- vi.mocked(readFile).mockResolvedValue('export class User { }');
179
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue({ projectPath: '/test' });
180
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
181
- const result = await handleReverseEngineer({
182
- path: '/test/src',
183
- projectId: 'proj-123',
184
- });
185
- const parsed = JSON.parse(result.content[1].text);
186
- expect(parsed.analysis.layersIdentified).toContain('domain');
187
- });
188
- it('should detect infrastructure layer from file paths', async () => {
189
- vi.mocked(stat)
190
- .mockResolvedValueOnce(undefined)
191
- .mockResolvedValueOnce({ isDirectory: () => true });
192
- vi.mocked(glob).mockResolvedValue([
193
- 'repository/user-repo.ts',
194
- ]);
195
- vi.mocked(readFile).mockResolvedValue('export class UserRepository { }');
196
- vi.mocked(knowledgeStore.getKnowledge).mockResolvedValue({ projectPath: '/test' });
197
- vi.mocked(specStore.createSpec).mockResolvedValue(undefined);
198
- const result = await handleReverseEngineer({
199
- path: '/test/src',
200
- projectId: 'proj-123',
201
- });
202
- const parsed = JSON.parse(result.content[1].text);
203
- expect(parsed.analysis.layersIdentified).toContain('infrastructure');
204
- });
205
- });
206
- //# sourceMappingURL=reverse-engineer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reverse-engineer.test.js","sourceRoot":"","sources":["../../src/tools/reverse-engineer.test.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const SupportedLocaleEnum: z.ZodEnum<["en", "es", "pt"]>;
3
- export declare const SpecStatusEnum: z.ZodEnum<["draft", "review", "approved", "implementing", "done"]>;
4
- export declare const SpecTypeEnum: z.ZodEnum<["feature", "refactor", "bugfix", "infra", "docs", "project"]>;
5
- export declare const SpecScopeEnum: z.ZodEnum<["trivial", "feature", "cross-module", "architectural"]>;
6
- export declare const SpecTargetEnum: z.ZodEnum<["frontend", "backend", "shared", "fullstack", "infrastructure", "database"]>;
7
- export declare const ExperienceLevelEnum: z.ZodEnum<["beginner", "intermediate", "expert"]>;
8
- export declare const AgentPlatformEnum: z.ZodEnum<["claude-code", "cursor", "windsurf", "aider", "copilot", "cline", "continue", "custom"]>;
9
- export declare const SubAgentFrameworkEnum: z.ZodEnum<["claude-agent-sdk", "crewai", "langgraph", "autogen", "mastra", "vercel-ai-sdk", "custom"]>;
10
- export declare const AuditCategoryEnum: z.ZodEnum<["solid", "clean-code", "architecture", "security", "performance", "error-handling", "testing", "dry", "project-rules"]>;
11
- export declare const DocumentationTypeEnum: z.ZodEnum<["user-guide", "api-reference", "readme", "setup-guide", "changelog", "onboarding", "faq", "architecture-doc", "deployment-guide", "database-doc", "help-articles", "release-notes", "runbook", "security-doc"]>;
12
- export declare const GitActionEnum: z.ZodEnum<["create-branch", "generate-pr", "link-commits", "generate-changelog", "setup-hooks", "check-branch", "status"]>;
13
- export declare const DevLifecycleCategoryEnum: z.ZodEnum<["project_management", "version_control", "ci_cd", "caching", "message_queues", "search", "file_storage", "realtime", "feature_flags", "observability", "analytics", "testing", "security", "api_documentation", "design_prototyping", "email_sms_notifications", "payments_billing", "ai_ml", "cdn_edge", "containerization", "scheduled_jobs", "cms", "i18n", "rate_limiting", "linting_formatting"]>;
14
- export declare const PMPlatformEnum: z.ZodEnum<["jira", "linear", "github", "trello", "notion", "asana", "clickup"]>;
15
- export declare const PMActionEnum: z.ZodEnum<["sync-spec", "create-issue", "link-spec", "update-status"]>;
16
- export declare const OrchestrateActionEnum: z.ZodEnum<["register", "heartbeat", "lock", "unlock", "distribute", "status", "resolve-conflict"]>;
17
- export declare const ManageContextActionEnum: z.ZodEnum<["save", "load", "list", "delete", "cleanup"]>;
18
- export declare const ChecklistFocusEnum: z.ZodEnum<["completeness", "consistency", "feasibility", "security", "edge-cases", "ux"]>;
19
- export declare const ChallengeSpecFocusEnum: z.ZodEnum<["failures", "concurrency", "scale", "security", "data-consistency"]>;
20
- //# sourceMappingURL=schemas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB,+BAA6B,CAAC;AAC9D,eAAO,MAAM,cAAc,oEAAkE,CAAC;AAC9F,eAAO,MAAM,YAAY,0EAAwE,CAAC;AAClG,eAAO,MAAM,aAAa,oEAAkE,CAAC;AAC7F,eAAO,MAAM,cAAc,yFAOzB,CAAC;AACH,eAAO,MAAM,mBAAmB,mDAAiD,CAAC;AAElF,eAAO,MAAM,iBAAiB,qGAS5B,CAAC;AACH,eAAO,MAAM,qBAAqB,wGAQhC,CAAC;AACH,eAAO,MAAM,iBAAiB,oIAU5B,CAAC;AACH,eAAO,MAAM,qBAAqB,4NAehC,CAAC;AACH,eAAO,MAAM,aAAa,4HAQxB,CAAC;AACH,eAAO,MAAM,wBAAwB,mZA0BnC,CAAC;AACH,eAAO,MAAM,cAAc,iFAQzB,CAAC;AACH,eAAO,MAAM,YAAY,wEAAsE,CAAC;AAChG,eAAO,MAAM,qBAAqB,oGAQhC,CAAC;AACH,eAAO,MAAM,uBAAuB,0DAAwD,CAAC;AAC7F,eAAO,MAAM,kBAAkB,2FAO7B,CAAC;AACH,eAAO,MAAM,sBAAsB,iFAMjC,CAAC"}
@@ -1,133 +0,0 @@
1
- // tools/schemas.ts — Shared Zod enum schemas used across tool registrations.
2
- import { z } from 'zod';
3
- export const SupportedLocaleEnum = z.enum(['en', 'es', 'pt']);
4
- export const SpecStatusEnum = z.enum(['draft', 'review', 'approved', 'implementing', 'done']);
5
- export const SpecTypeEnum = z.enum(['feature', 'refactor', 'bugfix', 'infra', 'docs', 'project']);
6
- export const SpecScopeEnum = z.enum(['trivial', 'feature', 'cross-module', 'architectural']);
7
- export const SpecTargetEnum = z.enum([
8
- 'frontend',
9
- 'backend',
10
- 'shared',
11
- 'fullstack',
12
- 'infrastructure',
13
- 'database',
14
- ]);
15
- export const ExperienceLevelEnum = z.enum(['beginner', 'intermediate', 'expert']);
16
- export const AgentPlatformEnum = z.enum([
17
- 'claude-code',
18
- 'cursor',
19
- 'windsurf',
20
- 'aider',
21
- 'copilot',
22
- 'cline',
23
- 'continue',
24
- 'custom',
25
- ]);
26
- export const SubAgentFrameworkEnum = z.enum([
27
- 'claude-agent-sdk',
28
- 'crewai',
29
- 'langgraph',
30
- 'autogen',
31
- 'mastra',
32
- 'vercel-ai-sdk',
33
- 'custom',
34
- ]);
35
- export const AuditCategoryEnum = z.enum([
36
- 'solid',
37
- 'clean-code',
38
- 'architecture',
39
- 'security',
40
- 'performance',
41
- 'error-handling',
42
- 'testing',
43
- 'dry',
44
- 'project-rules',
45
- ]);
46
- export const DocumentationTypeEnum = z.enum([
47
- 'user-guide',
48
- 'api-reference',
49
- 'readme',
50
- 'setup-guide',
51
- 'changelog',
52
- 'onboarding',
53
- 'faq',
54
- 'architecture-doc',
55
- 'deployment-guide',
56
- 'database-doc',
57
- 'help-articles',
58
- 'release-notes',
59
- 'runbook',
60
- 'security-doc',
61
- ]);
62
- export const GitActionEnum = z.enum([
63
- 'create-branch',
64
- 'generate-pr',
65
- 'link-commits',
66
- 'generate-changelog',
67
- 'setup-hooks',
68
- 'check-branch',
69
- 'status',
70
- ]);
71
- export const DevLifecycleCategoryEnum = z.enum([
72
- 'project_management',
73
- 'version_control',
74
- 'ci_cd',
75
- 'caching',
76
- 'message_queues',
77
- 'search',
78
- 'file_storage',
79
- 'realtime',
80
- 'feature_flags',
81
- 'observability',
82
- 'analytics',
83
- 'testing',
84
- 'security',
85
- 'api_documentation',
86
- 'design_prototyping',
87
- 'email_sms_notifications',
88
- 'payments_billing',
89
- 'ai_ml',
90
- 'cdn_edge',
91
- 'containerization',
92
- 'scheduled_jobs',
93
- 'cms',
94
- 'i18n',
95
- 'rate_limiting',
96
- 'linting_formatting',
97
- ]);
98
- export const PMPlatformEnum = z.enum([
99
- 'jira',
100
- 'linear',
101
- 'github',
102
- 'trello',
103
- 'notion',
104
- 'asana',
105
- 'clickup',
106
- ]);
107
- export const PMActionEnum = z.enum(['sync-spec', 'create-issue', 'link-spec', 'update-status']);
108
- export const OrchestrateActionEnum = z.enum([
109
- 'register',
110
- 'heartbeat',
111
- 'lock',
112
- 'unlock',
113
- 'distribute',
114
- 'status',
115
- 'resolve-conflict',
116
- ]);
117
- export const ManageContextActionEnum = z.enum(['save', 'load', 'list', 'delete', 'cleanup']);
118
- export const ChecklistFocusEnum = z.enum([
119
- 'completeness',
120
- 'consistency',
121
- 'feasibility',
122
- 'security',
123
- 'edge-cases',
124
- 'ux',
125
- ]);
126
- export const ChallengeSpecFocusEnum = z.enum([
127
- 'failures',
128
- 'concurrency',
129
- 'scale',
130
- 'security',
131
- 'data-consistency',
132
- ]);
133
- //# sourceMappingURL=schemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=schemas.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.test.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.test.ts"],"names":[],"mappings":""}
@@ -1,245 +0,0 @@
1
- // Tests for Zod enum schemas
2
- import { describe, it, expect } from 'vitest';
3
- import { SupportedLocaleEnum, SpecStatusEnum, SpecTypeEnum, SpecScopeEnum, SpecTargetEnum, ExperienceLevelEnum, AgentPlatformEnum, SubAgentFrameworkEnum, AuditCategoryEnum, DocumentationTypeEnum, GitActionEnum, DevLifecycleCategoryEnum, PMPlatformEnum, PMActionEnum, OrchestrateActionEnum, ManageContextActionEnum, ChecklistFocusEnum, ChallengeSpecFocusEnum, } from './schemas.js';
4
- describe('SupportedLocaleEnum', () => {
5
- it('should accept valid locales', () => {
6
- expect(SupportedLocaleEnum.parse('en')).toBe('en');
7
- expect(SupportedLocaleEnum.parse('es')).toBe('es');
8
- expect(SupportedLocaleEnum.parse('pt')).toBe('pt');
9
- });
10
- it('should reject invalid locale', () => {
11
- expect(() => SupportedLocaleEnum.parse('fr')).toThrow();
12
- expect(() => SupportedLocaleEnum.parse('')).toThrow();
13
- });
14
- });
15
- describe('SpecStatusEnum', () => {
16
- it('should accept all valid statuses', () => {
17
- const statuses = ['draft', 'review', 'approved', 'implementing', 'done'];
18
- for (const s of statuses) {
19
- expect(SpecStatusEnum.parse(s)).toBe(s);
20
- }
21
- });
22
- it('should reject invalid status', () => {
23
- expect(() => SpecStatusEnum.parse('pending')).toThrow();
24
- expect(() => SpecStatusEnum.parse('cancelled')).toThrow();
25
- });
26
- });
27
- describe('SpecTypeEnum', () => {
28
- it('should accept all valid types', () => {
29
- const types = ['feature', 'refactor', 'bugfix', 'infra', 'docs', 'project'];
30
- for (const t of types) {
31
- expect(SpecTypeEnum.parse(t)).toBe(t);
32
- }
33
- });
34
- it('should reject invalid type', () => {
35
- expect(() => SpecTypeEnum.parse('hotfix')).toThrow();
36
- });
37
- });
38
- describe('SpecScopeEnum', () => {
39
- it('should accept all valid scopes', () => {
40
- const scopes = ['trivial', 'feature', 'cross-module', 'architectural'];
41
- for (const s of scopes) {
42
- expect(SpecScopeEnum.parse(s)).toBe(s);
43
- }
44
- });
45
- it('should reject invalid scope', () => {
46
- expect(() => SpecScopeEnum.parse('global')).toThrow();
47
- });
48
- });
49
- describe('SpecTargetEnum', () => {
50
- it('should accept all valid targets', () => {
51
- const targets = ['frontend', 'backend', 'shared', 'fullstack', 'infrastructure', 'database'];
52
- for (const t of targets) {
53
- expect(SpecTargetEnum.parse(t)).toBe(t);
54
- }
55
- });
56
- it('should reject invalid target', () => {
57
- expect(() => SpecTargetEnum.parse('mobile')).toThrow();
58
- });
59
- });
60
- describe('ExperienceLevelEnum', () => {
61
- it('should accept all valid levels', () => {
62
- expect(ExperienceLevelEnum.parse('beginner')).toBe('beginner');
63
- expect(ExperienceLevelEnum.parse('intermediate')).toBe('intermediate');
64
- expect(ExperienceLevelEnum.parse('expert')).toBe('expert');
65
- });
66
- it('should reject invalid level', () => {
67
- expect(() => ExperienceLevelEnum.parse('advanced')).toThrow();
68
- });
69
- });
70
- describe('AgentPlatformEnum', () => {
71
- it('should accept all valid platforms', () => {
72
- const platforms = ['claude-code', 'cursor', 'windsurf', 'aider', 'copilot', 'cline', 'continue', 'custom'];
73
- for (const p of platforms) {
74
- expect(AgentPlatformEnum.parse(p)).toBe(p);
75
- }
76
- });
77
- it('should reject invalid platform', () => {
78
- expect(() => AgentPlatformEnum.parse('vscode')).toThrow();
79
- });
80
- });
81
- describe('SubAgentFrameworkEnum', () => {
82
- it('should accept all valid frameworks', () => {
83
- const frameworks = ['claude-agent-sdk', 'crewai', 'langgraph', 'autogen', 'mastra', 'vercel-ai-sdk', 'custom'];
84
- for (const f of frameworks) {
85
- expect(SubAgentFrameworkEnum.parse(f)).toBe(f);
86
- }
87
- });
88
- it('should reject invalid framework', () => {
89
- expect(() => SubAgentFrameworkEnum.parse('langchain')).toThrow();
90
- });
91
- });
92
- describe('AuditCategoryEnum', () => {
93
- it('should accept all valid categories', () => {
94
- const cats = ['solid', 'clean-code', 'architecture', 'security', 'performance', 'error-handling', 'testing', 'dry', 'project-rules'];
95
- for (const c of cats) {
96
- expect(AuditCategoryEnum.parse(c)).toBe(c);
97
- }
98
- });
99
- it('should reject invalid category', () => {
100
- expect(() => AuditCategoryEnum.parse('readability')).toThrow();
101
- });
102
- });
103
- describe('DocumentationTypeEnum', () => {
104
- it('should accept all valid documentation types', () => {
105
- const docTypes = [
106
- 'user-guide', 'api-reference', 'readme', 'setup-guide', 'changelog',
107
- 'onboarding', 'faq', 'architecture-doc', 'deployment-guide', 'database-doc',
108
- 'help-articles', 'release-notes', 'runbook', 'security-doc',
109
- ];
110
- for (const d of docTypes) {
111
- expect(DocumentationTypeEnum.parse(d)).toBe(d);
112
- }
113
- });
114
- it('should reject invalid documentation type', () => {
115
- expect(() => DocumentationTypeEnum.parse('wiki')).toThrow();
116
- });
117
- it('should have exactly 14 valid values', () => {
118
- expect(DocumentationTypeEnum.options).toHaveLength(14);
119
- });
120
- });
121
- describe('GitActionEnum', () => {
122
- it('should accept all valid git actions', () => {
123
- const actions = ['create-branch', 'generate-pr', 'link-commits', 'generate-changelog', 'setup-hooks', 'check-branch', 'status'];
124
- for (const a of actions) {
125
- expect(GitActionEnum.parse(a)).toBe(a);
126
- }
127
- });
128
- it('should reject invalid git action', () => {
129
- expect(() => GitActionEnum.parse('merge')).toThrow();
130
- });
131
- });
132
- describe('DevLifecycleCategoryEnum', () => {
133
- it('should accept all valid lifecycle categories', () => {
134
- const cats = [
135
- 'project_management', 'version_control', 'ci_cd', 'caching',
136
- 'message_queues', 'search', 'file_storage', 'realtime',
137
- 'feature_flags', 'observability', 'analytics', 'testing',
138
- 'security', 'api_documentation', 'design_prototyping',
139
- 'email_sms_notifications', 'payments_billing', 'ai_ml',
140
- 'cdn_edge', 'containerization', 'scheduled_jobs', 'cms',
141
- 'i18n', 'rate_limiting', 'linting_formatting',
142
- ];
143
- for (const c of cats) {
144
- expect(DevLifecycleCategoryEnum.parse(c)).toBe(c);
145
- }
146
- });
147
- it('should reject invalid lifecycle category', () => {
148
- expect(() => DevLifecycleCategoryEnum.parse('deployment')).toThrow();
149
- });
150
- it('should have exactly 25 valid values', () => {
151
- expect(DevLifecycleCategoryEnum.options).toHaveLength(25);
152
- });
153
- });
154
- describe('PMPlatformEnum', () => {
155
- it('should accept all valid PM platforms', () => {
156
- const platforms = ['jira', 'linear', 'github', 'trello', 'notion', 'asana', 'clickup'];
157
- for (const p of platforms) {
158
- expect(PMPlatformEnum.parse(p)).toBe(p);
159
- }
160
- });
161
- it('should reject invalid PM platform', () => {
162
- expect(() => PMPlatformEnum.parse('monday')).toThrow();
163
- });
164
- });
165
- describe('PMActionEnum', () => {
166
- it('should accept all valid PM actions', () => {
167
- const actions = ['sync-spec', 'create-issue', 'link-spec', 'update-status'];
168
- for (const a of actions) {
169
- expect(PMActionEnum.parse(a)).toBe(a);
170
- }
171
- });
172
- it('should reject invalid PM action', () => {
173
- expect(() => PMActionEnum.parse('delete-issue')).toThrow();
174
- });
175
- });
176
- describe('OrchestrateActionEnum', () => {
177
- it('should accept all valid orchestrate actions', () => {
178
- const actions = ['register', 'heartbeat', 'lock', 'unlock', 'distribute', 'status', 'resolve-conflict'];
179
- for (const a of actions) {
180
- expect(OrchestrateActionEnum.parse(a)).toBe(a);
181
- }
182
- });
183
- it('should reject invalid orchestrate action', () => {
184
- expect(() => OrchestrateActionEnum.parse('restart')).toThrow();
185
- });
186
- });
187
- describe('ManageContextActionEnum', () => {
188
- it('should accept all valid context actions', () => {
189
- const actions = ['save', 'load', 'list', 'delete', 'cleanup'];
190
- for (const a of actions) {
191
- expect(ManageContextActionEnum.parse(a)).toBe(a);
192
- }
193
- });
194
- it('should reject invalid context action', () => {
195
- expect(() => ManageContextActionEnum.parse('archive')).toThrow();
196
- });
197
- });
198
- describe('ChecklistFocusEnum', () => {
199
- it('should accept all valid checklist focus areas', () => {
200
- const areas = ['completeness', 'consistency', 'feasibility', 'security', 'edge-cases', 'ux'];
201
- for (const a of areas) {
202
- expect(ChecklistFocusEnum.parse(a)).toBe(a);
203
- }
204
- });
205
- it('should reject invalid checklist focus', () => {
206
- expect(() => ChecklistFocusEnum.parse('performance')).toThrow();
207
- });
208
- });
209
- describe('ChallengeSpecFocusEnum', () => {
210
- it('should accept all valid challenge focus areas', () => {
211
- const areas = ['failures', 'concurrency', 'scale', 'security', 'data-consistency'];
212
- for (const a of areas) {
213
- expect(ChallengeSpecFocusEnum.parse(a)).toBe(a);
214
- }
215
- });
216
- it('should reject invalid challenge focus', () => {
217
- expect(() => ChallengeSpecFocusEnum.parse('usability')).toThrow();
218
- });
219
- });
220
- describe('Zod enums general behavior', () => {
221
- it('should reject null and undefined for all enums', () => {
222
- const enums = [
223
- SupportedLocaleEnum, SpecStatusEnum, SpecTypeEnum, SpecScopeEnum,
224
- SpecTargetEnum, ExperienceLevelEnum, AgentPlatformEnum,
225
- SubAgentFrameworkEnum, AuditCategoryEnum, DocumentationTypeEnum,
226
- GitActionEnum, DevLifecycleCategoryEnum, PMPlatformEnum,
227
- PMActionEnum, OrchestrateActionEnum, ManageContextActionEnum,
228
- ChecklistFocusEnum, ChallengeSpecFocusEnum,
229
- ];
230
- for (const e of enums) {
231
- expect(() => e.parse(null)).toThrow();
232
- expect(() => e.parse(undefined)).toThrow();
233
- }
234
- });
235
- it('should reject numeric values for all enums', () => {
236
- const enums = [
237
- SupportedLocaleEnum, SpecStatusEnum, SpecTypeEnum, SpecScopeEnum,
238
- SpecTargetEnum, ExperienceLevelEnum, AgentPlatformEnum,
239
- ];
240
- for (const e of enums) {
241
- expect(() => e.parse(123)).toThrow();
242
- }
243
- });
244
- });
245
- //# sourceMappingURL=schemas.test.js.map