@@ -27,6 +27,7 @@ export interface TraceEntryTree {
2727 maxDepth : number ;
2828}
2929
30+ /** Node in the graph that defines all parent/child relationships. */
3031export interface TraceEntryNode {
3132 entry : Types . Events . Event ;
3233 depth : number ;
@@ -36,77 +37,75 @@ export interface TraceEntryNode {
3637 children : TraceEntryNode [ ] ;
3738}
3839
39- /**
40- * Represents a node in a trace entry tree, simplified for AI Assistance processing.
41- */
42- export class TraceEntryNodeForAI {
40+ /** Node in a graph simplified for AI Assistance processing. The graph mirrors the TraceEntryNode one. */
41+ export class AINode {
4342 id ?: TraceEntryNodeId ;
4443 domain ?: string ;
4544 line ?: number ;
4645 column ?: number ;
4746 function ?: string ;
48- children ?: TraceEntryNodeForAI [ ] ;
47+ children ?: AINode [ ] ;
4948 selected ?: boolean ;
5049
5150 constructor (
5251 public type : string , public start : Types . Timing . MilliSeconds , public end ?: Types . Timing . MilliSeconds ,
5352 public totalTime ?: Types . Timing . MilliSeconds , public selfTime ?: Types . Timing . MilliSeconds ) {
5453 }
5554
56- static #fromTraceEvent( event : Types . Events . Event ) : TraceEntryNodeForAI {
55+ static #fromTraceEvent( event : Types . Events . Event ) : AINode {
5756 const start = microSecondsToMilliseconds ( event . ts ) ;
5857 const duration = event . dur === undefined ? undefined : microSecondsToMilliseconds ( event . dur ) ;
59- const nodeForAI = new TraceEntryNodeForAI ( event . name , start , duration ) ;
58+ const aiNode = new AINode ( event . name , start , duration ) ;
6059 if ( Types . Events . isProfileCall ( event ) ) {
61- nodeForAI . function = event . callFrame . functionName || '(anonymous)' ;
60+ aiNode . function = event . callFrame . functionName || '(anonymous)' ;
6261 try {
6362 const url = new URL ( event . callFrame . url ) ;
64- nodeForAI . domain = url . origin ;
65- nodeForAI . line = event . callFrame . lineNumber ;
66- nodeForAI . column = event . callFrame . columnNumber ;
63+ aiNode . domain = url . origin ;
64+ aiNode . line = event . callFrame . lineNumber ;
65+ aiNode . column = event . callFrame . columnNumber ;
6766 } catch ( e ) {
6867 }
6968 }
70- return nodeForAI ;
69+ return aiNode ;
7170 }
7271
7372 /**
74- * Builds a TraceEntryNodeForAI tree from a TraceEntryNode tree and marks the selected node.
73+ * Builds a AINode tree from a TraceEntryNode tree and marks the selected node.
7574 */
76- static #fromTraceEntryTree ( node : TraceEntryNode , selectedEntryNode : TraceEntryNode ) : TraceEntryNodeForAI {
77- const nodeForAI = TraceEntryNodeForAI . #fromTraceEvent( node . entry ) ;
78- nodeForAI . id = node . id ;
79- if ( node === selectedEntryNode ) {
80- nodeForAI . selected = true ;
75+ static #fromEntryNodeAndTree ( node : TraceEntryNode , selectedNode : TraceEntryNode ) : AINode {
76+ const aiNode = AINode . #fromTraceEvent( node . entry ) ;
77+ aiNode . id = node . id ;
78+ if ( node === selectedNode ) {
79+ aiNode . selected = true ;
8180 }
82- nodeForAI . selfTime = node . selfTime === undefined ? undefined : microSecondsToMilliseconds ( node . selfTime ) ;
81+ aiNode . selfTime = node . selfTime === undefined ? undefined : microSecondsToMilliseconds ( node . selfTime ) ;
8382 for ( const child of node . children ) {
84- nodeForAI . children ??= [ ] ;
85- nodeForAI . children . push ( TraceEntryNodeForAI . #fromTraceEntryTree ( child , selectedEntryNode ) ) ;
83+ aiNode . children ??= [ ] ;
84+ aiNode . children . push ( AINode . #fromEntryNodeAndTree ( child , selectedNode ) ) ;
8685 }
87- return nodeForAI ;
86+ return aiNode ;
8887 }
8988
90- static fromSelectedEntryNode ( selectedEntryNode : TraceEntryNode ) : TraceEntryNodeForAI {
89+ static fromEntryNode ( selectedNode : TraceEntryNode ) : AINode {
9190 function getRoot ( node : TraceEntryNode ) : TraceEntryNode {
9291 if ( node . parent ) {
9392 return getRoot ( node . parent ) ;
9493 }
9594 return node ;
9695 }
9796
98- return TraceEntryNodeForAI . #fromTraceEntryTree ( getRoot ( selectedEntryNode ) , selectedEntryNode ) ;
97+ return AINode . #fromEntryNodeAndTree ( getRoot ( selectedNode ) , selectedNode ) ;
9998 }
10099
101- static getSelectedNodeForTraceEntryTreeForAI ( node : TraceEntryNodeForAI ) : TraceEntryNodeForAI | null {
100+ static getSelectedNodeWithinTree ( node : AINode ) : AINode | null {
102101 if ( node . selected ) {
103102 return node ;
104103 }
105104 if ( ! node . children ) {
106105 return null ;
107106 }
108107 for ( const child of node . children ) {
109- const returnedNode = TraceEntryNodeForAI . getSelectedNodeForTraceEntryTreeForAI ( child ) ;
108+ const returnedNode = AINode . getSelectedNodeWithinTree ( child ) ;
110109 if ( returnedNode ) {
111110 return returnedNode ;
112111 }
0 commit comments