@principal-ai/principal-view-core 0.21.3 → 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 +18 -14
- package/dist/telemetry/coverage.d.ts.map +1 -1
- package/dist/telemetry/coverage.js +45 -88
- package/dist/telemetry/coverage.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -2
- package/src/node.ts +2 -2
- package/src/telemetry/coverage.ts +71 -107
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":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,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,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAEV,6BAA6B,EAC7B,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,cAAc,EACd,wBAAwB,EAExB,SAAS,EACT,iBAAiB,EAEjB,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EACV,aAAa,EACb,eAAe,EACf,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACrF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,YAAY,EACZ,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC"}
|
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,13 +31,27 @@ export interface CoverageMetrics {
|
|
|
41
31
|
canvasFiles: string[];
|
|
42
32
|
totalExpectedEvents: number;
|
|
43
33
|
totalFoundEvents: number;
|
|
34
|
+
packageCoverage: PackageCoverageMetrics[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Per-package coverage metrics
|
|
38
|
+
*/
|
|
39
|
+
export interface PackageCoverageMetrics {
|
|
40
|
+
packageName: string;
|
|
41
|
+
packagePath: string;
|
|
42
|
+
totalFiles: number;
|
|
43
|
+
filesWithInstrumentation: number;
|
|
44
|
+
coveragePercentage: number;
|
|
45
|
+
filesByExtension: Record<string, number>;
|
|
44
46
|
}
|
|
45
47
|
/**
|
|
46
48
|
* Generate telemetry coverage report from canvas files
|
|
47
49
|
*
|
|
50
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
51
|
+
* framework-aware detection of implementation files.
|
|
52
|
+
*
|
|
48
53
|
* @param fileTree - FileTree representation of the codebase
|
|
49
54
|
* @param fileReader - Function to read file contents
|
|
50
|
-
* @param config - Configuration for implementation file detection (optional)
|
|
51
55
|
* @returns Coverage metrics based on file instrumentation
|
|
52
56
|
*
|
|
53
57
|
* @example
|
|
@@ -62,5 +66,5 @@ export interface CoverageMetrics {
|
|
|
62
66
|
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
63
67
|
* ```
|
|
64
68
|
*/
|
|
65
|
-
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>;
|
|
66
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,92 +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
|
-
* Default configuration for implementation files
|
|
12
|
-
*/
|
|
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
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
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
|
-
}
|
|
11
|
+
import { ImplementationFileLayerModule, PackageLayerModule, } from '@principal-ai/codebase-composition';
|
|
93
12
|
/**
|
|
94
13
|
* Extract event name from a canvas node
|
|
95
14
|
*/
|
|
@@ -161,12 +80,34 @@ async function analyzeFileInstrumentation(filePath, expectedEvents, fileReader,
|
|
|
161
80
|
isImplementationFile: isImplFile,
|
|
162
81
|
};
|
|
163
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Get implementation files using codebase-composition's ImplementationFileLayerModule
|
|
85
|
+
* This provides accurate detection with framework-awareness and package boundaries
|
|
86
|
+
*/
|
|
87
|
+
async function getImplementationFilesFromLayer(fileTree) {
|
|
88
|
+
// Detect packages
|
|
89
|
+
const packageModule = new PackageLayerModule();
|
|
90
|
+
const packageLayers = await packageModule.discoverPackages(fileTree);
|
|
91
|
+
// Get implementation files per package
|
|
92
|
+
const implModule = new ImplementationFileLayerModule();
|
|
93
|
+
const implLayers = implModule.createImplementationFileLayers(packageLayers, fileTree);
|
|
94
|
+
// Flatten to set of file paths
|
|
95
|
+
const files = new Set();
|
|
96
|
+
for (const layer of implLayers) {
|
|
97
|
+
for (const file of layer.implementationData.implementationFiles) {
|
|
98
|
+
files.add(file);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return { files, layers: implLayers };
|
|
102
|
+
}
|
|
164
103
|
/**
|
|
165
104
|
* Generate telemetry coverage report from canvas files
|
|
166
105
|
*
|
|
106
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
107
|
+
* framework-aware detection of implementation files.
|
|
108
|
+
*
|
|
167
109
|
* @param fileTree - FileTree representation of the codebase
|
|
168
110
|
* @param fileReader - Function to read file contents
|
|
169
|
-
* @param config - Configuration for implementation file detection (optional)
|
|
170
111
|
* @returns Coverage metrics based on file instrumentation
|
|
171
112
|
*
|
|
172
113
|
* @example
|
|
@@ -181,7 +122,7 @@ async function analyzeFileInstrumentation(filePath, expectedEvents, fileReader,
|
|
|
181
122
|
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
182
123
|
* ```
|
|
183
124
|
*/
|
|
184
|
-
export async function analyzeCoverage(fileTree, fileReader
|
|
125
|
+
export async function analyzeCoverage(fileTree, fileReader) {
|
|
185
126
|
// Use CanvasDiscovery to find all canvas files
|
|
186
127
|
const discovery = new CanvasDiscovery();
|
|
187
128
|
const result = await discovery.discover(fileTree, {
|
|
@@ -192,8 +133,8 @@ export async function analyzeCoverage(fileTree, fileReader, config = DEFAULT_IMP
|
|
|
192
133
|
const otelCanvases = result.canvases.filter(c => c.type === 'otel');
|
|
193
134
|
// Build map of file -> expected events from canvas
|
|
194
135
|
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
195
|
-
// Get all implementation files from the codebase
|
|
196
|
-
const implementationFiles =
|
|
136
|
+
// Get all implementation files from the codebase using implementation layer
|
|
137
|
+
const { files: implementationFiles, layers: implLayers } = await getImplementationFilesFromLayer(fileTree);
|
|
197
138
|
// Get all files referenced in canvas (for coverage denominator)
|
|
198
139
|
const referencedFiles = new Set(fileEventMap.keys());
|
|
199
140
|
// Combine: we want to check all files referenced in canvas that are also implementation files
|
|
@@ -213,6 +154,21 @@ export async function analyzeCoverage(fileTree, fileReader, config = DEFAULT_IMP
|
|
|
213
154
|
: 0;
|
|
214
155
|
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
215
156
|
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
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
|
+
});
|
|
216
172
|
return {
|
|
217
173
|
totalImplementationFiles,
|
|
218
174
|
filesWithInstrumentation,
|
|
@@ -221,6 +177,7 @@ export async function analyzeCoverage(fileTree, fileReader, config = DEFAULT_IMP
|
|
|
221
177
|
canvasFiles: otelCanvases.map(c => c.path),
|
|
222
178
|
totalExpectedEvents,
|
|
223
179
|
totalFoundEvents,
|
|
180
|
+
packageCoverage,
|
|
224
181
|
};
|
|
225
182
|
}
|
|
226
183
|
//# sourceMappingURL=coverage.js.map
|
|
@@ -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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@principal-ai/principal-view-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Core logic and types for graph-based principal view framework",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@opentelemetry/resources": "2.2.0",
|
|
42
42
|
"@opentelemetry/sdk-trace-base": "2.2.0",
|
|
43
43
|
"@opentelemetry/semantic-conventions": "1.38.0",
|
|
44
|
-
"@principal-ai/codebase-composition": "^0.2.
|
|
44
|
+
"@principal-ai/codebase-composition": "^0.2.43",
|
|
45
45
|
"@principal-ai/repository-abstraction": "^0.5.3",
|
|
46
46
|
"date-fns": "3.0.0",
|
|
47
47
|
"handlebars": "^4.7.8",
|
package/src/index.ts
CHANGED
|
@@ -160,11 +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
|
-
|
|
167
|
+
PackageCoverageMetrics,
|
|
168
168
|
} from './telemetry/coverage';
|
|
169
169
|
|
|
170
170
|
// Export path-based processing (browser-safe - Milestone 1 & 2)
|
package/src/node.ts
CHANGED
|
@@ -46,11 +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
|
-
|
|
53
|
+
PackageCoverageMetrics,
|
|
54
54
|
} from './telemetry/coverage';
|
|
55
55
|
|
|
56
56
|
// Export code generation (Node.js only - file system operations)
|
|
@@ -4,61 +4,19 @@
|
|
|
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';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
};
|
|
15
|
+
import {
|
|
16
|
+
ImplementationFileLayerModule,
|
|
17
|
+
PackageLayerModule,
|
|
18
|
+
type ImplementationFileLayer,
|
|
19
|
+
} from '@principal-ai/codebase-composition';
|
|
62
20
|
|
|
63
21
|
/**
|
|
64
22
|
* Per-file instrumentation details
|
|
@@ -91,63 +49,21 @@ export interface CoverageMetrics {
|
|
|
91
49
|
// Summary stats
|
|
92
50
|
totalExpectedEvents: number;
|
|
93
51
|
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);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Check if a file is an implementation file based on patterns
|
|
118
|
-
*/
|
|
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
|
-
}
|
|
129
|
-
|
|
130
|
-
// Check if included
|
|
131
|
-
for (const pattern of config.include) {
|
|
132
|
-
if (matchesPattern(filePath, pattern)) {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
52
|
|
|
137
|
-
|
|
53
|
+
// Per-package breakdown
|
|
54
|
+
packageCoverage: PackageCoverageMetrics[];
|
|
138
55
|
}
|
|
139
56
|
|
|
140
57
|
/**
|
|
141
|
-
*
|
|
58
|
+
* Per-package coverage metrics
|
|
142
59
|
*/
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
.filter(filePath => isImplementationFile(filePath, config));
|
|
60
|
+
export interface PackageCoverageMetrics {
|
|
61
|
+
packageName: string;
|
|
62
|
+
packagePath: string;
|
|
63
|
+
totalFiles: number;
|
|
64
|
+
filesWithInstrumentation: number;
|
|
65
|
+
coveragePercentage: number;
|
|
66
|
+
filesByExtension: Record<string, number>;
|
|
151
67
|
}
|
|
152
68
|
|
|
153
69
|
/**
|
|
@@ -242,12 +158,40 @@ async function analyzeFileInstrumentation(
|
|
|
242
158
|
};
|
|
243
159
|
}
|
|
244
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Get implementation files using codebase-composition's ImplementationFileLayerModule
|
|
163
|
+
* This provides accurate detection with framework-awareness and package boundaries
|
|
164
|
+
*/
|
|
165
|
+
async function getImplementationFilesFromLayer(
|
|
166
|
+
fileTree: FileTree
|
|
167
|
+
): Promise<{ files: Set<string>; layers: ImplementationFileLayer[] }> {
|
|
168
|
+
// Detect packages
|
|
169
|
+
const packageModule = new PackageLayerModule();
|
|
170
|
+
const packageLayers = await packageModule.discoverPackages(fileTree);
|
|
171
|
+
|
|
172
|
+
// Get implementation files per package
|
|
173
|
+
const implModule = new ImplementationFileLayerModule();
|
|
174
|
+
const implLayers = implModule.createImplementationFileLayers(packageLayers, fileTree);
|
|
175
|
+
|
|
176
|
+
// Flatten to set of file paths
|
|
177
|
+
const files = new Set<string>();
|
|
178
|
+
for (const layer of implLayers) {
|
|
179
|
+
for (const file of layer.implementationData.implementationFiles) {
|
|
180
|
+
files.add(file);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return { files, layers: implLayers };
|
|
185
|
+
}
|
|
186
|
+
|
|
245
187
|
/**
|
|
246
188
|
* Generate telemetry coverage report from canvas files
|
|
247
189
|
*
|
|
190
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
191
|
+
* framework-aware detection of implementation files.
|
|
192
|
+
*
|
|
248
193
|
* @param fileTree - FileTree representation of the codebase
|
|
249
194
|
* @param fileReader - Function to read file contents
|
|
250
|
-
* @param config - Configuration for implementation file detection (optional)
|
|
251
195
|
* @returns Coverage metrics based on file instrumentation
|
|
252
196
|
*
|
|
253
197
|
* @example
|
|
@@ -264,8 +208,7 @@ async function analyzeFileInstrumentation(
|
|
|
264
208
|
*/
|
|
265
209
|
export async function analyzeCoverage(
|
|
266
210
|
fileTree: FileTree,
|
|
267
|
-
fileReader: (path: string) => Promise<string
|
|
268
|
-
config: ImplementationFileConfig = DEFAULT_IMPLEMENTATION_CONFIG
|
|
211
|
+
fileReader: (path: string) => Promise<string>
|
|
269
212
|
): Promise<CoverageMetrics> {
|
|
270
213
|
// Use CanvasDiscovery to find all canvas files
|
|
271
214
|
const discovery = new CanvasDiscovery();
|
|
@@ -280,8 +223,8 @@ export async function analyzeCoverage(
|
|
|
280
223
|
// Build map of file -> expected events from canvas
|
|
281
224
|
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
282
225
|
|
|
283
|
-
// Get all implementation files from the codebase
|
|
284
|
-
const implementationFiles =
|
|
226
|
+
// Get all implementation files from the codebase using implementation layer
|
|
227
|
+
const { files: implementationFiles, layers: implLayers } = await getImplementationFilesFromLayer(fileTree);
|
|
285
228
|
|
|
286
229
|
// Get all files referenced in canvas (for coverage denominator)
|
|
287
230
|
const referencedFiles = new Set(fileEventMap.keys());
|
|
@@ -315,6 +258,26 @@ export async function analyzeCoverage(
|
|
|
315
258
|
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
316
259
|
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
317
260
|
|
|
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
|
+
});
|
|
280
|
+
|
|
318
281
|
return {
|
|
319
282
|
totalImplementationFiles,
|
|
320
283
|
filesWithInstrumentation,
|
|
@@ -323,5 +286,6 @@ export async function analyzeCoverage(
|
|
|
323
286
|
canvasFiles: otelCanvases.map(c => c.path),
|
|
324
287
|
totalExpectedEvents,
|
|
325
288
|
totalFoundEvents,
|
|
289
|
+
packageCoverage,
|
|
326
290
|
};
|
|
327
291
|
}
|