@rengler33/prov 0.1.1

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 (146) hide show
  1. package/README.md +314 -0
  2. package/dist/cli.d.ts +26 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +381 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/agent.d.ts +107 -0
  7. package/dist/commands/agent.d.ts.map +1 -0
  8. package/dist/commands/agent.js +197 -0
  9. package/dist/commands/agent.js.map +1 -0
  10. package/dist/commands/agent.test.d.ts +5 -0
  11. package/dist/commands/agent.test.d.ts.map +1 -0
  12. package/dist/commands/agent.test.js +199 -0
  13. package/dist/commands/agent.test.js.map +1 -0
  14. package/dist/commands/constraint.d.ts +100 -0
  15. package/dist/commands/constraint.d.ts.map +1 -0
  16. package/dist/commands/constraint.js +763 -0
  17. package/dist/commands/constraint.js.map +1 -0
  18. package/dist/commands/constraint.test.d.ts +9 -0
  19. package/dist/commands/constraint.test.d.ts.map +1 -0
  20. package/dist/commands/constraint.test.js +470 -0
  21. package/dist/commands/constraint.test.js.map +1 -0
  22. package/dist/commands/graph.d.ts +99 -0
  23. package/dist/commands/graph.d.ts.map +1 -0
  24. package/dist/commands/graph.js +552 -0
  25. package/dist/commands/graph.js.map +1 -0
  26. package/dist/commands/graph.test.d.ts +2 -0
  27. package/dist/commands/graph.test.d.ts.map +1 -0
  28. package/dist/commands/graph.test.js +258 -0
  29. package/dist/commands/graph.test.js.map +1 -0
  30. package/dist/commands/impact.d.ts +83 -0
  31. package/dist/commands/impact.d.ts.map +1 -0
  32. package/dist/commands/impact.js +319 -0
  33. package/dist/commands/impact.js.map +1 -0
  34. package/dist/commands/impact.test.d.ts +2 -0
  35. package/dist/commands/impact.test.d.ts.map +1 -0
  36. package/dist/commands/impact.test.js +234 -0
  37. package/dist/commands/impact.test.js.map +1 -0
  38. package/dist/commands/init.d.ts +45 -0
  39. package/dist/commands/init.d.ts.map +1 -0
  40. package/dist/commands/init.js +94 -0
  41. package/dist/commands/init.js.map +1 -0
  42. package/dist/commands/init.test.d.ts +7 -0
  43. package/dist/commands/init.test.d.ts.map +1 -0
  44. package/dist/commands/init.test.js +174 -0
  45. package/dist/commands/init.test.js.map +1 -0
  46. package/dist/commands/integration.test.d.ts +10 -0
  47. package/dist/commands/integration.test.d.ts.map +1 -0
  48. package/dist/commands/integration.test.js +456 -0
  49. package/dist/commands/integration.test.js.map +1 -0
  50. package/dist/commands/mcp.d.ts +21 -0
  51. package/dist/commands/mcp.d.ts.map +1 -0
  52. package/dist/commands/mcp.js +616 -0
  53. package/dist/commands/mcp.js.map +1 -0
  54. package/dist/commands/mcp.test.d.ts +7 -0
  55. package/dist/commands/mcp.test.d.ts.map +1 -0
  56. package/dist/commands/mcp.test.js +132 -0
  57. package/dist/commands/mcp.test.js.map +1 -0
  58. package/dist/commands/plan.d.ts +218 -0
  59. package/dist/commands/plan.d.ts.map +1 -0
  60. package/dist/commands/plan.js +1307 -0
  61. package/dist/commands/plan.js.map +1 -0
  62. package/dist/commands/plan.test.d.ts +9 -0
  63. package/dist/commands/plan.test.d.ts.map +1 -0
  64. package/dist/commands/plan.test.js +569 -0
  65. package/dist/commands/plan.test.js.map +1 -0
  66. package/dist/commands/spec.d.ts +94 -0
  67. package/dist/commands/spec.d.ts.map +1 -0
  68. package/dist/commands/spec.js +635 -0
  69. package/dist/commands/spec.js.map +1 -0
  70. package/dist/commands/spec.test.d.ts +9 -0
  71. package/dist/commands/spec.test.d.ts.map +1 -0
  72. package/dist/commands/spec.test.js +407 -0
  73. package/dist/commands/spec.test.js.map +1 -0
  74. package/dist/commands/trace.d.ts +157 -0
  75. package/dist/commands/trace.d.ts.map +1 -0
  76. package/dist/commands/trace.js +847 -0
  77. package/dist/commands/trace.js.map +1 -0
  78. package/dist/commands/trace.test.d.ts +9 -0
  79. package/dist/commands/trace.test.d.ts.map +1 -0
  80. package/dist/commands/trace.test.js +524 -0
  81. package/dist/commands/trace.test.js.map +1 -0
  82. package/dist/graph.d.ts +204 -0
  83. package/dist/graph.d.ts.map +1 -0
  84. package/dist/graph.js +496 -0
  85. package/dist/graph.js.map +1 -0
  86. package/dist/graph.test.d.ts +2 -0
  87. package/dist/graph.test.d.ts.map +1 -0
  88. package/dist/graph.test.js +382 -0
  89. package/dist/graph.test.js.map +1 -0
  90. package/dist/hash.d.ts +72 -0
  91. package/dist/hash.d.ts.map +1 -0
  92. package/dist/hash.js +137 -0
  93. package/dist/hash.js.map +1 -0
  94. package/dist/hash.test.d.ts +2 -0
  95. package/dist/hash.test.d.ts.map +1 -0
  96. package/dist/hash.test.js +227 -0
  97. package/dist/hash.test.js.map +1 -0
  98. package/dist/index.d.ts +18 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +64 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/index.test.d.ts +2 -0
  103. package/dist/index.test.d.ts.map +1 -0
  104. package/dist/index.test.js +11 -0
  105. package/dist/index.test.js.map +1 -0
  106. package/dist/output.d.ts +84 -0
  107. package/dist/output.d.ts.map +1 -0
  108. package/dist/output.js +175 -0
  109. package/dist/output.js.map +1 -0
  110. package/dist/output.test.d.ts +7 -0
  111. package/dist/output.test.d.ts.map +1 -0
  112. package/dist/output.test.js +146 -0
  113. package/dist/output.test.js.map +1 -0
  114. package/dist/staleness.d.ts +162 -0
  115. package/dist/staleness.d.ts.map +1 -0
  116. package/dist/staleness.js +309 -0
  117. package/dist/staleness.js.map +1 -0
  118. package/dist/staleness.test.d.ts +2 -0
  119. package/dist/staleness.test.d.ts.map +1 -0
  120. package/dist/staleness.test.js +448 -0
  121. package/dist/staleness.test.js.map +1 -0
  122. package/dist/storage.d.ts +267 -0
  123. package/dist/storage.d.ts.map +1 -0
  124. package/dist/storage.js +623 -0
  125. package/dist/storage.js.map +1 -0
  126. package/dist/storage.test.d.ts +5 -0
  127. package/dist/storage.test.d.ts.map +1 -0
  128. package/dist/storage.test.js +434 -0
  129. package/dist/storage.test.js.map +1 -0
  130. package/dist/types.d.ts +270 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +12 -0
  133. package/dist/types.js.map +1 -0
  134. package/dist/types.test.d.ts +2 -0
  135. package/dist/types.test.d.ts.map +1 -0
  136. package/dist/types.test.js +232 -0
  137. package/dist/types.test.js.map +1 -0
  138. package/dist/watcher.d.ts +139 -0
  139. package/dist/watcher.d.ts.map +1 -0
  140. package/dist/watcher.js +406 -0
  141. package/dist/watcher.js.map +1 -0
  142. package/dist/watcher.test.d.ts +5 -0
  143. package/dist/watcher.test.d.ts.map +1 -0
  144. package/dist/watcher.test.js +327 -0
  145. package/dist/watcher.test.js.map +1 -0
  146. package/package.json +53 -0
@@ -0,0 +1,456 @@
1
+ /**
2
+ * Integration tests for agent workflows.
3
+ *
4
+ * These tests simulate end-to-end agent interactions with the prov system,
5
+ * covering the complete workflow from initialization through trace completion.
6
+ *
7
+ * @see prov-4c9 Phase 6: Polish - Write integration tests covering agent workflows
8
+ */
9
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
10
+ import { mkdtempSync, rmSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { tmpdir } from 'node:os';
13
+ import { runInit } from './init.js';
14
+ import { runSpecAdd } from './spec.js';
15
+ import { runConstraintAdd } from './constraint.js';
16
+ import { runPlanCreate, runPlanNext, runPlanProgress, runPlanRemaining } from './plan.js';
17
+ import { runTraceAdd, runTraceShow, runTraceWhy } from './trace.js';
18
+ import { runAgentContext } from './agent.js';
19
+ import { runImpact, runStale } from './impact.js';
20
+ import { createMcpServer, setProjectRoot } from './mcp.js';
21
+ // ============================================================================
22
+ // Test Data
23
+ // ============================================================================
24
+ const FEATURE_SPEC = `id: spec:user-auth:v1
25
+ version: 1.0.0
26
+ title: User Authentication Feature
27
+ status: active
28
+
29
+ intent: |
30
+ Implement secure user authentication with login, logout, and session management.
31
+
32
+ requirements:
33
+ - id: req:user-auth:login
34
+ description: Users can log in with email and password
35
+ acceptance:
36
+ - Login form accepts email and password
37
+ - Valid credentials create a session
38
+ - Invalid credentials show error message
39
+
40
+ - id: req:user-auth:logout
41
+ description: Users can log out and end their session
42
+ acceptance:
43
+ - Logout button ends the session
44
+ - User is redirected to login page
45
+
46
+ - id: req:user-auth:session
47
+ description: Sessions persist across page reloads
48
+ acceptance:
49
+ - Session survives browser refresh
50
+ - Session expires after 24 hours
51
+ `;
52
+ const SECURITY_CONSTRAINT = `id: constraint:security:v1
53
+ version: 1.0.0
54
+ title: Security Constraints
55
+ status: active
56
+
57
+ description: |
58
+ Security requirements for all authentication-related features.
59
+
60
+ invariants:
61
+ - id: inv:security:password-hash
62
+ rule: Passwords must be hashed using bcrypt with cost factor >= 12
63
+ blocking: true
64
+ verification:
65
+ type: command
66
+ value: echo "checking bcrypt"
67
+ expect: success
68
+
69
+ - id: inv:security:no-plain-passwords
70
+ rule: Plain text passwords must never be stored or logged
71
+ blocking: true
72
+ verification:
73
+ type: command
74
+ value: echo "checking passwords"
75
+ expect: success
76
+ `;
77
+ const API_SPEC = `id: spec:api-endpoints:v1
78
+ version: 1.0.0
79
+ title: API Endpoints Specification
80
+ status: active
81
+
82
+ intent: |
83
+ Define REST API endpoints for user management.
84
+
85
+ requirements:
86
+ - id: req:api-endpoints:user-create
87
+ description: POST /api/users creates a new user
88
+ acceptance:
89
+ - Returns 201 on success
90
+ - Returns 400 on validation error
91
+
92
+ - id: req:api-endpoints:user-get
93
+ description: GET /api/users/:id retrieves user details
94
+ acceptance:
95
+ - Returns 200 with user data
96
+ - Returns 404 for unknown users
97
+ `;
98
+ function createTestContext() {
99
+ const tempDir = mkdtempSync(join(tmpdir(), 'prov-integration-test-'));
100
+ return {
101
+ tempDir,
102
+ stdoutOutput: '',
103
+ stderrOutput: '',
104
+ globalOpts: { dir: tempDir, format: 'json' },
105
+ };
106
+ }
107
+ function setupMocks(ctx) {
108
+ vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
109
+ ctx.stdoutOutput += String(chunk);
110
+ return true;
111
+ });
112
+ vi.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
113
+ ctx.stderrOutput += String(chunk);
114
+ return true;
115
+ });
116
+ vi.spyOn(process, 'exit').mockImplementation(() => {
117
+ throw new Error('process.exit called');
118
+ });
119
+ }
120
+ function cleanupTestContext(ctx) {
121
+ rmSync(ctx.tempDir, { recursive: true, force: true });
122
+ vi.restoreAllMocks();
123
+ }
124
+ function clearOutput(ctx) {
125
+ ctx.stdoutOutput = '';
126
+ ctx.stderrOutput = '';
127
+ }
128
+ function parseJsonOutput(ctx) {
129
+ return JSON.parse(ctx.stdoutOutput);
130
+ }
131
+ // ============================================================================
132
+ // Integration Tests
133
+ // ============================================================================
134
+ describe('Agent Workflow Integration Tests', () => {
135
+ let ctx;
136
+ beforeEach(() => {
137
+ ctx = createTestContext();
138
+ setupMocks(ctx);
139
+ });
140
+ afterEach(() => {
141
+ cleanupTestContext(ctx);
142
+ });
143
+ describe('Complete Agent Workflow', () => {
144
+ it('should support full spec-to-trace workflow', () => {
145
+ // Step 1: Initialize prov
146
+ runInit(ctx.globalOpts, {});
147
+ clearOutput(ctx);
148
+ // Step 2: Create spec file and add to tracking
149
+ const specDir = join(ctx.tempDir, 'spec');
150
+ mkdirSync(specDir, { recursive: true });
151
+ writeFileSync(join(specDir, 'user-auth.spec.yaml'), FEATURE_SPEC);
152
+ runSpecAdd(ctx.globalOpts, 'spec/user-auth.spec.yaml', {});
153
+ clearOutput(ctx);
154
+ // Step 3: Get agent context to understand current state
155
+ runAgentContext(ctx.globalOpts, {});
156
+ let result = parseJsonOutput(ctx);
157
+ expect(result.success).toBe(true);
158
+ expect(result.context?.specs).toHaveLength(1);
159
+ expect(result.context?.specs[0]?.id).toBe('spec:user-auth:v1');
160
+ expect(result.context?.specs[0]?.requirements).toHaveLength(3);
161
+ clearOutput(ctx);
162
+ // Step 4: Create a plan from the spec
163
+ runPlanCreate(ctx.globalOpts, { from: ['spec:user-auth:v1'] });
164
+ clearOutput(ctx);
165
+ // Step 5: Get agent context again to see plan
166
+ runAgentContext(ctx.globalOpts, {});
167
+ result = parseJsonOutput(ctx);
168
+ expect(result.success).toBe(true);
169
+ expect(result.context?.plans).toHaveLength(1);
170
+ expect(result.context?.plans[0]?.id).toBe('plan:user-auth:v1');
171
+ expect(result.context?.plans[0]?.totalSteps).toBe(3);
172
+ expect(result.context?.plans[0]?.completedSteps).toBe(0);
173
+ expect(result.context?.remainingWork.nextStep).toBeDefined();
174
+ clearOutput(ctx);
175
+ // Step 6: Create an artifact and trace it
176
+ const srcDir = join(ctx.tempDir, 'src');
177
+ mkdirSync(srcDir, { recursive: true });
178
+ writeFileSync(join(srcDir, 'auth.ts'), '// @see req:user-auth:login\nexport function login() { /* login implementation */ }');
179
+ runTraceAdd(ctx.globalOpts, 'src/auth.ts', { to: 'step:user-auth:1' });
180
+ clearOutput(ctx);
181
+ // Step 7: Show trace for the artifact
182
+ runTraceShow(ctx.globalOpts, 'src/auth.ts', {});
183
+ const traceResult = parseJsonOutput(ctx);
184
+ expect(traceResult.trace.stepId).toBe('step:user-auth:1');
185
+ clearOutput(ctx);
186
+ // Step 8: Get updated progress
187
+ runPlanProgress(ctx.globalOpts, 'plan:user-auth:v1', {});
188
+ const progressResult = parseJsonOutput(ctx);
189
+ // Note: trace alone doesn't mark step complete, but we can verify tracking works
190
+ expect(progressResult.progress.totalSteps).toBe(3);
191
+ });
192
+ it('should handle multi-spec workflow with constraints', () => {
193
+ // Initialize
194
+ runInit(ctx.globalOpts, {});
195
+ clearOutput(ctx);
196
+ // Create spec and constraint directories
197
+ const specDir = join(ctx.tempDir, 'spec');
198
+ const constraintDir = join(ctx.tempDir, 'constraint');
199
+ mkdirSync(specDir, { recursive: true });
200
+ mkdirSync(constraintDir, { recursive: true });
201
+ // Add multiple specs
202
+ writeFileSync(join(specDir, 'user-auth.spec.yaml'), FEATURE_SPEC);
203
+ writeFileSync(join(specDir, 'api-endpoints.spec.yaml'), API_SPEC);
204
+ writeFileSync(join(constraintDir, 'security.constraint.yaml'), SECURITY_CONSTRAINT);
205
+ runSpecAdd(ctx.globalOpts, 'spec/user-auth.spec.yaml', {});
206
+ runSpecAdd(ctx.globalOpts, 'spec/api-endpoints.spec.yaml', {});
207
+ runConstraintAdd(ctx.globalOpts, 'constraint/security.constraint.yaml', {});
208
+ clearOutput(ctx);
209
+ // Get agent context with scope
210
+ runAgentContext(ctx.globalOpts, { scope: ['spec:user-auth:v1'] });
211
+ const scopedResult = parseJsonOutput(ctx);
212
+ expect(scopedResult.success).toBe(true);
213
+ expect(scopedResult.context?.specs).toHaveLength(1);
214
+ expect(scopedResult.context?.specs[0]?.id).toBe('spec:user-auth:v1');
215
+ // Constraints should still be included (not filtered by scope)
216
+ expect(scopedResult.context?.constraints).toHaveLength(1);
217
+ clearOutput(ctx);
218
+ // Get full context
219
+ runAgentContext(ctx.globalOpts, {});
220
+ const fullResult = parseJsonOutput(ctx);
221
+ expect(fullResult.context?.specs).toHaveLength(2);
222
+ expect(fullResult.context?.constraints).toHaveLength(1);
223
+ });
224
+ it('should support plan next step workflow', () => {
225
+ // Setup project with spec and plan
226
+ runInit(ctx.globalOpts, {});
227
+ const specDir = join(ctx.tempDir, 'spec');
228
+ mkdirSync(specDir, { recursive: true });
229
+ writeFileSync(join(specDir, 'user-auth.spec.yaml'), FEATURE_SPEC);
230
+ runSpecAdd(ctx.globalOpts, 'spec/user-auth.spec.yaml', {});
231
+ runPlanCreate(ctx.globalOpts, { from: ['spec:user-auth:v1'] });
232
+ clearOutput(ctx);
233
+ // Get next step
234
+ runPlanNext(ctx.globalOpts, 'plan:user-auth:v1', {});
235
+ const nextResult = parseJsonOutput(ctx);
236
+ expect(nextResult.step).toBeDefined();
237
+ expect(nextResult.step.number).toBe(1);
238
+ expect(nextResult.step.id).toBe('step:user-auth:1');
239
+ clearOutput(ctx);
240
+ // Get remaining steps
241
+ runPlanRemaining(ctx.globalOpts, 'plan:user-auth:v1', {});
242
+ const remainingResult = parseJsonOutput(ctx);
243
+ expect(remainingResult.success).toBe(true);
244
+ expect(remainingResult.totalSteps).toBe(3);
245
+ expect(remainingResult.remainingSteps).toHaveLength(3);
246
+ });
247
+ });
248
+ describe('Trace Why Workflow', () => {
249
+ it('should trace requirements to implementations', () => {
250
+ // Setup
251
+ runInit(ctx.globalOpts, {});
252
+ const specDir = join(ctx.tempDir, 'spec');
253
+ const srcDir = join(ctx.tempDir, 'src');
254
+ mkdirSync(specDir, { recursive: true });
255
+ mkdirSync(srcDir, { recursive: true });
256
+ writeFileSync(join(specDir, 'user-auth.spec.yaml'), FEATURE_SPEC);
257
+ runSpecAdd(ctx.globalOpts, 'spec/user-auth.spec.yaml', {});
258
+ runPlanCreate(ctx.globalOpts, { from: ['spec:user-auth:v1'] });
259
+ // Create implementation file with trace marker
260
+ writeFileSync(join(srcDir, 'login.ts'), '// @see req:user-auth:login\nexport function login(email: string, password: string) {}');
261
+ runTraceAdd(ctx.globalOpts, 'src/login.ts', { to: 'step:user-auth:1' });
262
+ clearOutput(ctx);
263
+ // Trace why requirement is implemented
264
+ runTraceWhy(ctx.globalOpts, 'req:user-auth:login', {});
265
+ const whyResult = parseJsonOutput(ctx);
266
+ expect(whyResult.requirement.id).toBe('req:user-auth:login');
267
+ expect(whyResult.implementations).toBeDefined();
268
+ });
269
+ });
270
+ describe('Impact Analysis Workflow', () => {
271
+ it('should analyze impact when spec changes', () => {
272
+ // Setup with spec, plan, and trace
273
+ runInit(ctx.globalOpts, {});
274
+ const specDir = join(ctx.tempDir, 'spec');
275
+ const srcDir = join(ctx.tempDir, 'src');
276
+ mkdirSync(specDir, { recursive: true });
277
+ mkdirSync(srcDir, { recursive: true });
278
+ writeFileSync(join(specDir, 'user-auth.spec.yaml'), FEATURE_SPEC);
279
+ runSpecAdd(ctx.globalOpts, 'spec/user-auth.spec.yaml', {});
280
+ runPlanCreate(ctx.globalOpts, { from: ['spec:user-auth:v1'] });
281
+ writeFileSync(join(srcDir, 'auth.ts'), '// Auth implementation');
282
+ runTraceAdd(ctx.globalOpts, 'src/auth.ts', { to: 'step:user-auth:1' });
283
+ clearOutput(ctx);
284
+ // Run impact analysis
285
+ runImpact(ctx.globalOpts, 'spec:user-auth:v1', {});
286
+ const impactResult = parseJsonOutput(ctx);
287
+ expect(impactResult.success).toBe(true);
288
+ expect(impactResult.sourceId).toBe('spec:user-auth:v1');
289
+ // Impact should include at least the requirements from the spec
290
+ expect(impactResult.impactedCount).toBeGreaterThan(0);
291
+ });
292
+ });
293
+ describe('Stale Detection Workflow', () => {
294
+ it('should detect stale artifacts after spec modification', () => {
295
+ // Setup
296
+ runInit(ctx.globalOpts, {});
297
+ const specDir = join(ctx.tempDir, 'spec');
298
+ const srcDir = join(ctx.tempDir, 'src');
299
+ mkdirSync(specDir, { recursive: true });
300
+ mkdirSync(srcDir, { recursive: true });
301
+ writeFileSync(join(specDir, 'user-auth.spec.yaml'), FEATURE_SPEC);
302
+ runSpecAdd(ctx.globalOpts, 'spec/user-auth.spec.yaml', {});
303
+ runPlanCreate(ctx.globalOpts, { from: ['spec:user-auth:v1'] });
304
+ writeFileSync(join(srcDir, 'auth.ts'), '// Auth implementation');
305
+ runTraceAdd(ctx.globalOpts, 'src/auth.ts', { to: 'step:user-auth:1' });
306
+ clearOutput(ctx);
307
+ // Run stale detection
308
+ runStale(ctx.globalOpts, {});
309
+ // Should complete without error - stale detection is available
310
+ // The actual staleness depends on whether source files have changed
311
+ });
312
+ });
313
+ });
314
+ describe('MCP Server Integration Tests', () => {
315
+ let testDir;
316
+ beforeEach(() => {
317
+ testDir = join(tmpdir(), `prov-mcp-integration-${Date.now()}-${Math.random().toString(36).slice(2)}`);
318
+ mkdirSync(testDir, { recursive: true });
319
+ mkdirSync(join(testDir, 'spec'), { recursive: true });
320
+ mkdirSync(join(testDir, 'src'), { recursive: true });
321
+ setProjectRoot(testDir);
322
+ vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
323
+ vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
324
+ vi.spyOn(process, 'exit').mockImplementation(() => {
325
+ throw new Error('process.exit called');
326
+ });
327
+ runInit({ dir: testDir }, {});
328
+ });
329
+ afterEach(() => {
330
+ setProjectRoot(undefined);
331
+ if (existsSync(testDir)) {
332
+ rmSync(testDir, { recursive: true, force: true });
333
+ }
334
+ vi.restoreAllMocks();
335
+ });
336
+ describe('MCP Server Tool Availability', () => {
337
+ it('should expose all required agent tools', () => {
338
+ // Setup data
339
+ writeFileSync(join(testDir, 'spec', 'test.spec.yaml'), FEATURE_SPEC);
340
+ runSpecAdd({ dir: testDir }, 'spec/test.spec.yaml', {});
341
+ runPlanCreate({ dir: testDir }, { from: ['spec:user-auth:v1'] });
342
+ const server = createMcpServer();
343
+ expect(server).toBeDefined();
344
+ // Verify server has expected methods
345
+ expect(typeof server.setRequestHandler).toBe('function');
346
+ expect(typeof server.connect).toBe('function');
347
+ expect(typeof server.close).toBe('function');
348
+ });
349
+ it('should work with complete project setup', () => {
350
+ // Setup complete project
351
+ writeFileSync(join(testDir, 'spec', 'auth.spec.yaml'), FEATURE_SPEC);
352
+ writeFileSync(join(testDir, 'spec', 'api.spec.yaml'), API_SPEC);
353
+ const constraintDir = join(testDir, 'constraint');
354
+ mkdirSync(constraintDir, { recursive: true });
355
+ writeFileSync(join(constraintDir, 'security.constraint.yaml'), SECURITY_CONSTRAINT);
356
+ runSpecAdd({ dir: testDir }, 'spec/auth.spec.yaml', {});
357
+ runSpecAdd({ dir: testDir }, 'spec/api.spec.yaml', {});
358
+ runConstraintAdd({ dir: testDir }, 'constraint/security.constraint.yaml', {});
359
+ runPlanCreate({ dir: testDir }, { from: ['spec:user-auth:v1'] });
360
+ // Create artifact
361
+ writeFileSync(join(testDir, 'src', 'auth.ts'), 'export function login() {}');
362
+ const server = createMcpServer();
363
+ expect(server).toBeDefined();
364
+ });
365
+ });
366
+ describe('MCP Workflow Simulation', () => {
367
+ it('should support simulated agent session', () => {
368
+ // This simulates what an AI agent would do via MCP:
369
+ // 1. List specs
370
+ // 2. Create plan
371
+ // 3. Get next step
372
+ // 4. Implement and trace
373
+ // 5. Check progress
374
+ // Setup initial state
375
+ writeFileSync(join(testDir, 'spec', 'feature.spec.yaml'), FEATURE_SPEC);
376
+ runSpecAdd({ dir: testDir }, 'spec/feature.spec.yaml', {});
377
+ // Agent would call prov_spec_list first
378
+ // Then prov_plan_create (not exposed yet, agent uses CLI)
379
+ runPlanCreate({ dir: testDir }, { from: ['spec:user-auth:v1'] });
380
+ // Create MCP server for subsequent operations
381
+ const server = createMcpServer();
382
+ expect(server).toBeDefined();
383
+ // Agent would:
384
+ // - prov_plan_next to get step
385
+ // - prov_context to understand full state
386
+ // - prov_trace_add after implementing
387
+ // - prov_plan_progress to check status
388
+ // Verify server is ready for these operations
389
+ expect(typeof server.setRequestHandler).toBe('function');
390
+ });
391
+ });
392
+ });
393
+ describe('Error Handling Integration Tests', () => {
394
+ let ctx;
395
+ beforeEach(() => {
396
+ ctx = createTestContext();
397
+ setupMocks(ctx);
398
+ });
399
+ afterEach(() => {
400
+ cleanupTestContext(ctx);
401
+ });
402
+ describe('Graceful Error Handling', () => {
403
+ it('should handle uninitialized project gracefully', () => {
404
+ // Try to get context without initializing
405
+ expect(() => runAgentContext(ctx.globalOpts, {})).toThrow('process.exit called');
406
+ const result = parseJsonOutput(ctx);
407
+ expect(result.success).toBe(false);
408
+ expect(result.error).toContain('not initialized');
409
+ });
410
+ it('should handle missing spec file gracefully', () => {
411
+ runInit(ctx.globalOpts, {});
412
+ clearOutput(ctx);
413
+ // Try to add non-existent spec
414
+ expect(() => runSpecAdd(ctx.globalOpts, 'nonexistent.spec.yaml', {})).toThrow('process.exit called');
415
+ });
416
+ it('should handle invalid plan ID gracefully', () => {
417
+ runInit(ctx.globalOpts, {});
418
+ clearOutput(ctx);
419
+ // Try to get progress for non-existent plan
420
+ expect(() => runPlanProgress(ctx.globalOpts, 'plan:nonexistent:v1', {})).toThrow('process.exit called');
421
+ });
422
+ it('should handle trace to non-existent step gracefully', () => {
423
+ runInit(ctx.globalOpts, {});
424
+ const srcDir = join(ctx.tempDir, 'src');
425
+ mkdirSync(srcDir, { recursive: true });
426
+ writeFileSync(join(srcDir, 'test.ts'), 'export const x = 1;');
427
+ clearOutput(ctx);
428
+ // Try to trace to non-existent step
429
+ expect(() => runTraceAdd(ctx.globalOpts, 'src/test.ts', { to: 'step:fake:1' })).toThrow('process.exit called');
430
+ });
431
+ });
432
+ describe('Recovery Scenarios', () => {
433
+ it('should allow re-initialization with --force', () => {
434
+ // Initialize first time
435
+ runInit(ctx.globalOpts, {});
436
+ clearOutput(ctx);
437
+ // Initialize again with force
438
+ runInit(ctx.globalOpts, { force: true });
439
+ // Should succeed (no error thrown)
440
+ const result = parseJsonOutput(ctx);
441
+ expect(result.success).toBe(true);
442
+ });
443
+ it('should handle empty project state correctly', () => {
444
+ runInit(ctx.globalOpts, {});
445
+ clearOutput(ctx);
446
+ // Get context for empty project
447
+ runAgentContext(ctx.globalOpts, {});
448
+ const result = parseJsonOutput(ctx);
449
+ expect(result.success).toBe(true);
450
+ expect(result.context?.specs).toEqual([]);
451
+ expect(result.context?.plans).toEqual([]);
452
+ expect(result.context?.remainingWork.totalSteps).toBe(0);
453
+ });
454
+ });
455
+ });
456
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/commands/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * prov MCP server implementation.
3
+ *
4
+ * Exposes prov operations as Model Context Protocol tools for AI agent integration.
5
+ *
6
+ * @see req:agent:mcp-integration
7
+ */
8
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
9
+ /**
10
+ * Set the project root for testing purposes.
11
+ */
12
+ export declare function setProjectRoot(root: string | undefined): void;
13
+ /**
14
+ * Create and configure the MCP server.
15
+ */
16
+ export declare function createMcpServer(): Server;
17
+ /**
18
+ * Run the MCP server with stdio transport.
19
+ */
20
+ export declare function runMcpServe(): Promise<void>;
21
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAmEnE;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE7D;AA0dD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CA6KxC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD"}