@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
package/dist/storage.js
ADDED
|
@@ -0,0 +1,623 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage layer for prov.
|
|
3
|
+
*
|
|
4
|
+
* Handles persistence of the intent graph and trace mappings to disk.
|
|
5
|
+
* Uses file-based storage in .prov/ directory for git-friendliness.
|
|
6
|
+
*
|
|
7
|
+
* @see spec:storage:v1
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, renameSync, readdirSync, statSync } from 'node:fs';
|
|
10
|
+
import { join, dirname, relative } from 'node:path';
|
|
11
|
+
import { IntentGraph } from './graph.js';
|
|
12
|
+
import { parseYaml, toYaml, sha256 } from './hash.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/** Root directory name for prov metadata */
|
|
17
|
+
export const PROV_DIR = '.prov';
|
|
18
|
+
/** Intent graph file name */
|
|
19
|
+
export const GRAPH_FILE = 'graph.json';
|
|
20
|
+
/** Mappings directory name */
|
|
21
|
+
export const MAPPINGS_DIR = 'mappings';
|
|
22
|
+
/** Cache directory name */
|
|
23
|
+
export const CACHE_DIR = 'cache';
|
|
24
|
+
/** Lock file name */
|
|
25
|
+
export const LOCK_FILE = '.lock';
|
|
26
|
+
/** Schema version for graph format */
|
|
27
|
+
export const SCHEMA_VERSION = 1;
|
|
28
|
+
/** Lock timeout in milliseconds */
|
|
29
|
+
const LOCK_TIMEOUT_MS = 30000;
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Path Utilities
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Get the .prov directory path for a project.
|
|
35
|
+
*/
|
|
36
|
+
export function getProvDir(projectRoot = process.cwd()) {
|
|
37
|
+
return join(projectRoot, PROV_DIR);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the graph.json file path.
|
|
41
|
+
*/
|
|
42
|
+
export function getGraphPath(projectRoot = process.cwd()) {
|
|
43
|
+
return join(getProvDir(projectRoot), GRAPH_FILE);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the mappings directory path.
|
|
47
|
+
*/
|
|
48
|
+
export function getMappingsDir(projectRoot = process.cwd()) {
|
|
49
|
+
return join(getProvDir(projectRoot), MAPPINGS_DIR);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the cache directory path.
|
|
53
|
+
*/
|
|
54
|
+
export function getCacheDir(projectRoot = process.cwd()) {
|
|
55
|
+
return join(getProvDir(projectRoot), CACHE_DIR);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the lock file path.
|
|
59
|
+
*/
|
|
60
|
+
export function getLockPath(projectRoot = process.cwd()) {
|
|
61
|
+
return join(getProvDir(projectRoot), LOCK_FILE);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the mapping file path for a source file.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* getMappingPath('src/auth/login.ts') → '.prov/mappings/src/auth/login.ts.yaml'
|
|
68
|
+
*/
|
|
69
|
+
export function getMappingPath(sourcePath, projectRoot = process.cwd()) {
|
|
70
|
+
// Normalize path to use forward slashes and be relative
|
|
71
|
+
const normalizedPath = sourcePath.replace(/\\/g, '/');
|
|
72
|
+
const relativePath = normalizedPath.startsWith('/')
|
|
73
|
+
? normalizedPath.slice(1)
|
|
74
|
+
: normalizedPath;
|
|
75
|
+
return join(getMappingsDir(projectRoot), `${relativePath}.yaml`);
|
|
76
|
+
}
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// Directory Management
|
|
79
|
+
// ============================================================================
|
|
80
|
+
/**
|
|
81
|
+
* Check if prov is initialized in the project.
|
|
82
|
+
*/
|
|
83
|
+
export function isInitialized(projectRoot = process.cwd()) {
|
|
84
|
+
return existsSync(getProvDir(projectRoot));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Initialize prov directory structure.
|
|
88
|
+
*
|
|
89
|
+
* Creates:
|
|
90
|
+
* - .prov/
|
|
91
|
+
* - .prov/mappings/
|
|
92
|
+
* - .prov/cache/
|
|
93
|
+
*
|
|
94
|
+
* @see req:storage:directory-structure
|
|
95
|
+
*/
|
|
96
|
+
export function initialize(projectRoot = process.cwd()) {
|
|
97
|
+
try {
|
|
98
|
+
const provDir = getProvDir(projectRoot);
|
|
99
|
+
if (existsSync(provDir)) {
|
|
100
|
+
return { success: true };
|
|
101
|
+
}
|
|
102
|
+
// Create directory structure
|
|
103
|
+
mkdirSync(provDir, { recursive: true });
|
|
104
|
+
mkdirSync(getMappingsDir(projectRoot), { recursive: true });
|
|
105
|
+
mkdirSync(getCacheDir(projectRoot), { recursive: true });
|
|
106
|
+
// Create .gitignore for cache
|
|
107
|
+
const gitignorePath = join(getCacheDir(projectRoot), '.gitignore');
|
|
108
|
+
writeFileSync(gitignorePath, '*\n!.gitignore\n');
|
|
109
|
+
return { success: true };
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
return {
|
|
113
|
+
success: false,
|
|
114
|
+
error: `Failed to initialize prov: ${error instanceof Error ? error.message : String(error)}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Acquire a write lock.
|
|
120
|
+
*
|
|
121
|
+
* @see req:storage:atomic-writes
|
|
122
|
+
*/
|
|
123
|
+
export function acquireLock(projectRoot = process.cwd()) {
|
|
124
|
+
const lockPath = getLockPath(projectRoot);
|
|
125
|
+
try {
|
|
126
|
+
// Check for stale lock
|
|
127
|
+
if (existsSync(lockPath)) {
|
|
128
|
+
const content = readFileSync(lockPath, 'utf8');
|
|
129
|
+
const lockInfo = JSON.parse(content);
|
|
130
|
+
const lockAge = Date.now() - new Date(lockInfo.timestamp).getTime();
|
|
131
|
+
if (lockAge > LOCK_TIMEOUT_MS) {
|
|
132
|
+
// Stale lock, remove it
|
|
133
|
+
unlinkSync(lockPath);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
error: `Lock held by PID ${lockInfo.pid} since ${lockInfo.timestamp}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Create lock file
|
|
143
|
+
const lockInfo = {
|
|
144
|
+
pid: process.pid,
|
|
145
|
+
timestamp: new Date().toISOString(),
|
|
146
|
+
};
|
|
147
|
+
writeFileSync(lockPath, JSON.stringify(lockInfo), { flag: 'wx' });
|
|
148
|
+
return { success: true };
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (error.code === 'EEXIST') {
|
|
152
|
+
return { success: false, error: 'Lock file already exists' };
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
error: `Failed to acquire lock: ${error instanceof Error ? error.message : String(error)}`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Release the write lock.
|
|
162
|
+
*/
|
|
163
|
+
export function releaseLock(projectRoot = process.cwd()) {
|
|
164
|
+
const lockPath = getLockPath(projectRoot);
|
|
165
|
+
try {
|
|
166
|
+
if (existsSync(lockPath)) {
|
|
167
|
+
unlinkSync(lockPath);
|
|
168
|
+
}
|
|
169
|
+
return { success: true };
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
error: `Failed to release lock: ${error instanceof Error ? error.message : String(error)}`,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Execute a function with a lock held.
|
|
180
|
+
*/
|
|
181
|
+
export async function withLock(projectRoot, fn) {
|
|
182
|
+
const lockResult = acquireLock(projectRoot);
|
|
183
|
+
if (!lockResult.success) {
|
|
184
|
+
return { success: false, error: lockResult.error ?? 'Failed to acquire lock' };
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const result = await fn();
|
|
188
|
+
return { success: true, data: result };
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
return {
|
|
192
|
+
success: false,
|
|
193
|
+
error: error instanceof Error ? error.message : String(error),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
releaseLock(projectRoot);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Atomic Write
|
|
202
|
+
// ============================================================================
|
|
203
|
+
/**
|
|
204
|
+
* Write data atomically (write to temp, then rename).
|
|
205
|
+
*
|
|
206
|
+
* @see req:storage:atomic-writes
|
|
207
|
+
*/
|
|
208
|
+
export function atomicWrite(filePath, content) {
|
|
209
|
+
const tempPath = `${filePath}.tmp.${process.pid}`;
|
|
210
|
+
try {
|
|
211
|
+
// Ensure parent directory exists
|
|
212
|
+
const dir = dirname(filePath);
|
|
213
|
+
if (!existsSync(dir)) {
|
|
214
|
+
mkdirSync(dir, { recursive: true });
|
|
215
|
+
}
|
|
216
|
+
// Write to temp file
|
|
217
|
+
writeFileSync(tempPath, content, 'utf8');
|
|
218
|
+
// Atomic rename
|
|
219
|
+
renameSync(tempPath, filePath);
|
|
220
|
+
return { success: true };
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
// Clean up temp file on failure
|
|
224
|
+
try {
|
|
225
|
+
if (existsSync(tempPath)) {
|
|
226
|
+
unlinkSync(tempPath);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Ignore cleanup errors
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
error: `Atomic write failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// ============================================================================
|
|
239
|
+
// Graph Persistence
|
|
240
|
+
// ============================================================================
|
|
241
|
+
/**
|
|
242
|
+
* Sort object keys recursively for deterministic JSON output.
|
|
243
|
+
*/
|
|
244
|
+
function sortObjectKeys(obj) {
|
|
245
|
+
if (obj === null || obj === undefined) {
|
|
246
|
+
return obj;
|
|
247
|
+
}
|
|
248
|
+
if (Array.isArray(obj)) {
|
|
249
|
+
return obj.map(sortObjectKeys);
|
|
250
|
+
}
|
|
251
|
+
if (typeof obj === 'object') {
|
|
252
|
+
const sorted = {};
|
|
253
|
+
const keys = Object.keys(obj).sort();
|
|
254
|
+
for (const key of keys) {
|
|
255
|
+
sorted[key] = sortObjectKeys(obj[key]);
|
|
256
|
+
}
|
|
257
|
+
return sorted;
|
|
258
|
+
}
|
|
259
|
+
return obj;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Serialize graph to JSON with deterministic key ordering.
|
|
263
|
+
*
|
|
264
|
+
* @see req:storage:graph-format
|
|
265
|
+
*/
|
|
266
|
+
function serializeGraph(graph) {
|
|
267
|
+
const nodes = {};
|
|
268
|
+
// Sort nodes by ID for deterministic output
|
|
269
|
+
const sortedNodes = graph.getAllNodes().sort((a, b) => a.id.localeCompare(b.id));
|
|
270
|
+
for (const node of sortedNodes) {
|
|
271
|
+
nodes[node.id] = {
|
|
272
|
+
id: node.id,
|
|
273
|
+
type: node.type,
|
|
274
|
+
hash: node.hash,
|
|
275
|
+
data: sortObjectKeys(node.data),
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
// Sort edges for deterministic output
|
|
279
|
+
const edges = graph.getAllEdges()
|
|
280
|
+
.map((e) => ({
|
|
281
|
+
from: e.from,
|
|
282
|
+
to: e.to,
|
|
283
|
+
type: e.type,
|
|
284
|
+
}))
|
|
285
|
+
.sort((a, b) => {
|
|
286
|
+
const fromCmp = a.from.localeCompare(b.from);
|
|
287
|
+
if (fromCmp !== 0)
|
|
288
|
+
return fromCmp;
|
|
289
|
+
const toCmp = a.to.localeCompare(b.to);
|
|
290
|
+
if (toCmp !== 0)
|
|
291
|
+
return toCmp;
|
|
292
|
+
return a.type.localeCompare(b.type);
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
schemaVersion: SCHEMA_VERSION,
|
|
296
|
+
updatedAt: new Date().toISOString(),
|
|
297
|
+
nodes,
|
|
298
|
+
edges,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Deserialize graph from JSON.
|
|
303
|
+
*/
|
|
304
|
+
function deserializeGraph(data) {
|
|
305
|
+
const graph = new IntentGraph();
|
|
306
|
+
// Add nodes
|
|
307
|
+
for (const node of Object.values(data.nodes)) {
|
|
308
|
+
graph.addNode(node.id, node.type, node.data, node.hash);
|
|
309
|
+
}
|
|
310
|
+
// Add edges
|
|
311
|
+
for (const edge of data.edges) {
|
|
312
|
+
graph.addEdge(edge.from, edge.to, edge.type);
|
|
313
|
+
}
|
|
314
|
+
return graph;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Save the intent graph to disk.
|
|
318
|
+
*
|
|
319
|
+
* @see req:storage:graph-format
|
|
320
|
+
* @see req:storage:atomic-writes
|
|
321
|
+
*/
|
|
322
|
+
export function saveGraph(graph, projectRoot = process.cwd()) {
|
|
323
|
+
const graphPath = getGraphPath(projectRoot);
|
|
324
|
+
try {
|
|
325
|
+
const graphFile = serializeGraph(graph);
|
|
326
|
+
const content = JSON.stringify(graphFile, null, 2);
|
|
327
|
+
return atomicWrite(graphPath, content);
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
return {
|
|
331
|
+
success: false,
|
|
332
|
+
error: `Failed to save graph: ${error instanceof Error ? error.message : String(error)}`,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Load the intent graph from disk.
|
|
338
|
+
*
|
|
339
|
+
* @see req:storage:graph-format
|
|
340
|
+
*/
|
|
341
|
+
export function loadGraph(projectRoot = process.cwd()) {
|
|
342
|
+
const graphPath = getGraphPath(projectRoot);
|
|
343
|
+
try {
|
|
344
|
+
if (!existsSync(graphPath)) {
|
|
345
|
+
// Return empty graph if file doesn't exist
|
|
346
|
+
return { success: true, data: new IntentGraph() };
|
|
347
|
+
}
|
|
348
|
+
const content = readFileSync(graphPath, 'utf8');
|
|
349
|
+
const data = JSON.parse(content);
|
|
350
|
+
// Validate schema version
|
|
351
|
+
if (data.schemaVersion !== SCHEMA_VERSION) {
|
|
352
|
+
return {
|
|
353
|
+
success: false,
|
|
354
|
+
error: `Unsupported schema version: ${data.schemaVersion} (expected ${SCHEMA_VERSION})`,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
const graph = deserializeGraph(data);
|
|
358
|
+
return { success: true, data: graph };
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
return {
|
|
362
|
+
success: false,
|
|
363
|
+
error: `Failed to load graph: ${error instanceof Error ? error.message : String(error)}`,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// ============================================================================
|
|
368
|
+
// Mapping Persistence
|
|
369
|
+
// ============================================================================
|
|
370
|
+
/**
|
|
371
|
+
* Save a trace mapping for a source file.
|
|
372
|
+
*
|
|
373
|
+
* @see req:storage:mapping-format
|
|
374
|
+
*/
|
|
375
|
+
export function saveMapping(mapping, projectRoot = process.cwd()) {
|
|
376
|
+
const mappingPath = getMappingPath(mapping.path, projectRoot);
|
|
377
|
+
try {
|
|
378
|
+
const content = toYaml(mapping);
|
|
379
|
+
return atomicWrite(mappingPath, content);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
return {
|
|
383
|
+
success: false,
|
|
384
|
+
error: `Failed to save mapping: ${error instanceof Error ? error.message : String(error)}`,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Load a trace mapping for a source file.
|
|
390
|
+
*
|
|
391
|
+
* @see req:storage:mapping-format
|
|
392
|
+
*/
|
|
393
|
+
export function loadMapping(sourcePath, projectRoot = process.cwd()) {
|
|
394
|
+
const mappingPath = getMappingPath(sourcePath, projectRoot);
|
|
395
|
+
try {
|
|
396
|
+
if (!existsSync(mappingPath)) {
|
|
397
|
+
return { success: true, data: null };
|
|
398
|
+
}
|
|
399
|
+
const content = readFileSync(mappingPath, 'utf8');
|
|
400
|
+
const mapping = parseYaml(content);
|
|
401
|
+
return { success: true, data: mapping };
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
return {
|
|
405
|
+
success: false,
|
|
406
|
+
error: `Failed to load mapping: ${error instanceof Error ? error.message : String(error)}`,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Delete a trace mapping for a source file.
|
|
412
|
+
*/
|
|
413
|
+
export function deleteMapping(sourcePath, projectRoot = process.cwd()) {
|
|
414
|
+
const mappingPath = getMappingPath(sourcePath, projectRoot);
|
|
415
|
+
try {
|
|
416
|
+
if (existsSync(mappingPath)) {
|
|
417
|
+
unlinkSync(mappingPath);
|
|
418
|
+
}
|
|
419
|
+
return { success: true };
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
return {
|
|
423
|
+
success: false,
|
|
424
|
+
error: `Failed to delete mapping: ${error instanceof Error ? error.message : String(error)}`,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* List all trace mappings.
|
|
430
|
+
*/
|
|
431
|
+
export function listMappings(projectRoot = process.cwd()) {
|
|
432
|
+
const mappingsDir = getMappingsDir(projectRoot);
|
|
433
|
+
try {
|
|
434
|
+
if (!existsSync(mappingsDir)) {
|
|
435
|
+
return { success: true, data: [] };
|
|
436
|
+
}
|
|
437
|
+
const files = [];
|
|
438
|
+
const walkDir = (dir) => {
|
|
439
|
+
const entries = readdirSync(dir);
|
|
440
|
+
for (const entry of entries) {
|
|
441
|
+
const fullPath = join(dir, entry);
|
|
442
|
+
const stat = statSync(fullPath);
|
|
443
|
+
if (stat.isDirectory()) {
|
|
444
|
+
walkDir(fullPath);
|
|
445
|
+
}
|
|
446
|
+
else if (entry.endsWith('.yaml')) {
|
|
447
|
+
// Convert mapping path back to source path
|
|
448
|
+
const relPath = relative(mappingsDir, fullPath);
|
|
449
|
+
// Remove .yaml extension
|
|
450
|
+
const sourcePath = relPath.slice(0, -5);
|
|
451
|
+
files.push(sourcePath);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
walkDir(mappingsDir);
|
|
456
|
+
return { success: true, data: files.sort() };
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
return {
|
|
460
|
+
success: false,
|
|
461
|
+
error: `Failed to list mappings: ${error instanceof Error ? error.message : String(error)}`,
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
// ============================================================================
|
|
466
|
+
// Cache Management
|
|
467
|
+
// ============================================================================
|
|
468
|
+
/**
|
|
469
|
+
* Get cached hash for a file.
|
|
470
|
+
*/
|
|
471
|
+
export function getCachedHash(filePath, projectRoot = process.cwd()) {
|
|
472
|
+
const cacheDir = getCacheDir(projectRoot);
|
|
473
|
+
const cacheFile = join(cacheDir, `${sha256(filePath)}.hash`);
|
|
474
|
+
try {
|
|
475
|
+
if (existsSync(cacheFile)) {
|
|
476
|
+
return readFileSync(cacheFile, 'utf8').trim();
|
|
477
|
+
}
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
catch {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Set cached hash for a file.
|
|
486
|
+
*/
|
|
487
|
+
export function setCachedHash(filePath, hash, projectRoot = process.cwd()) {
|
|
488
|
+
const cacheDir = getCacheDir(projectRoot);
|
|
489
|
+
const cacheFile = join(cacheDir, `${sha256(filePath)}.hash`);
|
|
490
|
+
try {
|
|
491
|
+
if (!existsSync(cacheDir)) {
|
|
492
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
493
|
+
}
|
|
494
|
+
writeFileSync(cacheFile, hash);
|
|
495
|
+
return { success: true };
|
|
496
|
+
}
|
|
497
|
+
catch (error) {
|
|
498
|
+
return {
|
|
499
|
+
success: false,
|
|
500
|
+
error: `Failed to cache hash: ${error instanceof Error ? error.message : String(error)}`,
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Clear the hash cache.
|
|
506
|
+
*/
|
|
507
|
+
export function clearCache(projectRoot = process.cwd()) {
|
|
508
|
+
const cacheDir = getCacheDir(projectRoot);
|
|
509
|
+
try {
|
|
510
|
+
if (existsSync(cacheDir)) {
|
|
511
|
+
const entries = readdirSync(cacheDir);
|
|
512
|
+
for (const entry of entries) {
|
|
513
|
+
if (entry !== '.gitignore') {
|
|
514
|
+
unlinkSync(join(cacheDir, entry));
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return { success: true };
|
|
519
|
+
}
|
|
520
|
+
catch (error) {
|
|
521
|
+
return {
|
|
522
|
+
success: false,
|
|
523
|
+
error: `Failed to clear cache: ${error instanceof Error ? error.message : String(error)}`,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
// ============================================================================
|
|
528
|
+
// High-Level Storage Interface
|
|
529
|
+
// ============================================================================
|
|
530
|
+
/**
|
|
531
|
+
* Storage class providing a high-level interface for prov persistence.
|
|
532
|
+
*/
|
|
533
|
+
export class Storage {
|
|
534
|
+
projectRoot;
|
|
535
|
+
constructor(options = {}) {
|
|
536
|
+
this.projectRoot = options.projectRoot ?? process.cwd();
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Check if prov is initialized.
|
|
540
|
+
*/
|
|
541
|
+
isInitialized() {
|
|
542
|
+
return isInitialized(this.projectRoot);
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Initialize prov directory structure.
|
|
546
|
+
*/
|
|
547
|
+
initialize() {
|
|
548
|
+
return initialize(this.projectRoot);
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Load the intent graph.
|
|
552
|
+
*/
|
|
553
|
+
loadGraph() {
|
|
554
|
+
return loadGraph(this.projectRoot);
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Save the intent graph.
|
|
558
|
+
*/
|
|
559
|
+
saveGraph(graph) {
|
|
560
|
+
return saveGraph(graph, this.projectRoot);
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Load a file mapping.
|
|
564
|
+
*/
|
|
565
|
+
loadMapping(sourcePath) {
|
|
566
|
+
return loadMapping(sourcePath, this.projectRoot);
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Save a file mapping.
|
|
570
|
+
*/
|
|
571
|
+
saveMapping(mapping) {
|
|
572
|
+
return saveMapping(mapping, this.projectRoot);
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Delete a file mapping.
|
|
576
|
+
*/
|
|
577
|
+
deleteMapping(sourcePath) {
|
|
578
|
+
return deleteMapping(sourcePath, this.projectRoot);
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* List all file mappings.
|
|
582
|
+
*/
|
|
583
|
+
listMappings() {
|
|
584
|
+
return listMappings(this.projectRoot);
|
|
585
|
+
}
|
|
586
|
+
/**
|
|
587
|
+
* Get cached hash for a file.
|
|
588
|
+
*/
|
|
589
|
+
getCachedHash(filePath) {
|
|
590
|
+
return getCachedHash(filePath, this.projectRoot);
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Set cached hash for a file.
|
|
594
|
+
*/
|
|
595
|
+
setCachedHash(filePath, hash) {
|
|
596
|
+
return setCachedHash(filePath, hash, this.projectRoot);
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Clear the cache.
|
|
600
|
+
*/
|
|
601
|
+
clearCache() {
|
|
602
|
+
return clearCache(this.projectRoot);
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Execute a function with a write lock.
|
|
606
|
+
*/
|
|
607
|
+
async withLock(fn) {
|
|
608
|
+
return withLock(this.projectRoot, fn);
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Get path utilities.
|
|
612
|
+
*/
|
|
613
|
+
get paths() {
|
|
614
|
+
return {
|
|
615
|
+
provDir: getProvDir(this.projectRoot),
|
|
616
|
+
graphPath: getGraphPath(this.projectRoot),
|
|
617
|
+
mappingsDir: getMappingsDir(this.projectRoot),
|
|
618
|
+
cacheDir: getCacheDir(this.projectRoot),
|
|
619
|
+
getMappingPath: (sourcePath) => getMappingPath(sourcePath, this.projectRoot),
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../src/storage.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|