@@ -158,6 +158,14 @@ export interface Neo4jEdgeProperties {
158158 source : 'ast' | 'decorator' | 'pattern' | 'inference' ;
159159 confidence : number ;
160160
161+ // === TRAVERSAL SCORING ===
162+ /**
163+ * Weight for traversal prioritization (0.0 - 1.0)
164+ * Higher weights indicate more important relationships to follow
165+ * Used in combination with query relevance and depth penalty
166+ */
167+ relationshipWeight : number ;
168+
161169 // === CORE METADATA ===
162170 filePath : string ;
163171 createdAt : string ;
@@ -278,6 +286,31 @@ export interface ContextExtractor {
278286 priority : number ;
279287}
280288
289+ /**
290+ * Relationship Extractor Definition
291+ * Maps an edge type to the AST method that extracts the related node(s)
292+ */
293+ export interface RelationshipExtractor {
294+ edgeType : CoreEdgeType ;
295+ /**
296+ * AST method name to call on the source node
297+ * - For single node: 'getBaseClass', 'getReturnTypeNode'
298+ * - For array of nodes: 'getImplements', 'getTypeArguments'
299+ */
300+ method : string ;
301+ /**
302+ * Whether the method returns a single node or an array
303+ * - 'single': Method returns one node (e.g., getBaseClass)
304+ * - 'array': Method returns array of nodes (e.g., getImplements)
305+ */
306+ cardinality : 'single' | 'array' ;
307+ /**
308+ * The target node type to create/link to
309+ * Used to find existing nodes or create new ones
310+ */
311+ targetNodeType : CoreNodeType ;
312+ }
313+
281314/**
282315 * Core Schema Node Definition
283316 */
@@ -286,7 +319,13 @@ export interface CoreNode {
286319 astNodeKind : number ;
287320 astGetter : string ; // Method name to call on parent AST node (e.g., 'getMethods', 'getProperties')
288321 properties : PropertyDefinition [ ] ;
289- relationships : CoreEdgeType [ ] ;
322+
323+ /**
324+ * Relationship extractors - defines how to find related nodes and create edges
325+ * Unlike 'children' which handles containment, these handle references to other nodes
326+ * Example: Class EXTENDS BaseClass, Class IMPLEMENTS Interface
327+ */
328+ relationships ?: RelationshipExtractor [ ] ;
290329
291330 // Children map - defines what child nodes to parse and what edge to create
292331 // Key: Child CoreNodeType, Value: Edge type to create between parent and child
@@ -308,6 +347,11 @@ export interface CoreEdge {
308347 sourceTypes : CoreNodeType [ ] ;
309348 targetTypes : CoreNodeType [ ] ;
310349 properties : PropertyDefinition [ ] ;
350+ /**
351+ * Default traversal weight for this core edge type (0.0 - 1.0)
352+ * Can be overridden by framework-specific edge enhancements
353+ */
354+ relationshipWeight : number ;
311355 neo4j : {
312356 relationshipType : string ;
313357 direction : 'OUTGOING' | 'INCOMING' | 'BIDIRECTIONAL' ;
@@ -351,6 +395,17 @@ export interface FrameworkEnhancement {
351395export interface EdgeEnhancement {
352396 name : string ;
353397 semanticType : string ; // Can be SemanticEdgeType or framework-specific edge type
398+ /**
399+ * Traversal weight for this relationship type (0.0 - 1.0)
400+ * Higher weights = more important to follow during traversal
401+ *
402+ * Weight tiers:
403+ * - Critical (0.9-1.0): Primary architectural relationships (INJECTS, EXPOSES)
404+ * - High (0.7-0.8): Important semantic relationships (GUARDED_BY, MODULE_IMPORTS)
405+ * - Medium (0.5-0.6): Supporting relationships (VALIDATES, TRANSFORMS)
406+ * - Low (0.3-0.4): Structural relationships (CONTAINS, DECORATED_WITH)
407+ */
408+ relationshipWeight : number ;
354409 detectionPattern : (
355410 parsedSourceNode : ParsedNode ,
356411 parsedTargetNode : ParsedNode ,
@@ -437,7 +492,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
437492 neo4j : { indexed : true , unique : false , required : true } ,
438493 } ,
439494 ] ,
440- relationships : [ CoreEdgeType . CONTAINS , CoreEdgeType . IMPORTS , CoreEdgeType . EXPORTS ] ,
495+ relationships : [ ] , // SourceFile doesn't have reference relationships, only containment
441496 children : {
442497 [ CoreNodeType . CLASS_DECLARATION ] : CoreEdgeType . CONTAINS ,
443498 [ CoreNodeType . INTERFACE_DECLARATION ] : CoreEdgeType . CONTAINS ,
@@ -482,10 +537,18 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
482537 } ,
483538 ] ,
484539 relationships : [
485- CoreEdgeType . HAS_MEMBER ,
486- CoreEdgeType . EXTENDS ,
487- CoreEdgeType . IMPLEMENTS ,
488- CoreEdgeType . DECORATED_WITH ,
540+ {
541+ edgeType : CoreEdgeType . EXTENDS ,
542+ method : 'getBaseClass' ,
543+ cardinality : 'single' ,
544+ targetNodeType : CoreNodeType . CLASS_DECLARATION ,
545+ } ,
546+ {
547+ edgeType : CoreEdgeType . IMPLEMENTS ,
548+ method : 'getImplements' ,
549+ cardinality : 'array' ,
550+ targetNodeType : CoreNodeType . INTERFACE_DECLARATION ,
551+ } ,
489552 ] ,
490553 children : {
491554 [ CoreNodeType . METHOD_DECLARATION ] : CoreEdgeType . HAS_MEMBER ,
@@ -531,7 +594,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
531594 neo4j : { indexed : true , unique : false , required : true } ,
532595 } ,
533596 ] ,
534- relationships : [ CoreEdgeType . HAS_PARAMETER , CoreEdgeType . CALLS , CoreEdgeType . DECORATED_WITH ] ,
597+ relationships : [ ] , // CALLS would need call-site analysis, not implemented yet
535598 children : {
536599 [ CoreNodeType . PARAMETER_DECLARATION ] : CoreEdgeType . HAS_PARAMETER ,
537600 [ CoreNodeType . DECORATOR ] : CoreEdgeType . DECORATED_WITH ,
@@ -574,7 +637,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
574637 neo4j : { indexed : true , unique : false , required : true } ,
575638 } ,
576639 ] ,
577- relationships : [ CoreEdgeType . TYPED_AS , CoreEdgeType . DECORATED_WITH ] ,
640+ relationships : [ ] , // TYPED_AS would need type resolution, not implemented yet
578641 children : {
579642 [ CoreNodeType . DECORATOR ] : CoreEdgeType . DECORATED_WITH ,
580643 } ,
@@ -598,7 +661,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
598661 neo4j : { indexed : true , unique : false , required : true } ,
599662 } ,
600663 ] ,
601- relationships : [ CoreEdgeType . TYPED_AS , CoreEdgeType . DECORATED_WITH ] ,
664+ relationships : [ ] , // TYPED_AS would need type resolution, not implemented yet
602665 children : {
603666 [ CoreNodeType . DECORATOR ] : CoreEdgeType . DECORATED_WITH ,
604667 } ,
@@ -622,7 +685,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
622685 neo4j : { indexed : true , unique : false , required : true } ,
623686 } ,
624687 ] ,
625- relationships : [ CoreEdgeType . IMPORTS ] ,
688+ relationships : [ ] , // IMPORTS to SourceFile would need module resolution
626689 children : { } ,
627690 neo4j : {
628691 labels : [ 'Import' , 'TypeScript' ] ,
@@ -672,7 +735,14 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
672735 neo4j : { indexed : true , unique : false , required : true } ,
673736 } ,
674737 ] ,
675- relationships : [ CoreEdgeType . EXTENDS , CoreEdgeType . HAS_MEMBER ] ,
738+ relationships : [
739+ {
740+ edgeType : CoreEdgeType . EXTENDS ,
741+ method : 'getExtends' ,
742+ cardinality : 'array' ,
743+ targetNodeType : CoreNodeType . INTERFACE_DECLARATION ,
744+ } ,
745+ ] ,
676746 children : { } ,
677747 neo4j : {
678748 labels : [ 'Interface' , 'TypeScript' ] ,
@@ -727,7 +797,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
727797 neo4j : { indexed : true , unique : false , required : true } ,
728798 } ,
729799 ] ,
730- relationships : [ CoreEdgeType . HAS_PARAMETER , CoreEdgeType . CALLS ] ,
800+ relationships : [ ] , // CALLS would need call-site analysis, not implemented yet
731801 children : {
732802 [ CoreNodeType . PARAMETER_DECLARATION ] : CoreEdgeType . HAS_PARAMETER ,
733803 } ,
@@ -772,7 +842,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
772842 neo4j : { indexed : true , unique : false , required : true } ,
773843 } ,
774844 ] ,
775- relationships : [ CoreEdgeType . HAS_PARAMETER ] ,
845+ relationships : [ ] , // Parameters are handled via children, not relationship extractors
776846 children : {
777847 [ CoreNodeType . PARAMETER_DECLARATION ] : CoreEdgeType . HAS_PARAMETER ,
778848 } ,
@@ -832,6 +902,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
832902 neo4j : { indexed : true , unique : false , required : true } ,
833903 } ,
834904 ] ,
905+ relationshipWeight : 0.4 , // Structural - useful but not primary focus
835906 neo4j : {
836907 relationshipType : 'CONTAINS' ,
837908 direction : 'OUTGOING' ,
@@ -860,6 +931,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
860931 neo4j : { indexed : true , unique : false , required : true } ,
861932 } ,
862933 ] ,
934+ relationshipWeight : 0.6 , // Medium - important for understanding class structure
863935 neo4j : {
864936 relationshipType : 'HAS_MEMBER' ,
865937 direction : 'OUTGOING' ,
@@ -888,6 +960,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
888960 neo4j : { indexed : true , unique : false , required : true } ,
889961 } ,
890962 ] ,
963+ relationshipWeight : 0.35 , // Low - rarely primary traversal target
891964 neo4j : {
892965 relationshipType : 'HAS_PARAMETER' ,
893966 direction : 'OUTGOING' ,
@@ -917,6 +990,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
917990 neo4j : { indexed : true , unique : false , required : true } ,
918991 } ,
919992 ] ,
993+ relationshipWeight : 0.3 , // Low - metadata, not code flow
920994 neo4j : {
921995 relationshipType : 'DECORATED_WITH' ,
922996 direction : 'OUTGOING' ,
@@ -941,6 +1015,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
9411015 neo4j : { indexed : true , unique : false , required : true } ,
9421016 } ,
9431017 ] ,
1018+ relationshipWeight : 0.55 , // Medium - useful for dependency tracing
9441019 neo4j : {
9451020 relationshipType : 'IMPORTS' ,
9461021 direction : 'OUTGOING' ,
@@ -969,6 +1044,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
9691044 neo4j : { indexed : true , unique : false , required : true } ,
9701045 } ,
9711046 ] ,
1047+ relationshipWeight : 0.5 , // Medium - public API surface
9721048 neo4j : {
9731049 relationshipType : 'EXPORTS' ,
9741050 direction : 'OUTGOING' ,
@@ -993,6 +1069,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
9931069 neo4j : { indexed : true , unique : false , required : true } ,
9941070 } ,
9951071 ] ,
1072+ relationshipWeight : 0.85 , // High - inheritance is critical for understanding
9961073 neo4j : {
9971074 relationshipType : 'EXTENDS' ,
9981075 direction : 'OUTGOING' ,
@@ -1017,6 +1094,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
10171094 neo4j : { indexed : true , unique : false , required : true } ,
10181095 } ,
10191096 ] ,
1097+ relationshipWeight : 0.75 , // High - contract relationships are important
10201098 neo4j : {
10211099 relationshipType : 'IMPLEMENTS' ,
10221100 direction : 'OUTGOING' ,
@@ -1041,6 +1119,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
10411119 neo4j : { indexed : true , unique : false , required : true } ,
10421120 } ,
10431121 ] ,
1122+ relationshipWeight : 0.5 , // Medium - type info useful but not primary
10441123 neo4j : {
10451124 relationshipType : 'TYPED_AS' ,
10461125 direction : 'OUTGOING' ,
@@ -1065,6 +1144,7 @@ export const CORE_TYPESCRIPT_SCHEMA: CoreTypeScriptSchema = {
10651144 neo4j : { indexed : true , unique : false , required : true } ,
10661145 } ,
10671146 ] ,
1147+ relationshipWeight : 0.85 , // Critical - execution flow is primary
10681148 neo4j : {
10691149 relationshipType : 'CALLS' ,
10701150 direction : 'OUTGOING' ,
0 commit comments