@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,616 @@
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
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
10
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
11
+ import { z } from 'zod';
12
+ import { isInitialized, loadGraph, saveGraph } from '../storage.js';
13
+ import { addTraceToGraph } from '../graph.js';
14
+ import { sha256 } from '../hash.js';
15
+ import { existsSync, readFileSync, statSync } from 'node:fs';
16
+ import { resolve, relative } from 'node:path';
17
+ // ============================================================================
18
+ // Tool Input Schemas
19
+ // ============================================================================
20
+ const specListSchema = z.object({
21
+ status: z.string().optional().describe('Filter by status (draft, active, deprecated, archived)'),
22
+ });
23
+ const planNextSchema = z.object({
24
+ planId: z.string().describe('Plan ID in format plan:{name}:v{number}'),
25
+ });
26
+ const planProgressSchema = z.object({
27
+ planId: z.string().describe('Plan ID in format plan:{name}:v{number}'),
28
+ });
29
+ const planRemainingSchema = z.object({
30
+ planId: z.string().describe('Plan ID in format plan:{name}:v{number}'),
31
+ });
32
+ const traceAddSchema = z.object({
33
+ path: z.string().describe('Path to the artifact file'),
34
+ stepId: z.string().describe('Step ID to trace to in format step:{plan}:{number}'),
35
+ });
36
+ const traceShowSchema = z.object({
37
+ path: z.string().describe('Path to the artifact file'),
38
+ });
39
+ const contextSchema = z.object({
40
+ scope: z.array(z.string()).optional().describe('Spec IDs to limit context to'),
41
+ });
42
+ const constraintListSchema = z.object({
43
+ status: z.string().optional().describe('Filter by status'),
44
+ });
45
+ // ============================================================================
46
+ // Helper Functions
47
+ // ============================================================================
48
+ let _projectRoot;
49
+ /**
50
+ * Set the project root for testing purposes.
51
+ */
52
+ export function setProjectRoot(root) {
53
+ _projectRoot = root;
54
+ }
55
+ function getProjectRoot() {
56
+ return _projectRoot ?? process.cwd();
57
+ }
58
+ function computeFileHash(filePath) {
59
+ const content = readFileSync(filePath, 'utf8');
60
+ const fullHash = sha256(content);
61
+ return `sha256:${fullHash.slice(0, 12)}`;
62
+ }
63
+ function generateTraceId(artifactPath, stepId) {
64
+ const combined = `${artifactPath}:${stepId}`;
65
+ const fullHash = sha256(combined);
66
+ return `trace:${fullHash.slice(0, 12)}`;
67
+ }
68
+ function isValidStepId(id) {
69
+ if (typeof id !== 'string')
70
+ return false;
71
+ return /^step:[a-z0-9-]+:\d+$/.test(id);
72
+ }
73
+ function errorResult(message) {
74
+ return {
75
+ content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
76
+ isError: true,
77
+ };
78
+ }
79
+ function successResult(data) {
80
+ return {
81
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
82
+ };
83
+ }
84
+ function handleSpecList(args) {
85
+ const projectRoot = getProjectRoot();
86
+ if (!isInitialized(projectRoot)) {
87
+ return errorResult('prov is not initialized. Run "prov init" first.');
88
+ }
89
+ const loadResult = loadGraph(projectRoot);
90
+ if (!loadResult.success || loadResult.data === undefined) {
91
+ return errorResult(loadResult.error ?? 'Failed to load graph');
92
+ }
93
+ const graph = loadResult.data;
94
+ const specNodes = graph.getNodesByType('spec');
95
+ const specs = specNodes
96
+ .map((node) => {
97
+ const spec = node.data;
98
+ return {
99
+ id: spec.id,
100
+ title: spec.title,
101
+ status: spec.status,
102
+ version: spec.version,
103
+ requirementCount: spec.requirements.length,
104
+ hash: node.hash,
105
+ };
106
+ })
107
+ .filter((spec) => args.status === undefined || spec.status === args.status);
108
+ return successResult({ specs, count: specs.length });
109
+ }
110
+ function handlePlanNext(args) {
111
+ const projectRoot = getProjectRoot();
112
+ if (!isInitialized(projectRoot)) {
113
+ return errorResult('prov is not initialized. Run "prov init" first.');
114
+ }
115
+ const loadResult = loadGraph(projectRoot);
116
+ if (!loadResult.success || loadResult.data === undefined) {
117
+ return errorResult(loadResult.error ?? 'Failed to load graph');
118
+ }
119
+ const graph = loadResult.data;
120
+ const node = graph.getNode(args.planId);
121
+ if (node === undefined || node.type !== 'plan') {
122
+ return errorResult(`Plan not found: ${args.planId}`);
123
+ }
124
+ const plan = node.data;
125
+ const completedSteps = new Set(plan.steps.filter((s) => s.status === 'completed').map((s) => s.id));
126
+ let nextStep;
127
+ for (const step of plan.steps) {
128
+ if (step.status === 'completed')
129
+ continue;
130
+ if (step.status === 'blocked')
131
+ continue;
132
+ if (step.dependencies !== undefined) {
133
+ const hasUnmetDeps = step.dependencies.some((depId) => !completedSteps.has(depId));
134
+ if (hasUnmetDeps)
135
+ continue;
136
+ }
137
+ nextStep = step;
138
+ break;
139
+ }
140
+ if (nextStep === undefined) {
141
+ return successResult({
142
+ planId: args.planId,
143
+ message: 'All steps completed or blocked',
144
+ nextStep: null,
145
+ });
146
+ }
147
+ return successResult({
148
+ planId: args.planId,
149
+ nextStep: {
150
+ id: nextStep.id,
151
+ number: nextStep.number,
152
+ action: nextStep.action,
153
+ description: nextStep.description,
154
+ status: nextStep.status ?? 'pending',
155
+ tracesTo: nextStep.tracesTo,
156
+ },
157
+ });
158
+ }
159
+ function handlePlanProgress(args) {
160
+ const projectRoot = getProjectRoot();
161
+ if (!isInitialized(projectRoot)) {
162
+ return errorResult('prov is not initialized. Run "prov init" first.');
163
+ }
164
+ const loadResult = loadGraph(projectRoot);
165
+ if (!loadResult.success || loadResult.data === undefined) {
166
+ return errorResult(loadResult.error ?? 'Failed to load graph');
167
+ }
168
+ const graph = loadResult.data;
169
+ const node = graph.getNode(args.planId);
170
+ if (node === undefined || node.type !== 'plan') {
171
+ return errorResult(`Plan not found: ${args.planId}`);
172
+ }
173
+ const plan = node.data;
174
+ const breakdown = {
175
+ pending: 0,
176
+ inProgress: 0,
177
+ completed: 0,
178
+ blocked: 0,
179
+ };
180
+ for (const step of plan.steps) {
181
+ const status = step.status ?? 'pending';
182
+ if (status === 'pending')
183
+ breakdown.pending++;
184
+ else if (status === 'in_progress')
185
+ breakdown.inProgress++;
186
+ else if (status === 'completed')
187
+ breakdown.completed++;
188
+ else if (status === 'blocked')
189
+ breakdown.blocked++;
190
+ }
191
+ const totalSteps = plan.steps.length;
192
+ const percentComplete = totalSteps > 0 ? Math.round((breakdown.completed / totalSteps) * 100) : 100;
193
+ return successResult({
194
+ planId: args.planId,
195
+ totalSteps,
196
+ completedSteps: breakdown.completed,
197
+ percentComplete,
198
+ breakdown,
199
+ });
200
+ }
201
+ function handlePlanRemaining(args) {
202
+ const projectRoot = getProjectRoot();
203
+ if (!isInitialized(projectRoot)) {
204
+ return errorResult('prov is not initialized. Run "prov init" first.');
205
+ }
206
+ const loadResult = loadGraph(projectRoot);
207
+ if (!loadResult.success || loadResult.data === undefined) {
208
+ return errorResult(loadResult.error ?? 'Failed to load graph');
209
+ }
210
+ const graph = loadResult.data;
211
+ const node = graph.getNode(args.planId);
212
+ if (node === undefined || node.type !== 'plan') {
213
+ return errorResult(`Plan not found: ${args.planId}`);
214
+ }
215
+ const plan = node.data;
216
+ const remainingSteps = plan.steps
217
+ .filter((s) => s.status !== 'completed')
218
+ .map((s) => ({
219
+ id: s.id,
220
+ number: s.number,
221
+ action: s.action,
222
+ status: s.status ?? 'pending',
223
+ tracesTo: s.tracesTo,
224
+ }));
225
+ const completedCount = plan.steps.filter((s) => s.status === 'completed').length;
226
+ return successResult({
227
+ planId: args.planId,
228
+ remainingSteps,
229
+ totalSteps: plan.steps.length,
230
+ completedSteps: completedCount,
231
+ });
232
+ }
233
+ function handleTraceAdd(args) {
234
+ const projectRoot = getProjectRoot();
235
+ if (!isInitialized(projectRoot)) {
236
+ return errorResult('prov is not initialized. Run "prov init" first.');
237
+ }
238
+ if (!isValidStepId(args.stepId)) {
239
+ return errorResult(`Invalid step ID format: ${args.stepId} (expected step:{plan}:{number})`);
240
+ }
241
+ const fullPath = resolve(projectRoot, args.path);
242
+ const relPath = relative(projectRoot, fullPath);
243
+ if (!existsSync(fullPath)) {
244
+ return errorResult(`Artifact not found: ${args.path}`);
245
+ }
246
+ const stat = statSync(fullPath);
247
+ if (!stat.isFile()) {
248
+ return errorResult(`Path is not a file: ${args.path}`);
249
+ }
250
+ const loadResult = loadGraph(projectRoot);
251
+ if (!loadResult.success || loadResult.data === undefined) {
252
+ return errorResult(loadResult.error ?? 'Failed to load graph');
253
+ }
254
+ const graph = loadResult.data;
255
+ const stepNode = graph.getNode(args.stepId);
256
+ if (stepNode === undefined || stepNode.type !== 'step') {
257
+ return errorResult(`Step not found: ${args.stepId}`);
258
+ }
259
+ const artifactHash = computeFileHash(fullPath);
260
+ const traceId = generateTraceId(relPath, args.stepId);
261
+ const existingNode = graph.getNode(traceId);
262
+ if (existingNode !== undefined) {
263
+ const existingTrace = existingNode.data;
264
+ if (existingTrace.artifactHash === artifactHash) {
265
+ return successResult({
266
+ traceId,
267
+ artifactPath: relPath,
268
+ stepId: args.stepId,
269
+ artifactHash,
270
+ unchanged: true,
271
+ });
272
+ }
273
+ graph.removeNode(traceId);
274
+ }
275
+ const trace = {
276
+ id: traceId,
277
+ artifact: { path: relPath },
278
+ step: args.stepId,
279
+ artifactHash,
280
+ createdAt: new Date().toISOString(),
281
+ };
282
+ addTraceToGraph(graph, trace);
283
+ const saveResult = saveGraph(graph, projectRoot);
284
+ if (!saveResult.success) {
285
+ return errorResult(saveResult.error ?? 'Failed to save graph');
286
+ }
287
+ return successResult({
288
+ traceId,
289
+ artifactPath: relPath,
290
+ stepId: args.stepId,
291
+ artifactHash,
292
+ added: true,
293
+ });
294
+ }
295
+ function handleTraceShow(args) {
296
+ const projectRoot = getProjectRoot();
297
+ if (!isInitialized(projectRoot)) {
298
+ return errorResult('prov is not initialized. Run "prov init" first.');
299
+ }
300
+ const loadResult = loadGraph(projectRoot);
301
+ if (!loadResult.success || loadResult.data === undefined) {
302
+ return errorResult(loadResult.error ?? 'Failed to load graph');
303
+ }
304
+ const graph = loadResult.data;
305
+ const fullPath = resolve(projectRoot, args.path);
306
+ const relPath = relative(projectRoot, fullPath);
307
+ const artifactNodes = graph.getNodesByType('artifact');
308
+ let foundTrace;
309
+ for (const node of artifactNodes) {
310
+ const trace = node.data;
311
+ if (trace.artifact.path === relPath) {
312
+ foundTrace = trace;
313
+ break;
314
+ }
315
+ }
316
+ if (foundTrace === undefined) {
317
+ return errorResult(`No trace found for artifact: ${args.path}`);
318
+ }
319
+ let isStale = false;
320
+ let currentHash;
321
+ if (existsSync(fullPath)) {
322
+ currentHash = computeFileHash(fullPath);
323
+ isStale = currentHash !== foundTrace.artifactHash;
324
+ }
325
+ else {
326
+ isStale = true;
327
+ }
328
+ return successResult({
329
+ artifact: {
330
+ path: relPath,
331
+ hash: currentHash ?? foundTrace.artifactHash,
332
+ stale: isStale,
333
+ },
334
+ trace: {
335
+ id: foundTrace.id,
336
+ stepId: foundTrace.step,
337
+ createdAt: foundTrace.createdAt,
338
+ },
339
+ });
340
+ }
341
+ function handleContext(args) {
342
+ const projectRoot = getProjectRoot();
343
+ if (!isInitialized(projectRoot)) {
344
+ return errorResult('prov is not initialized. Run "prov init" first.');
345
+ }
346
+ const loadResult = loadGraph(projectRoot);
347
+ if (!loadResult.success || loadResult.data === undefined) {
348
+ return errorResult(loadResult.error ?? 'Failed to load graph');
349
+ }
350
+ const graph = loadResult.data;
351
+ const scopeSet = args.scope !== undefined ? new Set(args.scope) : null;
352
+ // Collect specs
353
+ const specNodes = graph.getNodesByType('spec');
354
+ const specs = specNodes
355
+ .filter((node) => {
356
+ const spec = node.data;
357
+ return scopeSet === null || scopeSet.has(spec.id);
358
+ })
359
+ .map((node) => {
360
+ const spec = node.data;
361
+ return {
362
+ id: spec.id,
363
+ title: spec.title,
364
+ status: spec.status,
365
+ intent: spec.intent,
366
+ requirements: spec.requirements.map((r) => ({
367
+ id: r.id,
368
+ description: r.description,
369
+ })),
370
+ };
371
+ });
372
+ // Collect constraints
373
+ const constraintNodes = graph.getNodesByType('constraint');
374
+ const constraints = constraintNodes.map((node) => {
375
+ const constraint = node.data;
376
+ return {
377
+ id: constraint.id,
378
+ title: constraint.title,
379
+ status: constraint.status,
380
+ invariants: constraint.invariants.map((inv) => ({
381
+ id: inv.id,
382
+ rule: inv.rule,
383
+ })),
384
+ };
385
+ });
386
+ // Collect plans
387
+ const planNodes = graph.getNodesByType('plan');
388
+ let totalSteps = 0;
389
+ let completedSteps = 0;
390
+ const plans = planNodes.map((node) => {
391
+ const plan = node.data;
392
+ const planCompleted = plan.steps.filter((s) => s.status === 'completed').length;
393
+ totalSteps += plan.steps.length;
394
+ completedSteps += planCompleted;
395
+ return {
396
+ id: plan.id,
397
+ title: plan.title,
398
+ status: plan.status,
399
+ totalSteps: plan.steps.length,
400
+ completedSteps: planCompleted,
401
+ };
402
+ });
403
+ return successResult({
404
+ specs,
405
+ constraints,
406
+ plans,
407
+ summary: {
408
+ totalSteps,
409
+ completedSteps,
410
+ pendingSteps: totalSteps - completedSteps,
411
+ },
412
+ });
413
+ }
414
+ function handleConstraintList(args) {
415
+ const projectRoot = getProjectRoot();
416
+ if (!isInitialized(projectRoot)) {
417
+ return errorResult('prov is not initialized. Run "prov init" first.');
418
+ }
419
+ const loadResult = loadGraph(projectRoot);
420
+ if (!loadResult.success || loadResult.data === undefined) {
421
+ return errorResult(loadResult.error ?? 'Failed to load graph');
422
+ }
423
+ const graph = loadResult.data;
424
+ const constraintNodes = graph.getNodesByType('constraint');
425
+ const constraints = constraintNodes
426
+ .map((node) => {
427
+ const constraint = node.data;
428
+ return {
429
+ id: constraint.id,
430
+ title: constraint.title,
431
+ status: constraint.status,
432
+ version: constraint.version,
433
+ invariantCount: constraint.invariants.length,
434
+ hash: node.hash,
435
+ };
436
+ })
437
+ .filter((c) => args.status === undefined || c.status === args.status);
438
+ return successResult({ constraints, count: constraints.length });
439
+ }
440
+ // ============================================================================
441
+ // MCP Server Setup
442
+ // ============================================================================
443
+ /**
444
+ * Create and configure the MCP server.
445
+ */
446
+ export function createMcpServer() {
447
+ const server = new Server({
448
+ name: 'prov',
449
+ version: '0.1.0',
450
+ }, {
451
+ capabilities: {
452
+ tools: {},
453
+ },
454
+ });
455
+ // Register tool list handler
456
+ server.setRequestHandler(ListToolsRequestSchema, () => {
457
+ return {
458
+ tools: [
459
+ {
460
+ name: 'prov_spec_list',
461
+ description: 'List all specifications tracked by prov',
462
+ inputSchema: {
463
+ type: 'object',
464
+ properties: {
465
+ status: {
466
+ type: 'string',
467
+ description: 'Filter by status (draft, active, deprecated, archived)',
468
+ },
469
+ },
470
+ },
471
+ },
472
+ {
473
+ name: 'prov_constraint_list',
474
+ description: 'List all constraints tracked by prov',
475
+ inputSchema: {
476
+ type: 'object',
477
+ properties: {
478
+ status: {
479
+ type: 'string',
480
+ description: 'Filter by status',
481
+ },
482
+ },
483
+ },
484
+ },
485
+ {
486
+ name: 'prov_plan_next',
487
+ description: 'Get the next unimplemented step in a plan',
488
+ inputSchema: {
489
+ type: 'object',
490
+ properties: {
491
+ planId: {
492
+ type: 'string',
493
+ description: 'Plan ID in format plan:{name}:v{number}',
494
+ },
495
+ },
496
+ required: ['planId'],
497
+ },
498
+ },
499
+ {
500
+ name: 'prov_plan_progress',
501
+ description: 'Get progress information for a plan',
502
+ inputSchema: {
503
+ type: 'object',
504
+ properties: {
505
+ planId: {
506
+ type: 'string',
507
+ description: 'Plan ID in format plan:{name}:v{number}',
508
+ },
509
+ },
510
+ required: ['planId'],
511
+ },
512
+ },
513
+ {
514
+ name: 'prov_plan_remaining',
515
+ description: 'List remaining unimplemented steps in a plan',
516
+ inputSchema: {
517
+ type: 'object',
518
+ properties: {
519
+ planId: {
520
+ type: 'string',
521
+ description: 'Plan ID in format plan:{name}:v{number}',
522
+ },
523
+ },
524
+ required: ['planId'],
525
+ },
526
+ },
527
+ {
528
+ name: 'prov_trace_add',
529
+ description: 'Link an artifact file to a plan step',
530
+ inputSchema: {
531
+ type: 'object',
532
+ properties: {
533
+ path: {
534
+ type: 'string',
535
+ description: 'Path to the artifact file',
536
+ },
537
+ stepId: {
538
+ type: 'string',
539
+ description: 'Step ID to trace to in format step:{plan}:{number}',
540
+ },
541
+ },
542
+ required: ['path', 'stepId'],
543
+ },
544
+ },
545
+ {
546
+ name: 'prov_trace_show',
547
+ description: 'Show provenance information for an artifact',
548
+ inputSchema: {
549
+ type: 'object',
550
+ properties: {
551
+ path: {
552
+ type: 'string',
553
+ description: 'Path to the artifact file',
554
+ },
555
+ },
556
+ required: ['path'],
557
+ },
558
+ },
559
+ {
560
+ name: 'prov_context',
561
+ description: 'Get full context for AI agent consumption including specs, constraints, and plans',
562
+ inputSchema: {
563
+ type: 'object',
564
+ properties: {
565
+ scope: {
566
+ type: 'array',
567
+ items: { type: 'string' },
568
+ description: 'Spec IDs to limit context to',
569
+ },
570
+ },
571
+ },
572
+ },
573
+ ],
574
+ };
575
+ });
576
+ // Register tool call handler
577
+ server.setRequestHandler(CallToolRequestSchema, (request) => {
578
+ const { name, arguments: args } = request.params;
579
+ switch (name) {
580
+ case 'prov_spec_list':
581
+ return handleSpecList(specListSchema.parse(args ?? {}));
582
+ case 'prov_constraint_list':
583
+ return handleConstraintList(constraintListSchema.parse(args ?? {}));
584
+ case 'prov_plan_next':
585
+ return handlePlanNext(planNextSchema.parse(args));
586
+ case 'prov_plan_progress':
587
+ return handlePlanProgress(planProgressSchema.parse(args));
588
+ case 'prov_plan_remaining':
589
+ return handlePlanRemaining(planRemainingSchema.parse(args));
590
+ case 'prov_trace_add':
591
+ return handleTraceAdd(traceAddSchema.parse(args));
592
+ case 'prov_trace_show':
593
+ return handleTraceShow(traceShowSchema.parse(args));
594
+ case 'prov_context':
595
+ return handleContext(contextSchema.parse(args ?? {}));
596
+ default:
597
+ return errorResult(`Unknown tool: ${name}`);
598
+ }
599
+ });
600
+ return server;
601
+ }
602
+ /**
603
+ * Run the MCP server with stdio transport.
604
+ */
605
+ export async function runMcpServe() {
606
+ const server = createMcpServer();
607
+ const transport = new StdioServerTransport();
608
+ await server.connect(transport);
609
+ // Keep the process running
610
+ process.on('SIGINT', () => {
611
+ void server.close().then(() => {
612
+ process.exit(0);
613
+ });
614
+ });
615
+ }
616
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tests for prov MCP server.
3
+ *
4
+ * @see req:agent:mcp-integration
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=mcp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.test.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}