@@ -1073,26 +1073,80 @@ export async function handle(
10731073 const nextHops = buildNextHops ( compactResults , searchQuality ) ;
10741074 const payloadText = finalizeSearchPayloadText (
10751075 {
1076+ status : 'success' ,
1077+ searchQuality : searchQualityBlock ,
1078+ budget : { mode : 'compact' , resultCount : compactResults . length } ,
1079+ ...( preflightPayload && { preflight : preflightPayload } ) ,
1080+ ...( patternSummary && { patternSummary } ) ,
1081+ ...( bestExample && { bestExample } ) ,
1082+ ...( nextHops . length > 0 && { nextHops } ) ,
1083+ results : compactResults . map ( ( r ) => {
1084+ const importedByCount = getImportedByCount ( r ) ;
1085+ const topExports = getTopExports ( r . filePath ) ;
1086+ const scope = buildScopeHeader ( r . metadata ) ;
1087+ // First 3 lines of chunk content as a lightweight signature preview
1088+ const signaturePreview = r . snippet
1089+ ? r . snippet
1090+ . replace ( / ^ \r ? \n + / , '' )
1091+ . split ( '\n' )
1092+ . slice ( 0 , 3 )
1093+ . join ( '\n' )
1094+ . trim ( ) || undefined
1095+ : undefined ;
1096+ return {
1097+ file : `${ r . filePath } :${ r . startLine } -${ r . endLine } ` ,
1098+ summary : r . summary ,
1099+ score : Math . round ( r . score * 100 ) / 100 ,
1100+ ...( r . relevanceReason && { relevanceReason : r . relevanceReason } ) ,
1101+ ...( r . componentType &&
1102+ r . layer &&
1103+ r . layer !== 'unknown' && { type : `${ r . componentType } :${ r . layer } ` } ) ,
1104+ ...( r . trend && r . trend !== 'Stable' && { trend : r . trend } ) ,
1105+ ...( r . patternWarning && { patternWarning : r . patternWarning } ) ,
1106+ importedByCount,
1107+ ...( topExports . length > 0 && { topExports } ) ,
1108+ ...( r . layer && r . layer !== 'unknown' && { layer : r . layer } ) ,
1109+ // Structural metadata: surface AST intelligence already computed at index time
1110+ ...( r . metadata ?. symbolName && { symbol : r . metadata . symbolName } ) ,
1111+ ...( r . metadata ?. symbolKind && { symbolKind : r . metadata . symbolKind } ) ,
1112+ ...( scope && { scope } ) ,
1113+ ...( signaturePreview && { signaturePreview } )
1114+ } ;
1115+ } ) ,
1116+ ...( strongMemories . length > 0 && {
1117+ relatedMemories : strongMemories . map ( ( m ) => `${ m . memory } (${ m . effectiveConfidence } )` )
1118+ } )
1119+ } ,
1120+ { mode : 'compact' , pretty : true , transportAware : true }
1121+ ) ;
1122+
1123+ return {
1124+ content : [
1125+ {
1126+ type : 'text' ,
1127+ text : payloadText
1128+ }
1129+ ]
1130+ } ;
1131+ }
1132+
1133+ // Full mode: today's response shape + budget + relevanceReason; consumers removed
1134+ const payloadText = finalizeSearchPayloadText (
1135+ {
10761136 status : 'success' ,
10771137 searchQuality : searchQualityBlock ,
1078- budget : { mode : 'compact ' , resultCount : compactResults . length } ,
1138+ budget : { mode : 'full ' , resultCount : results . length } ,
10791139 ...( preflightPayload && { preflight : preflightPayload } ) ,
1080- ...( patternSummary && { patternSummary } ) ,
1081- ...( bestExample && { bestExample } ) ,
1082- ...( nextHops . length > 0 && { nextHops } ) ,
1083- results : compactResults . map ( ( r ) => {
1084- const importedByCount = getImportedByCount ( r ) ;
1085- const topExports = getTopExports ( r . filePath ) ;
1086- const scope = buildScopeHeader ( r . metadata ) ;
1087- // First 3 lines of chunk content as a lightweight signature preview
1088- const signaturePreview = r . snippet
1089- ? r . snippet
1090- . replace ( / ^ \r ? \n + / , '' )
1091- . split ( '\n' )
1092- . slice ( 0 , 3 )
1093- . join ( '\n' )
1094- . trim ( ) || undefined
1140+ results : results . map ( ( r ) => {
1141+ const relationshipsAndHints = buildRelationshipHints ( r ) ;
1142+ const enrichedSnippet = includeSnippets
1143+ ? enrichSnippetWithScope ( r . snippet , r . metadata , r . filePath , r . startLine )
10951144 : undefined ;
1145+ const scope = buildScopeHeader ( r . metadata ) ;
1146+ // Chunk-level imports/exports (top 5 each) + complexity
1147+ const chunkImports = ( r as unknown as { imports ?: string [ ] } ) . imports ?. slice ( 0 , 5 ) ;
1148+ const chunkExports = ( r as unknown as { exports ?: string [ ] } ) . exports ?. slice ( 0 , 5 ) ;
1149+
10961150 return {
10971151 file : `${ r . filePath } :${ r . startLine } -${ r . endLine } ` ,
10981152 summary : r . summary ,
@@ -1103,82 +1157,28 @@ export async function handle(
11031157 r . layer !== 'unknown' && { type : `${ r . componentType } :${ r . layer } ` } ) ,
11041158 ...( r . trend && r . trend !== 'Stable' && { trend : r . trend } ) ,
11051159 ...( r . patternWarning && { patternWarning : r . patternWarning } ) ,
1106- importedByCount,
1107- ...( topExports . length > 0 && { topExports } ) ,
1108- ...( r . layer && r . layer !== 'unknown' && { layer : r . layer } ) ,
1109- // Structural metadata: surface AST intelligence already computed at index time
1160+ ...( relationshipsAndHints . relationships && {
1161+ relationships : relationshipsAndHints . relationships
1162+ } ) ,
1163+ ...( relationshipsAndHints . hints && { hints : relationshipsAndHints . hints } ) ,
1164+ ...( enrichedSnippet && { snippet : enrichedSnippet } ) ,
1165+ // Structural metadata
11101166 ...( r . metadata ?. symbolName && { symbol : r . metadata . symbolName } ) ,
11111167 ...( r . metadata ?. symbolKind && { symbolKind : r . metadata . symbolKind } ) ,
11121168 ...( scope && { scope } ) ,
1113- ...( signaturePreview && { signaturePreview } )
1169+ ...( chunkImports && chunkImports . length > 0 && { imports : chunkImports } ) ,
1170+ ...( chunkExports && chunkExports . length > 0 && { exports : chunkExports } ) ,
1171+ ...( r . metadata ?. cyclomaticComplexity && {
1172+ complexity : r . metadata . cyclomaticComplexity
1173+ } )
11141174 } ;
11151175 } ) ,
1116- ...( strongMemories . length > 0 && {
1117- relatedMemories : strongMemories . map ( ( m ) => `${ m . memory } (${ m . effectiveConfidence } )` )
1176+ totalResults : results . length ,
1177+ ...( relatedMemories . length > 0 && {
1178+ relatedMemories : relatedMemories
1179+ . slice ( 0 , 3 )
1180+ . map ( ( m ) => `${ m . memory } (${ m . effectiveConfidence } )` )
11181181 } )
1119- } ,
1120- { mode : 'compact' , pretty : true , transportAware : true }
1121- ) ;
1122-
1123- return {
1124- content : [
1125- {
1126- type : 'text' ,
1127- text : payloadText
1128- }
1129- ]
1130- } ;
1131- }
1132-
1133- // Full mode: today's response shape + budget + relevanceReason; consumers removed
1134- const payloadText = finalizeSearchPayloadText (
1135- {
1136- status : 'success' ,
1137- searchQuality : searchQualityBlock ,
1138- budget : { mode : 'full' , resultCount : results . length } ,
1139- ...( preflightPayload && { preflight : preflightPayload } ) ,
1140- results : results . map ( ( r ) => {
1141- const relationshipsAndHints = buildRelationshipHints ( r ) ;
1142- const enrichedSnippet = includeSnippets
1143- ? enrichSnippetWithScope ( r . snippet , r . metadata , r . filePath , r . startLine )
1144- : undefined ;
1145- const scope = buildScopeHeader ( r . metadata ) ;
1146- // Chunk-level imports/exports (top 5 each) + complexity
1147- const chunkImports = ( r as unknown as { imports ?: string [ ] } ) . imports ?. slice ( 0 , 5 ) ;
1148- const chunkExports = ( r as unknown as { exports ?: string [ ] } ) . exports ?. slice ( 0 , 5 ) ;
1149-
1150- return {
1151- file : `${ r . filePath } :${ r . startLine } -${ r . endLine } ` ,
1152- summary : r . summary ,
1153- score : Math . round ( r . score * 100 ) / 100 ,
1154- ...( r . relevanceReason && { relevanceReason : r . relevanceReason } ) ,
1155- ...( r . componentType &&
1156- r . layer &&
1157- r . layer !== 'unknown' && { type : `${ r . componentType } :${ r . layer } ` } ) ,
1158- ...( r . trend && r . trend !== 'Stable' && { trend : r . trend } ) ,
1159- ...( r . patternWarning && { patternWarning : r . patternWarning } ) ,
1160- ...( relationshipsAndHints . relationships && {
1161- relationships : relationshipsAndHints . relationships
1162- } ) ,
1163- ...( relationshipsAndHints . hints && { hints : relationshipsAndHints . hints } ) ,
1164- ...( enrichedSnippet && { snippet : enrichedSnippet } ) ,
1165- // Structural metadata
1166- ...( r . metadata ?. symbolName && { symbol : r . metadata . symbolName } ) ,
1167- ...( r . metadata ?. symbolKind && { symbolKind : r . metadata . symbolKind } ) ,
1168- ...( scope && { scope } ) ,
1169- ...( chunkImports && chunkImports . length > 0 && { imports : chunkImports } ) ,
1170- ...( chunkExports && chunkExports . length > 0 && { exports : chunkExports } ) ,
1171- ...( r . metadata ?. cyclomaticComplexity && {
1172- complexity : r . metadata . cyclomaticComplexity
1173- } )
1174- } ;
1175- } ) ,
1176- totalResults : results . length ,
1177- ...( relatedMemories . length > 0 && {
1178- relatedMemories : relatedMemories
1179- . slice ( 0 , 3 )
1180- . map ( ( m ) => `${ m . memory } (${ m . effectiveConfidence } )` )
1181- } )
11821182 } ,
11831183 { mode : 'full' , pretty : true , transportAware : true }
11841184 ) ;
0 commit comments