@@ -77,20 +77,26 @@ def encode_with_session(p: Payload, sess: Session | None = None) -> str:
7777
7878 parts : list [str ] = []
7979
80+ # Build local ID mapping for this response.
81+ local_index : dict [str , int ] = {}
82+ for i , s in enumerate (p .symbols ):
83+ local_index [s .qualified_name ] = i
84+
85+ # Count valid edges.
86+ valid_edges = sum (
87+ 1 for e in p .edges
88+ if e .source in local_index and e .target in local_index
89+ )
90+
8091 # Header with session=true marker.
8192 header = (
8293 f"GCF tool={ p .tool } budget={ p .token_budget } tokens={ p .tokens_used } "
83- f"symbols={ len (p .symbols )} session=true"
94+ f"symbols={ len (p .symbols )} edges= { valid_edges } session=true"
8495 )
8596 if p .pack_root :
8697 header += f" pack_root={ p .pack_root } "
8798 parts .append (header )
8899
89- # Build local ID mapping for this response.
90- local_index : dict [str , int ] = {}
91- for i , s in enumerate (p .symbols ):
92- local_index [s .qualified_name ] = i
93-
94100 # Track which symbols are new (need full declaration).
95101 new_symbols : list [Symbol ] = []
96102
@@ -122,7 +128,7 @@ def encode_with_session(p: Payload, sess: Session | None = None) -> str:
122128
123129 # Edges section.
124130 if p .edges :
125- parts .append ("## edges" )
131+ parts .append (f "## edges [ { valid_edges } ] " )
126132 for e in p .edges :
127133 src_idx = local_index .get (e .source )
128134 tgt_idx = local_index .get (e .target )
0 commit comments