@principal-ai/principal-view-core 0.21.4 → 0.22.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/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -1
- package/dist/node.js.map +1 -1
- package/dist/telemetry/coverage.d.ts +7 -31
- package/dist/telemetry/coverage.d.ts.map +1 -1
- package/dist/telemetry/coverage.js +24 -119
- package/dist/telemetry/coverage.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -3
- package/src/node.ts +1 -3
- package/src/telemetry/coverage.ts +31 -167
package/dist/index.d.ts
CHANGED
|
@@ -31,8 +31,8 @@ export { CanvasDiscovery } from './discovery/CanvasDiscovery';
|
|
|
31
31
|
export type { DiscoveredCanvas, DiscoveredTestTrace, DiscoveredWorkflow, DiscoveredStoryboard, CanvasDiscoveryResult, DiscoveryOptions, CanvasType, TestTraceType, DiscoveredCanvasWithContent, DiscoveredTestTraceWithContent, DiscoveredWorkflowWithContent, DiscoveredStoryboardWithContent, CanvasDiscoveryResultWithContent, } from './discovery/types';
|
|
32
32
|
export { ExecutionValidator, createExecutionValidator } from './execution/ExecutionValidator';
|
|
33
33
|
export type { ExecutionData, ValidationError, ExecutionValidationResult, } from './execution/ExecutionValidator';
|
|
34
|
-
export { analyzeCoverage
|
|
35
|
-
export type { CoverageMetrics, FileInstrumentation,
|
|
34
|
+
export { analyzeCoverage } from './telemetry/coverage';
|
|
35
|
+
export type { CoverageMetrics, FileInstrumentation, PackageCoverageMetrics, } from './telemetry/coverage';
|
|
36
36
|
export { PathBasedEventProcessor } from './PathBasedEventProcessor';
|
|
37
37
|
export type { LogEntry } from './PathBasedEventProcessor';
|
|
38
38
|
export { SessionManager } from './SessionManager';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ export { CanvasDiscovery } from './discovery/CanvasDiscovery';
|
|
|
31
31
|
// Export execution validation (browser-safe - no Node.js dependencies)
|
|
32
32
|
export { ExecutionValidator, createExecutionValidator } from './execution/ExecutionValidator';
|
|
33
33
|
// Export telemetry coverage analysis (browser-safe - uses FileTree abstraction)
|
|
34
|
-
export { analyzeCoverage
|
|
34
|
+
export { analyzeCoverage } from './telemetry/coverage';
|
|
35
35
|
// Export path-based processing (browser-safe - Milestone 1 & 2)
|
|
36
36
|
export { PathBasedEventProcessor } from './PathBasedEventProcessor';
|
|
37
37
|
// Export session management (browser-safe - Event Recording System)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,mFAAmF;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,iDAAiD;AACjD,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AA+CrC,+BAA+B;AAC/B,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,mEAAmE;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAiB9D,uEAAuE;AACvE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,mFAAmF;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,iDAAiD;AACjD,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AA+CrC,+BAA+B;AAC/B,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,mEAAmE;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAiB9D,uEAAuE;AACvE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAOvD,gEAAgE;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,oEAAoE;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,+CAA+C;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,uFAAuF;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAehE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GACd,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,4FAA4F;AAC5F,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,mDAAmD;AACnD,oDAAoD;AACpD,+DAA+D;AAC/D,0FAA0F;AAC1F,uDAAuD;AACvD,8CAA8C;AAC9C,qEAAqE;AACrE,gEAAgE;AAChE,EAAE;AACF,wGAAwG;AACxG,sGAAsG;AACtG,sEAAsE;AACtE,uEAAuE"}
|
package/dist/node.d.ts
CHANGED
|
@@ -25,8 +25,8 @@ export { CanvasConverter } from './utils/CanvasConverter';
|
|
|
25
25
|
export type { ReactFlowNode, ReactFlowEdge } from './utils/CanvasConverter';
|
|
26
26
|
export { EventValidator, createValidatedEmitter, EventValidationError } from './telemetry/event-validator';
|
|
27
27
|
export type { ValidationResult } from './telemetry/event-validator';
|
|
28
|
-
export { analyzeCoverage
|
|
29
|
-
export type { CoverageMetrics, FileInstrumentation,
|
|
28
|
+
export { analyzeCoverage } from './telemetry/coverage';
|
|
29
|
+
export type { CoverageMetrics, FileInstrumentation, PackageCoverageMetrics, } from './telemetry/coverage';
|
|
30
30
|
export { generateTypes, TypeScriptGenerator, generatorRegistry } from './codegen/type-generator';
|
|
31
31
|
export type { CodegenOptions, CodegenResult, CodeGenerator } from './codegen/type-generator';
|
|
32
32
|
export { traceToCanvas, traceToCanvasJson } from './utils/TraceToCanvas';
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EACV,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAGlF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC3G,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/node.js
CHANGED
|
@@ -28,7 +28,7 @@ export { CanvasConverter } from './utils/CanvasConverter';
|
|
|
28
28
|
// Export telemetry event validation
|
|
29
29
|
export { EventValidator, createValidatedEmitter, EventValidationError } from './telemetry/event-validator';
|
|
30
30
|
// Export telemetry coverage analysis (re-exported from main for convenience)
|
|
31
|
-
export { analyzeCoverage
|
|
31
|
+
export { analyzeCoverage } from './telemetry/coverage';
|
|
32
32
|
// Export code generation (Node.js only - file system operations)
|
|
33
33
|
export { generateTypes, TypeScriptGenerator, generatorRegistry } from './codegen/type-generator';
|
|
34
34
|
// Export trace-to-canvas conversion
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8CAA8C;AAC9C,cAAc,SAAS,CAAC;AAExB,2CAA2C;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,iDAAiD;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3G,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8CAA8C;AAC9C,cAAc,SAAS,CAAC;AAExB,2CAA2C;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,iDAAiD;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3G,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAOvD,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQzE,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,gCAAgC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,4DAA4D;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,gEAAgE;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,kEAAkE;AAClE,cAAc,SAAS,CAAC;AAExB,4EAA4E;AAC5E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAuBpB,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAa9D,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,wDAAwD;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -4,20 +4,10 @@
|
|
|
4
4
|
* Measures observability coverage by analyzing which implementation files
|
|
5
5
|
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
6
|
*
|
|
7
|
-
* Uses
|
|
7
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
8
|
+
* framework-aware detection of implementation files.
|
|
8
9
|
*/
|
|
9
10
|
import type { FileTree } from '@principal-ai/repository-abstraction';
|
|
10
|
-
/**
|
|
11
|
-
* Configuration for what counts as an implementation file
|
|
12
|
-
*/
|
|
13
|
-
export interface ImplementationFileConfig {
|
|
14
|
-
include: string[];
|
|
15
|
-
exclude: string[];
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Default configuration for implementation files
|
|
19
|
-
*/
|
|
20
|
-
export declare const DEFAULT_IMPLEMENTATION_CONFIG: ImplementationFileConfig;
|
|
21
11
|
/**
|
|
22
12
|
* Per-file instrumentation details
|
|
23
13
|
*/
|
|
@@ -41,7 +31,7 @@ export interface CoverageMetrics {
|
|
|
41
31
|
canvasFiles: string[];
|
|
42
32
|
totalExpectedEvents: number;
|
|
43
33
|
totalFoundEvents: number;
|
|
44
|
-
packageCoverage
|
|
34
|
+
packageCoverage: PackageCoverageMetrics[];
|
|
45
35
|
}
|
|
46
36
|
/**
|
|
47
37
|
* Per-package coverage metrics
|
|
@@ -54,28 +44,14 @@ export interface PackageCoverageMetrics {
|
|
|
54
44
|
coveragePercentage: number;
|
|
55
45
|
filesByExtension: Record<string, number>;
|
|
56
46
|
}
|
|
57
|
-
/**
|
|
58
|
-
* Options for coverage analysis
|
|
59
|
-
*/
|
|
60
|
-
export interface CoverageOptions {
|
|
61
|
-
/**
|
|
62
|
-
* Configuration for pattern-based implementation file detection
|
|
63
|
-
* Only used when useImplementationLayer is false
|
|
64
|
-
*/
|
|
65
|
-
config?: ImplementationFileConfig;
|
|
66
|
-
/**
|
|
67
|
-
* Use codebase-composition's ImplementationFileLayerModule
|
|
68
|
-
* for more accurate, framework-aware file detection
|
|
69
|
-
* @default false
|
|
70
|
-
*/
|
|
71
|
-
useImplementationLayer?: boolean;
|
|
72
|
-
}
|
|
73
47
|
/**
|
|
74
48
|
* Generate telemetry coverage report from canvas files
|
|
75
49
|
*
|
|
50
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
51
|
+
* framework-aware detection of implementation files.
|
|
52
|
+
*
|
|
76
53
|
* @param fileTree - FileTree representation of the codebase
|
|
77
54
|
* @param fileReader - Function to read file contents
|
|
78
|
-
* @param options - Coverage analysis options
|
|
79
55
|
* @returns Coverage metrics based on file instrumentation
|
|
80
56
|
*
|
|
81
57
|
* @example
|
|
@@ -90,5 +66,5 @@ export interface CoverageOptions {
|
|
|
90
66
|
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
91
67
|
* ```
|
|
92
68
|
*/
|
|
93
|
-
export declare function analyzeCoverage(fileTree: FileTree, fileReader: (path: string) => Promise<string
|
|
69
|
+
export declare function analyzeCoverage(fileTree: FileTree, fileReader: (path: string) => Promise<string>): Promise<CoverageMetrics>;
|
|
94
70
|
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAUrE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAE9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,wBAAwB,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAG3B,YAAY,EAAE,mBAAmB,EAAE,CAAC;IAGpC,WAAW,EAAE,MAAM,EAAE,CAAC;IAGtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IAGzB,eAAe,EAAE,sBAAsB,EAAE,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAwHD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5C,OAAO,CAAC,eAAe,CAAC,CA+E1B"}
|
|
@@ -4,93 +4,11 @@
|
|
|
4
4
|
* Measures observability coverage by analyzing which implementation files
|
|
5
5
|
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
6
|
*
|
|
7
|
-
* Uses
|
|
7
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
8
|
+
* framework-aware detection of implementation files.
|
|
8
9
|
*/
|
|
9
10
|
import { CanvasDiscovery } from '../discovery/CanvasDiscovery';
|
|
10
11
|
import { ImplementationFileLayerModule, PackageLayerModule, } from '@principal-ai/codebase-composition';
|
|
11
|
-
/**
|
|
12
|
-
* Default configuration for implementation files
|
|
13
|
-
*/
|
|
14
|
-
export const DEFAULT_IMPLEMENTATION_CONFIG = {
|
|
15
|
-
include: [
|
|
16
|
-
'src/**/*.ts',
|
|
17
|
-
'src/**/*.tsx',
|
|
18
|
-
'src/**/*.js',
|
|
19
|
-
'src/**/*.jsx',
|
|
20
|
-
'src/**/*.py',
|
|
21
|
-
'src/**/*.go',
|
|
22
|
-
'lib/**/*.ts',
|
|
23
|
-
'lib/**/*.js',
|
|
24
|
-
'app/**/*.ts',
|
|
25
|
-
'app/**/*.tsx',
|
|
26
|
-
'app/**/*.js',
|
|
27
|
-
'app/**/*.jsx',
|
|
28
|
-
],
|
|
29
|
-
exclude: [
|
|
30
|
-
'**/*.test.ts',
|
|
31
|
-
'**/*.test.tsx',
|
|
32
|
-
'**/*.test.js',
|
|
33
|
-
'**/*.test.jsx',
|
|
34
|
-
'**/*.spec.ts',
|
|
35
|
-
'**/*.spec.tsx',
|
|
36
|
-
'**/*.spec.js',
|
|
37
|
-
'**/*.spec.jsx',
|
|
38
|
-
'**/*.config.ts',
|
|
39
|
-
'**/*.config.js',
|
|
40
|
-
'**/*.d.ts',
|
|
41
|
-
'**/dist/**',
|
|
42
|
-
'**/build/**',
|
|
43
|
-
'**/node_modules/**',
|
|
44
|
-
'**/__tests__/**',
|
|
45
|
-
'**/__mocks__/**',
|
|
46
|
-
'**/.next/**',
|
|
47
|
-
'**/coverage/**',
|
|
48
|
-
],
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* Simple glob pattern matcher
|
|
52
|
-
* Supports ** for any depth, * for any chars in segment, and negation with !
|
|
53
|
-
*/
|
|
54
|
-
function matchesPattern(filePath, pattern) {
|
|
55
|
-
const isNegation = pattern.startsWith('!');
|
|
56
|
-
const actualPattern = isNegation ? pattern.slice(1) : pattern;
|
|
57
|
-
// Convert glob to regex
|
|
58
|
-
const regexPattern = actualPattern
|
|
59
|
-
.replace(/\*\*/g, '<<GLOBSTAR>>')
|
|
60
|
-
.replace(/\*/g, '[^/]*')
|
|
61
|
-
.replace(/<<GLOBSTAR>>/g, '.*')
|
|
62
|
-
.replace(/\?/g, '[^/]')
|
|
63
|
-
.replace(/\./g, '\\.');
|
|
64
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
65
|
-
return regex.test(filePath);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Check if a file is an implementation file based on patterns
|
|
69
|
-
*/
|
|
70
|
-
function isImplementationFile(filePath, config) {
|
|
71
|
-
// Check if excluded
|
|
72
|
-
for (const pattern of config.exclude) {
|
|
73
|
-
if (matchesPattern(filePath, pattern)) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Check if included
|
|
78
|
-
for (const pattern of config.include) {
|
|
79
|
-
if (matchesPattern(filePath, pattern)) {
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Get all implementation files from the file tree
|
|
87
|
-
*/
|
|
88
|
-
function getImplementationFiles(fileTree, config) {
|
|
89
|
-
// Simply use allFiles from the FileTree and filter by implementation patterns
|
|
90
|
-
return fileTree.allFiles
|
|
91
|
-
.map(file => file.relativePath)
|
|
92
|
-
.filter(filePath => isImplementationFile(filePath, config));
|
|
93
|
-
}
|
|
94
12
|
/**
|
|
95
13
|
* Extract event name from a canvas node
|
|
96
14
|
*/
|
|
@@ -164,7 +82,7 @@ async function analyzeFileInstrumentation(filePath, expectedEvents, fileReader,
|
|
|
164
82
|
}
|
|
165
83
|
/**
|
|
166
84
|
* Get implementation files using codebase-composition's ImplementationFileLayerModule
|
|
167
|
-
* This provides
|
|
85
|
+
* This provides accurate detection with framework-awareness and package boundaries
|
|
168
86
|
*/
|
|
169
87
|
async function getImplementationFilesFromLayer(fileTree) {
|
|
170
88
|
// Detect packages
|
|
@@ -185,9 +103,11 @@ async function getImplementationFilesFromLayer(fileTree) {
|
|
|
185
103
|
/**
|
|
186
104
|
* Generate telemetry coverage report from canvas files
|
|
187
105
|
*
|
|
106
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
107
|
+
* framework-aware detection of implementation files.
|
|
108
|
+
*
|
|
188
109
|
* @param fileTree - FileTree representation of the codebase
|
|
189
110
|
* @param fileReader - Function to read file contents
|
|
190
|
-
* @param options - Coverage analysis options
|
|
191
111
|
* @returns Coverage metrics based on file instrumentation
|
|
192
112
|
*
|
|
193
113
|
* @example
|
|
@@ -202,7 +122,7 @@ async function getImplementationFilesFromLayer(fileTree) {
|
|
|
202
122
|
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
203
123
|
* ```
|
|
204
124
|
*/
|
|
205
|
-
export async function analyzeCoverage(fileTree, fileReader
|
|
125
|
+
export async function analyzeCoverage(fileTree, fileReader) {
|
|
206
126
|
// Use CanvasDiscovery to find all canvas files
|
|
207
127
|
const discovery = new CanvasDiscovery();
|
|
208
128
|
const result = await discovery.discover(fileTree, {
|
|
@@ -213,20 +133,8 @@ export async function analyzeCoverage(fileTree, fileReader, options = {}) {
|
|
|
213
133
|
const otelCanvases = result.canvases.filter(c => c.type === 'otel');
|
|
214
134
|
// Build map of file -> expected events from canvas
|
|
215
135
|
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
216
|
-
// Get all implementation files from the codebase
|
|
217
|
-
|
|
218
|
-
let implLayers;
|
|
219
|
-
if (options.useImplementationLayer) {
|
|
220
|
-
// Use codebase-composition for framework-aware detection
|
|
221
|
-
const result = await getImplementationFilesFromLayer(fileTree);
|
|
222
|
-
implementationFiles = result.files;
|
|
223
|
-
implLayers = result.layers;
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
// Use pattern-based detection (legacy)
|
|
227
|
-
const config = options.config || DEFAULT_IMPLEMENTATION_CONFIG;
|
|
228
|
-
implementationFiles = new Set(getImplementationFiles(fileTree, config));
|
|
229
|
-
}
|
|
136
|
+
// Get all implementation files from the codebase using implementation layer
|
|
137
|
+
const { files: implementationFiles, layers: implLayers } = await getImplementationFilesFromLayer(fileTree);
|
|
230
138
|
// Get all files referenced in canvas (for coverage denominator)
|
|
231
139
|
const referencedFiles = new Set(fileEventMap.keys());
|
|
232
140
|
// Combine: we want to check all files referenced in canvas that are also implementation files
|
|
@@ -246,24 +154,21 @@ export async function analyzeCoverage(fileTree, fileReader, options = {}) {
|
|
|
246
154
|
: 0;
|
|
247
155
|
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
248
156
|
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
249
|
-
// Calculate per-package metrics
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
};
|
|
265
|
-
});
|
|
266
|
-
}
|
|
157
|
+
// Calculate per-package metrics
|
|
158
|
+
const packageCoverage = implLayers.map(layer => {
|
|
159
|
+
const packageFiles = new Set(layer.implementationData.implementationFiles);
|
|
160
|
+
const packageInstrumented = fileCoverage.filter(f => packageFiles.has(f.filePath) && f.hasInstrumentation);
|
|
161
|
+
return {
|
|
162
|
+
packageName: layer.implementationData.packageName,
|
|
163
|
+
packagePath: layer.implementationData.packagePath,
|
|
164
|
+
totalFiles: layer.implementationData.fileCount,
|
|
165
|
+
filesWithInstrumentation: packageInstrumented.length,
|
|
166
|
+
coveragePercentage: layer.implementationData.fileCount > 0
|
|
167
|
+
? (packageInstrumented.length / layer.implementationData.fileCount) * 100
|
|
168
|
+
: 0,
|
|
169
|
+
filesByExtension: layer.implementationData.filesByExtension || {},
|
|
170
|
+
};
|
|
171
|
+
});
|
|
267
172
|
return {
|
|
268
173
|
totalImplementationFiles,
|
|
269
174
|
filesWithInstrumentation,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -160,13 +160,11 @@ export type {
|
|
|
160
160
|
} from './execution/ExecutionValidator';
|
|
161
161
|
|
|
162
162
|
// Export telemetry coverage analysis (browser-safe - uses FileTree abstraction)
|
|
163
|
-
export { analyzeCoverage
|
|
163
|
+
export { analyzeCoverage } from './telemetry/coverage';
|
|
164
164
|
export type {
|
|
165
165
|
CoverageMetrics,
|
|
166
166
|
FileInstrumentation,
|
|
167
|
-
ImplementationFileConfig,
|
|
168
167
|
PackageCoverageMetrics,
|
|
169
|
-
CoverageOptions,
|
|
170
168
|
} from './telemetry/coverage';
|
|
171
169
|
|
|
172
170
|
// Export path-based processing (browser-safe - Milestone 1 & 2)
|
package/src/node.ts
CHANGED
|
@@ -46,13 +46,11 @@ export { EventValidator, createValidatedEmitter, EventValidationError } from './
|
|
|
46
46
|
export type { ValidationResult } from './telemetry/event-validator';
|
|
47
47
|
|
|
48
48
|
// Export telemetry coverage analysis (re-exported from main for convenience)
|
|
49
|
-
export { analyzeCoverage
|
|
49
|
+
export { analyzeCoverage } from './telemetry/coverage';
|
|
50
50
|
export type {
|
|
51
51
|
CoverageMetrics,
|
|
52
52
|
FileInstrumentation,
|
|
53
|
-
ImplementationFileConfig,
|
|
54
53
|
PackageCoverageMetrics,
|
|
55
|
-
CoverageOptions,
|
|
56
54
|
} from './telemetry/coverage';
|
|
57
55
|
|
|
58
56
|
// Export code generation (Node.js only - file system operations)
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
* Measures observability coverage by analyzing which implementation files
|
|
5
5
|
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
6
|
*
|
|
7
|
-
* Uses
|
|
7
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
8
|
+
* framework-aware detection of implementation files.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
|
-
import type { FileTree
|
|
11
|
+
import type { FileTree } from '@principal-ai/repository-abstraction';
|
|
11
12
|
import { CanvasDiscovery } from '../discovery/CanvasDiscovery';
|
|
12
13
|
import type { DiscoveredCanvasWithContent } from '../discovery/types';
|
|
13
14
|
import type { ExtendedCanvasNode } from '../types/canvas';
|
|
@@ -17,54 +18,6 @@ import {
|
|
|
17
18
|
type ImplementationFileLayer,
|
|
18
19
|
} from '@principal-ai/codebase-composition';
|
|
19
20
|
|
|
20
|
-
/**
|
|
21
|
-
* Configuration for what counts as an implementation file
|
|
22
|
-
*/
|
|
23
|
-
export interface ImplementationFileConfig {
|
|
24
|
-
include: string[]; // glob patterns to include
|
|
25
|
-
exclude: string[]; // glob patterns to exclude
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Default configuration for implementation files
|
|
30
|
-
*/
|
|
31
|
-
export const DEFAULT_IMPLEMENTATION_CONFIG: ImplementationFileConfig = {
|
|
32
|
-
include: [
|
|
33
|
-
'src/**/*.ts',
|
|
34
|
-
'src/**/*.tsx',
|
|
35
|
-
'src/**/*.js',
|
|
36
|
-
'src/**/*.jsx',
|
|
37
|
-
'src/**/*.py',
|
|
38
|
-
'src/**/*.go',
|
|
39
|
-
'lib/**/*.ts',
|
|
40
|
-
'lib/**/*.js',
|
|
41
|
-
'app/**/*.ts',
|
|
42
|
-
'app/**/*.tsx',
|
|
43
|
-
'app/**/*.js',
|
|
44
|
-
'app/**/*.jsx',
|
|
45
|
-
],
|
|
46
|
-
exclude: [
|
|
47
|
-
'**/*.test.ts',
|
|
48
|
-
'**/*.test.tsx',
|
|
49
|
-
'**/*.test.js',
|
|
50
|
-
'**/*.test.jsx',
|
|
51
|
-
'**/*.spec.ts',
|
|
52
|
-
'**/*.spec.tsx',
|
|
53
|
-
'**/*.spec.js',
|
|
54
|
-
'**/*.spec.jsx',
|
|
55
|
-
'**/*.config.ts',
|
|
56
|
-
'**/*.config.js',
|
|
57
|
-
'**/*.d.ts',
|
|
58
|
-
'**/dist/**',
|
|
59
|
-
'**/build/**',
|
|
60
|
-
'**/node_modules/**',
|
|
61
|
-
'**/__tests__/**',
|
|
62
|
-
'**/__mocks__/**',
|
|
63
|
-
'**/.next/**',
|
|
64
|
-
'**/coverage/**',
|
|
65
|
-
],
|
|
66
|
-
};
|
|
67
|
-
|
|
68
21
|
/**
|
|
69
22
|
* Per-file instrumentation details
|
|
70
23
|
*/
|
|
@@ -97,8 +50,8 @@ export interface CoverageMetrics {
|
|
|
97
50
|
totalExpectedEvents: number;
|
|
98
51
|
totalFoundEvents: number;
|
|
99
52
|
|
|
100
|
-
//
|
|
101
|
-
packageCoverage
|
|
53
|
+
// Per-package breakdown
|
|
54
|
+
packageCoverage: PackageCoverageMetrics[];
|
|
102
55
|
}
|
|
103
56
|
|
|
104
57
|
/**
|
|
@@ -113,81 +66,6 @@ export interface PackageCoverageMetrics {
|
|
|
113
66
|
filesByExtension: Record<string, number>;
|
|
114
67
|
}
|
|
115
68
|
|
|
116
|
-
/**
|
|
117
|
-
* Options for coverage analysis
|
|
118
|
-
*/
|
|
119
|
-
export interface CoverageOptions {
|
|
120
|
-
/**
|
|
121
|
-
* Configuration for pattern-based implementation file detection
|
|
122
|
-
* Only used when useImplementationLayer is false
|
|
123
|
-
*/
|
|
124
|
-
config?: ImplementationFileConfig;
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Use codebase-composition's ImplementationFileLayerModule
|
|
128
|
-
* for more accurate, framework-aware file detection
|
|
129
|
-
* @default false
|
|
130
|
-
*/
|
|
131
|
-
useImplementationLayer?: boolean;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Simple glob pattern matcher
|
|
136
|
-
* Supports ** for any depth, * for any chars in segment, and negation with !
|
|
137
|
-
*/
|
|
138
|
-
function matchesPattern(filePath: string, pattern: string): boolean {
|
|
139
|
-
const isNegation = pattern.startsWith('!');
|
|
140
|
-
const actualPattern = isNegation ? pattern.slice(1) : pattern;
|
|
141
|
-
|
|
142
|
-
// Convert glob to regex
|
|
143
|
-
const regexPattern = actualPattern
|
|
144
|
-
.replace(/\*\*/g, '<<GLOBSTAR>>')
|
|
145
|
-
.replace(/\*/g, '[^/]*')
|
|
146
|
-
.replace(/<<GLOBSTAR>>/g, '.*')
|
|
147
|
-
.replace(/\?/g, '[^/]')
|
|
148
|
-
.replace(/\./g, '\\.');
|
|
149
|
-
|
|
150
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
151
|
-
return regex.test(filePath);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Check if a file is an implementation file based on patterns
|
|
156
|
-
*/
|
|
157
|
-
function isImplementationFile(
|
|
158
|
-
filePath: string,
|
|
159
|
-
config: ImplementationFileConfig
|
|
160
|
-
): boolean {
|
|
161
|
-
// Check if excluded
|
|
162
|
-
for (const pattern of config.exclude) {
|
|
163
|
-
if (matchesPattern(filePath, pattern)) {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Check if included
|
|
169
|
-
for (const pattern of config.include) {
|
|
170
|
-
if (matchesPattern(filePath, pattern)) {
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Get all implementation files from the file tree
|
|
180
|
-
*/
|
|
181
|
-
function getImplementationFiles(
|
|
182
|
-
fileTree: FileTree,
|
|
183
|
-
config: ImplementationFileConfig
|
|
184
|
-
): string[] {
|
|
185
|
-
// Simply use allFiles from the FileTree and filter by implementation patterns
|
|
186
|
-
return fileTree.allFiles
|
|
187
|
-
.map(file => file.relativePath)
|
|
188
|
-
.filter(filePath => isImplementationFile(filePath, config));
|
|
189
|
-
}
|
|
190
|
-
|
|
191
69
|
/**
|
|
192
70
|
* Extract event name from a canvas node
|
|
193
71
|
*/
|
|
@@ -282,7 +160,7 @@ async function analyzeFileInstrumentation(
|
|
|
282
160
|
|
|
283
161
|
/**
|
|
284
162
|
* Get implementation files using codebase-composition's ImplementationFileLayerModule
|
|
285
|
-
* This provides
|
|
163
|
+
* This provides accurate detection with framework-awareness and package boundaries
|
|
286
164
|
*/
|
|
287
165
|
async function getImplementationFilesFromLayer(
|
|
288
166
|
fileTree: FileTree
|
|
@@ -309,9 +187,11 @@ async function getImplementationFilesFromLayer(
|
|
|
309
187
|
/**
|
|
310
188
|
* Generate telemetry coverage report from canvas files
|
|
311
189
|
*
|
|
190
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
191
|
+
* framework-aware detection of implementation files.
|
|
192
|
+
*
|
|
312
193
|
* @param fileTree - FileTree representation of the codebase
|
|
313
194
|
* @param fileReader - Function to read file contents
|
|
314
|
-
* @param options - Coverage analysis options
|
|
315
195
|
* @returns Coverage metrics based on file instrumentation
|
|
316
196
|
*
|
|
317
197
|
* @example
|
|
@@ -328,8 +208,7 @@ async function getImplementationFilesFromLayer(
|
|
|
328
208
|
*/
|
|
329
209
|
export async function analyzeCoverage(
|
|
330
210
|
fileTree: FileTree,
|
|
331
|
-
fileReader: (path: string) => Promise<string
|
|
332
|
-
options: CoverageOptions = {}
|
|
211
|
+
fileReader: (path: string) => Promise<string>
|
|
333
212
|
): Promise<CoverageMetrics> {
|
|
334
213
|
// Use CanvasDiscovery to find all canvas files
|
|
335
214
|
const discovery = new CanvasDiscovery();
|
|
@@ -344,20 +223,8 @@ export async function analyzeCoverage(
|
|
|
344
223
|
// Build map of file -> expected events from canvas
|
|
345
224
|
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
346
225
|
|
|
347
|
-
// Get all implementation files from the codebase
|
|
348
|
-
|
|
349
|
-
let implLayers: ImplementationFileLayer[] | undefined;
|
|
350
|
-
|
|
351
|
-
if (options.useImplementationLayer) {
|
|
352
|
-
// Use codebase-composition for framework-aware detection
|
|
353
|
-
const result = await getImplementationFilesFromLayer(fileTree);
|
|
354
|
-
implementationFiles = result.files;
|
|
355
|
-
implLayers = result.layers;
|
|
356
|
-
} else {
|
|
357
|
-
// Use pattern-based detection (legacy)
|
|
358
|
-
const config = options.config || DEFAULT_IMPLEMENTATION_CONFIG;
|
|
359
|
-
implementationFiles = new Set(getImplementationFiles(fileTree, config));
|
|
360
|
-
}
|
|
226
|
+
// Get all implementation files from the codebase using implementation layer
|
|
227
|
+
const { files: implementationFiles, layers: implLayers } = await getImplementationFilesFromLayer(fileTree);
|
|
361
228
|
|
|
362
229
|
// Get all files referenced in canvas (for coverage denominator)
|
|
363
230
|
const referencedFiles = new Set(fileEventMap.keys());
|
|
@@ -391,28 +258,25 @@ export async function analyzeCoverage(
|
|
|
391
258
|
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
392
259
|
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
393
260
|
|
|
394
|
-
// Calculate per-package metrics
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
};
|
|
414
|
-
});
|
|
415
|
-
}
|
|
261
|
+
// Calculate per-package metrics
|
|
262
|
+
const packageCoverage: PackageCoverageMetrics[] = implLayers.map(layer => {
|
|
263
|
+
const packageFiles = new Set(layer.implementationData.implementationFiles);
|
|
264
|
+
const packageInstrumented = fileCoverage.filter(f =>
|
|
265
|
+
packageFiles.has(f.filePath) && f.hasInstrumentation
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
packageName: layer.implementationData.packageName,
|
|
270
|
+
packagePath: layer.implementationData.packagePath,
|
|
271
|
+
totalFiles: layer.implementationData.fileCount,
|
|
272
|
+
filesWithInstrumentation: packageInstrumented.length,
|
|
273
|
+
coveragePercentage:
|
|
274
|
+
layer.implementationData.fileCount > 0
|
|
275
|
+
? (packageInstrumented.length / layer.implementationData.fileCount) * 100
|
|
276
|
+
: 0,
|
|
277
|
+
filesByExtension: layer.implementationData.filesByExtension || {},
|
|
278
|
+
};
|
|
279
|
+
});
|
|
416
280
|
|
|
417
281
|
return {
|
|
418
282
|
totalImplementationFiles,
|