@shiftleftpt/sbd-toe-mcp 0.1.0 → 0.2.16

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 (42) hide show
  1. package/.env.example +0 -3
  2. package/README.md +136 -254
  3. package/dist/config.js +0 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/types.d.ts +0 -3
  6. package/package.json +18 -2
  7. package/dist/backend/semantic-index-gateway.test.d.ts +0 -1
  8. package/dist/backend/semantic-index-gateway.test.js +0 -384
  9. package/dist/backend/semantic-index-gateway.test.js.map +0 -1
  10. package/dist/bootstrap/checkout-backend.d.ts +0 -31
  11. package/dist/bootstrap/checkout-backend.js +0 -136
  12. package/dist/bootstrap/checkout-backend.js.map +0 -1
  13. package/dist/bootstrap/checkout-backend.test.d.ts +0 -1
  14. package/dist/bootstrap/checkout-backend.test.js +0 -158
  15. package/dist/bootstrap/checkout-backend.test.js.map +0 -1
  16. package/dist/bootstrap/release-checkout.d.ts +0 -8
  17. package/dist/bootstrap/release-checkout.js +0 -168
  18. package/dist/bootstrap/release-checkout.js.map +0 -1
  19. package/dist/bootstrap/release-checkout.test.d.ts +0 -1
  20. package/dist/bootstrap/release-checkout.test.js +0 -137
  21. package/dist/bootstrap/release-checkout.test.js.map +0 -1
  22. package/dist/resources/sbd-toe-resources.test.d.ts +0 -1
  23. package/dist/resources/sbd-toe-resources.test.js +0 -134
  24. package/dist/resources/sbd-toe-resources.test.js.map +0 -1
  25. package/dist/test-utils.d.ts +0 -153
  26. package/dist/test-utils.js +0 -176
  27. package/dist/test-utils.js.map +0 -1
  28. package/dist/tools/generate-document.test.d.ts +0 -1
  29. package/dist/tools/generate-document.test.js +0 -189
  30. package/dist/tools/generate-document.test.js.map +0 -1
  31. package/dist/tools/map-review-scope.test.d.ts +0 -1
  32. package/dist/tools/map-review-scope.test.js +0 -204
  33. package/dist/tools/map-review-scope.test.js.map +0 -1
  34. package/dist/tools/plan-repo-governance.test.d.ts +0 -1
  35. package/dist/tools/plan-repo-governance.test.js +0 -237
  36. package/dist/tools/plan-repo-governance.test.js.map +0 -1
  37. package/dist/tools/structured-tools.test.d.ts +0 -1
  38. package/dist/tools/structured-tools.test.js +0 -459
  39. package/dist/tools/structured-tools.test.js.map +0 -1
  40. package/dist/validators/ai-disclosure.test.d.ts +0 -1
  41. package/dist/validators/ai-disclosure.test.js +0 -244
  42. package/dist/validators/ai-disclosure.test.js.map +0 -1
@@ -1,244 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { extractDisclosure, validateDisclosure, validateAIDisclosure, ALLOWED_PURPOSES, } from './ai-disclosure.js';
3
- describe('AI Disclosure Validator', () => {
4
- describe('YAML Frontmatter Parsing', () => {
5
- it('should parse valid YAML frontmatter', () => {
6
- const content = `---
7
- ai_assisted: true
8
- model: Claude Haiku 4.5
9
- date: 2026-03-24
10
- purpose: governance-doc
11
- ---
12
- # Content here`;
13
- const disclosure = extractDisclosure(content);
14
- expect(disclosure).not.toBeNull();
15
- expect(disclosure?.ai_assisted).toBe(true);
16
- expect(disclosure?.model).toBe('Claude Haiku 4.5');
17
- expect(disclosure?.date).toBe('2026-03-24');
18
- expect(disclosure?.purpose).toBe('governance-doc');
19
- });
20
- it('should parse YAML with optional fields', () => {
21
- const content = `---
22
- ai_assisted: true
23
- model: Claude 3.5 Sonnet
24
- date: 2026-01-10
25
- purpose: generated-code
26
- reasoning: Auto-generated from template
27
- review_status: pending-human-review
28
- ---
29
- Code...`;
30
- const disclosure = extractDisclosure(content);
31
- expect(disclosure?.reasoning).toBe('Auto-generated from template');
32
- expect(disclosure?.review_status).toBe('pending-human-review');
33
- });
34
- it('should handle YAML with quoted strings', () => {
35
- const content = `---
36
- ai_assisted: true
37
- model: "Claude Haiku 4.5 (pt-BR)"
38
- date: "2026-03-24"
39
- purpose: "governance-doc"
40
- ---
41
- Content`;
42
- const disclosure = extractDisclosure(content);
43
- expect(disclosure?.model).toBe('Claude Haiku 4.5 (pt-BR)');
44
- });
45
- it('should ignore YAML comments', () => {
46
- const content = `---
47
- # This is a comment
48
- ai_assisted: true
49
- model: Claude Haiku 4.5
50
- date: 2026-03-24
51
- purpose: test-plan
52
- # Another comment
53
- ---
54
- Content`;
55
- const disclosure = extractDisclosure(content);
56
- expect(disclosure?.purpose).toBe('test-plan');
57
- });
58
- });
59
- describe('HTML Comment Section Parsing', () => {
60
- it('should parse HTML comment disclosure', () => {
61
- const content = `<!-- AI-ASSISTED: true, MODEL: Claude Haiku 4.5, DATE: 2026-03-24, PURPOSE: governance-doc -->
62
- # Content here`;
63
- const disclosure = extractDisclosure(content);
64
- expect(disclosure?.ai_assisted).toBe(true);
65
- expect(disclosure?.model).toBe('Claude Haiku 4.5');
66
- expect(disclosure?.date).toBe('2026-03-24');
67
- expect(disclosure?.purpose).toBe('governance-doc');
68
- });
69
- it('should handle HTML comment with special characters', () => {
70
- const content = `<!-- AI-ASSISTED: true, MODEL: Claude Haiku 4.5 (pt-BR), DATE: 2026-03-24, PURPOSE: governance-doc + compliance -->
71
- Content`;
72
- const disclosure = extractDisclosure(content);
73
- expect(disclosure?.model).toContain('Claude Haiku');
74
- });
75
- });
76
- describe('Field Validation', () => {
77
- it('should reject disclosure without AI_ASSISTED true', () => {
78
- const raw = {
79
- ai_assisted: false,
80
- model: 'Claude',
81
- date: '2026-03-24',
82
- purpose: 'test-plan',
83
- };
84
- expect(() => validateDisclosure(raw)).toThrow('AI_ASSISTED must be true');
85
- });
86
- it('should reject disclosure without MODEL', () => {
87
- const raw = {
88
- ai_assisted: true,
89
- date: '2026-03-24',
90
- purpose: 'test-plan',
91
- };
92
- expect(() => validateDisclosure(raw)).toThrow('MODEL is required');
93
- });
94
- it('should reject disclosure with empty MODEL', () => {
95
- const raw = {
96
- ai_assisted: true,
97
- model: ' ',
98
- date: '2026-03-24',
99
- purpose: 'test-plan',
100
- };
101
- expect(() => validateDisclosure(raw)).toThrow('MODEL cannot be empty');
102
- });
103
- it('should reject disclosure without DATE', () => {
104
- const raw = {
105
- ai_assisted: true,
106
- model: 'Claude',
107
- purpose: 'test-plan',
108
- };
109
- expect(() => validateDisclosure(raw)).toThrow('DATE is required');
110
- });
111
- it('should reject invalid DATE format', () => {
112
- const raw = {
113
- ai_assisted: true,
114
- model: 'Claude',
115
- date: '2026/03/24',
116
- purpose: 'test-plan',
117
- };
118
- expect(() => validateDisclosure(raw)).toThrow('DATE must be in YYYY-MM-DD format');
119
- });
120
- it('should reject disclosure without PURPOSE', () => {
121
- const raw = {
122
- ai_assisted: true,
123
- model: 'Claude',
124
- date: '2026-03-24',
125
- };
126
- expect(() => validateDisclosure(raw)).toThrow('PURPOSE is required');
127
- });
128
- it('should reject PURPOSE not in allowlist', () => {
129
- const raw = {
130
- ai_assisted: true,
131
- model: 'Claude',
132
- date: '2026-03-24',
133
- purpose: 'invalid-purpose',
134
- };
135
- expect(() => validateDisclosure(raw)).toThrow('PURPOSE must be one of');
136
- });
137
- it('should accept all allowed PURPOSE values', () => {
138
- for (const purpose of ALLOWED_PURPOSES) {
139
- const raw = {
140
- ai_assisted: true,
141
- model: 'Claude',
142
- date: '2026-03-24',
143
- purpose,
144
- };
145
- const result = validateDisclosure(raw);
146
- expect(result.purpose).toBe(purpose);
147
- }
148
- });
149
- });
150
- describe('Full Document Validation', () => {
151
- it('should validate complete document with YAML disclosure', () => {
152
- const content = `---
153
- ai_assisted: true
154
- model: Claude Haiku 4.5
155
- date: 2026-03-24
156
- purpose: governance-doc
157
- ---
158
- # Document Title
159
- This is the content.`;
160
- const disclosure = validateAIDisclosure(content);
161
- expect(disclosure.ai_assisted).toBe(true);
162
- expect(disclosure.model).toBe('Claude Haiku 4.5');
163
- expect(disclosure.date).toBe('2026-03-24');
164
- expect(disclosure.purpose).toBe('governance-doc');
165
- });
166
- it('should validate complete document with HTML comment disclosure', () => {
167
- const content = `<!-- AI-ASSISTED: true, MODEL: Claude Haiku 4.5, DATE: 2026-03-24, PURPOSE: test-plan -->
168
- # Test Plan
169
- This is a test plan.`;
170
- const disclosure = validateAIDisclosure(content);
171
- expect(disclosure.purpose).toBe('test-plan');
172
- });
173
- it('should throw on missing disclosure', () => {
174
- const content = `# Content without disclosure
175
- This document has no AI disclosure.`;
176
- expect(() => validateAIDisclosure(content)).toThrow('No AI disclosure found in document header');
177
- });
178
- it('should throw on malformed disclosure', () => {
179
- const content = `---
180
- ai_assisted: true
181
- model:
182
- date: 2026-03-24
183
- purpose: test-plan
184
- ---
185
- Content`;
186
- expect(() => validateAIDisclosure(content)).toThrow('MODEL is required');
187
- });
188
- });
189
- describe('Edge Cases', () => {
190
- it('should handle YAML with extra whitespace', () => {
191
- const content = `---
192
- ai_assisted: true
193
- model: Claude Haiku 4.5
194
- date: 2026-03-24
195
- purpose: test-plan
196
- ---
197
- Content`;
198
- const disclosure = extractDisclosure(content);
199
- expect(disclosure?.model).toBe('Claude Haiku 4.5');
200
- });
201
- it('should handle non-existent disclosure gracefully', () => {
202
- const content = 'Just plain text without any disclosure markers.';
203
- const disclosure = extractDisclosure(content);
204
- expect(disclosure).toBeNull();
205
- });
206
- it('should reject invalid dates', () => {
207
- const raw = {
208
- ai_assisted: true,
209
- model: 'Claude',
210
- date: '2026-13-45', // Invalid month and day
211
- purpose: 'test-plan',
212
- };
213
- expect(() => validateDisclosure(raw)).toThrow('DATE must be in YYYY-MM-DD format');
214
- });
215
- it('should handle unicode and special characters in MODEL', () => {
216
- const raw = {
217
- ai_assisted: true,
218
- model: 'Claude Haiku 4.5 (pt-BR) — v2.0',
219
- date: '2026-03-24',
220
- purpose: 'documentation',
221
- };
222
- const result = validateDisclosure(raw);
223
- expect(result.model).toContain('pt-BR');
224
- });
225
- });
226
- describe('Return Type Validation', () => {
227
- it('should return properly typed AIDisclosure object', () => {
228
- const raw = {
229
- ai_assisted: true,
230
- model: 'Claude',
231
- date: '2026-03-24',
232
- purpose: 'test-plan',
233
- };
234
- const result = validateDisclosure(raw);
235
- expect(result).toHaveProperty('ai_assisted');
236
- expect(result).toHaveProperty('model');
237
- expect(result).toHaveProperty('date');
238
- expect(result).toHaveProperty('purpose');
239
- expect(typeof result.ai_assisted).toBe('boolean');
240
- expect(typeof result.model).toBe('string');
241
- });
242
- });
243
- });
244
- //# sourceMappingURL=ai-disclosure.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-disclosure.test.js","sourceRoot":"","sources":["../../src/validators/ai-disclosure.test.ts"],"names":[],"mappings":"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"}