@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,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Staleness detection for the intent graph.
|
|
3
|
+
*
|
|
4
|
+
* Detects when graph nodes are stale due to upstream changes:
|
|
5
|
+
* - Plan staleness: source specs/constraints have changed
|
|
6
|
+
* - Trace staleness: artifact files have changed
|
|
7
|
+
* - Derived staleness: nodes that depend on stale nodes
|
|
8
|
+
*
|
|
9
|
+
* @see req:graph:staleness-detection
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { computeHash, sha256 } from './hash.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// File Hash Utilities
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Compute the hash of a file's raw contents.
|
|
19
|
+
*
|
|
20
|
+
* This hashes the raw file bytes, unlike watcher.computeFileHash which
|
|
21
|
+
* parses YAML and computes a canonical hash. Used for artifact staleness.
|
|
22
|
+
*
|
|
23
|
+
* @param filePath - Absolute or relative path to the file
|
|
24
|
+
* @param projectRoot - Project root for resolving relative paths
|
|
25
|
+
* @returns Hash of file contents, or null if file doesn't exist
|
|
26
|
+
*/
|
|
27
|
+
export function computeArtifactHash(filePath, projectRoot = process.cwd()) {
|
|
28
|
+
const absolutePath = filePath.startsWith('/')
|
|
29
|
+
? filePath
|
|
30
|
+
: join(projectRoot, filePath);
|
|
31
|
+
try {
|
|
32
|
+
if (!existsSync(absolutePath)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const content = readFileSync(absolutePath, 'utf8');
|
|
36
|
+
const fullHash = sha256(content);
|
|
37
|
+
return `sha256:${fullHash.slice(0, 12)}`;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Direct Staleness Detection
|
|
45
|
+
// ============================================================================
|
|
46
|
+
/**
|
|
47
|
+
* Check if a plan is stale due to source changes.
|
|
48
|
+
*
|
|
49
|
+
* A plan is stale if any of its source specs/constraints have changed
|
|
50
|
+
* (i.e., current hash differs from the hash recorded at plan creation).
|
|
51
|
+
*
|
|
52
|
+
* @param plan - The plan to check
|
|
53
|
+
* @param graph - The intent graph containing source nodes
|
|
54
|
+
* @returns Staleness info for the plan
|
|
55
|
+
*/
|
|
56
|
+
export function checkPlanStaleness(plan, graph) {
|
|
57
|
+
const reasons = [];
|
|
58
|
+
for (const source of plan.sources) {
|
|
59
|
+
const sourceNode = graph.getNode(source.id);
|
|
60
|
+
if (sourceNode === undefined) {
|
|
61
|
+
// Source node no longer exists
|
|
62
|
+
reasons.push({
|
|
63
|
+
type: 'source_missing',
|
|
64
|
+
sourceId: source.id,
|
|
65
|
+
});
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// Compute current hash of the source
|
|
69
|
+
const currentHash = sourceNode.hash ?? computeHash(sourceNode.data);
|
|
70
|
+
if (currentHash !== source.hash) {
|
|
71
|
+
reasons.push({
|
|
72
|
+
type: 'source_changed',
|
|
73
|
+
sourceId: source.id,
|
|
74
|
+
expectedHash: source.hash,
|
|
75
|
+
actualHash: currentHash,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
id: plan.id,
|
|
81
|
+
stale: reasons.length > 0,
|
|
82
|
+
reasons,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a trace is stale due to artifact changes.
|
|
87
|
+
*
|
|
88
|
+
* A trace is stale if:
|
|
89
|
+
* - The artifact file no longer exists
|
|
90
|
+
* - The artifact file's hash differs from the recorded hash
|
|
91
|
+
*
|
|
92
|
+
* @param trace - The trace to check
|
|
93
|
+
* @param projectRoot - Project root for resolving file paths
|
|
94
|
+
* @returns Staleness info for the trace
|
|
95
|
+
*/
|
|
96
|
+
export function checkTraceStaleness(trace, projectRoot = process.cwd()) {
|
|
97
|
+
const reasons = [];
|
|
98
|
+
const currentHash = computeArtifactHash(trace.artifact.path, projectRoot);
|
|
99
|
+
if (currentHash === null) {
|
|
100
|
+
// File no longer exists
|
|
101
|
+
reasons.push({
|
|
102
|
+
type: 'artifact_missing',
|
|
103
|
+
path: trace.artifact.path,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
else if (currentHash !== trace.artifactHash) {
|
|
107
|
+
reasons.push({
|
|
108
|
+
type: 'artifact_changed',
|
|
109
|
+
path: trace.artifact.path,
|
|
110
|
+
expectedHash: trace.artifactHash,
|
|
111
|
+
actualHash: currentHash,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
id: trace.id,
|
|
116
|
+
stale: reasons.length > 0,
|
|
117
|
+
reasons,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Transitive Staleness Detection
|
|
122
|
+
// ============================================================================
|
|
123
|
+
/**
|
|
124
|
+
* Find all nodes that are transitively stale.
|
|
125
|
+
*
|
|
126
|
+
* A node is transitively stale if any of its upstream nodes are stale.
|
|
127
|
+
* Uses forward traversal from stale nodes to find all affected downstream nodes.
|
|
128
|
+
*
|
|
129
|
+
* @param graph - The intent graph
|
|
130
|
+
* @param directlyStale - Set of directly stale node IDs
|
|
131
|
+
* @returns Set of transitively stale node IDs (excluding directly stale)
|
|
132
|
+
*/
|
|
133
|
+
export function findTransitivelyStale(graph, directlyStale) {
|
|
134
|
+
const transitivelyStale = new Set();
|
|
135
|
+
for (const staleId of directlyStale) {
|
|
136
|
+
// Find all downstream nodes
|
|
137
|
+
const downstream = graph.traverseForward(staleId, {
|
|
138
|
+
includeStart: false,
|
|
139
|
+
});
|
|
140
|
+
for (const downstreamId of downstream) {
|
|
141
|
+
if (!directlyStale.has(downstreamId)) {
|
|
142
|
+
transitivelyStale.add(downstreamId);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return transitivelyStale;
|
|
147
|
+
}
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// Full Graph Staleness Detection
|
|
150
|
+
// ============================================================================
|
|
151
|
+
/**
|
|
152
|
+
* Detect staleness across the entire intent graph.
|
|
153
|
+
*
|
|
154
|
+
* @param graph - The intent graph to check
|
|
155
|
+
* @param options - Detection options
|
|
156
|
+
* @returns Comprehensive staleness result
|
|
157
|
+
*/
|
|
158
|
+
export function detectStaleness(graph, options = {}) {
|
|
159
|
+
const { projectRoot = process.cwd(), nodeTypes, includeTransitive = true, } = options;
|
|
160
|
+
const nodes = new Map();
|
|
161
|
+
const directlyStaleSet = new Set();
|
|
162
|
+
// Check plans for source staleness
|
|
163
|
+
if (nodeTypes === undefined || nodeTypes.includes('plan')) {
|
|
164
|
+
for (const node of graph.getNodesByType('plan')) {
|
|
165
|
+
const plan = node.data;
|
|
166
|
+
const info = checkPlanStaleness(plan, graph);
|
|
167
|
+
nodes.set(plan.id, info);
|
|
168
|
+
if (info.stale) {
|
|
169
|
+
directlyStaleSet.add(plan.id);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Check artifacts (traces) for file staleness
|
|
174
|
+
if (nodeTypes === undefined || nodeTypes.includes('artifact')) {
|
|
175
|
+
for (const node of graph.getNodesByType('artifact')) {
|
|
176
|
+
const trace = node.data;
|
|
177
|
+
const info = checkTraceStaleness(trace, projectRoot);
|
|
178
|
+
nodes.set(trace.id, info);
|
|
179
|
+
if (info.stale) {
|
|
180
|
+
directlyStaleSet.add(trace.id);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Find transitively stale nodes
|
|
185
|
+
let transitivelyStaleSet = new Set();
|
|
186
|
+
if (includeTransitive && directlyStaleSet.size > 0) {
|
|
187
|
+
transitivelyStaleSet = findTransitivelyStale(graph, directlyStaleSet);
|
|
188
|
+
// Add transitive staleness info to nodes map
|
|
189
|
+
for (const id of transitivelyStaleSet) {
|
|
190
|
+
const existingInfo = nodes.get(id);
|
|
191
|
+
if (existingInfo === undefined) {
|
|
192
|
+
// Find which upstream node caused this to be stale
|
|
193
|
+
const upstreamStale = findUpstreamStale(graph, id, directlyStaleSet);
|
|
194
|
+
nodes.set(id, {
|
|
195
|
+
id,
|
|
196
|
+
stale: true,
|
|
197
|
+
reasons: upstreamStale.map((upstreamId) => ({
|
|
198
|
+
type: 'derived_from_stale',
|
|
199
|
+
upstreamId,
|
|
200
|
+
})),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const directlyStale = Array.from(directlyStaleSet);
|
|
206
|
+
const transitivelyStale = Array.from(transitivelyStaleSet);
|
|
207
|
+
return {
|
|
208
|
+
totalNodes: graph.nodeCount,
|
|
209
|
+
staleCount: directlyStale.length + transitivelyStale.length,
|
|
210
|
+
nodes,
|
|
211
|
+
directlyStale,
|
|
212
|
+
transitivelyStale,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Find the upstream stale nodes that cause a node to be transitively stale.
|
|
217
|
+
*/
|
|
218
|
+
function findUpstreamStale(graph, nodeId, directlyStale) {
|
|
219
|
+
const upstream = graph.traverseBackward(nodeId, {
|
|
220
|
+
includeStart: false,
|
|
221
|
+
});
|
|
222
|
+
return upstream.filter((id) => directlyStale.has(id));
|
|
223
|
+
}
|
|
224
|
+
// ============================================================================
|
|
225
|
+
// Convenience Functions
|
|
226
|
+
// ============================================================================
|
|
227
|
+
/**
|
|
228
|
+
* Check if a specific node is stale.
|
|
229
|
+
*
|
|
230
|
+
* @param graph - The intent graph
|
|
231
|
+
* @param nodeId - ID of the node to check
|
|
232
|
+
* @param options - Detection options
|
|
233
|
+
* @returns Staleness info for the node, or null if node not found
|
|
234
|
+
*/
|
|
235
|
+
export function isNodeStale(graph, nodeId, options = {}) {
|
|
236
|
+
const node = graph.getNode(nodeId);
|
|
237
|
+
if (node === undefined) {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
const { projectRoot = process.cwd() } = options;
|
|
241
|
+
// Check direct staleness based on node type
|
|
242
|
+
if (node.type === 'plan') {
|
|
243
|
+
return checkPlanStaleness(node.data, graph);
|
|
244
|
+
}
|
|
245
|
+
if (node.type === 'artifact') {
|
|
246
|
+
return checkTraceStaleness(node.data, projectRoot);
|
|
247
|
+
}
|
|
248
|
+
// For other node types, check if they're transitively stale
|
|
249
|
+
const result = detectStaleness(graph, { ...options, includeTransitive: true });
|
|
250
|
+
return result.nodes.get(nodeId) ?? {
|
|
251
|
+
id: nodeId,
|
|
252
|
+
stale: false,
|
|
253
|
+
reasons: [],
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get all stale nodes in the graph.
|
|
258
|
+
*
|
|
259
|
+
* @param graph - The intent graph
|
|
260
|
+
* @param options - Detection options
|
|
261
|
+
* @returns Array of stale node IDs
|
|
262
|
+
*/
|
|
263
|
+
export function getStaleNodes(graph, options = {}) {
|
|
264
|
+
const result = detectStaleness(graph, options);
|
|
265
|
+
return [...result.directlyStale, ...result.transitivelyStale];
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get stale plans and their reasons.
|
|
269
|
+
*
|
|
270
|
+
* @param graph - The intent graph
|
|
271
|
+
* @returns Array of staleness info for stale plans only
|
|
272
|
+
*/
|
|
273
|
+
export function getStalePlans(graph) {
|
|
274
|
+
const result = detectStaleness(graph, { nodeTypes: ['plan'], includeTransitive: false });
|
|
275
|
+
return Array.from(result.nodes.values()).filter((info) => info.stale);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get stale traces and their reasons.
|
|
279
|
+
*
|
|
280
|
+
* @param graph - The intent graph
|
|
281
|
+
* @param projectRoot - Project root for resolving file paths
|
|
282
|
+
* @returns Array of staleness info for stale traces only
|
|
283
|
+
*/
|
|
284
|
+
export function getStaleTraces(graph, projectRoot = process.cwd()) {
|
|
285
|
+
const result = detectStaleness(graph, {
|
|
286
|
+
projectRoot,
|
|
287
|
+
nodeTypes: ['artifact'],
|
|
288
|
+
includeTransitive: false,
|
|
289
|
+
});
|
|
290
|
+
return Array.from(result.nodes.values()).filter((info) => info.stale);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Format staleness reason as human-readable string.
|
|
294
|
+
*/
|
|
295
|
+
export function formatStalenessReason(reason) {
|
|
296
|
+
switch (reason.type) {
|
|
297
|
+
case 'source_changed':
|
|
298
|
+
return `Source ${reason.sourceId} changed (was ${reason.expectedHash}, now ${reason.actualHash})`;
|
|
299
|
+
case 'artifact_changed':
|
|
300
|
+
return `Artifact ${reason.path} changed (was ${reason.expectedHash}, now ${reason.actualHash})`;
|
|
301
|
+
case 'artifact_missing':
|
|
302
|
+
return `Artifact ${reason.path} no longer exists`;
|
|
303
|
+
case 'derived_from_stale':
|
|
304
|
+
return `Derived from stale node ${reason.upstreamId}`;
|
|
305
|
+
case 'source_missing':
|
|
306
|
+
return `Source ${reason.sourceId} no longer exists`;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=staleness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleness.js","sourceRoot":"","sources":["../src/staleness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleness.test.d.ts","sourceRoot":"","sources":["../src/staleness.test.ts"],"names":[],"mappings":""}
|