@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.
- package/README.md +314 -0
- package/dist/cli.d.ts +26 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +381 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agent.d.ts +107 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +197 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/agent.test.d.ts +5 -0
- package/dist/commands/agent.test.d.ts.map +1 -0
- package/dist/commands/agent.test.js +199 -0
- package/dist/commands/agent.test.js.map +1 -0
- package/dist/commands/constraint.d.ts +100 -0
- package/dist/commands/constraint.d.ts.map +1 -0
- package/dist/commands/constraint.js +763 -0
- package/dist/commands/constraint.js.map +1 -0
- package/dist/commands/constraint.test.d.ts +9 -0
- package/dist/commands/constraint.test.d.ts.map +1 -0
- package/dist/commands/constraint.test.js +470 -0
- package/dist/commands/constraint.test.js.map +1 -0
- package/dist/commands/graph.d.ts +99 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +552 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/graph.test.d.ts +2 -0
- package/dist/commands/graph.test.d.ts.map +1 -0
- package/dist/commands/graph.test.js +258 -0
- package/dist/commands/graph.test.js.map +1 -0
- package/dist/commands/impact.d.ts +83 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +319 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/impact.test.d.ts +2 -0
- package/dist/commands/impact.test.d.ts.map +1 -0
- package/dist/commands/impact.test.js +234 -0
- package/dist/commands/impact.test.js.map +1 -0
- package/dist/commands/init.d.ts +45 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +94 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.test.d.ts +7 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +174 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/integration.test.d.ts +10 -0
- package/dist/commands/integration.test.d.ts.map +1 -0
- package/dist/commands/integration.test.js +456 -0
- package/dist/commands/integration.test.js.map +1 -0
- package/dist/commands/mcp.d.ts +21 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +616 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/mcp.test.d.ts +7 -0
- package/dist/commands/mcp.test.d.ts.map +1 -0
- package/dist/commands/mcp.test.js +132 -0
- package/dist/commands/mcp.test.js.map +1 -0
- package/dist/commands/plan.d.ts +218 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +1307 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/plan.test.d.ts +9 -0
- package/dist/commands/plan.test.d.ts.map +1 -0
- package/dist/commands/plan.test.js +569 -0
- package/dist/commands/plan.test.js.map +1 -0
- package/dist/commands/spec.d.ts +94 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +635 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/spec.test.d.ts +9 -0
- package/dist/commands/spec.test.d.ts.map +1 -0
- package/dist/commands/spec.test.js +407 -0
- package/dist/commands/spec.test.js.map +1 -0
- package/dist/commands/trace.d.ts +157 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +847 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/trace.test.d.ts +9 -0
- package/dist/commands/trace.test.d.ts.map +1 -0
- package/dist/commands/trace.test.js +524 -0
- package/dist/commands/trace.test.js.map +1 -0
- package/dist/graph.d.ts +204 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +496 -0
- package/dist/graph.js.map +1 -0
- package/dist/graph.test.d.ts +2 -0
- package/dist/graph.test.d.ts.map +1 -0
- package/dist/graph.test.js +382 -0
- package/dist/graph.test.js.map +1 -0
- package/dist/hash.d.ts +72 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +137 -0
- package/dist/hash.js.map +1 -0
- package/dist/hash.test.d.ts +2 -0
- package/dist/hash.test.d.ts.map +1 -0
- package/dist/hash.test.js +227 -0
- package/dist/hash.test.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +11 -0
- package/dist/index.test.js.map +1 -0
- package/dist/output.d.ts +84 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +175 -0
- package/dist/output.js.map +1 -0
- package/dist/output.test.d.ts +7 -0
- package/dist/output.test.d.ts.map +1 -0
- package/dist/output.test.js +146 -0
- package/dist/output.test.js.map +1 -0
- package/dist/staleness.d.ts +162 -0
- package/dist/staleness.d.ts.map +1 -0
- package/dist/staleness.js +309 -0
- package/dist/staleness.js.map +1 -0
- package/dist/staleness.test.d.ts +2 -0
- package/dist/staleness.test.d.ts.map +1 -0
- package/dist/staleness.test.js +448 -0
- package/dist/staleness.test.js.map +1 -0
- package/dist/storage.d.ts +267 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +623 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.test.d.ts +5 -0
- package/dist/storage.test.d.ts.map +1 -0
- package/dist/storage.test.js +434 -0
- package/dist/storage.test.js.map +1 -0
- package/dist/types.d.ts +270 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/types.test.d.ts +2 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +232 -0
- package/dist/types.test.js.map +1 -0
- package/dist/watcher.d.ts +139 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +406 -0
- package/dist/watcher.js.map +1 -0
- package/dist/watcher.test.d.ts +5 -0
- package/dist/watcher.test.d.ts.map +1 -0
- package/dist/watcher.test.js +327 -0
- package/dist/watcher.test.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.test.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|