@remnic/core 9.3.563 → 9.3.565
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.
- package/dist/access-cli.js +40 -39
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.js +16 -16
- package/dist/access-mcp.js +13 -13
- package/dist/access-schema.js +3 -3
- package/dist/access-service.js +11 -11
- package/dist/active-recall.js +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/briefing.js +4 -4
- package/dist/causal-consolidation.js +5 -5
- package/dist/{chunk-I2K6KCVC.js → chunk-2FHLI4U6.js} +49 -49
- package/dist/chunk-3ONXXHQO.js +57 -0
- package/dist/chunk-3ONXXHQO.js.map +1 -0
- package/dist/{chunk-5GX5MUQ2.js → chunk-574MU2Y3.js} +3 -3
- package/dist/{chunk-65OLPXBU.js → chunk-5WB4C7KM.js} +6 -6
- package/dist/chunk-6PTSXBPE.js +483 -0
- package/dist/chunk-6PTSXBPE.js.map +1 -0
- package/dist/{chunk-Z56KAZQL.js → chunk-74VA26CT.js} +2 -2
- package/dist/{chunk-CC2ESOOG.js → chunk-7X7TBJRX.js} +2 -2
- package/dist/{chunk-O4M4WH6V.js → chunk-ARY5OOLG.js} +2 -2
- package/dist/{chunk-JBPKEARU.js → chunk-AU7Q3LSC.js} +4 -4
- package/dist/{chunk-PM3QHTFT.js → chunk-CF3ZF2YU.js} +3 -3
- package/dist/{chunk-SI3QCHWF.js → chunk-DARLGSFX.js} +5 -5
- package/dist/chunk-EWLQPEO6.js +308 -0
- package/dist/chunk-EWLQPEO6.js.map +1 -0
- package/dist/{chunk-FVCZINOF.js → chunk-FHBEL473.js} +2 -2
- package/dist/{chunk-7Q3RCKAQ.js → chunk-FXKPZ3H6.js} +2 -2
- package/dist/{chunk-5WLYNZPC.js → chunk-GBXGCFRH.js} +2 -2
- package/dist/{chunk-ILJXM3FV.js → chunk-HQO5EBUC.js} +10 -10
- package/dist/{chunk-FK556DDH.js → chunk-I4UNL747.js} +4 -4
- package/dist/{chunk-RLPIT4YI.js → chunk-IOTTZLFF.js} +38 -38
- package/dist/{chunk-TVZ6LKKS.js → chunk-IRFF6LSF.js} +8 -8
- package/dist/{chunk-M5T4Q2ZU.js → chunk-KGK2QKWL.js} +1 -1
- package/dist/chunk-KGK2QKWL.js.map +1 -0
- package/dist/{chunk-IPLYGWQF.js → chunk-KQAFEZQX.js} +5 -5
- package/dist/chunk-M46RYSMW.js +597 -0
- package/dist/chunk-M46RYSMW.js.map +1 -0
- package/dist/{chunk-KXULCVOC.js → chunk-M6I5Z4SR.js} +4 -2
- package/dist/chunk-M6I5Z4SR.js.map +1 -0
- package/dist/{chunk-JFN6K74Q.js → chunk-MQEIWDYW.js} +2 -2
- package/dist/{chunk-7H6CFEBJ.js → chunk-NZPF2SYV.js} +8 -1
- package/dist/{chunk-7H6CFEBJ.js.map → chunk-NZPF2SYV.js.map} +1 -1
- package/dist/{chunk-SML26KED.js → chunk-OB6353F7.js} +16 -12
- package/dist/chunk-OB6353F7.js.map +1 -0
- package/dist/{chunk-SOTR74FK.js → chunk-OPYFD6PD.js} +2 -2
- package/dist/{chunk-3C5RPJAX.js → chunk-OXJBNGBK.js} +2 -2
- package/dist/{chunk-BD5LHQWD.js → chunk-PPPZY2EU.js} +2 -2
- package/dist/{chunk-25BY3HHZ.js → chunk-SUTSSOYU.js} +2 -2
- package/dist/{chunk-KS7WO6EQ.js → chunk-VFB2G5YL.js} +20 -20
- package/dist/{chunk-BUUYY2H2.js → chunk-WP5OWVLZ.js} +4 -4
- package/dist/{chunk-6URPAY2D.js → chunk-XCAZF7KQ.js} +207 -53
- package/dist/chunk-XCAZF7KQ.js.map +1 -0
- package/dist/{chunk-S53PAX2V.js → chunk-XM7BYXT7.js} +2 -2
- package/dist/{chunk-FADZBOR4.js → chunk-XRWTAEZM.js} +2 -2
- package/dist/{chunk-E5OECWZ5.js → chunk-XT7XVA53.js} +2 -2
- package/dist/{chunk-R3PS27B4.js → chunk-Z4R6RI2N.js} +2 -2
- package/dist/cli.js +44 -43
- package/dist/compounding/engine.js +4 -4
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.js +4 -4
- package/dist/connectors/index.js +4 -4
- package/dist/embedding-fallback.d.ts +12 -1
- package/dist/embedding-fallback.js +4 -1
- package/dist/entity-retrieval.js +4 -4
- package/dist/host-embedding-provider.d.ts +21 -0
- package/dist/host-embedding-provider.js +14 -0
- package/dist/host-embedding-provider.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +71 -63
- package/dist/index.js.map +1 -1
- package/dist/lcm/index.js +3 -3
- package/dist/maintenance/memory-governance.js +4 -4
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +4 -4
- package/dist/maintenance/rebuild-memory-projection.js +5 -5
- package/dist/namespaces/migrate.js +14 -13
- package/dist/namespaces/search.js +9 -8
- package/dist/namespaces/storage.js +4 -4
- package/dist/operator-toolkit.js +17 -16
- package/dist/orchestrator.js +32 -31
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/resume-bundles.js +2 -2
- package/dist/search/embed-helper.d.ts +48 -4
- package/dist/search/embed-helper.js +2 -1
- package/dist/search/factory.js +8 -7
- package/dist/search/index.d.ts +1 -0
- package/dist/search/index.js +12 -11
- package/dist/search/lancedb-backend.d.ts +11 -0
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/orama-backend.d.ts +16 -0
- package/dist/search/orama-backend.js +2 -2
- package/dist/semantic-consolidation.js +5 -5
- package/dist/semantic-rule-promotion.js +4 -4
- package/dist/semantic-rule-verifier.js +4 -4
- package/dist/storage.js +3 -3
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/types.d.ts +6 -6
- package/dist/types.d.ts +17 -0
- package/dist/types.js +1 -1
- package/dist/verified-recall.js +4 -4
- package/package.json +11 -1
- package/src/config.ts +18 -0
- package/src/embedding-fallback.ts +293 -61
- package/src/host-embedding-provider.ts +84 -0
- package/src/index.ts +7 -0
- package/src/namespaces/search.ts +9 -1
- package/src/qmd.test.ts +28 -0
- package/src/search/embed-helper.ts +319 -51
- package/src/search/factory.ts +6 -2
- package/src/search/lancedb-backend.ts +297 -41
- package/src/search/orama-backend.ts +418 -47
- package/src/types.ts +17 -0
- package/dist/chunk-6URPAY2D.js.map +0 -1
- package/dist/chunk-FUC4LZMD.js +0 -301
- package/dist/chunk-FUC4LZMD.js.map +0 -1
- package/dist/chunk-KXULCVOC.js.map +0 -1
- package/dist/chunk-M5T4Q2ZU.js.map +0 -1
- package/dist/chunk-ONPLNAPX.js +0 -133
- package/dist/chunk-ONPLNAPX.js.map +0 -1
- package/dist/chunk-QVJ4NWL2.js +0 -335
- package/dist/chunk-QVJ4NWL2.js.map +0 -1
- package/dist/chunk-SML26KED.js.map +0 -1
- /package/dist/{chunk-I2K6KCVC.js.map → chunk-2FHLI4U6.js.map} +0 -0
- /package/dist/{chunk-5GX5MUQ2.js.map → chunk-574MU2Y3.js.map} +0 -0
- /package/dist/{chunk-65OLPXBU.js.map → chunk-5WB4C7KM.js.map} +0 -0
- /package/dist/{chunk-Z56KAZQL.js.map → chunk-74VA26CT.js.map} +0 -0
- /package/dist/{chunk-CC2ESOOG.js.map → chunk-7X7TBJRX.js.map} +0 -0
- /package/dist/{chunk-O4M4WH6V.js.map → chunk-ARY5OOLG.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-AU7Q3LSC.js.map} +0 -0
- /package/dist/{chunk-PM3QHTFT.js.map → chunk-CF3ZF2YU.js.map} +0 -0
- /package/dist/{chunk-SI3QCHWF.js.map → chunk-DARLGSFX.js.map} +0 -0
- /package/dist/{chunk-FVCZINOF.js.map → chunk-FHBEL473.js.map} +0 -0
- /package/dist/{chunk-7Q3RCKAQ.js.map → chunk-FXKPZ3H6.js.map} +0 -0
- /package/dist/{chunk-5WLYNZPC.js.map → chunk-GBXGCFRH.js.map} +0 -0
- /package/dist/{chunk-ILJXM3FV.js.map → chunk-HQO5EBUC.js.map} +0 -0
- /package/dist/{chunk-FK556DDH.js.map → chunk-I4UNL747.js.map} +0 -0
- /package/dist/{chunk-RLPIT4YI.js.map → chunk-IOTTZLFF.js.map} +0 -0
- /package/dist/{chunk-TVZ6LKKS.js.map → chunk-IRFF6LSF.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-JFN6K74Q.js.map → chunk-MQEIWDYW.js.map} +0 -0
- /package/dist/{chunk-SOTR74FK.js.map → chunk-OPYFD6PD.js.map} +0 -0
- /package/dist/{chunk-3C5RPJAX.js.map → chunk-OXJBNGBK.js.map} +0 -0
- /package/dist/{chunk-BD5LHQWD.js.map → chunk-PPPZY2EU.js.map} +0 -0
- /package/dist/{chunk-25BY3HHZ.js.map → chunk-SUTSSOYU.js.map} +0 -0
- /package/dist/{chunk-KS7WO6EQ.js.map → chunk-VFB2G5YL.js.map} +0 -0
- /package/dist/{chunk-BUUYY2H2.js.map → chunk-WP5OWVLZ.js.map} +0 -0
- /package/dist/{chunk-S53PAX2V.js.map → chunk-XM7BYXT7.js.map} +0 -0
- /package/dist/{chunk-FADZBOR4.js.map → chunk-XRWTAEZM.js.map} +0 -0
- /package/dist/{chunk-E5OECWZ5.js.map → chunk-XT7XVA53.js.map} +0 -0
- /package/dist/{chunk-R3PS27B4.js.map → chunk-Z4R6RI2N.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listNamespaces
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-574MU2Y3.js";
|
|
4
4
|
import {
|
|
5
5
|
runConsolidationProvenanceCheck
|
|
6
6
|
} from "./chunk-LZ3VEOU5.js";
|
|
@@ -32,17 +32,17 @@ import {
|
|
|
32
32
|
} from "./chunk-AJU4PJGY.js";
|
|
33
33
|
import {
|
|
34
34
|
parseConfig
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-NZPF2SYV.js";
|
|
36
36
|
import {
|
|
37
37
|
listMemoryGovernanceRuns,
|
|
38
38
|
readMemoryGovernanceRunArtifact
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-XT7XVA53.js";
|
|
40
40
|
import {
|
|
41
41
|
analyzeGraphHealth
|
|
42
42
|
} from "./chunk-4JRRISLU.js";
|
|
43
43
|
import {
|
|
44
44
|
StorageManager
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-IRFF6LSF.js";
|
|
46
46
|
import {
|
|
47
47
|
lintWorkspaceFiles
|
|
48
48
|
} from "./chunk-DM2T26WE.js";
|
|
@@ -1333,4 +1333,4 @@ export {
|
|
|
1333
1333
|
runBenchmarkRecall,
|
|
1334
1334
|
runOperatorRepair
|
|
1335
1335
|
};
|
|
1336
|
-
//# sourceMappingURL=chunk-
|
|
1336
|
+
//# sourceMappingURL=chunk-DARLGSFX.js.map
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import {
|
|
2
|
+
withTimeoutSignal
|
|
3
|
+
} from "./chunk-CINZGPSJ.js";
|
|
4
|
+
import {
|
|
5
|
+
getHostEmbeddingProvider,
|
|
6
|
+
normalizeHostEmbeddingVector
|
|
7
|
+
} from "./chunk-3ONXXHQO.js";
|
|
8
|
+
import {
|
|
9
|
+
isAbortError
|
|
10
|
+
} from "./chunk-PVGDJXVK.js";
|
|
11
|
+
import {
|
|
12
|
+
log
|
|
13
|
+
} from "./chunk-2ODBA7MQ.js";
|
|
14
|
+
|
|
15
|
+
// src/search/embed-helper.ts
|
|
16
|
+
var DEFAULT_OPENAI_MODEL = "text-embedding-3-small";
|
|
17
|
+
var DEFAULT_PROVIDER_CACHE_TTL_MS = 250;
|
|
18
|
+
var EmbedHelper = class {
|
|
19
|
+
constructor(config, options = {}) {
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.options = options;
|
|
22
|
+
}
|
|
23
|
+
config;
|
|
24
|
+
options;
|
|
25
|
+
cachedProvider;
|
|
26
|
+
cachedProviderAt = 0;
|
|
27
|
+
providerCacheTtlMs = DEFAULT_PROVIDER_CACHE_TTL_MS;
|
|
28
|
+
/**
|
|
29
|
+
* Whether an embedding provider is available.
|
|
30
|
+
* Re-resolves periodically so late host-provider registration is visible
|
|
31
|
+
* without repeatedly probing provider state on every hot-path call.
|
|
32
|
+
*/
|
|
33
|
+
isAvailable() {
|
|
34
|
+
return this.getProvider() !== null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Embed a single text string. Returns null if no provider is available.
|
|
38
|
+
*/
|
|
39
|
+
async embed(text, options = {}) {
|
|
40
|
+
return (await this.embedWithProvider(text, options))?.vector ?? null;
|
|
41
|
+
}
|
|
42
|
+
async embedWithProvider(text, options = {}) {
|
|
43
|
+
const provider = this.getProvider();
|
|
44
|
+
if (!provider) return null;
|
|
45
|
+
const result = await this.callEmbed(text, provider, options.signal, "query");
|
|
46
|
+
if (result) {
|
|
47
|
+
return {
|
|
48
|
+
vector: result,
|
|
49
|
+
providerIdentity: providerIdentity(provider)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (provider.type !== "host") return null;
|
|
53
|
+
const fallbackProvider = this.resolveProvider({ includeHost: false });
|
|
54
|
+
if (!fallbackProvider) return null;
|
|
55
|
+
const fallbackResult = await this.callEmbed(text, fallbackProvider, options.signal, "query");
|
|
56
|
+
return fallbackResult ? {
|
|
57
|
+
vector: fallbackResult,
|
|
58
|
+
providerIdentity: providerIdentity(fallbackProvider)
|
|
59
|
+
} : null;
|
|
60
|
+
}
|
|
61
|
+
async embedWithFallbackProviderIdentity(text, identity, options = {}) {
|
|
62
|
+
const provider = this.resolveFallbackProviderForIdentity(identity);
|
|
63
|
+
if (!provider) return null;
|
|
64
|
+
const result = await this.callEmbed(text, provider, options.signal, "query");
|
|
65
|
+
return result ? {
|
|
66
|
+
vector: result,
|
|
67
|
+
providerIdentity: providerIdentity(provider)
|
|
68
|
+
} : null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Embed a batch of texts. Returns an array parallel to input; entries are null on failure.
|
|
72
|
+
*/
|
|
73
|
+
async embedBatch(texts, batchSize = 32, options = {}) {
|
|
74
|
+
return (await this.embedBatchWithProvider(texts, batchSize, options))?.vectors ?? texts.map(() => null);
|
|
75
|
+
}
|
|
76
|
+
async embedBatchWithProvider(texts, batchSize = 32, options = {}) {
|
|
77
|
+
const provider = this.getProvider();
|
|
78
|
+
if (!provider) return null;
|
|
79
|
+
if (provider.type === "host") {
|
|
80
|
+
const hostResults = await this.embedAllWithProvider(texts, batchSize, provider, options);
|
|
81
|
+
if (!hostResults.some((result) => result === null)) {
|
|
82
|
+
return {
|
|
83
|
+
vectors: hostResults,
|
|
84
|
+
providerIdentity: providerIdentity(provider)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const fallbackProvider = this.resolveProvider({ includeHost: false });
|
|
88
|
+
if (!fallbackProvider) {
|
|
89
|
+
return {
|
|
90
|
+
vectors: hostResults,
|
|
91
|
+
providerIdentity: providerIdentity(provider)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const fallbackResults = await this.embedAllWithProvider(texts, batchSize, fallbackProvider, options);
|
|
95
|
+
return {
|
|
96
|
+
vectors: fallbackResults,
|
|
97
|
+
providerIdentity: providerIdentity(fallbackProvider)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
vectors: await this.embedAllWithProvider(texts, batchSize, provider, options),
|
|
102
|
+
providerIdentity: providerIdentity(provider)
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
getProviderIdentity() {
|
|
106
|
+
const provider = this.getProvider();
|
|
107
|
+
return provider ? providerIdentity(provider) : null;
|
|
108
|
+
}
|
|
109
|
+
async embedAllWithProvider(texts, batchSize, provider, options = {}) {
|
|
110
|
+
const results = new Array(texts.length).fill(null);
|
|
111
|
+
for (let i = 0; i < texts.length; i += batchSize) {
|
|
112
|
+
const batch = texts.slice(i, i + batchSize);
|
|
113
|
+
const batchResults = provider.type === "host" && provider.hostProvider?.embedBatch ? await this.callHostEmbedBatch(batch, provider.hostProvider, options.signal) : await Promise.all(
|
|
114
|
+
batch.map((t) => this.callEmbed(t, provider, options.signal, "document"))
|
|
115
|
+
);
|
|
116
|
+
for (let j = 0; j < batchResults.length; j++) {
|
|
117
|
+
results[i + j] = batchResults[j];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
getProvider() {
|
|
123
|
+
const now = Date.now();
|
|
124
|
+
if (this.cachedProvider !== void 0 && now - this.cachedProviderAt < this.providerCacheTtlMs) {
|
|
125
|
+
return this.cachedProvider;
|
|
126
|
+
}
|
|
127
|
+
this.cachedProvider = this.resolveProvider();
|
|
128
|
+
this.cachedProviderAt = now;
|
|
129
|
+
return this.cachedProvider;
|
|
130
|
+
}
|
|
131
|
+
resolveProvider(options = {}) {
|
|
132
|
+
if (!this.config.embeddingFallbackEnabled) return null;
|
|
133
|
+
if (options.includeHost !== false && this.config.hostEmbeddingProviderEnabled !== false) {
|
|
134
|
+
const hostProvider = this.resolveHostEmbeddingProvider();
|
|
135
|
+
if (hostProvider) {
|
|
136
|
+
return {
|
|
137
|
+
type: "host",
|
|
138
|
+
model: hostProvider.model || hostProvider.id,
|
|
139
|
+
hostProvider
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const preferred = this.config.embeddingFallbackProvider;
|
|
144
|
+
const providers = preferred === "auto" ? ["openai", "local"] : [preferred];
|
|
145
|
+
for (const p of providers) {
|
|
146
|
+
if (p === "openai") {
|
|
147
|
+
const provider = this.createOpenAiProvider();
|
|
148
|
+
if (provider) return provider;
|
|
149
|
+
}
|
|
150
|
+
if (p === "local") {
|
|
151
|
+
const provider = this.createLocalProvider();
|
|
152
|
+
if (provider) return provider;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
resolveFallbackProviderForIdentity(identity) {
|
|
158
|
+
if (!this.config.embeddingFallbackEnabled) return null;
|
|
159
|
+
const separator = identity.indexOf(":");
|
|
160
|
+
if (separator <= 0 || separator === identity.length - 1) return null;
|
|
161
|
+
const type = identity.slice(0, separator);
|
|
162
|
+
const model = identity.slice(separator + 1);
|
|
163
|
+
if (type === "openai") {
|
|
164
|
+
const provider = this.createOpenAiProvider();
|
|
165
|
+
return provider && provider.model === model ? provider : null;
|
|
166
|
+
}
|
|
167
|
+
if (type === "local") {
|
|
168
|
+
const provider = this.createLocalProvider();
|
|
169
|
+
return provider && provider.model === model ? provider : null;
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
createOpenAiProvider() {
|
|
174
|
+
if (!this.config.openaiApiKey) return null;
|
|
175
|
+
const baseUrl = this.config.openaiBaseUrl ?? "https://api.openai.com/v1";
|
|
176
|
+
return {
|
|
177
|
+
type: "openai",
|
|
178
|
+
model: DEFAULT_OPENAI_MODEL,
|
|
179
|
+
endpoint: `${baseUrl.replace(/\/$/, "")}/embeddings`,
|
|
180
|
+
headers: {
|
|
181
|
+
"Content-Type": "application/json",
|
|
182
|
+
Authorization: `Bearer ${this.config.openaiApiKey}`
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
createLocalProvider() {
|
|
187
|
+
if (!this.config.localLlmEnabled || !this.config.localLlmUrl) return null;
|
|
188
|
+
const base = this.config.localLlmUrl.replace(/\/$/, "");
|
|
189
|
+
const endpoint = /\/v1$/i.test(base) ? `${base}/embeddings` : `${base}/v1/embeddings`;
|
|
190
|
+
const headers = {
|
|
191
|
+
"Content-Type": "application/json",
|
|
192
|
+
...this.config.localLlmHeaders ?? {}
|
|
193
|
+
};
|
|
194
|
+
if (this.config.localLlmApiKey && this.config.localLlmAuthHeader !== false) {
|
|
195
|
+
headers.Authorization = `Bearer ${this.config.localLlmApiKey}`;
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
type: "local",
|
|
199
|
+
model: this.config.embeddingFallbackModel || this.config.localLlmModel || DEFAULT_OPENAI_MODEL,
|
|
200
|
+
endpoint,
|
|
201
|
+
headers
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
resolveHostEmbeddingProvider() {
|
|
205
|
+
const scopedConfig = this.config;
|
|
206
|
+
const scopes = [
|
|
207
|
+
scopedConfig.memoryDir,
|
|
208
|
+
scopedConfig.hostEmbeddingProviderScope
|
|
209
|
+
].filter((scope) => typeof scope === "string" && scope.trim().length > 0);
|
|
210
|
+
for (const scope of new Set(scopes)) {
|
|
211
|
+
const provider = getHostEmbeddingProvider(scope);
|
|
212
|
+
if (provider) return provider;
|
|
213
|
+
}
|
|
214
|
+
return void 0;
|
|
215
|
+
}
|
|
216
|
+
async callEmbed(input, provider, signal, inputType = "document") {
|
|
217
|
+
if (provider.type === "host") {
|
|
218
|
+
return this.callHostEmbed(input, provider.hostProvider, signal, inputType);
|
|
219
|
+
}
|
|
220
|
+
if (!provider.endpoint || !provider.headers) return null;
|
|
221
|
+
try {
|
|
222
|
+
const res = await fetch(provider.endpoint, {
|
|
223
|
+
method: "POST",
|
|
224
|
+
headers: provider.headers,
|
|
225
|
+
body: JSON.stringify({
|
|
226
|
+
model: provider.model,
|
|
227
|
+
input: input.slice(0, 8e3),
|
|
228
|
+
encoding_format: "float"
|
|
229
|
+
}),
|
|
230
|
+
signal: withTimeoutSignal(signal, 3e4)
|
|
231
|
+
});
|
|
232
|
+
if (!res.ok) {
|
|
233
|
+
log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const payload = await res.json();
|
|
237
|
+
const vector = payload?.data?.[0]?.embedding;
|
|
238
|
+
return normalizeHttpEmbeddingVector(vector);
|
|
239
|
+
} catch (err) {
|
|
240
|
+
if (isAbortError(err)) throw err;
|
|
241
|
+
log.debug(`EmbedHelper error: ${err}`);
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
async callHostEmbed(input, provider, signal, inputType = "document") {
|
|
246
|
+
if (!provider) return null;
|
|
247
|
+
try {
|
|
248
|
+
const vector = await provider.embed(input.slice(0, 8e3), {
|
|
249
|
+
signal: withTimeoutSignal(signal, 3e4),
|
|
250
|
+
inputType
|
|
251
|
+
});
|
|
252
|
+
return this.normalizeHostEmbeddingVector(vector);
|
|
253
|
+
} catch (err) {
|
|
254
|
+
if (isAbortError(err)) throw err;
|
|
255
|
+
log.debug(`EmbedHelper host provider error: ${err}`);
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
async callHostEmbedBatch(inputs, provider, signal) {
|
|
260
|
+
try {
|
|
261
|
+
const vectors = await provider.embedBatch?.(
|
|
262
|
+
inputs.map((input) => input.slice(0, 8e3)),
|
|
263
|
+
{
|
|
264
|
+
signal: withTimeoutSignal(signal, 3e4),
|
|
265
|
+
inputType: "document"
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
if (!Array.isArray(vectors)) return inputs.map(() => null);
|
|
269
|
+
return inputs.map((_, index) => this.normalizeHostEmbeddingVector(vectors[index]));
|
|
270
|
+
} catch (err) {
|
|
271
|
+
if (isAbortError(err)) throw err;
|
|
272
|
+
log.debug(`EmbedHelper host provider batch error: ${err}`);
|
|
273
|
+
return inputs.map(() => null);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
normalizeHostEmbeddingVector(value) {
|
|
277
|
+
const vector = normalizeHostEmbeddingVector(value);
|
|
278
|
+
if (!vector) return null;
|
|
279
|
+
const expectedDimension = this.resolveHostEmbeddingExpectedDimension();
|
|
280
|
+
if (expectedDimension !== null && vector.length !== expectedDimension) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
return vector;
|
|
284
|
+
}
|
|
285
|
+
resolveHostEmbeddingExpectedDimension() {
|
|
286
|
+
const value = this.options.hostEmbeddingExpectedDimension;
|
|
287
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
function providerIdentity(provider) {
|
|
291
|
+
return `${provider.type}:${provider.model}`;
|
|
292
|
+
}
|
|
293
|
+
function normalizeHttpEmbeddingVector(vector) {
|
|
294
|
+
if (!Array.isArray(vector)) return null;
|
|
295
|
+
const normalized = [];
|
|
296
|
+
for (const component of vector) {
|
|
297
|
+
if (typeof component !== "number" || !Number.isFinite(component)) {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
normalized.push(component);
|
|
301
|
+
}
|
|
302
|
+
return normalized;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export {
|
|
306
|
+
EmbedHelper
|
|
307
|
+
};
|
|
308
|
+
//# sourceMappingURL=chunk-EWLQPEO6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/search/embed-helper.ts"],"sourcesContent":["import { log } from \"../logger.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { isAbortError } from \"../abort-error.js\";\nimport { withTimeoutSignal } from \"./abort.js\";\nimport {\n getHostEmbeddingProvider,\n type HostEmbeddingProvider,\n type HostEmbeddingInputType,\n normalizeHostEmbeddingVector,\n} from \"../host-embedding-provider.js\";\n\ntype ProviderConfig = {\n type: \"openai\" | \"local\" | \"host\";\n model: string;\n endpoint?: string;\n headers?: Record<string, string>;\n hostProvider?: HostEmbeddingProvider;\n};\n\ntype HostEmbeddingScopeConfig = PluginConfig & {\n /**\n * Internal namespace-router metadata. Host adapters register providers at\n * the root memoryDir while namespace backends operate under scoped dirs.\n */\n hostEmbeddingProviderScope?: string;\n};\n\ntype EmbedHelperOptions = {\n /** Backend-local vector schema dimension for host-provider validation. */\n hostEmbeddingExpectedDimension?: number;\n};\n\nexport type EmbedProviderIdentity = `${ProviderConfig[\"type\"]}:${string}`;\n\nexport type EmbedWithProviderResult = {\n vector: number[];\n providerIdentity: EmbedProviderIdentity;\n};\n\nexport type EmbedBatchWithProviderResult = {\n vectors: (number[] | null)[];\n providerIdentity: EmbedProviderIdentity;\n};\n\nconst DEFAULT_OPENAI_MODEL = \"text-embedding-3-small\";\nconst DEFAULT_PROVIDER_CACHE_TTL_MS = 250;\n\n/**\n * Standalone embedding helper for search backend adapters.\n *\n * NOTE: This intentionally duplicates provider resolution from EmbeddingFallback.\n * EmbeddingFallback is tightly integrated with the plugin lifecycle (telemetry,\n * rate-limit backoff, provider rotation). This class is a lightweight standalone\n * utility used by LanceDB/Orama backends which operate outside plugin context.\n * Merging them would break the port/adapter separation between search and plugin layers.\n */\nexport class EmbedHelper {\n private cachedProvider: ProviderConfig | null | undefined;\n private cachedProviderAt = 0;\n private providerCacheTtlMs = DEFAULT_PROVIDER_CACHE_TTL_MS;\n\n constructor(\n private readonly config: PluginConfig,\n private readonly options: EmbedHelperOptions = {},\n ) {}\n\n /**\n * Whether an embedding provider is available.\n * Re-resolves periodically so late host-provider registration is visible\n * without repeatedly probing provider state on every hot-path call.\n */\n isAvailable(): boolean {\n return this.getProvider() !== null;\n }\n\n /**\n * Embed a single text string. Returns null if no provider is available.\n */\n async embed(text: string, options: { signal?: AbortSignal } = {}): Promise<number[] | null> {\n return (await this.embedWithProvider(text, options))?.vector ?? null;\n }\n\n async embedWithProvider(\n text: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<EmbedWithProviderResult | null> {\n const provider = this.getProvider();\n if (!provider) return null;\n const result = await this.callEmbed(text, provider, options.signal, \"query\");\n if (result) {\n return {\n vector: result,\n providerIdentity: providerIdentity(provider),\n };\n }\n if (provider.type !== \"host\") return null;\n const fallbackProvider = this.resolveProvider({ includeHost: false });\n if (!fallbackProvider) return null;\n const fallbackResult = await this.callEmbed(text, fallbackProvider, options.signal, \"query\");\n return fallbackResult\n ? {\n vector: fallbackResult,\n providerIdentity: providerIdentity(fallbackProvider),\n }\n : null;\n }\n\n async embedWithFallbackProviderIdentity(\n text: string,\n identity: EmbedProviderIdentity,\n options: { signal?: AbortSignal } = {},\n ): Promise<EmbedWithProviderResult | null> {\n const provider = this.resolveFallbackProviderForIdentity(identity);\n if (!provider) return null;\n const result = await this.callEmbed(text, provider, options.signal, \"query\");\n return result\n ? {\n vector: result,\n providerIdentity: providerIdentity(provider),\n }\n : null;\n }\n\n /**\n * Embed a batch of texts. Returns an array parallel to input; entries are null on failure.\n */\n async embedBatch(\n texts: string[],\n batchSize = 32,\n options: { signal?: AbortSignal } = {},\n ): Promise<(number[] | null)[]> {\n return (await this.embedBatchWithProvider(texts, batchSize, options))?.vectors ?? texts.map(() => null);\n }\n\n async embedBatchWithProvider(\n texts: string[],\n batchSize = 32,\n options: { signal?: AbortSignal } = {},\n ): Promise<EmbedBatchWithProviderResult | null> {\n const provider = this.getProvider();\n if (!provider) return null;\n\n if (provider.type === \"host\") {\n const hostResults = await this.embedAllWithProvider(texts, batchSize, provider, options);\n if (!hostResults.some((result) => result === null)) {\n return {\n vectors: hostResults,\n providerIdentity: providerIdentity(provider),\n };\n }\n const fallbackProvider = this.resolveProvider({ includeHost: false });\n if (!fallbackProvider) {\n return {\n vectors: hostResults,\n providerIdentity: providerIdentity(provider),\n };\n }\n const fallbackResults = await this.embedAllWithProvider(texts, batchSize, fallbackProvider, options);\n return {\n vectors: fallbackResults,\n providerIdentity: providerIdentity(fallbackProvider),\n };\n }\n\n return {\n vectors: await this.embedAllWithProvider(texts, batchSize, provider, options),\n providerIdentity: providerIdentity(provider),\n };\n }\n\n getProviderIdentity(): EmbedProviderIdentity | null {\n const provider = this.getProvider();\n return provider ? providerIdentity(provider) : null;\n }\n\n private async embedAllWithProvider(\n texts: string[],\n batchSize: number,\n provider: ProviderConfig,\n options: { signal?: AbortSignal } = {},\n ): Promise<(number[] | null)[]> {\n const results: (number[] | null)[] = new Array(texts.length).fill(null);\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const batchResults =\n provider.type === \"host\" && provider.hostProvider?.embedBatch\n ? await this.callHostEmbedBatch(batch, provider.hostProvider, options.signal)\n : await Promise.all(\n batch.map((t) => this.callEmbed(t, provider, options.signal, \"document\")),\n );\n for (let j = 0; j < batchResults.length; j++) {\n results[i + j] = batchResults[j];\n }\n }\n return results;\n }\n\n private getProvider(): ProviderConfig | null {\n const now = Date.now();\n if (\n this.cachedProvider !== undefined &&\n now - this.cachedProviderAt < this.providerCacheTtlMs\n ) {\n return this.cachedProvider;\n }\n this.cachedProvider = this.resolveProvider();\n this.cachedProviderAt = now;\n return this.cachedProvider;\n }\n\n private resolveProvider(options: { includeHost?: boolean } = {}): ProviderConfig | null {\n if (!this.config.embeddingFallbackEnabled) return null;\n\n if (\n options.includeHost !== false &&\n this.config.hostEmbeddingProviderEnabled !== false\n ) {\n const hostProvider = this.resolveHostEmbeddingProvider();\n if (hostProvider) {\n return {\n type: \"host\",\n model: hostProvider.model || hostProvider.id,\n hostProvider,\n };\n }\n }\n\n const preferred = this.config.embeddingFallbackProvider;\n const providers = preferred === \"auto\" ? [\"openai\", \"local\"] : [preferred];\n\n for (const p of providers) {\n if (p === \"openai\") {\n const provider = this.createOpenAiProvider();\n if (provider) return provider;\n }\n\n if (p === \"local\") {\n const provider = this.createLocalProvider();\n if (provider) return provider;\n }\n }\n\n return null;\n }\n\n private resolveFallbackProviderForIdentity(identity: EmbedProviderIdentity): ProviderConfig | null {\n if (!this.config.embeddingFallbackEnabled) return null;\n const separator = identity.indexOf(\":\");\n if (separator <= 0 || separator === identity.length - 1) return null;\n const type = identity.slice(0, separator);\n const model = identity.slice(separator + 1);\n\n if (type === \"openai\") {\n const provider = this.createOpenAiProvider();\n return provider && provider.model === model ? provider : null;\n }\n if (type === \"local\") {\n const provider = this.createLocalProvider();\n return provider && provider.model === model ? provider : null;\n }\n return null;\n }\n\n private createOpenAiProvider(): ProviderConfig | null {\n if (!this.config.openaiApiKey) return null;\n const baseUrl = this.config.openaiBaseUrl ?? \"https://api.openai.com/v1\";\n return {\n type: \"openai\",\n model: DEFAULT_OPENAI_MODEL,\n endpoint: `${baseUrl.replace(/\\/$/, \"\")}/embeddings`,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.openaiApiKey}`,\n },\n };\n }\n\n private createLocalProvider(): ProviderConfig | null {\n if (!this.config.localLlmEnabled || !this.config.localLlmUrl) return null;\n const base = this.config.localLlmUrl.replace(/\\/$/, \"\");\n const endpoint = /\\/v1$/i.test(base) ? `${base}/embeddings` : `${base}/v1/embeddings`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(this.config.localLlmHeaders ?? {}),\n };\n if (this.config.localLlmApiKey && this.config.localLlmAuthHeader !== false) {\n headers.Authorization = `Bearer ${this.config.localLlmApiKey}`;\n }\n return {\n type: \"local\",\n model:\n this.config.embeddingFallbackModel ||\n this.config.localLlmModel ||\n DEFAULT_OPENAI_MODEL,\n endpoint,\n headers,\n };\n }\n\n private resolveHostEmbeddingProvider(): HostEmbeddingProvider | undefined {\n const scopedConfig = this.config as HostEmbeddingScopeConfig;\n const scopes = [\n scopedConfig.memoryDir,\n scopedConfig.hostEmbeddingProviderScope,\n ].filter((scope): scope is string => typeof scope === \"string\" && scope.trim().length > 0);\n\n for (const scope of new Set(scopes)) {\n const provider = getHostEmbeddingProvider(scope);\n if (provider) return provider;\n }\n return undefined;\n }\n\n private async callEmbed(\n input: string,\n provider: ProviderConfig,\n signal?: AbortSignal,\n inputType: HostEmbeddingInputType = \"document\",\n ): Promise<number[] | null> {\n if (provider.type === \"host\") {\n return this.callHostEmbed(input, provider.hostProvider, signal, inputType);\n }\n if (!provider.endpoint || !provider.headers) return null;\n try {\n const res = await fetch(provider.endpoint, {\n method: \"POST\",\n headers: provider.headers,\n body: JSON.stringify({\n model: provider.model,\n input: input.slice(0, 8000),\n encoding_format: \"float\",\n }),\n signal: withTimeoutSignal(signal, 30_000),\n });\n if (!res.ok) {\n log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);\n return null;\n }\n const payload = (await res.json()) as any;\n const vector = payload?.data?.[0]?.embedding;\n return normalizeHttpEmbeddingVector(vector);\n } catch (err) {\n if (isAbortError(err)) throw err;\n log.debug(`EmbedHelper error: ${err}`);\n return null;\n }\n }\n\n private async callHostEmbed(\n input: string,\n provider: HostEmbeddingProvider | undefined,\n signal?: AbortSignal,\n inputType: HostEmbeddingInputType = \"document\",\n ): Promise<number[] | null> {\n if (!provider) return null;\n try {\n const vector = await provider.embed(input.slice(0, 8000), {\n signal: withTimeoutSignal(signal, 30_000),\n inputType,\n });\n return this.normalizeHostEmbeddingVector(vector);\n } catch (err) {\n if (isAbortError(err)) throw err;\n log.debug(`EmbedHelper host provider error: ${err}`);\n return null;\n }\n }\n\n private async callHostEmbedBatch(\n inputs: string[],\n provider: HostEmbeddingProvider,\n signal?: AbortSignal,\n ): Promise<(number[] | null)[]> {\n try {\n const vectors = await provider.embedBatch?.(\n inputs.map((input) => input.slice(0, 8000)),\n {\n signal: withTimeoutSignal(signal, 30_000),\n inputType: \"document\",\n },\n );\n if (!Array.isArray(vectors)) return inputs.map(() => null);\n return inputs.map((_, index) => this.normalizeHostEmbeddingVector(vectors[index]));\n } catch (err) {\n if (isAbortError(err)) throw err;\n log.debug(`EmbedHelper host provider batch error: ${err}`);\n return inputs.map(() => null);\n }\n }\n\n private normalizeHostEmbeddingVector(value: unknown): number[] | null {\n const vector = normalizeHostEmbeddingVector(value);\n if (!vector) return null;\n const expectedDimension = this.resolveHostEmbeddingExpectedDimension();\n if (expectedDimension !== null && vector.length !== expectedDimension) {\n return null;\n }\n return vector;\n }\n\n private resolveHostEmbeddingExpectedDimension(): number | null {\n const value = this.options.hostEmbeddingExpectedDimension;\n return typeof value === \"number\" && Number.isInteger(value) && value > 0\n ? value\n : null;\n }\n}\n\nfunction providerIdentity(provider: ProviderConfig): EmbedProviderIdentity {\n return `${provider.type}:${provider.model}`;\n}\n\nfunction normalizeHttpEmbeddingVector(vector: unknown): number[] | null {\n if (!Array.isArray(vector)) return null;\n const normalized: number[] = [];\n for (const component of vector) {\n if (typeof component !== \"number\" || !Number.isFinite(component)) {\n return null;\n }\n normalized.push(component);\n }\n return normalized;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
compareEntityTimestamps,
|
|
6
6
|
normalizeEntityName
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IRFF6LSF.js";
|
|
8
8
|
import {
|
|
9
9
|
sanitizeMemoryContent
|
|
10
10
|
} from "./chunk-FVQJYWH7.js";
|
|
@@ -628,4 +628,4 @@ export {
|
|
|
628
628
|
entityIndexVersion,
|
|
629
629
|
entityRecentTranscriptLookbackHours
|
|
630
630
|
};
|
|
631
|
-
//# sourceMappingURL=chunk-
|
|
631
|
+
//# sourceMappingURL=chunk-FHBEL473.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isRecallDisclosure
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KGK2QKWL.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeRetrievedMemoryProvenance
|
|
6
6
|
} from "./chunk-AC5LO7IU.js";
|
|
@@ -269,4 +269,4 @@ export {
|
|
|
269
269
|
RecallXrayBuilder,
|
|
270
270
|
summarizeDisclosureTokens
|
|
271
271
|
};
|
|
272
|
-
//# sourceMappingURL=chunk-
|
|
272
|
+
//# sourceMappingURL=chunk-FXKPZ3H6.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-HQ6NIBL6.js";
|
|
4
4
|
import {
|
|
5
5
|
StorageManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IRFF6LSF.js";
|
|
7
7
|
import {
|
|
8
8
|
getCachedEpisodeMap,
|
|
9
9
|
setCachedEpisodeMap
|
|
@@ -105,4 +105,4 @@ async function searchVerifiedEpisodes(options) {
|
|
|
105
105
|
export {
|
|
106
106
|
searchVerifiedEpisodes
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-GBXGCFRH.js.map
|
|
@@ -10,10 +10,17 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
listMemoryGovernanceRuns,
|
|
12
12
|
readMemoryGovernanceRunArtifact
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-XT7XVA53.js";
|
|
14
14
|
import {
|
|
15
15
|
StorageManager
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-IRFF6LSF.js";
|
|
17
|
+
import {
|
|
18
|
+
MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
|
|
19
|
+
buildLifecycleEventsForMemory,
|
|
20
|
+
inferMemoryStatus,
|
|
21
|
+
sortMemoryLifecycleEvents,
|
|
22
|
+
toMemoryPathRel
|
|
23
|
+
} from "./chunk-RULE4VG5.js";
|
|
17
24
|
import {
|
|
18
25
|
normalizeProjectionPreview,
|
|
19
26
|
normalizeProjectionTags
|
|
@@ -32,13 +39,6 @@ import {
|
|
|
32
39
|
import {
|
|
33
40
|
openBetterSqlite3
|
|
34
41
|
} from "./chunk-3HPAPHUK.js";
|
|
35
|
-
import {
|
|
36
|
-
MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
|
|
37
|
-
buildLifecycleEventsForMemory,
|
|
38
|
-
inferMemoryStatus,
|
|
39
|
-
sortMemoryLifecycleEvents,
|
|
40
|
-
toMemoryPathRel
|
|
41
|
-
} from "./chunk-RULE4VG5.js";
|
|
42
42
|
|
|
43
43
|
// src/maintenance/rebuild-memory-projection.ts
|
|
44
44
|
import path from "path";
|
|
@@ -929,4 +929,4 @@ export {
|
|
|
929
929
|
verifyMemoryProjection,
|
|
930
930
|
repairMemoryProjection
|
|
931
931
|
};
|
|
932
|
-
//# sourceMappingURL=chunk-
|
|
932
|
+
//# sourceMappingURL=chunk-HQO5EBUC.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
scanMemoryDir
|
|
3
|
-
} from "./chunk-Q4CAQGKQ.js";
|
|
4
1
|
import {
|
|
5
2
|
isSearchAborted,
|
|
6
3
|
throwIfSearchAborted
|
|
7
4
|
} from "./chunk-CINZGPSJ.js";
|
|
5
|
+
import {
|
|
6
|
+
scanMemoryDir
|
|
7
|
+
} from "./chunk-Q4CAQGKQ.js";
|
|
8
8
|
import {
|
|
9
9
|
log
|
|
10
10
|
} from "./chunk-2ODBA7MQ.js";
|
|
@@ -204,4 +204,4 @@ var MeilisearchBackend = class {
|
|
|
204
204
|
export {
|
|
205
205
|
MeilisearchBackend
|
|
206
206
|
};
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
207
|
+
//# sourceMappingURL=chunk-I4UNL747.js.map
|