@@ -1144,34 +1144,51 @@ export const getEmbeddingTableName = (): string => EMBEDDING_TABLE_NAME;
11441144
11451145/**
11461146 * Load the FTS extension (required before using FTS functions).
1147- * Safe to call multiple times — tracks loaded state via module-level ftsLoaded.
1147+ *
1148+ * Safe to call multiple times — when invoked without arguments, tracks loaded
1149+ * state via module-level `ftsLoaded`. When invoked with an explicit
1150+ * connection, loads on that connection and returns whether the load
1151+ * succeeded — letting callers (e.g. the pool adapter) track their own state.
1152+ *
1153+ * Tries `LOAD EXTENSION fts` first so previously-cached installs skip the
1154+ * network entirely; falls back to `INSTALL` + `LOAD` only when the extension
1155+ * hasn't been cached yet.
11481156 */
1149- export const loadFTSExtension = async ( ) : Promise < void > => {
1150- if ( ftsLoaded ) return ;
1151- if ( ! conn ) {
1157+ export const loadFTSExtension = async ( targetConn ?: lbug . Connection ) : Promise < boolean > => {
1158+ const useModuleState = targetConn === undefined ;
1159+ if ( useModuleState && ftsLoaded ) return true ;
1160+
1161+ const c : lbug . Connection | null = targetConn ?? conn ;
1162+ if ( ! c ) {
11521163 throw new Error ( 'LadybugDB not initialized. Call initLbug first.' ) ;
11531164 }
1165+
1166+ const markLoaded = ( ) : true => {
1167+ if ( useModuleState ) ftsLoaded = true ;
1168+ return true ;
1169+ } ;
1170+
11541171 try {
11551172 // Try loading locally first (no network required)
1156- await conn . query ( 'LOAD EXTENSION fts' ) ;
1157- ftsLoaded = true ;
1173+ await c . query ( 'LOAD EXTENSION fts' ) ;
1174+ return markLoaded ( ) ;
11581175 } catch {
11591176 // Fall back to install + load (requires network)
11601177 try {
1161- await conn . query ( 'INSTALL fts' ) ;
1162- await conn . query ( 'LOAD EXTENSION fts' ) ;
1163- ftsLoaded = true ;
1178+ await c . query ( 'INSTALL fts' ) ;
1179+ await c . query ( 'LOAD EXTENSION fts' ) ;
1180+ return markLoaded ( ) ;
11641181 } catch ( err : any ) {
11651182 const msg = err ?. message || '' ;
11661183 if (
11671184 msg . includes ( 'already loaded' ) ||
11681185 msg . includes ( 'already installed' ) ||
11691186 msg . includes ( 'already exists' )
11701187 ) {
1171- ftsLoaded = true ;
1172- } else {
1173- console . error ( 'GitNexus: FTS extension load failed:' , msg ) ;
1188+ return markLoaded ( ) ;
11741189 }
1190+ console . error ( 'GitNexus: FTS extension load failed:' , msg ) ;
1191+ return false ;
11751192 }
11761193 }
11771194} ;
0 commit comments