@memberjunction/search-engine 5.32.0 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/generic/BaseReRanker.d.ts +164 -0
  2. package/dist/generic/BaseReRanker.d.ts.map +1 -0
  3. package/dist/generic/BaseReRanker.js +209 -0
  4. package/dist/generic/BaseReRanker.js.map +1 -0
  5. package/dist/generic/EntitySearchProvider.d.ts +51 -3
  6. package/dist/generic/EntitySearchProvider.d.ts.map +1 -1
  7. package/dist/generic/EntitySearchProvider.js +130 -17
  8. package/dist/generic/EntitySearchProvider.js.map +1 -1
  9. package/dist/generic/FullTextSearchProvider.d.ts +7 -2
  10. package/dist/generic/FullTextSearchProvider.d.ts.map +1 -1
  11. package/dist/generic/FullTextSearchProvider.js +25 -4
  12. package/dist/generic/FullTextSearchProvider.js.map +1 -1
  13. package/dist/generic/ISearchProvider.d.ts +44 -2
  14. package/dist/generic/ISearchProvider.d.ts.map +1 -1
  15. package/dist/generic/ISearchProvider.js +35 -1
  16. package/dist/generic/ISearchProvider.js.map +1 -1
  17. package/dist/generic/NoopReRanker.d.ts +28 -0
  18. package/dist/generic/NoopReRanker.d.ts.map +1 -0
  19. package/dist/generic/NoopReRanker.js +49 -0
  20. package/dist/generic/NoopReRanker.js.map +1 -0
  21. package/dist/generic/ScopeTemplateRenderer.d.ts +36 -0
  22. package/dist/generic/ScopeTemplateRenderer.d.ts.map +1 -0
  23. package/dist/generic/ScopeTemplateRenderer.js +110 -0
  24. package/dist/generic/ScopeTemplateRenderer.js.map +1 -0
  25. package/dist/generic/SearchEngine.d.ts +180 -12
  26. package/dist/generic/SearchEngine.d.ts.map +1 -1
  27. package/dist/generic/SearchEngine.js +737 -35
  28. package/dist/generic/SearchEngine.js.map +1 -1
  29. package/dist/generic/SearchFusion.d.ts +40 -6
  30. package/dist/generic/SearchFusion.d.ts.map +1 -1
  31. package/dist/generic/SearchFusion.js +139 -18
  32. package/dist/generic/SearchFusion.js.map +1 -1
  33. package/dist/generic/StorageSearchProvider.d.ts +9 -2
  34. package/dist/generic/StorageSearchProvider.d.ts.map +1 -1
  35. package/dist/generic/StorageSearchProvider.js +44 -12
  36. package/dist/generic/StorageSearchProvider.js.map +1 -1
  37. package/dist/generic/VectorSearchProvider.d.ts +9 -2
  38. package/dist/generic/VectorSearchProvider.d.ts.map +1 -1
  39. package/dist/generic/VectorSearchProvider.js +83 -13
  40. package/dist/generic/VectorSearchProvider.js.map +1 -1
  41. package/dist/generic/search.types.d.ts +206 -0
  42. package/dist/generic/search.types.d.ts.map +1 -1
  43. package/dist/index.d.ts +13 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +18 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/permissions/SearchScopePermissionResolver.d.ts +109 -0
  48. package/dist/permissions/SearchScopePermissionResolver.d.ts.map +1 -0
  49. package/dist/permissions/SearchScopePermissionResolver.js +159 -0
  50. package/dist/permissions/SearchScopePermissionResolver.js.map +1 -0
  51. package/dist/providers/AzureAISearchProvider.d.ts +37 -0
  52. package/dist/providers/AzureAISearchProvider.d.ts.map +1 -0
  53. package/dist/providers/AzureAISearchProvider.js +180 -0
  54. package/dist/providers/AzureAISearchProvider.js.map +1 -0
  55. package/dist/providers/ElasticsearchSearchProvider.d.ts +43 -0
  56. package/dist/providers/ElasticsearchSearchProvider.d.ts.map +1 -0
  57. package/dist/providers/ElasticsearchSearchProvider.js +200 -0
  58. package/dist/providers/ElasticsearchSearchProvider.js.map +1 -0
  59. package/dist/providers/OpenSearchSearchProvider.d.ts +36 -0
  60. package/dist/providers/OpenSearchSearchProvider.d.ts.map +1 -0
  61. package/dist/providers/OpenSearchSearchProvider.js +167 -0
  62. package/dist/providers/OpenSearchSearchProvider.js.map +1 -0
  63. package/dist/providers/TypesenseSearchProvider.d.ts +36 -0
  64. package/dist/providers/TypesenseSearchProvider.d.ts.map +1 -0
  65. package/dist/providers/TypesenseSearchProvider.js +161 -0
  66. package/dist/providers/TypesenseSearchProvider.js.map +1 -0
  67. package/dist/rerankers/BGEReRanker.d.ts +57 -0
  68. package/dist/rerankers/BGEReRanker.d.ts.map +1 -0
  69. package/dist/rerankers/BGEReRanker.js +193 -0
  70. package/dist/rerankers/BGEReRanker.js.map +1 -0
  71. package/dist/rerankers/CohereReRanker.d.ts +65 -0
  72. package/dist/rerankers/CohereReRanker.d.ts.map +1 -0
  73. package/dist/rerankers/CohereReRanker.js +155 -0
  74. package/dist/rerankers/CohereReRanker.js.map +1 -0
  75. package/dist/rerankers/OpenAIReRanker.d.ts +62 -0
  76. package/dist/rerankers/OpenAIReRanker.d.ts.map +1 -0
  77. package/dist/rerankers/OpenAIReRanker.js +197 -0
  78. package/dist/rerankers/OpenAIReRanker.js.map +1 -0
  79. package/dist/rerankers/RerankerBudgetGuard.d.ts +54 -0
  80. package/dist/rerankers/RerankerBudgetGuard.d.ts.map +1 -0
  81. package/dist/rerankers/RerankerBudgetGuard.js +67 -0
  82. package/dist/rerankers/RerankerBudgetGuard.js.map +1 -0
  83. package/dist/rerankers/VoyageReRanker.d.ts +59 -0
  84. package/dist/rerankers/VoyageReRanker.d.ts.map +1 -0
  85. package/dist/rerankers/VoyageReRanker.js +184 -0
  86. package/dist/rerankers/VoyageReRanker.js.map +1 -0
  87. package/package.json +13 -8
@@ -13,6 +13,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
13
13
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
14
  return c > 3 && r && Object.defineProperty(target, key, r), r;
15
15
  };
16
+ var EntitySearchProvider_1;
16
17
  import { LogError, LogStatus, RunView } from '@memberjunction/core';
17
18
  import { RegisterClass } from '@memberjunction/global';
18
19
  import { BaseSearchProvider } from './ISearchProvider.js';
@@ -26,6 +27,20 @@ let EntitySearchProvider = class EntitySearchProvider extends BaseSearchProvider
26
27
  super(...arguments);
27
28
  this.SourceType = 'entity';
28
29
  }
30
+ static { EntitySearchProvider_1 = this; }
31
+ /**
32
+ * Minimum trimmed term length we accept. One- and two-character substrings against
33
+ * a `LIKE '%term%'` pattern across every searchable entity is essentially a
34
+ * full-database scan with negligible relevance, so we early-return for those.
35
+ */
36
+ static { this.MIN_TERM_LENGTH = 3; }
37
+ /**
38
+ * Per-entity hard timeout. If one entity's RunView is taking longer than this,
39
+ * we drop its results rather than hold the entire fan-out hostage. The query
40
+ * keeps running in SQL Server until completion (we can't cancel mssql Requests
41
+ * here), but other entities' results still land for the user.
42
+ */
43
+ static { this.PER_ENTITY_TIMEOUT_MS = 30_000; }
29
44
  /**
30
45
  * Execute an entity search across all entities with AllowUserSearchAPI=true.
31
46
  *
@@ -35,28 +50,59 @@ let EntitySearchProvider = class EntitySearchProvider extends BaseSearchProvider
35
50
  * @param contextUser - The user performing the search
36
51
  * @returns Scored result items from entity search
37
52
  */
38
- async Search(query, topK, filters, contextUser) {
53
+ async Search(query, topK, filters, contextUser, scopeConstraints) {
54
+ const trimmed = (query ?? '').trim();
55
+ if (trimmed.length < EntitySearchProvider_1.MIN_TERM_LENGTH)
56
+ return [];
39
57
  try {
58
+ // Honor per-provider query transform (e.g., FTS keyword extraction, AI rewrite)
59
+ const rawQuery = scopeConstraints?.QueryTransforms?.[this.SourceType] ?? query;
60
+ // Strip SQL LIKE wildcards (`%`, `_`, `[`, `]`) before passing through to
61
+ // RunView's UserSearchString. The downstream `GenericDatabaseProvider`
62
+ // builds `LIKE '%${input}%'` clauses with only single-quote escaping —
63
+ // unstripped `%` would silently match every row, and `[abc]` would
64
+ // become a LIKE character-class. We treat these characters as
65
+ // not-meaningful for entity LIKE search rather than offering a
66
+ // user-facing "match wildcard" feature.
67
+ const effectiveQuery = this.sanitizeUserSearchString(rawQuery);
68
+ if (!effectiveQuery) {
69
+ // Query was entirely wildcard chars — nothing meaningful to match
70
+ LogStatus('EntitySearchProvider: Query reduced to empty after wildcard strip — returning no results');
71
+ return [];
72
+ }
73
+ // Multi-provider migration (v5.31+): use `this.Provider` instead of
74
+ // `new Metadata()` so the search honors a non-default IMetadataProvider
75
+ // when the calling component supplies one. Falls back to the global
76
+ // default when unset.
40
77
  const md = this.Provider;
41
- const searchableEntities = this.getSearchableEntities(md, filters);
42
- if (searchableEntities.length === 0) {
43
- LogStatus('EntitySearchProvider: No searchable entities found');
78
+ // Build the scoped subset: if scopeConstraints.Entities is provided, use those
79
+ // verbatim (they already went through the scope's Nunjucks-rendered ExtraFilter +
80
+ // UserSearchString pipeline). Otherwise fall back to legacy AllowUserSearchAPI
81
+ // behavior with optional filters.EntityNames restriction.
82
+ const scoped = this.buildScopedEntityList(md, scopeConstraints, filters);
83
+ if (scoped.length === 0) {
84
+ LogStatus('EntitySearchProvider: No searchable entities (scope or metadata match empty)');
44
85
  return [];
45
86
  }
46
- // Debug: log searchable entities and their search fields
47
- LogStatus(`EntitySearchProvider: Searching ${searchableEntities.length} entities for "${query}"`);
48
- for (const e of searchableEntities.slice(0, 3)) {
49
- const entity = md.EntityByName(e.Name);
87
+ // Debug: log scoped entities and their search fields
88
+ LogStatus(`EntitySearchProvider: Searching ${scoped.length} entities for "${effectiveQuery}"${scopeConstraints ? ' (scoped)' : ''}`);
89
+ for (const e of scoped.slice(0, 3)) {
90
+ const entity = md.EntityByName(e.EntityName);
50
91
  if (entity) {
51
92
  const searchFields = entity.Fields.filter(f => f.IncludeInUserSearchAPI);
52
- LogStatus(` Entity "${e.Name}": ${searchFields.length} searchable fields [${searchFields.slice(0, 5).map(f => f.Name).join(', ')}${searchFields.length > 5 ? '...' : ''}]`);
93
+ LogStatus(` Entity "${e.EntityName}": ${searchFields.length} searchable fields [${searchFields.slice(0, 5).map(f => f.Name).join(', ')}${searchFields.length > 5 ? '...' : ''}]`);
53
94
  }
54
95
  }
55
96
  // Calculate per-entity limit: distribute topK across entities
56
- const perEntityLimit = Math.max(3, Math.ceil(topK / Math.max(1, searchableEntities.length)));
57
- // Search all entities in parallel
58
- const searchPromises = searchableEntities.map(entity => this.searchOneEntity(entity.Name, query, perEntityLimit, contextUser));
97
+ const perEntityLimit = Math.max(3, Math.ceil(topK / Math.max(1, scoped.length)));
98
+ // Search all entities in parallel, threading per-entity ExtraFilter + UserSearchString
99
+ // override; each call is gated by a hard PER_ENTITY_TIMEOUT_MS timeout (next PR #2532)
100
+ // so a slow entity cannot hold up the whole fan-out — partial results from the other
101
+ // entities still land.
102
+ const searchPromises = scoped.map(item => this.searchOneEntity(item.EntityName, item.UserSearchString ?? effectiveQuery, perEntityLimit, contextUser, item.ExtraFilter));
59
103
  const results = await Promise.all(searchPromises);
104
+ // Re-score against the original query for field-match relevance (not the transform)
105
+ // to keep snippets/field-match semantics consistent with what the user typed.
60
106
  const allResults = results.flat();
61
107
  // Sort by score descending and limit to topK
62
108
  allResults.sort((a, b) => b.Score - a.Score);
@@ -68,6 +114,28 @@ let EntitySearchProvider = class EntitySearchProvider extends BaseSearchProvider
68
114
  return [];
69
115
  }
70
116
  }
117
+ /**
118
+ * Resolve the entity list to actually search.
119
+ *
120
+ * - If `scopeConstraints.Entities` is provided, use those directly (each carries its own
121
+ * rendered ExtraFilter + UserSearchString) — this is the "scoped" path.
122
+ * - Otherwise fall back to the legacy unscoped path (`AllowUserSearchAPI=true` with
123
+ * optional `filters.EntityNames` restriction) and wrap each in a trivial constraint.
124
+ */
125
+ buildScopedEntityList(md, scopeConstraints, filters) {
126
+ if (scopeConstraints?.Entities?.length) {
127
+ // Honor the scope's explicit entity list verbatim.
128
+ return scopeConstraints.Entities;
129
+ }
130
+ const unscoped = this.getSearchableEntities(md, filters);
131
+ return unscoped.map(e => {
132
+ const info = md.EntityByName(e.Name);
133
+ return {
134
+ EntityID: info?.ID ?? '',
135
+ EntityName: e.Name,
136
+ };
137
+ });
138
+ }
71
139
  /**
72
140
  * Get the list of entities eligible for search, optionally filtered by name.
73
141
  */
@@ -80,14 +148,39 @@ let EntitySearchProvider = class EntitySearchProvider extends BaseSearchProvider
80
148
  return entities;
81
149
  }
82
150
  /**
83
- * Search a single entity using RunView with UserSearchString.
151
+ * Search a single entity using RunView with UserSearchString. Wraps the
152
+ * underlying RunView in a hard PER_ENTITY_TIMEOUT_MS timeout so a slow
153
+ * entity cannot hold up the whole fan-out — partial results from the
154
+ * other entities still land.
155
+ *
156
+ * Note: `contextUser` is passed to RunView so row-level security (RLS) is applied
157
+ * automatically — this is the Entity provider's permission push-down per Section 3.6
158
+ * of plans/search-scopes-rag-plus.md.
84
159
  */
85
- async searchOneEntity(entityName, query, maxRows, contextUser) {
160
+ async searchOneEntity(entityName, userSearchString, maxRows, contextUser, extraFilter) {
161
+ const work = this.searchOneEntityRaw(entityName, userSearchString, maxRows, contextUser, extraFilter);
162
+ let timer;
163
+ const timeout = new Promise(resolve => {
164
+ timer = setTimeout(() => {
165
+ LogError(`EntitySearchProvider: timeout (${EntitySearchProvider_1.PER_ENTITY_TIMEOUT_MS}ms) searching "${entityName}"`);
166
+ resolve([]);
167
+ }, EntitySearchProvider_1.PER_ENTITY_TIMEOUT_MS);
168
+ });
169
+ try {
170
+ return await Promise.race([work, timeout]);
171
+ }
172
+ finally {
173
+ if (timer)
174
+ clearTimeout(timer);
175
+ }
176
+ }
177
+ async searchOneEntityRaw(entityName, userSearchString, maxRows, contextUser, extraFilter) {
86
178
  try {
87
179
  const rv = new RunView();
88
180
  const result = await rv.RunView({
89
181
  EntityName: entityName,
90
- UserSearchString: query,
182
+ UserSearchString: userSearchString,
183
+ ExtraFilter: extraFilter && extraFilter.trim() ? extraFilter : undefined,
91
184
  MaxRows: maxRows,
92
185
  ResultType: 'simple'
93
186
  }, contextUser);
@@ -95,7 +188,7 @@ let EntitySearchProvider = class EntitySearchProvider extends BaseSearchProvider
95
188
  LogError(`EntitySearchProvider: Failed to search "${entityName}": ${result.ErrorMessage}`);
96
189
  return [];
97
190
  }
98
- return this.convertResults(result.Results, entityName, query);
191
+ return this.convertResults(result.Results, entityName, userSearchString);
99
192
  }
100
193
  catch (error) {
101
194
  const msg = error instanceof Error ? error.message : String(error);
@@ -199,8 +292,28 @@ let EntitySearchProvider = class EntitySearchProvider extends BaseSearchProvider
199
292
  }
200
293
  return entityInfo ? `Matched in ${entityInfo.Name}` : 'Matched record';
201
294
  }
295
+ /**
296
+ * Remove SQL LIKE wildcard characters from a user-supplied search string.
297
+ *
298
+ * The downstream `GenericDatabaseProvider.createViewUserSearchSQL`
299
+ * interpolates user input directly into `LIKE '%${input}%'`, only
300
+ * escaping single quotes. Unstripped LIKE wildcards (`%`, `_`, `[`, `]`)
301
+ * would either match too much (e.g. `Query="%"` matches every row) or
302
+ * trigger LIKE character-class parsing (`Query="[abc]"`).
303
+ *
304
+ * Behavior intent: these characters are treated as not-meaningful for
305
+ * entity LIKE search. A query containing literal `%` (e.g. `100%`) will
306
+ * not find records that contain `100%` — the trade-off is documented
307
+ * to keep the behavior predictable and safe.
308
+ *
309
+ * Trailing/leading whitespace is collapsed; an all-wildcard query
310
+ * returns empty and the caller short-circuits to zero results.
311
+ */
312
+ sanitizeUserSearchString(input) {
313
+ return input.replace(/[%_[\]]/g, '').trim();
314
+ }
202
315
  };
203
- EntitySearchProvider = __decorate([
316
+ EntitySearchProvider = EntitySearchProvider_1 = __decorate([
204
317
  RegisterClass(BaseSearchProvider, 'EntitySearchProvider')
205
318
  ], EntitySearchProvider);
206
319
  export { EntitySearchProvider };
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySearchProvider.js","sourceRoot":"","sources":["../../src/generic/EntitySearchProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntitySearchProvider.js","sourceRoot":"","sources":["../../src/generic/EntitySearchProvider.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { UserInfo } from '@memberjunction/core';
12
12
  import { BaseSearchProvider } from './ISearchProvider.js';
13
- import { SearchSource, SearchFilters, SearchResultItem } from './search.types.js';
13
+ import { SearchSource, SearchFilters, SearchResultItem, ScopeConstraints } from './search.types.js';
14
14
  import { SearchEnricher } from './SearchEnricher.js';
15
15
  /**
16
16
  * Provides full-text search using the MJ Metadata.FullTextSearch() method.
@@ -18,6 +18,11 @@ import { SearchEnricher } from './SearchEnricher.js';
18
18
  */
19
19
  export declare class FullTextSearchProvider extends BaseSearchProvider {
20
20
  readonly SourceType: SearchSource;
21
+ /**
22
+ * Minimum trimmed term length we accept. SQL Server FTS treats single
23
+ * characters as noise; rejecting them matches the EntitySearchProvider guard.
24
+ */
25
+ private static readonly MIN_TERM_LENGTH;
21
26
  private enricher;
22
27
  /** Set the enricher instance. Called by SearchEngine after construction. */
23
28
  SetEnricher(enricher: SearchEnricher): void;
@@ -30,6 +35,6 @@ export declare class FullTextSearchProvider extends BaseSearchProvider {
30
35
  * @param contextUser - The user performing the search
31
36
  * @returns Scored result items from full-text search
32
37
  */
33
- Search(query: string, topK: number, filters: SearchFilters | undefined, contextUser: UserInfo): Promise<SearchResultItem[]>;
38
+ Search(query: string, topK: number, filters: SearchFilters | undefined, contextUser: UserInfo, scopeConstraints?: ScopeConstraints): Promise<SearchResultItem[]>;
34
39
  }
35
40
  //# sourceMappingURL=FullTextSearchProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FullTextSearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/FullTextSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAwC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAoB,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;GAGG;AACH,qBACa,sBAAuB,SAAQ,kBAAkB;IAC1D,SAAgB,UAAU,EAAE,YAAY,CAAc;IAEtD,OAAO,CAAC,QAAQ,CAA+B;IAE/C,4EAA4E;IACrE,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIlD;;;;;;;;OAQG;IACU,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAiDjC"}
1
+ {"version":3,"file":"FullTextSearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/FullTextSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAA8B,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAoB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;GAGG;AACH,qBACa,sBAAuB,SAAQ,kBAAkB;IAC1D,SAAgB,UAAU,EAAE,YAAY,CAAc;IAEtD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAK;IAE5C,OAAO,CAAC,QAAQ,CAA+B;IAE/C,4EAA4E;IACrE,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIlD;;;;;;;;OAQG;IACU,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,EACrB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAgEjC"}
@@ -14,6 +14,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
14
14
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
15
15
  return c > 3 && r && Object.defineProperty(target, key, r), r;
16
16
  };
17
+ var FullTextSearchProvider_1;
17
18
  import { LogError } from '@memberjunction/core';
18
19
  import { RegisterClass } from '@memberjunction/global';
19
20
  import { BaseSearchProvider } from './ISearchProvider.js';
@@ -27,6 +28,12 @@ let FullTextSearchProvider = class FullTextSearchProvider extends BaseSearchProv
27
28
  this.SourceType = 'fulltext';
28
29
  this.enricher = null;
29
30
  }
31
+ static { FullTextSearchProvider_1 = this; }
32
+ /**
33
+ * Minimum trimmed term length we accept. SQL Server FTS treats single
34
+ * characters as noise; rejecting them matches the EntitySearchProvider guard.
35
+ */
36
+ static { this.MIN_TERM_LENGTH = 3; }
30
37
  /** Set the enricher instance. Called by SearchEngine after construction. */
31
38
  SetEnricher(enricher) {
32
39
  this.enricher = enricher;
@@ -40,16 +47,30 @@ let FullTextSearchProvider = class FullTextSearchProvider extends BaseSearchProv
40
47
  * @param contextUser - The user performing the search
41
48
  * @returns Scored result items from full-text search
42
49
  */
43
- async Search(query, topK, filters, contextUser) {
50
+ async Search(query, topK, filters, contextUser, scopeConstraints) {
51
+ const trimmed = (query ?? '').trim();
52
+ if (trimmed.length < FullTextSearchProvider_1.MIN_TERM_LENGTH)
53
+ return [];
44
54
  try {
55
+ // Honor per-provider query transform (keyword extraction / rewrite)
56
+ const effectiveQuery = scopeConstraints?.QueryTransforms?.[this.SourceType] ?? query;
57
+ // Restrict entities: scopeConstraints take precedence, then filters.EntityNames,
58
+ // then no restriction.
59
+ const scopedEntityNames = scopeConstraints?.Entities?.map(e => e.EntityName);
60
+ const restrictedEntityNames = scopedEntityNames?.length
61
+ ? scopedEntityNames
62
+ : filters?.EntityNames;
63
+ // Multi-provider migration (v5.31+): use `this.Provider` instead of
64
+ // `new Metadata()`. Cast to IRunViewProvider to access FullTextSearch
65
+ // — only DB-backed providers expose it; remote providers don't.
45
66
  const md = this.Provider;
46
67
  if (!md.FullTextSearch) {
47
68
  LogError('FullTextSearchProvider: provider does not support FullTextSearch');
48
69
  return [];
49
70
  }
50
71
  const ftsResult = await md.FullTextSearch({
51
- SearchText: query,
52
- EntityNames: filters?.EntityNames,
72
+ SearchText: effectiveQuery,
73
+ EntityNames: restrictedEntityNames,
53
74
  MaxRowsPerEntity: Math.max(3, Math.ceil(topK / 10))
54
75
  }, contextUser);
55
76
  if (!ftsResult.Success) {
@@ -86,7 +107,7 @@ let FullTextSearchProvider = class FullTextSearchProvider extends BaseSearchProv
86
107
  }
87
108
  }
88
109
  };
89
- FullTextSearchProvider = __decorate([
110
+ FullTextSearchProvider = FullTextSearchProvider_1 = __decorate([
90
111
  RegisterClass(BaseSearchProvider, 'FullTextSearchProvider')
91
112
  ], FullTextSearchProvider);
92
113
  export { FullTextSearchProvider };
@@ -1 +1 @@
1
- {"version":3,"file":"FullTextSearchProvider.js","sourceRoot":"","sources":["../../src/generic/FullTextSearchProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FullTextSearchProvider.js","sourceRoot":"","sources":["../../src/generic/FullTextSearchProvider.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,20 @@
12
12
  * @module @memberjunction/search-engine
13
13
  */
14
14
  import { IMetadataProvider, UserInfo } from '@memberjunction/core';
15
- import { SearchSource, SearchFilters, SearchResultItem } from './search.types.js';
15
+ import { SearchSource, SearchFilters, SearchResultItem, ScopeConstraints } from './search.types.js';
16
+ /**
17
+ * Lightweight catalog entry for a registered search provider, returned by
18
+ * `BaseSearchProvider.GetAvailableProviders()`. Designed for UI dropdown
19
+ * population on the SearchScope form (P5.5) — a single call gives the form
20
+ * everything it needs to render selectable options without separately
21
+ * instantiating each registered class.
22
+ */
23
+ export interface RegisteredSearchProviderInfo {
24
+ /** ClassFactory registration key — the SearchProvider.DriverClass column value */
25
+ DriverClass: string;
26
+ /** SearchSource the provider implements ('vector' | 'fulltext' | 'entity' | 'storage') */
27
+ SourceType: SearchSource;
28
+ }
16
29
  /**
17
30
  * Configuration passed to a search provider during initialization.
18
31
  * Populated from the SearchProvider entity record.
@@ -81,13 +94,42 @@ export declare abstract class BaseSearchProvider {
81
94
  /**
82
95
  * Execute a search and return result items with scores.
83
96
  *
97
+ * When `scopeConstraints` is provided, the provider MUST:
98
+ * 1. Narrow its retrieval surface to match the constraint (e.g., VectorSearchProvider
99
+ * queries only the listed ExternalIndexes with matching IndexType, EntitySearchProvider
100
+ * queries only the listed Entities, StorageSearchProvider queries only the listed
101
+ * accounts/folders, 3rd-party providers filter by their own IndexType).
102
+ * 2. Apply any rendered `MetadataFilter` / `ExtraFilter` / `UserSearchString` /
103
+ * `FolderPath` values as native filters.
104
+ * 3. Implement permission push-down (see Section 3.6 of
105
+ * plans/search-scopes-rag-plus.md) — never surface results the `contextUser` cannot see.
106
+ * 4. Honor `scopeConstraints.QueryTransforms` when a per-provider rewrite is supplied —
107
+ * look up by your `SourceType` or provider-specific key and use that string in place
108
+ * of the raw `query`.
109
+ *
110
+ * When `scopeConstraints` is undefined, the provider runs unconstrained (backward
111
+ * compatible pre-scope behavior).
112
+ *
84
113
  * @param query - The search query text
85
114
  * @param topK - Maximum number of results to retrieve
86
115
  * @param filters - Optional filters to narrow results
87
116
  * @param contextUser - The user performing the search
117
+ * @param scopeConstraints - Optional per-scope constraint set, pre-rendered with SearchContext values
88
118
  * @returns Scored result items from this provider
89
119
  */
90
- abstract Search(query: string, topK: number, filters: SearchFilters | undefined, contextUser: UserInfo): Promise<SearchResultItem[]>;
120
+ abstract Search(query: string, topK: number, filters: SearchFilters | undefined, contextUser: UserInfo, scopeConstraints?: ScopeConstraints): Promise<SearchResultItem[]>;
121
+ /**
122
+ * Enumerate every search provider currently registered with ClassFactory under
123
+ * `BaseSearchProvider`. Designed for the SearchScope form's provider dropdown
124
+ * (P5.5) — populates the dropdown from this single call rather than hardcoding
125
+ * a list, so any ClassFactory-registered provider (including third-party ones)
126
+ * shows up automatically.
127
+ *
128
+ * Each entry includes the driver-class registration key (writes into
129
+ * `SearchProvider.DriverClass`) and the SourceType the provider implements.
130
+ * Sorted by DriverClass for stable UI ordering.
131
+ */
132
+ static GetAvailableProviders(): RegisteredSearchProviderInfo[];
91
133
  }
92
134
  /**
93
135
  * @deprecated Use BaseSearchProvider instead. Kept for backwards compatibility.
@@ -1 +1 @@
1
- {"version":3,"file":"ISearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/ISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE/E;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,oEAAoE;IACpE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gFAAgF;IAChF,eAAe,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,kBAAkB;IACpC,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAE3C,8EAA8E;IAC9E,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAErD,2FAA2F;IAC3F,OAAO,CAAC,SAAS,CAAgC;IAEjD,iFAAiF;IACjF,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAEvD;IAED,kGAAkG;IAClG,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IAED;;;;;;;OAOG;IACU,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3F;;;;;;;;OAQG;IACU,iBAAiB,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;;OAGG;IACI,WAAW,IAAI,OAAO;IAI7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ISearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/ISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjG;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IACzC,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,UAAU,EAAE,YAAY,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,oEAAoE;IACpE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gFAAgF;IAChF,eAAe,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,kBAAkB;IACpC,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAE3C,8EAA8E;IAC9E,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAErD,2FAA2F;IAC3F,OAAO,CAAC,SAAS,CAAgC;IAEjD,iFAAiF;IACjF,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAEvD;IAED,kGAAkG;IAClG,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IAED;;;;;;;OAOG;IACU,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3F;;;;;;;;OAQG;IACU,iBAAiB,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;;OAGG;IACI,WAAW,IAAI,OAAO;IAI7B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,MAAM,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,EACrB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAE9B;;;;;;;;;;OAUG;WACW,qBAAqB,IAAI,4BAA4B,EAAE;CAoBxE;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC"}
@@ -11,7 +11,8 @@
11
11
  *
12
12
  * @module @memberjunction/search-engine
13
13
  */
14
- import { Metadata } from '@memberjunction/core';
14
+ import { LogError, Metadata } from '@memberjunction/core';
15
+ import { MJGlobal } from '@memberjunction/global';
15
16
  /**
16
17
  * Abstract base class for search providers. Subclasses must be registered
17
18
  * with @RegisterClass(BaseSearchProvider, 'DriverClassName') to be
@@ -67,5 +68,38 @@ export class BaseSearchProvider {
67
68
  IsAvailable() {
68
69
  return true;
69
70
  }
71
+ /**
72
+ * Enumerate every search provider currently registered with ClassFactory under
73
+ * `BaseSearchProvider`. Designed for the SearchScope form's provider dropdown
74
+ * (P5.5) — populates the dropdown from this single call rather than hardcoding
75
+ * a list, so any ClassFactory-registered provider (including third-party ones)
76
+ * shows up automatically.
77
+ *
78
+ * Each entry includes the driver-class registration key (writes into
79
+ * `SearchProvider.DriverClass`) and the SourceType the provider implements.
80
+ * Sorted by DriverClass for stable UI ordering.
81
+ */
82
+ static GetAvailableProviders() {
83
+ const registrations = MJGlobal.Instance.ClassFactory.GetAllRegistrations(BaseSearchProvider);
84
+ const seen = new Set();
85
+ const out = [];
86
+ for (const reg of registrations) {
87
+ const key = reg.Key;
88
+ if (!key || seen.has(key))
89
+ continue;
90
+ seen.add(key);
91
+ try {
92
+ const Ctor = reg.SubClass;
93
+ const instance = new Ctor();
94
+ out.push({ DriverClass: key, SourceType: instance.SourceType });
95
+ }
96
+ catch (err) {
97
+ LogError(`BaseSearchProvider.GetAvailableProviders: could not introspect "${key}" — ${err instanceof Error ? err.message : String(err)}`);
98
+ out.push({ DriverClass: key, SourceType: 'entity' });
99
+ }
100
+ }
101
+ out.sort((a, b) => a.DriverClass.localeCompare(b.DriverClass));
102
+ return out;
103
+ }
70
104
  }
71
105
  //# sourceMappingURL=ISearchProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ISearchProvider.js","sourceRoot":"","sources":["../../src/generic/ISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAsB7E;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,kBAAkB;IAAxC;QAII,8EAA8E;QACpE,WAAM,GAAgC,IAAI,CAAC;IA+DzD,CAAC;IA1DG,iFAAiF;IACjF,IAAW,QAAQ,CAAC,KAAoC;QACpD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,kGAAkG;IAClG,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,UAAU,CAAC,MAA4B,EAAE,WAAqB;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,iBAAiB,CAAC,WAAqB;QAChD,+CAA+C;IACnD,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;CAiBJ"}
1
+ {"version":3,"file":"ISearchProvider.js","sourceRoot":"","sources":["../../src/generic/ISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAqB,QAAQ,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAoClD;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,kBAAkB;IAAxC;QAII,8EAA8E;QACpE,WAAM,GAAgC,IAAI,CAAC;IAiHzD,CAAC;IA5GG,iFAAiF;IACjF,IAAW,QAAQ,CAAC,KAAoC;QACpD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,kGAAkG;IAClG,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,UAAU,CAAC,MAA4B,EAAE,WAAqB;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,iBAAiB,CAAC,WAAqB;QAChD,+CAA+C;IACnD,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAoCD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,qBAAqB;QAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QAC7F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,GAAG,GAAmC,EAAE,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAmD,CAAC;gBACrE,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,QAAQ,CAAC,mEAAmE,GAAG,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1I,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzD,CAAC;QACL,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @fileoverview Default pass-through re-ranker.
3
+ *
4
+ * Returns the top-N candidates unchanged. Registered as `NoopReRanker` via the MJ
5
+ * class factory so the SearchEngine's re-rank stage always has a concrete class to
6
+ * instantiate, even when no provider-specific re-ranker is configured. Real
7
+ * implementations (Cohere, BGE, Voyage) can subclass `BaseReRanker` and register a
8
+ * separate `DriverClass`; a scope opts in by setting
9
+ * `SearchScope.ScopeConfig.reRanker.driverClass` to that name.
10
+ *
11
+ * See Section 8.3 of plans/search-scopes-rag-plus.md.
12
+ *
13
+ * @module @memberjunction/search-engine
14
+ */
15
+ import { UserInfo } from '@memberjunction/core';
16
+ import { BaseReRanker } from './BaseReRanker.js';
17
+ import { SearchResultItem } from './search.types.js';
18
+ /**
19
+ * Pass-through re-ranker. Slices to `topN` and returns the candidate order untouched.
20
+ */
21
+ export declare class NoopReRanker extends BaseReRanker {
22
+ get DriverClass(): string;
23
+ ReRank(_query: string, candidates: SearchResultItem[], topN: number, _contextUser: UserInfo, _config?: Record<string, unknown>): Promise<SearchResultItem[]>;
24
+ }
25
+ /** Tree-shake prevention helper. Call from consumer `public-api.ts` to guarantee
26
+ * the registration side-effect runs. */
27
+ export declare function LoadNoopReRanker(): void;
28
+ //# sourceMappingURL=NoopReRanker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoopReRanker.d.ts","sourceRoot":"","sources":["../../src/generic/NoopReRanker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,qBACa,YAAa,SAAQ,YAAY;IAC1C,IAAW,WAAW,IAAI,MAAM,CAE/B;IAEY,MAAM,CACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAAE,EAC9B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAKjC;AAED;wCACwC;AACxC,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview Default pass-through re-ranker.
3
+ *
4
+ * Returns the top-N candidates unchanged. Registered as `NoopReRanker` via the MJ
5
+ * class factory so the SearchEngine's re-rank stage always has a concrete class to
6
+ * instantiate, even when no provider-specific re-ranker is configured. Real
7
+ * implementations (Cohere, BGE, Voyage) can subclass `BaseReRanker` and register a
8
+ * separate `DriverClass`; a scope opts in by setting
9
+ * `SearchScope.ScopeConfig.reRanker.driverClass` to that name.
10
+ *
11
+ * See Section 8.3 of plans/search-scopes-rag-plus.md.
12
+ *
13
+ * @module @memberjunction/search-engine
14
+ */
15
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
19
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
20
+ };
21
+ import { RegisterClass } from '@memberjunction/global';
22
+ import { BaseReRanker } from './BaseReRanker.js';
23
+ /**
24
+ * Pass-through re-ranker. Slices to `topN` and returns the candidate order untouched.
25
+ */
26
+ let NoopReRanker = class NoopReRanker extends BaseReRanker {
27
+ get DriverClass() {
28
+ return 'NoopReRanker';
29
+ }
30
+ async ReRank(_query, candidates, topN, _contextUser, _config) {
31
+ if (topN <= 0 || candidates.length === 0)
32
+ return [];
33
+ if (candidates.length <= topN)
34
+ return candidates;
35
+ return candidates.slice(0, topN);
36
+ }
37
+ };
38
+ NoopReRanker = __decorate([
39
+ RegisterClass(BaseReRanker, 'NoopReRanker')
40
+ ], NoopReRanker);
41
+ export { NoopReRanker };
42
+ /** Tree-shake prevention helper. Call from consumer `public-api.ts` to guarantee
43
+ * the registration side-effect runs. */
44
+ export function LoadNoopReRanker() {
45
+ // Reference to ensure the class is not eliminated by bundlers.
46
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
+ const _ref = NoopReRanker;
48
+ }
49
+ //# sourceMappingURL=NoopReRanker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoopReRanker.js","sourceRoot":"","sources":["../../src/generic/NoopReRanker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;;;;;;;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;GAEG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,YAAY;IAC1C,IAAW,WAAW;QAClB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,MAAM,CACf,MAAc,EACd,UAA8B,EAC9B,IAAY,EACZ,YAAsB,EACtB,OAAiC;QAEjC,IAAI,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpD,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI;YAAE,OAAO,UAAU,CAAC;QACjD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;CACJ,CAAA;AAhBY,YAAY;IADxB,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC;GAC/B,YAAY,CAgBxB;;AAED;wCACwC;AACxC,MAAM,UAAU,gBAAgB;IAC5B,+DAA+D;IAC/D,6DAA6D;IAC7D,MAAM,IAAI,GAAG,YAAY,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @fileoverview Lightweight Nunjucks renderer for scope configuration values.
3
+ *
4
+ * `SearchScope*` tables store template strings (MetadataFilter, ExtraFilter,
5
+ * UserSearchString, FolderPath) that embed `SearchContext` variables — for example:
6
+ *
7
+ * `OrganizationID='{{ context.PrimaryScopeRecordID }}' AND DepartmentID='{{ context.SecondaryScopes.dept.value }}'`
8
+ *
9
+ * This module renders those strings with a minimal, pre-configured Nunjucks environment
10
+ * so the SearchEngine does not have to bootstrap the full `@memberjunction/templates`
11
+ * engine (which is intended for stored, managed templates, not ad-hoc config values).
12
+ *
13
+ * For stored template resolution (e.g., `AIAgentSearchScope.QueryTemplateID`,
14
+ * `SearchScopeProvider.QueryTransformTemplateID`) use `@memberjunction/templates` with
15
+ * `TemplateEngineServer` — that path runs in Phase 1C (AgentPreExecutionRAG) where we
16
+ * already have a stored-template workflow.
17
+ *
18
+ * @module @memberjunction/search-engine
19
+ */
20
+ import { SearchContext } from './search.types.js';
21
+ /**
22
+ * Render a scope template string with the supplied SearchContext. Returns the original
23
+ * string unchanged when `template` is null/empty. Returns the original string on render
24
+ * failure (logged via LogError) so a single bad template does not bring down a search.
25
+ */
26
+ export declare function RenderScopeTemplate(template: string | null | undefined, context: SearchContext | undefined, extraData?: Record<string, unknown>): string;
27
+ /**
28
+ * Render and parse a JSON-valued scope template (used for `MetadataFilter` values).
29
+ * Returns:
30
+ * - `undefined` when the template is null/empty
31
+ * - parsed object when render output is valid JSON
32
+ * - the raw rendered string when it is non-empty but not JSON (provider can decide what to do)
33
+ * - `undefined` when render fails outright
34
+ */
35
+ export declare function RenderScopeJsonTemplate(template: string | null | undefined, context: SearchContext | undefined, extraData?: Record<string, unknown>): unknown;
36
+ //# sourceMappingURL=ScopeTemplateRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopeTemplateRenderer.d.ts","sourceRoot":"","sources":["../../src/generic/ScopeTemplateRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAwC/C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,MAAM,CAmBR;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAWT"}