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.
- package/README.md +31 -1
- package/dist/config/version.d.ts +2 -0
- package/dist/config/version.d.ts.map +1 -0
- package/dist/config/version.js +9 -0
- package/dist/config/version.js.map +1 -0
- package/dist/config/version.ts +11 -0
- package/dist/engine/detectors/library-detector-langs2.d.ts.map +1 -1
- package/dist/engine/detectors/library-detector-langs2.js.map +1 -1
- package/dist/engine/mermaid-generator.d.ts.map +1 -1
- package/dist/engine/mermaid-generator.js +12 -2
- package/dist/engine/mermaid-generator.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
- package/dist/tools/create-spec-hu/hu-body-generators.js +7 -1
- package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
- package/dist/tools/create-spec-tech/ficha-content.d.ts.map +1 -1
- package/dist/tools/create-spec-tech/ficha-content.js +4 -2
- package/dist/tools/create-spec-tech/ficha-content.js.map +1 -1
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +4 -3
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-tools/core-spec-tools.js +4 -0
- package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
- package/dist/types/spec/core.d.ts +1 -0
- package/dist/types/spec/core.d.ts.map +1 -1
- package/dist/types/spec/inputs.d.ts +1 -0
- package/dist/types/spec/inputs.d.ts.map +1 -1
- package/package.json +27 -18
- package/src/config/version.ts +11 -0
- package/dist/engine/agent-generator.test.d.ts +0 -2
- package/dist/engine/agent-generator.test.d.ts.map +0 -1
- package/dist/engine/agent-generator.test.js +0 -556
- package/dist/engine/agent-generator.test.js.map +0 -1
- package/dist/engine/analyzer.test.d.ts +0 -2
- package/dist/engine/analyzer.test.d.ts.map +0 -1
- package/dist/engine/analyzer.test.js +0 -1461
- package/dist/engine/analyzer.test.js.map +0 -1
- package/dist/engine/auditor.test.d.ts +0 -2
- package/dist/engine/auditor.test.d.ts.map +0 -1
- package/dist/engine/auditor.test.js +0 -2075
- package/dist/engine/auditor.test.js.map +0 -1
- package/dist/engine/doc-generator.test.d.ts +0 -2
- package/dist/engine/doc-generator.test.d.ts.map +0 -1
- package/dist/engine/doc-generator.test.js +0 -961
- package/dist/engine/doc-generator.test.js.map +0 -1
- package/dist/engine/estimator.test.d.ts +0 -2
- package/dist/engine/estimator.test.d.ts.map +0 -1
- package/dist/engine/estimator.test.js +0 -334
- package/dist/engine/estimator.test.js.map +0 -1
- package/dist/engine/skill-generator.test.d.ts +0 -2
- package/dist/engine/skill-generator.test.d.ts.map +0 -1
- package/dist/engine/skill-generator.test.js +0 -742
- package/dist/engine/skill-generator.test.js.map +0 -1
- package/dist/engine/validator.test.d.ts +0 -2
- package/dist/engine/validator.test.d.ts.map +0 -1
- package/dist/engine/validator.test.js +0 -2371
- package/dist/engine/validator.test.js.map +0 -1
- package/dist/engine/web-fetcher.test.d.ts +0 -2
- package/dist/engine/web-fetcher.test.d.ts.map +0 -1
- package/dist/engine/web-fetcher.test.js +0 -360
- package/dist/engine/web-fetcher.test.js.map +0 -1
- package/dist/i18n/index.test.d.ts +0 -2
- package/dist/i18n/index.test.d.ts.map +0 -1
- package/dist/i18n/index.test.js +0 -375
- package/dist/i18n/index.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -124
- package/dist/index.test.js.map +0 -1
- package/dist/resources/patterns.test.d.ts +0 -2
- package/dist/resources/patterns.test.d.ts.map +0 -1
- package/dist/resources/patterns.test.js +0 -142
- package/dist/resources/patterns.test.js.map +0 -1
- package/dist/resources/process.test.d.ts +0 -2
- package/dist/resources/process.test.d.ts.map +0 -1
- package/dist/resources/process.test.js +0 -48
- package/dist/resources/process.test.js.map +0 -1
- package/dist/resources/registry.test.d.ts +0 -2
- package/dist/resources/registry.test.d.ts.map +0 -1
- package/dist/resources/registry.test.js +0 -138
- package/dist/resources/registry.test.js.map +0 -1
- package/dist/resources/specs.test.d.ts +0 -2
- package/dist/resources/specs.test.d.ts.map +0 -1
- package/dist/resources/specs.test.js +0 -130
- package/dist/resources/specs.test.js.map +0 -1
- package/dist/resources/templates.test.d.ts +0 -2
- package/dist/resources/templates.test.d.ts.map +0 -1
- package/dist/resources/templates.test.js +0 -119
- package/dist/resources/templates.test.js.map +0 -1
- package/dist/smoke.test.d.ts +0 -2
- package/dist/smoke.test.d.ts.map +0 -1
- package/dist/smoke.test.js +0 -229
- package/dist/smoke.test.js.map +0 -1
- package/dist/storage/base-store.test.d.ts +0 -2
- package/dist/storage/base-store.test.d.ts.map +0 -1
- package/dist/storage/base-store.test.js +0 -180
- package/dist/storage/base-store.test.js.map +0 -1
- package/dist/storage/global-store.test.d.ts +0 -2
- package/dist/storage/global-store.test.d.ts.map +0 -1
- package/dist/storage/global-store.test.js +0 -327
- package/dist/storage/global-store.test.js.map +0 -1
- package/dist/storage/index.test.d.ts +0 -2
- package/dist/storage/index.test.d.ts.map +0 -1
- package/dist/storage/index.test.js +0 -56
- package/dist/storage/index.test.js.map +0 -1
- package/dist/storage/knowledge-store.test.d.ts +0 -2
- package/dist/storage/knowledge-store.test.d.ts.map +0 -1
- package/dist/storage/knowledge-store.test.js +0 -368
- package/dist/storage/knowledge-store.test.js.map +0 -1
- package/dist/storage/metrics-store.test.d.ts +0 -2
- package/dist/storage/metrics-store.test.d.ts.map +0 -1
- package/dist/storage/metrics-store.test.js +0 -212
- package/dist/storage/metrics-store.test.js.map +0 -1
- package/dist/storage/pattern-store.test.d.ts +0 -2
- package/dist/storage/pattern-store.test.d.ts.map +0 -1
- package/dist/storage/pattern-store.test.js +0 -224
- package/dist/storage/pattern-store.test.js.map +0 -1
- package/dist/storage/spec-store.test.d.ts +0 -2
- package/dist/storage/spec-store.test.d.ts.map +0 -1
- package/dist/storage/spec-store.test.js +0 -227
- package/dist/storage/spec-store.test.js.map +0 -1
- package/dist/tools/audit.test.d.ts +0 -2
- package/dist/tools/audit.test.d.ts.map +0 -1
- package/dist/tools/audit.test.js +0 -169
- package/dist/tools/audit.test.js.map +0 -1
- package/dist/tools/challenge-spec.test.d.ts +0 -2
- package/dist/tools/challenge-spec.test.d.ts.map +0 -1
- package/dist/tools/challenge-spec.test.js +0 -782
- package/dist/tools/challenge-spec.test.js.map +0 -1
- package/dist/tools/check-versions.test.d.ts +0 -2
- package/dist/tools/check-versions.test.d.ts.map +0 -1
- package/dist/tools/check-versions.test.js +0 -214
- package/dist/tools/check-versions.test.js.map +0 -1
- package/dist/tools/clarify-requirements.test.d.ts +0 -2
- package/dist/tools/clarify-requirements.test.d.ts.map +0 -1
- package/dist/tools/clarify-requirements.test.js +0 -161
- package/dist/tools/clarify-requirements.test.js.map +0 -1
- package/dist/tools/consult-docs.test.d.ts +0 -2
- package/dist/tools/consult-docs.test.d.ts.map +0 -1
- package/dist/tools/consult-docs.test.js +0 -140
- package/dist/tools/consult-docs.test.js.map +0 -1
- package/dist/tools/create-spec.test.d.ts +0 -2
- package/dist/tools/create-spec.test.d.ts.map +0 -1
- package/dist/tools/create-spec.test.js +0 -233
- package/dist/tools/create-spec.test.js.map +0 -1
- package/dist/tools/define-ui-contract.test.d.ts +0 -2
- package/dist/tools/define-ui-contract.test.d.ts.map +0 -1
- package/dist/tools/define-ui-contract.test.js +0 -479
- package/dist/tools/define-ui-contract.test.js.map +0 -1
- package/dist/tools/design-schema.test.d.ts +0 -2
- package/dist/tools/design-schema.test.d.ts.map +0 -1
- package/dist/tools/design-schema.test.js +0 -301
- package/dist/tools/design-schema.test.js.map +0 -1
- package/dist/tools/detect-agent.test.d.ts +0 -2
- package/dist/tools/detect-agent.test.d.ts.map +0 -1
- package/dist/tools/detect-agent.test.js +0 -133
- package/dist/tools/detect-agent.test.js.map +0 -1
- package/dist/tools/detect-drift.test.d.ts +0 -2
- package/dist/tools/detect-drift.test.d.ts.map +0 -1
- package/dist/tools/detect-drift.test.js +0 -312
- package/dist/tools/detect-drift.test.js.map +0 -1
- package/dist/tools/discover-mcps.test.d.ts +0 -2
- package/dist/tools/discover-mcps.test.d.ts.map +0 -1
- package/dist/tools/discover-mcps.test.js +0 -345
- package/dist/tools/discover-mcps.test.js.map +0 -1
- package/dist/tools/estimate.test.d.ts +0 -2
- package/dist/tools/estimate.test.d.ts.map +0 -1
- package/dist/tools/estimate.test.js +0 -137
- package/dist/tools/estimate.test.js.map +0 -1
- package/dist/tools/generate-adr.test.d.ts +0 -2
- package/dist/tools/generate-adr.test.d.ts.map +0 -1
- package/dist/tools/generate-adr.test.js +0 -206
- package/dist/tools/generate-adr.test.js.map +0 -1
- package/dist/tools/generate-checklist.test.d.ts +0 -2
- package/dist/tools/generate-checklist.test.d.ts.map +0 -1
- package/dist/tools/generate-checklist.test.js +0 -201
- package/dist/tools/generate-checklist.test.js.map +0 -1
- package/dist/tools/generate-docs.test.d.ts +0 -2
- package/dist/tools/generate-docs.test.d.ts.map +0 -1
- package/dist/tools/generate-docs.test.js +0 -183
- package/dist/tools/generate-docs.test.js.map +0 -1
- package/dist/tools/generate-execution-plan.test.d.ts +0 -2
- package/dist/tools/generate-execution-plan.test.d.ts.map +0 -1
- package/dist/tools/generate-execution-plan.test.js +0 -643
- package/dist/tools/generate-execution-plan.test.js.map +0 -1
- package/dist/tools/generate-rules.test.d.ts +0 -2
- package/dist/tools/generate-rules.test.d.ts.map +0 -1
- package/dist/tools/generate-rules.test.js +0 -148
- package/dist/tools/generate-rules.test.js.map +0 -1
- package/dist/tools/generate-skill.test.d.ts +0 -2
- package/dist/tools/generate-skill.test.d.ts.map +0 -1
- package/dist/tools/generate-skill.test.js +0 -138
- package/dist/tools/generate-skill.test.js.map +0 -1
- package/dist/tools/generate-sub-agent.test.d.ts +0 -2
- package/dist/tools/generate-sub-agent.test.d.ts.map +0 -1
- package/dist/tools/generate-sub-agent.test.js +0 -162
- package/dist/tools/generate-sub-agent.test.js.map +0 -1
- package/dist/tools/generate-tests.test.d.ts +0 -2
- package/dist/tools/generate-tests.test.d.ts.map +0 -1
- package/dist/tools/generate-tests.test.js +0 -222
- package/dist/tools/generate-tests.test.js.map +0 -1
- package/dist/tools/init-constitution.test.d.ts +0 -2
- package/dist/tools/init-constitution.test.d.ts.map +0 -1
- package/dist/tools/init-constitution.test.js +0 -398
- package/dist/tools/init-constitution.test.js.map +0 -1
- package/dist/tools/init-project.test.d.ts +0 -2
- package/dist/tools/init-project.test.d.ts.map +0 -1
- package/dist/tools/init-project.test.js +0 -158
- package/dist/tools/init-project.test.js.map +0 -1
- package/dist/tools/integrate-pm.test.d.ts +0 -2
- package/dist/tools/integrate-pm.test.d.ts.map +0 -1
- package/dist/tools/integrate-pm.test.js +0 -558
- package/dist/tools/integrate-pm.test.js.map +0 -1
- package/dist/tools/learn.test.d.ts +0 -2
- package/dist/tools/learn.test.d.ts.map +0 -1
- package/dist/tools/learn.test.js +0 -123
- package/dist/tools/learn.test.js.map +0 -1
- package/dist/tools/list-specs.test.d.ts +0 -2
- package/dist/tools/list-specs.test.d.ts.map +0 -1
- package/dist/tools/list-specs.test.js +0 -110
- package/dist/tools/list-specs.test.js.map +0 -1
- package/dist/tools/manage-context.test.d.ts +0 -2
- package/dist/tools/manage-context.test.d.ts.map +0 -1
- package/dist/tools/manage-context.test.js +0 -359
- package/dist/tools/manage-context.test.js.map +0 -1
- package/dist/tools/manage-git.test.d.ts +0 -2
- package/dist/tools/manage-git.test.d.ts.map +0 -1
- package/dist/tools/manage-git.test.js +0 -882
- package/dist/tools/manage-git.test.js.map +0 -1
- package/dist/tools/orchestrate.test.d.ts +0 -2
- package/dist/tools/orchestrate.test.d.ts.map +0 -1
- package/dist/tools/orchestrate.test.js +0 -1117
- package/dist/tools/orchestrate.test.js.map +0 -1
- package/dist/tools/reconcile-spec.test.d.ts +0 -2
- package/dist/tools/reconcile-spec.test.d.ts.map +0 -1
- package/dist/tools/reconcile-spec.test.js +0 -259
- package/dist/tools/reconcile-spec.test.js.map +0 -1
- package/dist/tools/register-platform-tools.test.d.ts +0 -2
- package/dist/tools/register-platform-tools.test.d.ts.map +0 -1
- package/dist/tools/register-platform-tools.test.js +0 -404
- package/dist/tools/register-platform-tools.test.js.map +0 -1
- package/dist/tools/register-spec-tools.test.d.ts +0 -2
- package/dist/tools/register-spec-tools.test.d.ts.map +0 -1
- package/dist/tools/register-spec-tools.test.js +0 -407
- package/dist/tools/register-spec-tools.test.js.map +0 -1
- package/dist/tools/reverse-engineer.test.d.ts +0 -2
- package/dist/tools/reverse-engineer.test.d.ts.map +0 -1
- package/dist/tools/reverse-engineer.test.js +0 -206
- package/dist/tools/reverse-engineer.test.js.map +0 -1
- package/dist/tools/schemas.d.ts +0 -20
- package/dist/tools/schemas.d.ts.map +0 -1
- package/dist/tools/schemas.js +0 -133
- package/dist/tools/schemas.js.map +0 -1
- package/dist/tools/schemas.test.d.ts +0 -2
- package/dist/tools/schemas.test.d.ts.map +0 -1
- package/dist/tools/schemas.test.js +0 -245
- package/dist/tools/schemas.test.js.map +0 -1
- package/dist/tools/set-locale.test.d.ts +0 -2
- package/dist/tools/set-locale.test.d.ts.map +0 -1
- package/dist/tools/set-locale.test.js +0 -74
- package/dist/tools/set-locale.test.js.map +0 -1
- package/dist/tools/suggest-mcps.test.d.ts +0 -2
- package/dist/tools/suggest-mcps.test.d.ts.map +0 -1
- package/dist/tools/suggest-mcps.test.js +0 -198
- package/dist/tools/suggest-mcps.test.js.map +0 -1
- package/dist/tools/suggest-stack.test.d.ts +0 -2
- package/dist/tools/suggest-stack.test.d.ts.map +0 -1
- package/dist/tools/suggest-stack.test.js +0 -181
- package/dist/tools/suggest-stack.test.js.map +0 -1
- package/dist/tools/suggest-tooling.test.d.ts +0 -2
- package/dist/tools/suggest-tooling.test.d.ts.map +0 -1
- package/dist/tools/suggest-tooling.test.js +0 -213
- package/dist/tools/suggest-tooling.test.js.map +0 -1
- package/dist/tools/summarize-spec.test.d.ts +0 -2
- package/dist/tools/summarize-spec.test.d.ts.map +0 -1
- package/dist/tools/summarize-spec.test.js +0 -180
- package/dist/tools/summarize-spec.test.js.map +0 -1
- package/dist/tools/update-status.test.d.ts +0 -2
- package/dist/tools/update-status.test.d.ts.map +0 -1
- package/dist/tools/update-status.test.js +0 -142
- package/dist/tools/update-status.test.js.map +0 -1
- package/dist/tools/validate.test.d.ts +0 -2
- package/dist/tools/validate.test.d.ts.map +0 -1
- package/dist/tools/validate.test.js +0 -137
- 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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"}
|
package/dist/tools/schemas.d.ts
DELETED
|
@@ -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"}
|
package/dist/tools/schemas.js
DELETED
|
@@ -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 +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
|