@principal-ai/principal-view-core 0.16.0 → 0.17.0
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/dist/discovery/CanvasDiscovery.d.ts +7 -30
- package/dist/discovery/CanvasDiscovery.d.ts.map +1 -1
- package/dist/discovery/CanvasDiscovery.js +80 -149
- package/dist/discovery/CanvasDiscovery.js.map +1 -1
- package/package.json +1 -1
- package/src/discovery/CanvasDiscovery.test.ts +0 -207
- package/src/discovery/CanvasDiscovery.ts +96 -184
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Unified discovery system for canvas and execution files in a package-aware way
|
|
3
3
|
*/
|
|
4
4
|
import type { FileTree } from '@principal-ai/repository-abstraction';
|
|
5
|
-
import type {
|
|
5
|
+
import type { CanvasDiscoveryResult, DiscoveryOptions } from './types';
|
|
6
6
|
/**
|
|
7
7
|
* Unified discovery system for canvas and execution files in a package-aware way
|
|
8
8
|
*
|
|
@@ -27,7 +27,6 @@ import type { DiscoveredCanvas, DiscoveredExecution, CanvasDiscoveryResult, Disc
|
|
|
27
27
|
*/
|
|
28
28
|
export declare class CanvasDiscovery {
|
|
29
29
|
private static readonly CANVAS_DIR;
|
|
30
|
-
private static readonly EXECUTIONS_DIR;
|
|
31
30
|
private static readonly WORKFLOW_EXTENSION;
|
|
32
31
|
private packageModule;
|
|
33
32
|
private packageCache;
|
|
@@ -40,22 +39,6 @@ export declare class CanvasDiscovery {
|
|
|
40
39
|
* @returns Discovery result with canvases, executions, storyboards, and errors
|
|
41
40
|
*/
|
|
42
41
|
discover(fileTree: FileTree, options?: DiscoveryOptions): Promise<CanvasDiscoveryResult>;
|
|
43
|
-
/**
|
|
44
|
-
* Find canvas file for a given execution
|
|
45
|
-
*
|
|
46
|
-
* @param execution - Discovered execution
|
|
47
|
-
* @param canvases - Array of discovered canvases (from discover())
|
|
48
|
-
* @returns Matching canvas or null
|
|
49
|
-
*/
|
|
50
|
-
findCanvasForExecution(execution: DiscoveredExecution, canvases: DiscoveredCanvas[]): DiscoveredCanvas | null;
|
|
51
|
-
/**
|
|
52
|
-
* Find execution files for a given canvas
|
|
53
|
-
*
|
|
54
|
-
* @param canvas - Discovered canvas
|
|
55
|
-
* @param executions - Array of discovered executions (from discover())
|
|
56
|
-
* @returns Array of matching executions
|
|
57
|
-
*/
|
|
58
|
-
findExecutionsForCanvas(canvas: DiscoveredCanvas, executions: DiscoveredExecution[]): DiscoveredExecution[];
|
|
59
42
|
/**
|
|
60
43
|
* Clear package cache (useful when file tree changes)
|
|
61
44
|
*/
|
|
@@ -68,6 +51,10 @@ export declare class CanvasDiscovery {
|
|
|
68
51
|
* Discover workflows within a storyboard folder
|
|
69
52
|
*/
|
|
70
53
|
private discoverWorkflowsInStoryboard;
|
|
54
|
+
/**
|
|
55
|
+
* Discover execution files co-located in a workflow directory
|
|
56
|
+
*/
|
|
57
|
+
private discoverExecutionsInWorkflowDir;
|
|
71
58
|
/**
|
|
72
59
|
* Discover packages with caching by fileTree SHA
|
|
73
60
|
*/
|
|
@@ -83,24 +70,14 @@ export declare class CanvasDiscovery {
|
|
|
83
70
|
/**
|
|
84
71
|
* Discover execution files in the file tree
|
|
85
72
|
*/
|
|
86
|
-
private discoverExecutionFiles;
|
|
87
73
|
/**
|
|
88
|
-
* Check if path is in .principal-views directory
|
|
74
|
+
* Check if path is in .principal-views directory (directly, not in subdirectories)
|
|
89
75
|
*/
|
|
90
76
|
private isInCanvasDir;
|
|
91
77
|
/**
|
|
92
78
|
* Parse canvas file path to extract metadata
|
|
93
79
|
*/
|
|
94
80
|
private parseCanvasPath;
|
|
95
|
-
/**
|
|
96
|
-
* Check if path is in __executions__ directory
|
|
97
|
-
*/
|
|
98
|
-
private isInExecutionsDir;
|
|
99
|
-
/**
|
|
100
|
-
* Parse execution file path to extract metadata
|
|
101
|
-
* Only .otel.json files are supported
|
|
102
|
-
*/
|
|
103
|
-
private parseExecutionPath;
|
|
104
81
|
/**
|
|
105
82
|
* Find package for a given path using longest-path matching
|
|
106
83
|
*/
|
|
@@ -114,7 +91,7 @@ export declare class CanvasDiscovery {
|
|
|
114
91
|
*/
|
|
115
92
|
private compareByPackageThenName;
|
|
116
93
|
/**
|
|
117
|
-
* Detect legacy flat structures and add deprecation errors
|
|
94
|
+
* Detect legacy flat canvas structures and add deprecation errors
|
|
118
95
|
*/
|
|
119
96
|
private detectLegacyStructures;
|
|
120
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/CanvasDiscovery.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"CanvasDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/CanvasDiscovery.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,KAAK,EASV,qBAAqB,EACrB,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAE9D,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAA0C;;IAM9D;;;;;;OAMG;IACG,QAAQ,CACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC;IAoCjC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;YACW,mBAAmB;IAmFjC;;OAEG;YACW,6BAA6B;IA+E3C;;OAEG;YACW,+BAA+B;IAmE7C;;OAEG;YACW,yBAAyB;IAgBvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;YACW,mBAAmB;IAkEjC;;OAEG;IACH;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA0B/B"}
|
|
@@ -45,44 +45,24 @@ class CanvasDiscovery {
|
|
|
45
45
|
const packageMap = this.buildPackageMap(packages);
|
|
46
46
|
// 3. Discover canvas files
|
|
47
47
|
const canvases = await this.discoverCanvasFiles(fileTree, packageMap, options, errors);
|
|
48
|
-
// 4. Discover
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
// 4. Discover storyboards (hierarchical organization)
|
|
49
|
+
// Note: Executions are discovered as part of workflows, not separately
|
|
50
|
+
const storyboards = await this.discoverStoryboards(fileTree, packageMap, canvases, options, errors);
|
|
51
|
+
// 5. Collect all executions from workflows for backward compatibility
|
|
52
|
+
const executions = [];
|
|
53
|
+
for (const storyboard of storyboards) {
|
|
54
|
+
for (const workflow of storyboard.workflows) {
|
|
55
|
+
executions.push(...workflow.executions);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 6. Detect legacy flat canvas structures and add deprecation errors
|
|
59
|
+
this.detectLegacyStructures(canvases, storyboards, errors);
|
|
54
60
|
// 7. Sort results
|
|
55
61
|
canvases.sort(this.compareByPackageThenName);
|
|
56
62
|
executions.sort(this.compareByPackageThenName);
|
|
57
63
|
storyboards.sort(this.compareByPackageThenName);
|
|
58
64
|
return { canvases, executions, storyboards, errors, warnings };
|
|
59
65
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Find canvas file for a given execution
|
|
62
|
-
*
|
|
63
|
-
* @param execution - Discovered execution
|
|
64
|
-
* @param canvases - Array of discovered canvases (from discover())
|
|
65
|
-
* @returns Matching canvas or null
|
|
66
|
-
*/
|
|
67
|
-
findCanvasForExecution(execution, canvases) {
|
|
68
|
-
// Find canvas with matching basename and scope
|
|
69
|
-
return canvases.find(canvas => canvas.basename === execution.canvasBasename &&
|
|
70
|
-
canvas.scope === execution.scope &&
|
|
71
|
-
canvas.packageName === execution.packageName) || null;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Find execution files for a given canvas
|
|
75
|
-
*
|
|
76
|
-
* @param canvas - Discovered canvas
|
|
77
|
-
* @param executions - Array of discovered executions (from discover())
|
|
78
|
-
* @returns Array of matching executions
|
|
79
|
-
*/
|
|
80
|
-
findExecutionsForCanvas(canvas, executions) {
|
|
81
|
-
// Find all executions with matching basename and scope
|
|
82
|
-
return executions.filter(execution => execution.canvasBasename === canvas.basename &&
|
|
83
|
-
execution.scope === canvas.scope &&
|
|
84
|
-
execution.packageName === canvas.packageName);
|
|
85
|
-
}
|
|
86
66
|
/**
|
|
87
67
|
* Clear package cache (useful when file tree changes)
|
|
88
68
|
*/
|
|
@@ -92,7 +72,7 @@ class CanvasDiscovery {
|
|
|
92
72
|
/**
|
|
93
73
|
* Discover storyboards (hierarchical organization of canvas + workflows + executions)
|
|
94
74
|
*/
|
|
95
|
-
async discoverStoryboards(fileTree, packageMap, canvases,
|
|
75
|
+
async discoverStoryboards(fileTree, packageMap, canvases, options, errors) {
|
|
96
76
|
const storyboards = [];
|
|
97
77
|
// Build a map of directories to check for storyboards
|
|
98
78
|
const storyboardDirs = new Map();
|
|
@@ -115,8 +95,8 @@ class CanvasDiscovery {
|
|
|
115
95
|
// For each potential storyboard directory, check if it has a canvas
|
|
116
96
|
for (const [storyboardPath, storyboardNames] of storyboardDirs) {
|
|
117
97
|
for (const storyboardName of storyboardNames) {
|
|
118
|
-
// Skip __executions__ directory
|
|
119
|
-
if (storyboardName ===
|
|
98
|
+
// Skip __executions__ directory (legacy pattern, should not exist)
|
|
99
|
+
if (storyboardName === '__executions__')
|
|
120
100
|
continue;
|
|
121
101
|
// Find canvas for this storyboard
|
|
122
102
|
const storyboardCanvas = canvases.find(c => {
|
|
@@ -126,7 +106,7 @@ class CanvasDiscovery {
|
|
|
126
106
|
if (!storyboardCanvas)
|
|
127
107
|
continue;
|
|
128
108
|
// This is a storyboard! Now discover workflows
|
|
129
|
-
const workflows = await this.discoverWorkflowsInStoryboard(fileTree, storyboardPath, storyboardName, packageMap,
|
|
109
|
+
const workflows = await this.discoverWorkflowsInStoryboard(fileTree, storyboardPath, storyboardName, packageMap, options, errors);
|
|
130
110
|
// Determine package context
|
|
131
111
|
const packageInfo = this.findPackageForPath(storyboardPath, packageMap);
|
|
132
112
|
// Generate unique ID
|
|
@@ -153,7 +133,7 @@ class CanvasDiscovery {
|
|
|
153
133
|
/**
|
|
154
134
|
* Discover workflows within a storyboard folder
|
|
155
135
|
*/
|
|
156
|
-
async discoverWorkflowsInStoryboard(fileTree, storyboardPath, storyboardName, packageMap,
|
|
136
|
+
async discoverWorkflowsInStoryboard(fileTree, storyboardPath, storyboardName, packageMap, options, errors) {
|
|
157
137
|
const workflows = [];
|
|
158
138
|
// Find all workflow files in this storyboard
|
|
159
139
|
for (const file of fileTree.allFiles) {
|
|
@@ -176,11 +156,8 @@ class CanvasDiscovery {
|
|
|
176
156
|
const id = packageInfo
|
|
177
157
|
? `${packageInfo.packageData.name}/${storyboardName}/${basename}`
|
|
178
158
|
: `${storyboardName}/${basename}`;
|
|
179
|
-
//
|
|
180
|
-
const workflowExecutions =
|
|
181
|
-
const execDir = e.path.split('/').slice(0, -1).join('/');
|
|
182
|
-
return execDir === workflowDir;
|
|
183
|
-
});
|
|
159
|
+
// Discover executions co-located in the same directory as workflow.json
|
|
160
|
+
const workflowExecutions = await this.discoverExecutionsInWorkflowDir(fileTree, workflowDir, packageMap, options, errors);
|
|
184
161
|
// Create discovered workflow
|
|
185
162
|
let workflow = {
|
|
186
163
|
id,
|
|
@@ -213,6 +190,62 @@ class CanvasDiscovery {
|
|
|
213
190
|
}
|
|
214
191
|
return workflows;
|
|
215
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Discover execution files co-located in a workflow directory
|
|
195
|
+
*/
|
|
196
|
+
async discoverExecutionsInWorkflowDir(fileTree, workflowDir, packageMap, options, errors) {
|
|
197
|
+
const executions = [];
|
|
198
|
+
// Find all .otel.json files in the workflow directory
|
|
199
|
+
for (const file of fileTree.allFiles) {
|
|
200
|
+
const path = file.relativePath || file.path || '';
|
|
201
|
+
// Check if file is in this workflow directory
|
|
202
|
+
const fileDir = path.split('/').slice(0, -1).join('/');
|
|
203
|
+
if (fileDir !== workflowDir)
|
|
204
|
+
continue;
|
|
205
|
+
// Check if it's an execution file (.otel.json)
|
|
206
|
+
if (!path.endsWith('.otel.json'))
|
|
207
|
+
continue;
|
|
208
|
+
// Extract execution metadata
|
|
209
|
+
const filename = path.split('/').pop();
|
|
210
|
+
if (!filename)
|
|
211
|
+
continue;
|
|
212
|
+
const basename = filename.replace('.otel.json', '');
|
|
213
|
+
// Determine package context
|
|
214
|
+
const packageInfo = this.findPackageForPath(path, packageMap);
|
|
215
|
+
// Generate unique ID (workflow-scoped)
|
|
216
|
+
const workflowBasename = workflowDir.split('/').pop() || '';
|
|
217
|
+
const id = packageInfo
|
|
218
|
+
? `${packageInfo.packageData.name}/${workflowBasename}/${basename}`
|
|
219
|
+
: `${workflowBasename}/${basename}`;
|
|
220
|
+
// Create discovered execution
|
|
221
|
+
let execution = {
|
|
222
|
+
id,
|
|
223
|
+
name: this.toDisplayName(basename),
|
|
224
|
+
path,
|
|
225
|
+
basename,
|
|
226
|
+
type: 'otel',
|
|
227
|
+
canvasBasename: basename,
|
|
228
|
+
packageName: packageInfo?.packageData.name,
|
|
229
|
+
packagePath: packageInfo?.packageData.path,
|
|
230
|
+
scope: packageInfo ? 'package' : 'root',
|
|
231
|
+
};
|
|
232
|
+
// Optionally load content
|
|
233
|
+
if (options.includeContent && options.fileReader) {
|
|
234
|
+
try {
|
|
235
|
+
const content = await options.fileReader(path);
|
|
236
|
+
execution = { ...execution, content: JSON.parse(content) };
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
errors.push({
|
|
240
|
+
path,
|
|
241
|
+
error: `Failed to parse execution content: ${error.message}`,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
executions.push(execution);
|
|
246
|
+
}
|
|
247
|
+
return executions;
|
|
248
|
+
}
|
|
216
249
|
/**
|
|
217
250
|
* Discover packages with caching by fileTree SHA
|
|
218
251
|
*/
|
|
@@ -295,54 +328,8 @@ class CanvasDiscovery {
|
|
|
295
328
|
/**
|
|
296
329
|
* Discover execution files in the file tree
|
|
297
330
|
*/
|
|
298
|
-
async discoverExecutionFiles(fileTree, packageMap, options, errors) {
|
|
299
|
-
const executions = [];
|
|
300
|
-
for (const file of fileTree.allFiles) {
|
|
301
|
-
const path = file.relativePath || file.path || '';
|
|
302
|
-
// Check if in __executions__ directory
|
|
303
|
-
if (!this.isInExecutionsDir(path))
|
|
304
|
-
continue;
|
|
305
|
-
// Extract execution metadata
|
|
306
|
-
const metadata = this.parseExecutionPath(path);
|
|
307
|
-
if (!metadata)
|
|
308
|
-
continue;
|
|
309
|
-
// Determine package context
|
|
310
|
-
const packageInfo = this.findPackageForPath(path, packageMap);
|
|
311
|
-
// Generate unique ID
|
|
312
|
-
const id = packageInfo
|
|
313
|
-
? `${packageInfo.packageData.name}/${metadata.basename}`
|
|
314
|
-
: metadata.basename;
|
|
315
|
-
// Create discovered execution
|
|
316
|
-
let execution = {
|
|
317
|
-
id,
|
|
318
|
-
name: this.toDisplayName(metadata.basename),
|
|
319
|
-
path,
|
|
320
|
-
basename: metadata.basename,
|
|
321
|
-
type: metadata.type,
|
|
322
|
-
canvasBasename: metadata.canvasBasename,
|
|
323
|
-
packageName: packageInfo?.packageData.name,
|
|
324
|
-
packagePath: packageInfo?.packageData.path,
|
|
325
|
-
scope: packageInfo ? 'package' : 'root',
|
|
326
|
-
};
|
|
327
|
-
// Optionally load content
|
|
328
|
-
if (options.includeContent && options.fileReader) {
|
|
329
|
-
try {
|
|
330
|
-
const content = await options.fileReader(path);
|
|
331
|
-
execution = { ...execution, content: JSON.parse(content) };
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
errors.push({
|
|
335
|
-
path,
|
|
336
|
-
error: `Failed to parse execution content: ${error.message}`,
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
executions.push(execution);
|
|
341
|
-
}
|
|
342
|
-
return executions;
|
|
343
|
-
}
|
|
344
331
|
/**
|
|
345
|
-
* Check if path is in .principal-views directory
|
|
332
|
+
* Check if path is in .principal-views directory (directly, not in subdirectories)
|
|
346
333
|
*/
|
|
347
334
|
isInCanvasDir(path) {
|
|
348
335
|
const parts = path.split('/');
|
|
@@ -353,8 +340,8 @@ class CanvasDiscovery {
|
|
|
353
340
|
// Package: packages/core/.principal-views/file.canvas
|
|
354
341
|
if (parts.includes(CanvasDiscovery.CANVAS_DIR)) {
|
|
355
342
|
const idx = parts.indexOf(CanvasDiscovery.CANVAS_DIR);
|
|
356
|
-
//
|
|
357
|
-
return
|
|
343
|
+
// Must be directly in .principal-views/, not in a subdirectory
|
|
344
|
+
return parts.length === idx + 2;
|
|
358
345
|
}
|
|
359
346
|
return false;
|
|
360
347
|
}
|
|
@@ -381,40 +368,6 @@ class CanvasDiscovery {
|
|
|
381
368
|
}
|
|
382
369
|
return null;
|
|
383
370
|
}
|
|
384
|
-
/**
|
|
385
|
-
* Check if path is in __executions__ directory
|
|
386
|
-
*/
|
|
387
|
-
isInExecutionsDir(path) {
|
|
388
|
-
const parts = path.split('/');
|
|
389
|
-
// Must contain __executions__ directory
|
|
390
|
-
if (!parts.includes(CanvasDiscovery.EXECUTIONS_DIR))
|
|
391
|
-
return false;
|
|
392
|
-
// Valid patterns:
|
|
393
|
-
// 1. .principal-views/__executions__/file.otel.json
|
|
394
|
-
// 2. packages/core/.principal-views/__executions__/file.otel.json
|
|
395
|
-
// 3. __executions__/file.otel.json (root level)
|
|
396
|
-
return true;
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Parse execution file path to extract metadata
|
|
400
|
-
* Only .otel.json files are supported
|
|
401
|
-
*/
|
|
402
|
-
parseExecutionPath(path) {
|
|
403
|
-
const filename = path.split('/').pop();
|
|
404
|
-
if (!filename)
|
|
405
|
-
return null;
|
|
406
|
-
// Pattern: name.otel.json
|
|
407
|
-
const match = filename.match(/^(.+)\.otel\.json$/);
|
|
408
|
-
if (match) {
|
|
409
|
-
const basename = match[1];
|
|
410
|
-
return {
|
|
411
|
-
basename,
|
|
412
|
-
type: 'otel',
|
|
413
|
-
canvasBasename: basename, // Same as basename for linking
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
return null;
|
|
417
|
-
}
|
|
418
371
|
/**
|
|
419
372
|
* Find package for a given path using longest-path matching
|
|
420
373
|
*/
|
|
@@ -460,20 +413,11 @@ class CanvasDiscovery {
|
|
|
460
413
|
return a.name.localeCompare(b.name);
|
|
461
414
|
}
|
|
462
415
|
/**
|
|
463
|
-
* Detect legacy flat structures and add deprecation errors
|
|
416
|
+
* Detect legacy flat canvas structures and add deprecation errors
|
|
464
417
|
*/
|
|
465
|
-
detectLegacyStructures(canvases,
|
|
418
|
+
detectLegacyStructures(canvases, storyboards, errors) {
|
|
466
419
|
// Build a set of storyboard canvas IDs for quick lookup
|
|
467
420
|
const storyboardCanvasIds = new Set(storyboards.map(s => s.canvas.id));
|
|
468
|
-
// Build a set of execution IDs that are part of storyboards
|
|
469
|
-
const storyboardExecutionIds = new Set();
|
|
470
|
-
for (const storyboard of storyboards) {
|
|
471
|
-
for (const workflow of storyboard.workflows) {
|
|
472
|
-
for (const execution of workflow.executions) {
|
|
473
|
-
storyboardExecutionIds.add(execution.id);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
421
|
// Check for legacy flat canvases (not part of any storyboard)
|
|
478
422
|
for (const canvas of canvases) {
|
|
479
423
|
if (!storyboardCanvasIds.has(canvas.id)) {
|
|
@@ -490,22 +434,9 @@ class CanvasDiscovery {
|
|
|
490
434
|
}
|
|
491
435
|
}
|
|
492
436
|
}
|
|
493
|
-
// Check for legacy executions in __executions__/ directory
|
|
494
|
-
for (const execution of executions) {
|
|
495
|
-
if (!storyboardExecutionIds.has(execution.id)) {
|
|
496
|
-
// Check if this execution is in __executions__/ directory
|
|
497
|
-
if (execution.path.includes(`/${CanvasDiscovery.EXECUTIONS_DIR}/`)) {
|
|
498
|
-
errors.push({
|
|
499
|
-
path: execution.path,
|
|
500
|
-
error: 'DEPRECATED: Legacy __executions__/ directory is no longer supported. Migrate executions to workflow folders within storyboards immediately. See migration guide at docs/MIGRATION_GUIDE.md for details.',
|
|
501
|
-
});
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
437
|
}
|
|
506
438
|
}
|
|
507
439
|
CanvasDiscovery.CANVAS_DIR = '.principal-views';
|
|
508
|
-
CanvasDiscovery.EXECUTIONS_DIR = '__executions__';
|
|
509
440
|
CanvasDiscovery.WORKFLOW_EXTENSION = '.workflow.json';
|
|
510
441
|
export { CanvasDiscovery };
|
|
511
442
|
//# sourceMappingURL=CanvasDiscovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasDiscovery.js","sourceRoot":"","sources":["../../src/discovery/CanvasDiscovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasDiscovery.js","sourceRoot":"","sources":["../../src/discovery/CanvasDiscovery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -133,213 +133,6 @@ describe('CanvasDiscovery', () => {
|
|
|
133
133
|
expect(result.errors.some(e => e.path === '.principal-views/bad.canvas' && e.error.includes('DEPRECATED'))).toBe(true);
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
-
test('ignores canvas files in __executions__ directory', async () => {
|
|
137
|
-
const fileTree = createMockFileTree([
|
|
138
|
-
'.principal-views/__executions__/should-ignore.canvas',
|
|
139
|
-
'.principal-views/should-include.canvas',
|
|
140
|
-
]);
|
|
141
|
-
|
|
142
|
-
const result = await discovery.discover(fileTree);
|
|
143
|
-
|
|
144
|
-
expect(result.canvases).toHaveLength(1);
|
|
145
|
-
expect(result.canvases[0].basename).toBe('should-include');
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
describe('discover() - Execution Files', () => {
|
|
150
|
-
test('discovers execution files in .principal-views/__executions__', async () => {
|
|
151
|
-
const fileTree = createMockFileTree([
|
|
152
|
-
'.principal-views/__executions__/test-run.otel.json',
|
|
153
|
-
'.principal-views/__executions__/api-test.otel.json',
|
|
154
|
-
]);
|
|
155
|
-
|
|
156
|
-
const result = await discovery.discover(fileTree);
|
|
157
|
-
|
|
158
|
-
expect(result.executions).toHaveLength(2);
|
|
159
|
-
expect(result.executions[0]).toMatchObject({
|
|
160
|
-
id: 'api-test',
|
|
161
|
-
type: 'otel',
|
|
162
|
-
canvasBasename: 'api-test',
|
|
163
|
-
scope: 'root',
|
|
164
|
-
});
|
|
165
|
-
expect(result.executions[1]).toMatchObject({
|
|
166
|
-
id: 'test-run',
|
|
167
|
-
type: 'otel',
|
|
168
|
-
canvasBasename: 'test-run',
|
|
169
|
-
scope: 'root',
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
test('discovers execution files in packages with package prefix', async () => {
|
|
174
|
-
const fileTree = createMockFileTree([
|
|
175
|
-
'packages/core/.principal-views/__executions__/auth.otel.json',
|
|
176
|
-
'packages/api/.principal-views/__executions__/request.otel.json',
|
|
177
|
-
'packages/core/package.json',
|
|
178
|
-
'packages/api/package.json',
|
|
179
|
-
]);
|
|
180
|
-
|
|
181
|
-
const result = await discovery.discover(fileTree, {
|
|
182
|
-
fileReader: async (path) => {
|
|
183
|
-
if (path.includes('core/package.json')) {
|
|
184
|
-
return JSON.stringify({ name: 'core' });
|
|
185
|
-
}
|
|
186
|
-
if (path.includes('api/package.json')) {
|
|
187
|
-
return JSON.stringify({ name: 'api' });
|
|
188
|
-
}
|
|
189
|
-
return '';
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
expect(result.executions).toHaveLength(2);
|
|
194
|
-
expect(result.executions.map(e => e.id)).toEqual([
|
|
195
|
-
'api/request',
|
|
196
|
-
'core/auth',
|
|
197
|
-
]);
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
test('discovers execution files in root __executions__', async () => {
|
|
201
|
-
const fileTree = createMockFileTree([
|
|
202
|
-
'__executions__/integration-test.otel.json',
|
|
203
|
-
]);
|
|
204
|
-
|
|
205
|
-
const result = await discovery.discover(fileTree);
|
|
206
|
-
|
|
207
|
-
expect(result.executions).toHaveLength(1);
|
|
208
|
-
expect(result.executions[0]).toMatchObject({
|
|
209
|
-
id: 'integration-test',
|
|
210
|
-
scope: 'root',
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
test('only discovers .otel.json execution files', async () => {
|
|
215
|
-
const fileTree = createMockFileTree([
|
|
216
|
-
'__executions__/test.otel.json',
|
|
217
|
-
'__executions__/test.execution.json',
|
|
218
|
-
'__executions__/test.events.json',
|
|
219
|
-
]);
|
|
220
|
-
|
|
221
|
-
const result = await discovery.discover(fileTree);
|
|
222
|
-
|
|
223
|
-
// Only .otel.json files should be discovered
|
|
224
|
-
expect(result.executions).toHaveLength(1);
|
|
225
|
-
expect(result.executions[0]).toMatchObject({
|
|
226
|
-
id: 'test',
|
|
227
|
-
type: 'otel',
|
|
228
|
-
canvasBasename: 'test',
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
describe('findCanvasForExecution()', () => {
|
|
234
|
-
test('finds matching canvas in same scope', async () => {
|
|
235
|
-
const fileTree = createMockFileTree([
|
|
236
|
-
'.principal-views/test-flow.otel.canvas',
|
|
237
|
-
'.principal-views/__executions__/test-flow.otel.json',
|
|
238
|
-
]);
|
|
239
|
-
|
|
240
|
-
const result = await discovery.discover(fileTree);
|
|
241
|
-
const execution = result.executions[0];
|
|
242
|
-
|
|
243
|
-
const canvas = discovery.findCanvasForExecution(execution, result.canvases);
|
|
244
|
-
|
|
245
|
-
expect(canvas).toBeTruthy();
|
|
246
|
-
expect(canvas?.basename).toBe('test-flow');
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
test('finds matching canvas in same package', async () => {
|
|
250
|
-
const fileTree = createMockFileTree([
|
|
251
|
-
'packages/core/.principal-views/auth.otel.canvas',
|
|
252
|
-
'packages/core/.principal-views/__executions__/auth.otel.json',
|
|
253
|
-
'packages/core/package.json',
|
|
254
|
-
]);
|
|
255
|
-
|
|
256
|
-
const result = await discovery.discover(fileTree, {
|
|
257
|
-
fileReader: async (path) => {
|
|
258
|
-
if (path.endsWith('package.json')) {
|
|
259
|
-
return JSON.stringify({ name: 'core' });
|
|
260
|
-
}
|
|
261
|
-
return '';
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
const execution = result.executions[0];
|
|
266
|
-
const canvas = discovery.findCanvasForExecution(execution, result.canvases);
|
|
267
|
-
|
|
268
|
-
expect(canvas).toBeTruthy();
|
|
269
|
-
expect(canvas?.packageName).toBe('core');
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
test('does not match canvas in different package', async () => {
|
|
273
|
-
const fileTree = createMockFileTree([
|
|
274
|
-
'packages/core/.principal-views/auth.canvas',
|
|
275
|
-
'packages/api/.principal-views/__executions__/auth.otel.json',
|
|
276
|
-
'packages/core/package.json',
|
|
277
|
-
'packages/api/package.json',
|
|
278
|
-
]);
|
|
279
|
-
|
|
280
|
-
const result = await discovery.discover(fileTree, {
|
|
281
|
-
fileReader: async (path) => {
|
|
282
|
-
if (path.includes('core/package.json')) {
|
|
283
|
-
return JSON.stringify({ name: 'core' });
|
|
284
|
-
}
|
|
285
|
-
if (path.includes('api/package.json')) {
|
|
286
|
-
return JSON.stringify({ name: 'api' });
|
|
287
|
-
}
|
|
288
|
-
return '';
|
|
289
|
-
},
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
const execution = result.executions[0];
|
|
293
|
-
const canvas = discovery.findCanvasForExecution(execution, result.canvases);
|
|
294
|
-
|
|
295
|
-
// Should not find match (different packages)
|
|
296
|
-
expect(canvas).toBeNull();
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
describe('findExecutionsForCanvas()', () => {
|
|
301
|
-
test('finds all executions for a canvas', async () => {
|
|
302
|
-
const fileTree = createMockFileTree([
|
|
303
|
-
'.principal-views/test-flow.otel.canvas',
|
|
304
|
-
'.principal-views/__executions__/test-flow.otel.json',
|
|
305
|
-
]);
|
|
306
|
-
|
|
307
|
-
const result = await discovery.discover(fileTree);
|
|
308
|
-
const canvas = result.canvases[0];
|
|
309
|
-
|
|
310
|
-
const executions = discovery.findExecutionsForCanvas(canvas, result.executions);
|
|
311
|
-
|
|
312
|
-
expect(executions).toHaveLength(1);
|
|
313
|
-
expect(executions[0].canvasBasename).toBe('test-flow');
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
test('only returns executions in same package', async () => {
|
|
317
|
-
const fileTree = createMockFileTree([
|
|
318
|
-
'packages/core/.principal-views/auth.canvas',
|
|
319
|
-
'packages/core/.principal-views/__executions__/auth.otel.json',
|
|
320
|
-
'packages/api/.principal-views/__executions__/auth.otel.json',
|
|
321
|
-
'packages/core/package.json',
|
|
322
|
-
'packages/api/package.json',
|
|
323
|
-
]);
|
|
324
|
-
|
|
325
|
-
const result = await discovery.discover(fileTree, {
|
|
326
|
-
fileReader: async (path) => {
|
|
327
|
-
if (path.includes('core/package.json')) {
|
|
328
|
-
return JSON.stringify({ name: 'core' });
|
|
329
|
-
}
|
|
330
|
-
if (path.includes('api/package.json')) {
|
|
331
|
-
return JSON.stringify({ name: 'api' });
|
|
332
|
-
}
|
|
333
|
-
return '';
|
|
334
|
-
},
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
const canvas = result.canvases.find(c => c.packageName === 'core')!;
|
|
338
|
-
const executions = discovery.findExecutionsForCanvas(canvas, result.executions);
|
|
339
|
-
|
|
340
|
-
expect(executions).toHaveLength(1);
|
|
341
|
-
expect(executions[0].packageName).toBe('core');
|
|
342
|
-
});
|
|
343
136
|
});
|
|
344
137
|
|
|
345
138
|
describe('caching', () => {
|
|
@@ -43,7 +43,6 @@ import type {
|
|
|
43
43
|
*/
|
|
44
44
|
export class CanvasDiscovery {
|
|
45
45
|
private static readonly CANVAS_DIR = '.principal-views';
|
|
46
|
-
private static readonly EXECUTIONS_DIR = '__executions__';
|
|
47
46
|
private static readonly WORKFLOW_EXTENSION = '.workflow.json';
|
|
48
47
|
|
|
49
48
|
private packageModule: PackageLayerModule;
|
|
@@ -76,14 +75,20 @@ export class CanvasDiscovery {
|
|
|
76
75
|
// 3. Discover canvas files
|
|
77
76
|
const canvases = await this.discoverCanvasFiles(fileTree, packageMap, options, errors);
|
|
78
77
|
|
|
79
|
-
// 4. Discover
|
|
80
|
-
|
|
78
|
+
// 4. Discover storyboards (hierarchical organization)
|
|
79
|
+
// Note: Executions are discovered as part of workflows, not separately
|
|
80
|
+
const storyboards = await this.discoverStoryboards(fileTree, packageMap, canvases, options, errors);
|
|
81
81
|
|
|
82
|
-
// 5.
|
|
83
|
-
const
|
|
82
|
+
// 5. Collect all executions from workflows for backward compatibility
|
|
83
|
+
const executions: (DiscoveredExecution | DiscoveredExecutionWithContent)[] = [];
|
|
84
|
+
for (const storyboard of storyboards) {
|
|
85
|
+
for (const workflow of storyboard.workflows) {
|
|
86
|
+
executions.push(...workflow.executions);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
84
89
|
|
|
85
|
-
// 6. Detect legacy structures and add deprecation errors
|
|
86
|
-
this.detectLegacyStructures(canvases,
|
|
90
|
+
// 6. Detect legacy flat canvas structures and add deprecation errors
|
|
91
|
+
this.detectLegacyStructures(canvases, storyboards, errors);
|
|
87
92
|
|
|
88
93
|
// 7. Sort results
|
|
89
94
|
canvases.sort(this.compareByPackageThenName);
|
|
@@ -93,44 +98,6 @@ export class CanvasDiscovery {
|
|
|
93
98
|
return { canvases, executions, storyboards, errors, warnings };
|
|
94
99
|
}
|
|
95
100
|
|
|
96
|
-
/**
|
|
97
|
-
* Find canvas file for a given execution
|
|
98
|
-
*
|
|
99
|
-
* @param execution - Discovered execution
|
|
100
|
-
* @param canvases - Array of discovered canvases (from discover())
|
|
101
|
-
* @returns Matching canvas or null
|
|
102
|
-
*/
|
|
103
|
-
findCanvasForExecution(
|
|
104
|
-
execution: DiscoveredExecution,
|
|
105
|
-
canvases: DiscoveredCanvas[]
|
|
106
|
-
): DiscoveredCanvas | null {
|
|
107
|
-
// Find canvas with matching basename and scope
|
|
108
|
-
return canvases.find(canvas =>
|
|
109
|
-
canvas.basename === execution.canvasBasename &&
|
|
110
|
-
canvas.scope === execution.scope &&
|
|
111
|
-
canvas.packageName === execution.packageName
|
|
112
|
-
) || null;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Find execution files for a given canvas
|
|
117
|
-
*
|
|
118
|
-
* @param canvas - Discovered canvas
|
|
119
|
-
* @param executions - Array of discovered executions (from discover())
|
|
120
|
-
* @returns Array of matching executions
|
|
121
|
-
*/
|
|
122
|
-
findExecutionsForCanvas(
|
|
123
|
-
canvas: DiscoveredCanvas,
|
|
124
|
-
executions: DiscoveredExecution[]
|
|
125
|
-
): DiscoveredExecution[] {
|
|
126
|
-
// Find all executions with matching basename and scope
|
|
127
|
-
return executions.filter(execution =>
|
|
128
|
-
execution.canvasBasename === canvas.basename &&
|
|
129
|
-
execution.scope === canvas.scope &&
|
|
130
|
-
execution.packageName === canvas.packageName
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
101
|
/**
|
|
135
102
|
* Clear package cache (useful when file tree changes)
|
|
136
103
|
*/
|
|
@@ -145,7 +112,6 @@ export class CanvasDiscovery {
|
|
|
145
112
|
fileTree: FileTree,
|
|
146
113
|
packageMap: Map<string, PackageLayer>,
|
|
147
114
|
canvases: DiscoveredCanvas[],
|
|
148
|
-
executions: (DiscoveredExecution | DiscoveredExecutionWithContent)[],
|
|
149
115
|
options: DiscoveryOptions,
|
|
150
116
|
errors: Array<{ path: string; error: string }>
|
|
151
117
|
): Promise<(DiscoveredStoryboard | DiscoveredStoryboardWithContent)[]> {
|
|
@@ -176,8 +142,8 @@ export class CanvasDiscovery {
|
|
|
176
142
|
// For each potential storyboard directory, check if it has a canvas
|
|
177
143
|
for (const [storyboardPath, storyboardNames] of storyboardDirs) {
|
|
178
144
|
for (const storyboardName of storyboardNames) {
|
|
179
|
-
// Skip __executions__ directory
|
|
180
|
-
if (storyboardName ===
|
|
145
|
+
// Skip __executions__ directory (legacy pattern, should not exist)
|
|
146
|
+
if (storyboardName === '__executions__') continue;
|
|
181
147
|
|
|
182
148
|
// Find canvas for this storyboard
|
|
183
149
|
const storyboardCanvas = canvases.find(c => {
|
|
@@ -193,7 +159,6 @@ export class CanvasDiscovery {
|
|
|
193
159
|
storyboardPath,
|
|
194
160
|
storyboardName,
|
|
195
161
|
packageMap,
|
|
196
|
-
executions,
|
|
197
162
|
options,
|
|
198
163
|
errors
|
|
199
164
|
);
|
|
@@ -234,7 +199,6 @@ export class CanvasDiscovery {
|
|
|
234
199
|
storyboardPath: string,
|
|
235
200
|
storyboardName: string,
|
|
236
201
|
packageMap: Map<string, PackageLayer>,
|
|
237
|
-
executions: (DiscoveredExecution | DiscoveredExecutionWithContent)[],
|
|
238
202
|
options: DiscoveryOptions,
|
|
239
203
|
errors: Array<{ path: string; error: string }>
|
|
240
204
|
): Promise<(DiscoveredWorkflow | DiscoveredWorkflowWithContent)[]> {
|
|
@@ -265,11 +229,14 @@ export class CanvasDiscovery {
|
|
|
265
229
|
? `${packageInfo.packageData.name}/${storyboardName}/${basename}`
|
|
266
230
|
: `${storyboardName}/${basename}`;
|
|
267
231
|
|
|
268
|
-
//
|
|
269
|
-
const workflowExecutions =
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
232
|
+
// Discover executions co-located in the same directory as workflow.json
|
|
233
|
+
const workflowExecutions = await this.discoverExecutionsInWorkflowDir(
|
|
234
|
+
fileTree,
|
|
235
|
+
workflowDir,
|
|
236
|
+
packageMap,
|
|
237
|
+
options,
|
|
238
|
+
errors
|
|
239
|
+
);
|
|
273
240
|
|
|
274
241
|
// Create discovered workflow
|
|
275
242
|
let workflow: DiscoveredWorkflow | DiscoveredWorkflowWithContent = {
|
|
@@ -306,6 +273,76 @@ export class CanvasDiscovery {
|
|
|
306
273
|
return workflows;
|
|
307
274
|
}
|
|
308
275
|
|
|
276
|
+
/**
|
|
277
|
+
* Discover execution files co-located in a workflow directory
|
|
278
|
+
*/
|
|
279
|
+
private async discoverExecutionsInWorkflowDir(
|
|
280
|
+
fileTree: FileTree,
|
|
281
|
+
workflowDir: string,
|
|
282
|
+
packageMap: Map<string, PackageLayer>,
|
|
283
|
+
options: DiscoveryOptions,
|
|
284
|
+
errors: Array<{ path: string; error: string }>
|
|
285
|
+
): Promise<(DiscoveredExecution | DiscoveredExecutionWithContent)[]> {
|
|
286
|
+
const executions: (DiscoveredExecution | DiscoveredExecutionWithContent)[] = [];
|
|
287
|
+
|
|
288
|
+
// Find all .otel.json files in the workflow directory
|
|
289
|
+
for (const file of fileTree.allFiles) {
|
|
290
|
+
const path = file.relativePath || file.path || '';
|
|
291
|
+
|
|
292
|
+
// Check if file is in this workflow directory
|
|
293
|
+
const fileDir = path.split('/').slice(0, -1).join('/');
|
|
294
|
+
if (fileDir !== workflowDir) continue;
|
|
295
|
+
|
|
296
|
+
// Check if it's an execution file (.otel.json)
|
|
297
|
+
if (!path.endsWith('.otel.json')) continue;
|
|
298
|
+
|
|
299
|
+
// Extract execution metadata
|
|
300
|
+
const filename = path.split('/').pop();
|
|
301
|
+
if (!filename) continue;
|
|
302
|
+
|
|
303
|
+
const basename = filename.replace('.otel.json', '');
|
|
304
|
+
|
|
305
|
+
// Determine package context
|
|
306
|
+
const packageInfo = this.findPackageForPath(path, packageMap);
|
|
307
|
+
|
|
308
|
+
// Generate unique ID (workflow-scoped)
|
|
309
|
+
const workflowBasename = workflowDir.split('/').pop() || '';
|
|
310
|
+
const id = packageInfo
|
|
311
|
+
? `${packageInfo.packageData.name}/${workflowBasename}/${basename}`
|
|
312
|
+
: `${workflowBasename}/${basename}`;
|
|
313
|
+
|
|
314
|
+
// Create discovered execution
|
|
315
|
+
let execution: DiscoveredExecution | DiscoveredExecutionWithContent = {
|
|
316
|
+
id,
|
|
317
|
+
name: this.toDisplayName(basename),
|
|
318
|
+
path,
|
|
319
|
+
basename,
|
|
320
|
+
type: 'otel',
|
|
321
|
+
canvasBasename: basename, // For backward compatibility
|
|
322
|
+
packageName: packageInfo?.packageData.name,
|
|
323
|
+
packagePath: packageInfo?.packageData.path,
|
|
324
|
+
scope: packageInfo ? 'package' : 'root',
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
// Optionally load content
|
|
328
|
+
if (options.includeContent && options.fileReader) {
|
|
329
|
+
try {
|
|
330
|
+
const content = await options.fileReader(path);
|
|
331
|
+
execution = { ...execution, content: JSON.parse(content) } as DiscoveredExecutionWithContent;
|
|
332
|
+
} catch (error) {
|
|
333
|
+
errors.push({
|
|
334
|
+
path,
|
|
335
|
+
error: `Failed to parse execution content: ${(error as Error).message}`,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
executions.push(execution);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return executions;
|
|
344
|
+
}
|
|
345
|
+
|
|
309
346
|
/**
|
|
310
347
|
* Discover packages with caching by fileTree SHA
|
|
311
348
|
*/
|
|
@@ -412,66 +449,8 @@ export class CanvasDiscovery {
|
|
|
412
449
|
/**
|
|
413
450
|
* Discover execution files in the file tree
|
|
414
451
|
*/
|
|
415
|
-
private async discoverExecutionFiles(
|
|
416
|
-
fileTree: FileTree,
|
|
417
|
-
packageMap: Map<string, PackageLayer>,
|
|
418
|
-
options: DiscoveryOptions,
|
|
419
|
-
errors: Array<{ path: string; error: string }>
|
|
420
|
-
): Promise<(DiscoveredExecution | DiscoveredExecutionWithContent)[]> {
|
|
421
|
-
const executions: (DiscoveredExecution | DiscoveredExecutionWithContent)[] = [];
|
|
422
|
-
|
|
423
|
-
for (const file of fileTree.allFiles) {
|
|
424
|
-
const path = file.relativePath || file.path || '';
|
|
425
|
-
|
|
426
|
-
// Check if in __executions__ directory
|
|
427
|
-
if (!this.isInExecutionsDir(path)) continue;
|
|
428
|
-
|
|
429
|
-
// Extract execution metadata
|
|
430
|
-
const metadata = this.parseExecutionPath(path);
|
|
431
|
-
if (!metadata) continue;
|
|
432
|
-
|
|
433
|
-
// Determine package context
|
|
434
|
-
const packageInfo = this.findPackageForPath(path, packageMap);
|
|
435
|
-
|
|
436
|
-
// Generate unique ID
|
|
437
|
-
const id = packageInfo
|
|
438
|
-
? `${packageInfo.packageData.name}/${metadata.basename}`
|
|
439
|
-
: metadata.basename;
|
|
440
|
-
|
|
441
|
-
// Create discovered execution
|
|
442
|
-
let execution: DiscoveredExecution | DiscoveredExecutionWithContent = {
|
|
443
|
-
id,
|
|
444
|
-
name: this.toDisplayName(metadata.basename),
|
|
445
|
-
path,
|
|
446
|
-
basename: metadata.basename,
|
|
447
|
-
type: metadata.type,
|
|
448
|
-
canvasBasename: metadata.canvasBasename,
|
|
449
|
-
packageName: packageInfo?.packageData.name,
|
|
450
|
-
packagePath: packageInfo?.packageData.path,
|
|
451
|
-
scope: packageInfo ? 'package' : 'root',
|
|
452
|
-
};
|
|
453
|
-
|
|
454
|
-
// Optionally load content
|
|
455
|
-
if (options.includeContent && options.fileReader) {
|
|
456
|
-
try {
|
|
457
|
-
const content = await options.fileReader(path);
|
|
458
|
-
execution = { ...execution, content: JSON.parse(content) } as DiscoveredExecutionWithContent;
|
|
459
|
-
} catch (error) {
|
|
460
|
-
errors.push({
|
|
461
|
-
path,
|
|
462
|
-
error: `Failed to parse execution content: ${(error as Error).message}`,
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
executions.push(execution);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
return executions;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
452
|
/**
|
|
474
|
-
* Check if path is in .principal-views directory
|
|
453
|
+
* Check if path is in .principal-views directory (directly, not in subdirectories)
|
|
475
454
|
*/
|
|
476
455
|
private isInCanvasDir(path: string): boolean {
|
|
477
456
|
const parts = path.split('/');
|
|
@@ -484,8 +463,8 @@ export class CanvasDiscovery {
|
|
|
484
463
|
// Package: packages/core/.principal-views/file.canvas
|
|
485
464
|
if (parts.includes(CanvasDiscovery.CANVAS_DIR)) {
|
|
486
465
|
const idx = parts.indexOf(CanvasDiscovery.CANVAS_DIR);
|
|
487
|
-
//
|
|
488
|
-
return
|
|
466
|
+
// Must be directly in .principal-views/, not in a subdirectory
|
|
467
|
+
return parts.length === idx + 2;
|
|
489
468
|
}
|
|
490
469
|
|
|
491
470
|
return false;
|
|
@@ -517,49 +496,6 @@ export class CanvasDiscovery {
|
|
|
517
496
|
return null;
|
|
518
497
|
}
|
|
519
498
|
|
|
520
|
-
/**
|
|
521
|
-
* Check if path is in __executions__ directory
|
|
522
|
-
*/
|
|
523
|
-
private isInExecutionsDir(path: string): boolean {
|
|
524
|
-
const parts = path.split('/');
|
|
525
|
-
|
|
526
|
-
// Must contain __executions__ directory
|
|
527
|
-
if (!parts.includes(CanvasDiscovery.EXECUTIONS_DIR)) return false;
|
|
528
|
-
|
|
529
|
-
// Valid patterns:
|
|
530
|
-
// 1. .principal-views/__executions__/file.otel.json
|
|
531
|
-
// 2. packages/core/.principal-views/__executions__/file.otel.json
|
|
532
|
-
// 3. __executions__/file.otel.json (root level)
|
|
533
|
-
|
|
534
|
-
return true;
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
/**
|
|
538
|
-
* Parse execution file path to extract metadata
|
|
539
|
-
* Only .otel.json files are supported
|
|
540
|
-
*/
|
|
541
|
-
private parseExecutionPath(path: string): {
|
|
542
|
-
basename: string;
|
|
543
|
-
type: ExecutionType;
|
|
544
|
-
canvasBasename: string;
|
|
545
|
-
} | null {
|
|
546
|
-
const filename = path.split('/').pop();
|
|
547
|
-
if (!filename) return null;
|
|
548
|
-
|
|
549
|
-
// Pattern: name.otel.json
|
|
550
|
-
const match = filename.match(/^(.+)\.otel\.json$/);
|
|
551
|
-
if (match) {
|
|
552
|
-
const basename = match[1];
|
|
553
|
-
return {
|
|
554
|
-
basename,
|
|
555
|
-
type: 'otel',
|
|
556
|
-
canvasBasename: basename, // Same as basename for linking
|
|
557
|
-
};
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
return null;
|
|
561
|
-
}
|
|
562
|
-
|
|
563
499
|
/**
|
|
564
500
|
* Find package for a given path using longest-path matching
|
|
565
501
|
*/
|
|
@@ -615,27 +551,16 @@ export class CanvasDiscovery {
|
|
|
615
551
|
}
|
|
616
552
|
|
|
617
553
|
/**
|
|
618
|
-
* Detect legacy flat structures and add deprecation errors
|
|
554
|
+
* Detect legacy flat canvas structures and add deprecation errors
|
|
619
555
|
*/
|
|
620
556
|
private detectLegacyStructures(
|
|
621
557
|
canvases: DiscoveredCanvas[],
|
|
622
|
-
executions: (DiscoveredExecution | DiscoveredExecutionWithContent)[],
|
|
623
558
|
storyboards: (DiscoveredStoryboard | DiscoveredStoryboardWithContent)[],
|
|
624
559
|
errors: Array<{ path: string; error: string }>
|
|
625
560
|
): void {
|
|
626
561
|
// Build a set of storyboard canvas IDs for quick lookup
|
|
627
562
|
const storyboardCanvasIds = new Set(storyboards.map(s => s.canvas.id));
|
|
628
563
|
|
|
629
|
-
// Build a set of execution IDs that are part of storyboards
|
|
630
|
-
const storyboardExecutionIds = new Set<string>();
|
|
631
|
-
for (const storyboard of storyboards) {
|
|
632
|
-
for (const workflow of storyboard.workflows) {
|
|
633
|
-
for (const execution of workflow.executions) {
|
|
634
|
-
storyboardExecutionIds.add(execution.id);
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
|
|
639
564
|
// Check for legacy flat canvases (not part of any storyboard)
|
|
640
565
|
for (const canvas of canvases) {
|
|
641
566
|
if (!storyboardCanvasIds.has(canvas.id)) {
|
|
@@ -653,18 +578,5 @@ export class CanvasDiscovery {
|
|
|
653
578
|
}
|
|
654
579
|
}
|
|
655
580
|
}
|
|
656
|
-
|
|
657
|
-
// Check for legacy executions in __executions__/ directory
|
|
658
|
-
for (const execution of executions) {
|
|
659
|
-
if (!storyboardExecutionIds.has(execution.id)) {
|
|
660
|
-
// Check if this execution is in __executions__/ directory
|
|
661
|
-
if (execution.path.includes(`/${CanvasDiscovery.EXECUTIONS_DIR}/`)) {
|
|
662
|
-
errors.push({
|
|
663
|
-
path: execution.path,
|
|
664
|
-
error: 'DEPRECATED: Legacy __executions__/ directory is no longer supported. Migrate executions to workflow folders within storyboards immediately. See migration guide at docs/MIGRATION_GUIDE.md for details.',
|
|
665
|
-
});
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
581
|
}
|
|
670
582
|
}
|