@principal-ai/principal-view-core 0.21.2 → 0.21.3
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 +34 -13
- package/dist/telemetry/coverage.d.ts.map +1 -1
- package/dist/telemetry/coverage.js +165 -62
- package/dist/telemetry/coverage.js.map +1 -1
- package/dist/types/canvas.d.ts +10 -1
- package/dist/types/canvas.d.ts.map +1 -1
- package/dist/types/canvas.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +6 -2
- package/src/node.ts +6 -2
- package/src/telemetry/coverage.ts +240 -80
- package/src/types/canvas.ts +11 -1
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 } from './telemetry/coverage';
|
|
35
|
-
export type { CoverageMetrics,
|
|
34
|
+
export { analyzeCoverage, DEFAULT_IMPLEMENTATION_CONFIG } from './telemetry/coverage';
|
|
35
|
+
export type { CoverageMetrics, FileInstrumentation, ImplementationFileConfig, } 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 } from './telemetry/coverage';
|
|
34
|
+
export { analyzeCoverage, DEFAULT_IMPLEMENTATION_CONFIG } 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,MAAM,sBAAsB,CAAC;
|
|
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,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAOtF,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 } from './telemetry/coverage';
|
|
29
|
-
export type { CoverageMetrics,
|
|
28
|
+
export { analyzeCoverage, DEFAULT_IMPLEMENTATION_CONFIG } from './telemetry/coverage';
|
|
29
|
+
export type { CoverageMetrics, FileInstrumentation, ImplementationFileConfig, } 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,MAAM,sBAAsB,CAAC;
|
|
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 } from './telemetry/coverage';
|
|
31
|
+
export { analyzeCoverage, DEFAULT_IMPLEMENTATION_CONFIG } 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,MAAM,sBAAsB,CAAC;
|
|
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,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAOtF,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"}
|
|
@@ -1,33 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telemetry Coverage Analysis
|
|
3
3
|
*
|
|
4
|
-
* Measures observability coverage by analyzing which
|
|
5
|
-
* OpenTelemetry
|
|
4
|
+
* Measures observability coverage by analyzing which implementation files
|
|
5
|
+
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
6
|
*
|
|
7
7
|
* Uses FileTree abstraction for environment-agnostic file operations.
|
|
8
8
|
*/
|
|
9
9
|
import type { FileTree } from '@principal-ai/repository-abstraction';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
+
/**
|
|
22
|
+
* Per-file instrumentation details
|
|
23
|
+
*/
|
|
24
|
+
export interface FileInstrumentation {
|
|
25
|
+
filePath: string;
|
|
26
|
+
expectedEvents: string[];
|
|
27
|
+
foundEvents: string[];
|
|
28
|
+
instrumentationCount: number;
|
|
13
29
|
hasInstrumentation: boolean;
|
|
14
|
-
|
|
15
|
-
|
|
30
|
+
missingEvents: string[];
|
|
31
|
+
isImplementationFile: boolean;
|
|
16
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Overall coverage metrics (file-based)
|
|
35
|
+
*/
|
|
17
36
|
export interface CoverageMetrics {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
nodesWithInstrumentation: number;
|
|
37
|
+
totalImplementationFiles: number;
|
|
38
|
+
filesWithInstrumentation: number;
|
|
21
39
|
coveragePercentage: number;
|
|
22
|
-
|
|
40
|
+
fileCoverage: FileInstrumentation[];
|
|
23
41
|
canvasFiles: string[];
|
|
42
|
+
totalExpectedEvents: number;
|
|
43
|
+
totalFoundEvents: number;
|
|
24
44
|
}
|
|
25
45
|
/**
|
|
26
46
|
* Generate telemetry coverage report from canvas files
|
|
27
47
|
*
|
|
28
48
|
* @param fileTree - FileTree representation of the codebase
|
|
29
49
|
* @param fileReader - Function to read file contents
|
|
30
|
-
* @
|
|
50
|
+
* @param config - Configuration for implementation file detection (optional)
|
|
51
|
+
* @returns Coverage metrics based on file instrumentation
|
|
31
52
|
*
|
|
32
53
|
* @example
|
|
33
54
|
* ```typescript
|
|
@@ -41,5 +62,5 @@ export interface CoverageMetrics {
|
|
|
41
62
|
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
42
63
|
* ```
|
|
43
64
|
*/
|
|
44
|
-
export declare function analyzeCoverage(fileTree: FileTree, fileReader: (path: string) => Promise<string
|
|
65
|
+
export declare function analyzeCoverage(fileTree: FileTree, fileReader: (path: string) => Promise<string>, config?: ImplementationFileConfig): Promise<CoverageMetrics>;
|
|
45
66
|
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,sCAAsC,CAAC;AAK/E;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,wBAmC3C,CAAC;AAEF;;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;CAC1B;AAuJD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAC7C,MAAM,GAAE,wBAAwD,GAC/D,OAAO,CAAC,eAAe,CAAC,CA0D1B"}
|
|
@@ -1,70 +1,164 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telemetry Coverage Analysis
|
|
3
3
|
*
|
|
4
|
-
* Measures observability coverage by analyzing which
|
|
5
|
-
* OpenTelemetry
|
|
4
|
+
* Measures observability coverage by analyzing which implementation files
|
|
5
|
+
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
6
|
*
|
|
7
7
|
* Uses FileTree abstraction for environment-agnostic file operations.
|
|
8
8
|
*/
|
|
9
9
|
import { CanvasDiscovery } from '../discovery/CanvasDiscovery';
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Default configuration for implementation files
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
export const DEFAULT_IMPLEMENTATION_CONFIG = {
|
|
14
|
+
include: [
|
|
15
|
+
'src/**/*.ts',
|
|
16
|
+
'src/**/*.tsx',
|
|
17
|
+
'src/**/*.js',
|
|
18
|
+
'src/**/*.jsx',
|
|
19
|
+
'src/**/*.py',
|
|
20
|
+
'src/**/*.go',
|
|
21
|
+
'lib/**/*.ts',
|
|
22
|
+
'lib/**/*.js',
|
|
23
|
+
'app/**/*.ts',
|
|
24
|
+
'app/**/*.tsx',
|
|
25
|
+
'app/**/*.js',
|
|
26
|
+
'app/**/*.jsx',
|
|
27
|
+
],
|
|
28
|
+
exclude: [
|
|
29
|
+
'**/*.test.ts',
|
|
30
|
+
'**/*.test.tsx',
|
|
31
|
+
'**/*.test.js',
|
|
32
|
+
'**/*.test.jsx',
|
|
33
|
+
'**/*.spec.ts',
|
|
34
|
+
'**/*.spec.tsx',
|
|
35
|
+
'**/*.spec.js',
|
|
36
|
+
'**/*.spec.jsx',
|
|
37
|
+
'**/*.config.ts',
|
|
38
|
+
'**/*.config.js',
|
|
39
|
+
'**/*.d.ts',
|
|
40
|
+
'**/dist/**',
|
|
41
|
+
'**/build/**',
|
|
42
|
+
'**/node_modules/**',
|
|
43
|
+
'**/__tests__/**',
|
|
44
|
+
'**/__mocks__/**',
|
|
45
|
+
'**/.next/**',
|
|
46
|
+
'**/coverage/**',
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Simple glob pattern matcher
|
|
51
|
+
* Supports ** for any depth, * for any chars in segment, and negation with !
|
|
52
|
+
*/
|
|
53
|
+
function matchesPattern(filePath, pattern) {
|
|
54
|
+
const isNegation = pattern.startsWith('!');
|
|
55
|
+
const actualPattern = isNegation ? pattern.slice(1) : pattern;
|
|
56
|
+
// Convert glob to regex
|
|
57
|
+
const regexPattern = actualPattern
|
|
58
|
+
.replace(/\*\*/g, '<<GLOBSTAR>>')
|
|
59
|
+
.replace(/\*/g, '[^/]*')
|
|
60
|
+
.replace(/<<GLOBSTAR>>/g, '.*')
|
|
61
|
+
.replace(/\?/g, '[^/]')
|
|
62
|
+
.replace(/\./g, '\\.');
|
|
63
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
64
|
+
return regex.test(filePath);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if a file is an implementation file based on patterns
|
|
68
|
+
*/
|
|
69
|
+
function isImplementationFile(filePath, config) {
|
|
70
|
+
// Check if excluded
|
|
71
|
+
for (const pattern of config.exclude) {
|
|
72
|
+
if (matchesPattern(filePath, pattern)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Check if included
|
|
77
|
+
for (const pattern of config.include) {
|
|
78
|
+
if (matchesPattern(filePath, pattern)) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
17
81
|
}
|
|
18
|
-
return
|
|
82
|
+
return false;
|
|
19
83
|
}
|
|
20
84
|
/**
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
85
|
+
* Get all implementation files from the file tree
|
|
86
|
+
*/
|
|
87
|
+
function getImplementationFiles(fileTree, config) {
|
|
88
|
+
// Simply use allFiles from the FileTree and filter by implementation patterns
|
|
89
|
+
return fileTree.allFiles
|
|
90
|
+
.map(file => file.relativePath)
|
|
91
|
+
.filter(filePath => isImplementationFile(filePath, config));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Extract event name from a canvas node
|
|
95
|
+
*/
|
|
96
|
+
function getEventName(node) {
|
|
97
|
+
return node.pv?.event?.name || null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Extract instrumentation file paths from a canvas node (pv.otel.files only)
|
|
26
101
|
*/
|
|
27
|
-
|
|
102
|
+
function getInstrumentationFiles(node) {
|
|
103
|
+
// Only check pv.otel.files - explicit instrumentation locations
|
|
104
|
+
return node.pv?.otel?.files || [];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a file contains a specific event name (simple string match)
|
|
108
|
+
*/
|
|
109
|
+
async function fileContainsEvent(filePath, eventName, fileReader) {
|
|
28
110
|
try {
|
|
29
111
|
const content = await fileReader(filePath);
|
|
30
|
-
|
|
31
|
-
const hasTracer = /getTracer|startSpan|addEvent/.test(content);
|
|
32
|
-
const hasTestOtel = /['"]\.\.?\/.*test\/otel-setup['"]/.test(content);
|
|
33
|
-
return hasOtelImport || hasTracer || hasTestOtel;
|
|
112
|
+
return content.includes(eventName);
|
|
34
113
|
}
|
|
35
114
|
catch {
|
|
36
115
|
return false;
|
|
37
116
|
}
|
|
38
117
|
}
|
|
39
118
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* @param node - Canvas node to analyze
|
|
43
|
-
* @param fileReader - Function to read file contents
|
|
44
|
-
* @returns Coverage information for the node
|
|
119
|
+
* Build a map of file -> expected events from canvas nodes
|
|
45
120
|
*/
|
|
46
|
-
async function
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
121
|
+
async function buildFileEventMap(otelCanvases) {
|
|
122
|
+
const fileEventMap = new Map();
|
|
123
|
+
for (const canvas of otelCanvases) {
|
|
124
|
+
if (!canvas.content?.nodes || canvas.content.nodes.length === 0) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
for (const node of canvas.content.nodes) {
|
|
128
|
+
const eventName = getEventName(node);
|
|
129
|
+
if (!eventName)
|
|
130
|
+
continue;
|
|
131
|
+
const files = getInstrumentationFiles(node);
|
|
132
|
+
for (const file of files) {
|
|
133
|
+
if (!fileEventMap.has(file)) {
|
|
134
|
+
fileEventMap.set(file, new Set());
|
|
135
|
+
}
|
|
136
|
+
fileEventMap.get(file).add(eventName);
|
|
55
137
|
}
|
|
56
138
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
139
|
+
}
|
|
140
|
+
return fileEventMap;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Analyze instrumentation for a single file
|
|
144
|
+
*/
|
|
145
|
+
async function analyzeFileInstrumentation(filePath, expectedEvents, fileReader, isImplFile) {
|
|
146
|
+
const foundEvents = [];
|
|
147
|
+
for (const eventName of expectedEvents) {
|
|
148
|
+
const found = await fileContainsEvent(filePath, eventName, fileReader);
|
|
149
|
+
if (found) {
|
|
150
|
+
foundEvents.push(eventName);
|
|
60
151
|
}
|
|
61
152
|
}
|
|
153
|
+
const missingEvents = expectedEvents.filter(e => !foundEvents.includes(e));
|
|
62
154
|
return {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
155
|
+
filePath,
|
|
156
|
+
expectedEvents,
|
|
157
|
+
foundEvents,
|
|
158
|
+
instrumentationCount: foundEvents.length,
|
|
159
|
+
hasInstrumentation: foundEvents.length > 0,
|
|
160
|
+
missingEvents,
|
|
161
|
+
isImplementationFile: isImplFile,
|
|
68
162
|
};
|
|
69
163
|
}
|
|
70
164
|
/**
|
|
@@ -72,7 +166,8 @@ async function analyzeNodeCoverage(node, fileReader) {
|
|
|
72
166
|
*
|
|
73
167
|
* @param fileTree - FileTree representation of the codebase
|
|
74
168
|
* @param fileReader - Function to read file contents
|
|
75
|
-
* @
|
|
169
|
+
* @param config - Configuration for implementation file detection (optional)
|
|
170
|
+
* @returns Coverage metrics based on file instrumentation
|
|
76
171
|
*
|
|
77
172
|
* @example
|
|
78
173
|
* ```typescript
|
|
@@ -86,7 +181,7 @@ async function analyzeNodeCoverage(node, fileReader) {
|
|
|
86
181
|
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
87
182
|
* ```
|
|
88
183
|
*/
|
|
89
|
-
export async function analyzeCoverage(fileTree, fileReader) {
|
|
184
|
+
export async function analyzeCoverage(fileTree, fileReader, config = DEFAULT_IMPLEMENTATION_CONFIG) {
|
|
90
185
|
// Use CanvasDiscovery to find all canvas files
|
|
91
186
|
const discovery = new CanvasDiscovery();
|
|
92
187
|
const result = await discovery.discover(fileTree, {
|
|
@@ -95,29 +190,37 @@ export async function analyzeCoverage(fileTree, fileReader) {
|
|
|
95
190
|
});
|
|
96
191
|
// Filter for .otel.canvas files only
|
|
97
192
|
const otelCanvases = result.canvases.filter(c => c.type === 'otel');
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
193
|
+
// Build map of file -> expected events from canvas
|
|
194
|
+
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
195
|
+
// Get all implementation files from the codebase
|
|
196
|
+
const implementationFiles = new Set(getImplementationFiles(fileTree, config));
|
|
197
|
+
// Get all files referenced in canvas (for coverage denominator)
|
|
198
|
+
const referencedFiles = new Set(fileEventMap.keys());
|
|
199
|
+
// Combine: we want to check all files referenced in canvas that are also implementation files
|
|
200
|
+
const filesToCheck = new Set([...referencedFiles].filter(f => implementationFiles.has(f)));
|
|
201
|
+
// Analyze each file
|
|
202
|
+
const fileCoverage = [];
|
|
203
|
+
for (const filePath of filesToCheck) {
|
|
204
|
+
const expectedEvents = Array.from(fileEventMap.get(filePath) || []);
|
|
205
|
+
const coverage = await analyzeFileInstrumentation(filePath, expectedEvents, fileReader, implementationFiles.has(filePath));
|
|
206
|
+
fileCoverage.push(coverage);
|
|
109
207
|
}
|
|
110
|
-
|
|
111
|
-
const
|
|
208
|
+
// Calculate metrics
|
|
209
|
+
const filesWithInstrumentation = fileCoverage.filter(f => f.hasInstrumentation).length;
|
|
210
|
+
const totalImplementationFiles = filesToCheck.size;
|
|
211
|
+
const coveragePercentage = totalImplementationFiles > 0
|
|
212
|
+
? (filesWithInstrumentation / totalImplementationFiles) * 100
|
|
213
|
+
: 0;
|
|
214
|
+
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
215
|
+
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
112
216
|
return {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
? (nodesWithInstrumentation.length / nodesWithFiles.length) * 100
|
|
118
|
-
: 0,
|
|
119
|
-
nodeCoverage: allNodeCoverage,
|
|
217
|
+
totalImplementationFiles,
|
|
218
|
+
filesWithInstrumentation,
|
|
219
|
+
coveragePercentage,
|
|
220
|
+
fileCoverage,
|
|
120
221
|
canvasFiles: otelCanvases.map(c => c.path),
|
|
222
|
+
totalExpectedEvents,
|
|
223
|
+
totalFoundEvents,
|
|
121
224
|
};
|
|
122
225
|
}
|
|
123
226
|
//# sourceMappingURL=coverage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/telemetry/coverage.ts"],"names":[],"mappings":"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"}
|
package/dist/types/canvas.d.ts
CHANGED
|
@@ -289,8 +289,17 @@ export interface PVOtelExtension {
|
|
|
289
289
|
* these criteria are received.
|
|
290
290
|
*/
|
|
291
291
|
spanMatch?: PVOtelSpanMatch;
|
|
292
|
+
/**
|
|
293
|
+
* Files where this event is instrumented
|
|
294
|
+
*
|
|
295
|
+
* Specifies the exact file paths where this OTEL event should be emitted.
|
|
296
|
+
* Used by coverage tools to validate that events are properly instrumented.
|
|
297
|
+
*
|
|
298
|
+
* @example ["src/app/api/auth/callback/route.ts"]
|
|
299
|
+
*/
|
|
300
|
+
files?: string[];
|
|
292
301
|
/** Allow additional properties */
|
|
293
|
-
[key: string]: JsonValue | PVOtelResourceMatch | PVOtelSpanMatch | undefined;
|
|
302
|
+
[key: string]: JsonValue | PVOtelResourceMatch | PVOtelSpanMatch | string[] | undefined;
|
|
294
303
|
}
|
|
295
304
|
/**
|
|
296
305
|
* Event field schema definition
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/types/canvas.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/types/canvas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOzC;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kDAAkD;IAClD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,iBAAiB;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,oDAAoD;IACpD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,qBAAqB;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAK7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,UAAU,GACV,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,CAAC;AAEhB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IAErC;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAE/C;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;KAChD,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;;OAaG;IACH,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3C;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEpC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,GAAG,eAAe,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CACzF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IAEvB,mBAAmB;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAK9B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACN;QACE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CACF,CAAC;IACF,mBAAmB;IACnB,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,eAAe,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CAEH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,MAAM,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,CAAC;IACnE,kBAAkB;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,yBAAyB;IACzB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,eAAe,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,+CAA+C;IAC/C,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;KACvC,CAAC;CAEH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACjD,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACjD,+BAA+B;IAC/B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,EAAE,CAAC,EAAE,eAAe,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,EAAE,CAAC,EAAE,eAAe,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,EAAE,CAAC,EAAE,eAAe,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,EAAE,CAAC,EAAE,eAAe,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,sBAAsB,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,uBAAuB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,EAAE,CAAC,EAAE,eAAe,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,wCAAwC;IACxC,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,wCAAwC;IACxC,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,oCAAoC;IACpC,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,GAAG,kBAAkB,GACpC,IAAI,IAAI,cAAc,GAAG,sBAAsB,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,GAAG,kBAAkB,GACpC,IAAI,IAAI,cAAc,GAAG,sBAAsB,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,GAAG,kBAAkB,GACpC,IAAI,IAAI,cAAc,GAAG,sBAAsB,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,GAAG,kBAAkB,GACpC,IAAI,IAAI,eAAe,GAAG,uBAAuB,CAEnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG,IAAI,IAAI,kBAAkB,CAEhG;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOvD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAgBrF"}
|
package/dist/types/canvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/types/canvas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/types/canvas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAysBH,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAqC;IAErC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAqC;IAErC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAqC;IAErC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,IAAqC;IAErC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAqC;IAClE,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS,EAAE,SAAS;CACxB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE1C,yBAAyB;IACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;KACpC;IAED,uDAAuD;IACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;QAClE,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;KAC3C;IAED,2BAA2B;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -160,8 +160,12 @@ export type {
|
|
|
160
160
|
} from './execution/ExecutionValidator';
|
|
161
161
|
|
|
162
162
|
// Export telemetry coverage analysis (browser-safe - uses FileTree abstraction)
|
|
163
|
-
export { analyzeCoverage } from './telemetry/coverage';
|
|
164
|
-
export type {
|
|
163
|
+
export { analyzeCoverage, DEFAULT_IMPLEMENTATION_CONFIG } from './telemetry/coverage';
|
|
164
|
+
export type {
|
|
165
|
+
CoverageMetrics,
|
|
166
|
+
FileInstrumentation,
|
|
167
|
+
ImplementationFileConfig,
|
|
168
|
+
} from './telemetry/coverage';
|
|
165
169
|
|
|
166
170
|
// Export path-based processing (browser-safe - Milestone 1 & 2)
|
|
167
171
|
export { PathBasedEventProcessor } from './PathBasedEventProcessor';
|
package/src/node.ts
CHANGED
|
@@ -46,8 +46,12 @@ 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 } from './telemetry/coverage';
|
|
50
|
-
export type {
|
|
49
|
+
export { analyzeCoverage, DEFAULT_IMPLEMENTATION_CONFIG } from './telemetry/coverage';
|
|
50
|
+
export type {
|
|
51
|
+
CoverageMetrics,
|
|
52
|
+
FileInstrumentation,
|
|
53
|
+
ImplementationFileConfig,
|
|
54
|
+
} from './telemetry/coverage';
|
|
51
55
|
|
|
52
56
|
// Export code generation (Node.js only - file system operations)
|
|
53
57
|
export { generateTypes, TypeScriptGenerator, generatorRegistry } from './codegen/type-generator';
|
|
@@ -1,104 +1,244 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telemetry Coverage Analysis
|
|
3
3
|
*
|
|
4
|
-
* Measures observability coverage by analyzing which
|
|
5
|
-
* OpenTelemetry
|
|
4
|
+
* Measures observability coverage by analyzing which implementation files
|
|
5
|
+
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
6
|
*
|
|
7
7
|
* Uses FileTree abstraction for environment-agnostic file operations.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { FileTree } from '@principal-ai/repository-abstraction';
|
|
10
|
+
import type { FileTree, FileInfo } from '@principal-ai/repository-abstraction';
|
|
11
11
|
import { CanvasDiscovery } from '../discovery/CanvasDiscovery';
|
|
12
12
|
import type { DiscoveredCanvasWithContent } from '../discovery/types';
|
|
13
13
|
import type { ExtendedCanvasNode } from '../types/canvas';
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for what counts as an implementation file
|
|
17
|
+
*/
|
|
18
|
+
export interface ImplementationFileConfig {
|
|
19
|
+
include: string[]; // glob patterns to include
|
|
20
|
+
exclude: string[]; // glob patterns to exclude
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Default configuration for implementation files
|
|
25
|
+
*/
|
|
26
|
+
export const DEFAULT_IMPLEMENTATION_CONFIG: ImplementationFileConfig = {
|
|
27
|
+
include: [
|
|
28
|
+
'src/**/*.ts',
|
|
29
|
+
'src/**/*.tsx',
|
|
30
|
+
'src/**/*.js',
|
|
31
|
+
'src/**/*.jsx',
|
|
32
|
+
'src/**/*.py',
|
|
33
|
+
'src/**/*.go',
|
|
34
|
+
'lib/**/*.ts',
|
|
35
|
+
'lib/**/*.js',
|
|
36
|
+
'app/**/*.ts',
|
|
37
|
+
'app/**/*.tsx',
|
|
38
|
+
'app/**/*.js',
|
|
39
|
+
'app/**/*.jsx',
|
|
40
|
+
],
|
|
41
|
+
exclude: [
|
|
42
|
+
'**/*.test.ts',
|
|
43
|
+
'**/*.test.tsx',
|
|
44
|
+
'**/*.test.js',
|
|
45
|
+
'**/*.test.jsx',
|
|
46
|
+
'**/*.spec.ts',
|
|
47
|
+
'**/*.spec.tsx',
|
|
48
|
+
'**/*.spec.js',
|
|
49
|
+
'**/*.spec.jsx',
|
|
50
|
+
'**/*.config.ts',
|
|
51
|
+
'**/*.config.js',
|
|
52
|
+
'**/*.d.ts',
|
|
53
|
+
'**/dist/**',
|
|
54
|
+
'**/build/**',
|
|
55
|
+
'**/node_modules/**',
|
|
56
|
+
'**/__tests__/**',
|
|
57
|
+
'**/__mocks__/**',
|
|
58
|
+
'**/.next/**',
|
|
59
|
+
'**/coverage/**',
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Per-file instrumentation details
|
|
65
|
+
*/
|
|
66
|
+
export interface FileInstrumentation {
|
|
67
|
+
filePath: string;
|
|
68
|
+
expectedEvents: string[]; // Events that should be in this file (from canvas)
|
|
69
|
+
foundEvents: string[]; // Events actually found in the file
|
|
70
|
+
instrumentationCount: number; // foundEvents.length (for heat map)
|
|
71
|
+
hasInstrumentation: boolean; // instrumentationCount > 0
|
|
72
|
+
missingEvents: string[]; // expectedEvents - foundEvents
|
|
73
|
+
isImplementationFile: boolean; // Whether this file matches implementation patterns
|
|
21
74
|
}
|
|
22
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Overall coverage metrics (file-based)
|
|
78
|
+
*/
|
|
23
79
|
export interface CoverageMetrics {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
80
|
+
// File-based coverage
|
|
81
|
+
totalImplementationFiles: number;
|
|
82
|
+
filesWithInstrumentation: number;
|
|
27
83
|
coveragePercentage: number;
|
|
28
|
-
|
|
84
|
+
|
|
85
|
+
// Per-file details (for heat map and debugging)
|
|
86
|
+
fileCoverage: FileInstrumentation[];
|
|
87
|
+
|
|
88
|
+
// Canvas metadata
|
|
29
89
|
canvasFiles: string[];
|
|
90
|
+
|
|
91
|
+
// Summary stats
|
|
92
|
+
totalExpectedEvents: number;
|
|
93
|
+
totalFoundEvents: number;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Simple glob pattern matcher
|
|
98
|
+
* Supports ** for any depth, * for any chars in segment, and negation with !
|
|
99
|
+
*/
|
|
100
|
+
function matchesPattern(filePath: string, pattern: string): boolean {
|
|
101
|
+
const isNegation = pattern.startsWith('!');
|
|
102
|
+
const actualPattern = isNegation ? pattern.slice(1) : pattern;
|
|
103
|
+
|
|
104
|
+
// Convert glob to regex
|
|
105
|
+
const regexPattern = actualPattern
|
|
106
|
+
.replace(/\*\*/g, '<<GLOBSTAR>>')
|
|
107
|
+
.replace(/\*/g, '[^/]*')
|
|
108
|
+
.replace(/<<GLOBSTAR>>/g, '.*')
|
|
109
|
+
.replace(/\?/g, '[^/]')
|
|
110
|
+
.replace(/\./g, '\\.');
|
|
111
|
+
|
|
112
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
113
|
+
return regex.test(filePath);
|
|
30
114
|
}
|
|
31
115
|
|
|
32
116
|
/**
|
|
33
|
-
*
|
|
117
|
+
* Check if a file is an implementation file based on patterns
|
|
34
118
|
*/
|
|
35
|
-
function
|
|
36
|
-
|
|
119
|
+
function isImplementationFile(
|
|
120
|
+
filePath: string,
|
|
121
|
+
config: ImplementationFileConfig
|
|
122
|
+
): boolean {
|
|
123
|
+
// Check if excluded
|
|
124
|
+
for (const pattern of config.exclude) {
|
|
125
|
+
if (matchesPattern(filePath, pattern)) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
37
129
|
|
|
38
|
-
if
|
|
39
|
-
|
|
130
|
+
// Check if included
|
|
131
|
+
for (const pattern of config.include) {
|
|
132
|
+
if (matchesPattern(filePath, pattern)) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
40
135
|
}
|
|
41
136
|
|
|
42
|
-
return
|
|
137
|
+
return false;
|
|
43
138
|
}
|
|
44
139
|
|
|
45
140
|
/**
|
|
46
|
-
*
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
141
|
+
* Get all implementation files from the file tree
|
|
142
|
+
*/
|
|
143
|
+
function getImplementationFiles(
|
|
144
|
+
fileTree: FileTree,
|
|
145
|
+
config: ImplementationFileConfig
|
|
146
|
+
): string[] {
|
|
147
|
+
// Simply use allFiles from the FileTree and filter by implementation patterns
|
|
148
|
+
return fileTree.allFiles
|
|
149
|
+
.map(file => file.relativePath)
|
|
150
|
+
.filter(filePath => isImplementationFile(filePath, config));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Extract event name from a canvas node
|
|
155
|
+
*/
|
|
156
|
+
function getEventName(node: ExtendedCanvasNode): string | null {
|
|
157
|
+
return node.pv?.event?.name || null;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Extract instrumentation file paths from a canvas node (pv.otel.files only)
|
|
162
|
+
*/
|
|
163
|
+
function getInstrumentationFiles(node: ExtendedCanvasNode): string[] {
|
|
164
|
+
// Only check pv.otel.files - explicit instrumentation locations
|
|
165
|
+
return node.pv?.otel?.files || [];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Check if a file contains a specific event name (simple string match)
|
|
51
170
|
*/
|
|
52
|
-
async function
|
|
171
|
+
async function fileContainsEvent(
|
|
53
172
|
filePath: string,
|
|
173
|
+
eventName: string,
|
|
54
174
|
fileReader: (path: string) => Promise<string>
|
|
55
175
|
): Promise<boolean> {
|
|
56
176
|
try {
|
|
57
177
|
const content = await fileReader(filePath);
|
|
58
|
-
|
|
59
|
-
const hasOtelImport = content.includes('@opentelemetry/api');
|
|
60
|
-
const hasTracer = /getTracer|startSpan|addEvent/.test(content);
|
|
61
|
-
const hasTestOtel = /['"]\.\.?\/.*test\/otel-setup['"]/.test(content);
|
|
62
|
-
|
|
63
|
-
return hasOtelImport || hasTracer || hasTestOtel;
|
|
178
|
+
return content.includes(eventName);
|
|
64
179
|
} catch {
|
|
65
180
|
return false;
|
|
66
181
|
}
|
|
67
182
|
}
|
|
68
183
|
|
|
69
184
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* @param node - Canvas node to analyze
|
|
73
|
-
* @param fileReader - Function to read file contents
|
|
74
|
-
* @returns Coverage information for the node
|
|
185
|
+
* Build a map of file -> expected events from canvas nodes
|
|
75
186
|
*/
|
|
76
|
-
async function
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
187
|
+
async function buildFileEventMap(
|
|
188
|
+
otelCanvases: DiscoveredCanvasWithContent[]
|
|
189
|
+
): Promise<Map<string, Set<string>>> {
|
|
190
|
+
const fileEventMap = new Map<string, Set<string>>();
|
|
191
|
+
|
|
192
|
+
for (const canvas of otelCanvases) {
|
|
193
|
+
if (!canvas.content?.nodes || canvas.content.nodes.length === 0) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
for (const node of canvas.content.nodes) {
|
|
198
|
+
const eventName = getEventName(node);
|
|
199
|
+
if (!eventName) continue;
|
|
200
|
+
|
|
201
|
+
const files = getInstrumentationFiles(node);
|
|
202
|
+
for (const file of files) {
|
|
203
|
+
if (!fileEventMap.has(file)) {
|
|
204
|
+
fileEventMap.set(file, new Set());
|
|
205
|
+
}
|
|
206
|
+
fileEventMap.get(file)!.add(eventName);
|
|
89
207
|
}
|
|
90
|
-
} catch {
|
|
91
|
-
// File doesn't exist or can't be read
|
|
92
|
-
missingFiles.push(path);
|
|
93
208
|
}
|
|
94
209
|
}
|
|
95
210
|
|
|
211
|
+
return fileEventMap;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Analyze instrumentation for a single file
|
|
216
|
+
*/
|
|
217
|
+
async function analyzeFileInstrumentation(
|
|
218
|
+
filePath: string,
|
|
219
|
+
expectedEvents: string[],
|
|
220
|
+
fileReader: (path: string) => Promise<string>,
|
|
221
|
+
isImplFile: boolean
|
|
222
|
+
): Promise<FileInstrumentation> {
|
|
223
|
+
const foundEvents: string[] = [];
|
|
224
|
+
|
|
225
|
+
for (const eventName of expectedEvents) {
|
|
226
|
+
const found = await fileContainsEvent(filePath, eventName, fileReader);
|
|
227
|
+
if (found) {
|
|
228
|
+
foundEvents.push(eventName);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const missingEvents = expectedEvents.filter(e => !foundEvents.includes(e));
|
|
233
|
+
|
|
96
234
|
return {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
235
|
+
filePath,
|
|
236
|
+
expectedEvents,
|
|
237
|
+
foundEvents,
|
|
238
|
+
instrumentationCount: foundEvents.length,
|
|
239
|
+
hasInstrumentation: foundEvents.length > 0,
|
|
240
|
+
missingEvents,
|
|
241
|
+
isImplementationFile: isImplFile,
|
|
102
242
|
};
|
|
103
243
|
}
|
|
104
244
|
|
|
@@ -107,7 +247,8 @@ async function analyzeNodeCoverage(
|
|
|
107
247
|
*
|
|
108
248
|
* @param fileTree - FileTree representation of the codebase
|
|
109
249
|
* @param fileReader - Function to read file contents
|
|
110
|
-
* @
|
|
250
|
+
* @param config - Configuration for implementation file detection (optional)
|
|
251
|
+
* @returns Coverage metrics based on file instrumentation
|
|
111
252
|
*
|
|
112
253
|
* @example
|
|
113
254
|
* ```typescript
|
|
@@ -123,7 +264,8 @@ async function analyzeNodeCoverage(
|
|
|
123
264
|
*/
|
|
124
265
|
export async function analyzeCoverage(
|
|
125
266
|
fileTree: FileTree,
|
|
126
|
-
fileReader: (path: string) => Promise<string
|
|
267
|
+
fileReader: (path: string) => Promise<string>,
|
|
268
|
+
config: ImplementationFileConfig = DEFAULT_IMPLEMENTATION_CONFIG
|
|
127
269
|
): Promise<CoverageMetrics> {
|
|
128
270
|
// Use CanvasDiscovery to find all canvas files
|
|
129
271
|
const discovery = new CanvasDiscovery();
|
|
@@ -133,35 +275,53 @@ export async function analyzeCoverage(
|
|
|
133
275
|
});
|
|
134
276
|
|
|
135
277
|
// Filter for .otel.canvas files only
|
|
136
|
-
const otelCanvases = result.canvases.filter(c => c.type === 'otel');
|
|
278
|
+
const otelCanvases = result.canvases.filter(c => c.type === 'otel') as DiscoveredCanvasWithContent[];
|
|
137
279
|
|
|
138
|
-
|
|
280
|
+
// Build map of file -> expected events from canvas
|
|
281
|
+
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
139
282
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const canvasWithContent = canvas as DiscoveredCanvasWithContent;
|
|
283
|
+
// Get all implementation files from the codebase
|
|
284
|
+
const implementationFiles = new Set(getImplementationFiles(fileTree, config));
|
|
143
285
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
286
|
+
// Get all files referenced in canvas (for coverage denominator)
|
|
287
|
+
const referencedFiles = new Set(fileEventMap.keys());
|
|
147
288
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
289
|
+
// Combine: we want to check all files referenced in canvas that are also implementation files
|
|
290
|
+
const filesToCheck = new Set(
|
|
291
|
+
[...referencedFiles].filter(f => implementationFiles.has(f))
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
// Analyze each file
|
|
295
|
+
const fileCoverage: FileInstrumentation[] = [];
|
|
296
|
+
|
|
297
|
+
for (const filePath of filesToCheck) {
|
|
298
|
+
const expectedEvents = Array.from(fileEventMap.get(filePath) || []);
|
|
299
|
+
const coverage = await analyzeFileInstrumentation(
|
|
300
|
+
filePath,
|
|
301
|
+
expectedEvents,
|
|
302
|
+
fileReader,
|
|
303
|
+
implementationFiles.has(filePath)
|
|
304
|
+
);
|
|
305
|
+
fileCoverage.push(coverage);
|
|
152
306
|
}
|
|
153
307
|
|
|
154
|
-
|
|
155
|
-
const
|
|
308
|
+
// Calculate metrics
|
|
309
|
+
const filesWithInstrumentation = fileCoverage.filter(f => f.hasInstrumentation).length;
|
|
310
|
+
const totalImplementationFiles = filesToCheck.size;
|
|
311
|
+
const coveragePercentage = totalImplementationFiles > 0
|
|
312
|
+
? (filesWithInstrumentation / totalImplementationFiles) * 100
|
|
313
|
+
: 0;
|
|
314
|
+
|
|
315
|
+
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
316
|
+
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
156
317
|
|
|
157
318
|
return {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
? (nodesWithInstrumentation.length / nodesWithFiles.length) * 100
|
|
163
|
-
: 0,
|
|
164
|
-
nodeCoverage: allNodeCoverage,
|
|
319
|
+
totalImplementationFiles,
|
|
320
|
+
filesWithInstrumentation,
|
|
321
|
+
coveragePercentage,
|
|
322
|
+
fileCoverage,
|
|
165
323
|
canvasFiles: otelCanvases.map(c => c.path),
|
|
324
|
+
totalExpectedEvents,
|
|
325
|
+
totalFoundEvents,
|
|
166
326
|
};
|
|
167
327
|
}
|
package/src/types/canvas.ts
CHANGED
|
@@ -346,8 +346,18 @@ export interface PVOtelExtension {
|
|
|
346
346
|
*/
|
|
347
347
|
spanMatch?: PVOtelSpanMatch;
|
|
348
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Files where this event is instrumented
|
|
351
|
+
*
|
|
352
|
+
* Specifies the exact file paths where this OTEL event should be emitted.
|
|
353
|
+
* Used by coverage tools to validate that events are properly instrumented.
|
|
354
|
+
*
|
|
355
|
+
* @example ["src/app/api/auth/callback/route.ts"]
|
|
356
|
+
*/
|
|
357
|
+
files?: string[];
|
|
358
|
+
|
|
349
359
|
/** Allow additional properties */
|
|
350
|
-
[key: string]: JsonValue | PVOtelResourceMatch | PVOtelSpanMatch | undefined;
|
|
360
|
+
[key: string]: JsonValue | PVOtelResourceMatch | PVOtelSpanMatch | string[] | undefined;
|
|
351
361
|
}
|
|
352
362
|
|
|
353
363
|
/**
|