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
@@ -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