@remnic/core 9.3.765 → 9.3.767
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-admin-ops-surface.d.ts +1 -1
- package/dist/access-admin-ops-surface.js +9 -9
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.js +10 -10
- package/dist/access-cli.js +18 -18
- package/dist/access-http.d.ts +13 -2
- package/dist/access-http.js +14 -14
- package/dist/access-identity-continuity-surface.js +9 -9
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +9 -9
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +13 -13
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +9 -9
- package/dist/access-operations-batch.js +11 -11
- package/dist/access-operations.d.ts +5 -5
- package/dist/access-operations.js +12 -12
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +9 -9
- package/dist/access-schema.d.ts +68 -68
- package/dist/{access-service-CAoJ4qN8.d.ts → access-service-CdW6B2qQ.d.ts} +3 -5
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +9 -9
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/{chunk-NKP6II6G.js → chunk-4HYFKIGH.js} +6 -6
- package/dist/{chunk-CGLRKKMF.js → chunk-4JG55YV3.js} +3 -3
- package/dist/{chunk-BRYPUVJU.js → chunk-CKNAVW34.js} +2 -2
- package/dist/{chunk-WRFKZEO6.js → chunk-DMKMQTBH.js} +10 -2
- package/dist/chunk-DMKMQTBH.js.map +1 -0
- package/dist/{chunk-RJCQPRLB.js → chunk-GLERZDM7.js} +3 -3
- package/dist/{chunk-SKT66QI5.js → chunk-HBOPSFQQ.js} +6 -6
- package/dist/{chunk-TOF25WKK.js → chunk-IGVKWKR2.js} +2 -2
- package/dist/{chunk-422OELQ3.js → chunk-J3UJJZKI.js} +44 -7
- package/dist/chunk-J3UJJZKI.js.map +1 -0
- package/dist/{chunk-5CEJH5ZN.js → chunk-K2I3AWBR.js} +10 -2
- package/dist/chunk-K2I3AWBR.js.map +1 -0
- package/dist/{chunk-5JF4DIKZ.js → chunk-MSGPLITO.js} +2 -2
- package/dist/{chunk-K43PI6DQ.js → chunk-MYNRJGOY.js} +2 -2
- package/dist/{chunk-UQEE4H6Z.js → chunk-OAREUC7N.js} +13 -7
- package/dist/chunk-OAREUC7N.js.map +1 -0
- package/dist/{chunk-TUXRWLIQ.js → chunk-PA5ALD3S.js} +6 -6
- package/dist/{chunk-P6ZZ4GX4.js → chunk-TVLN5EZZ.js} +3 -3
- package/dist/{chunk-KXG7HHIQ.js → chunk-U5GFYMV7.js} +2 -2
- package/dist/{chunk-YNQ6DFSV.js → chunk-WU46YPY6.js} +8 -1
- package/dist/chunk-WU46YPY6.js.map +1 -0
- package/dist/{chunk-LQ6JI4VH.js → chunk-XG4NBBRW.js} +10 -2
- package/dist/chunk-XG4NBBRW.js.map +1 -0
- package/dist/{chunk-SANZHXY2.js → chunk-ZZMRXJFY.js} +29 -3
- package/dist/chunk-ZZMRXJFY.js.map +1 -0
- package/dist/{cli-WRmxvfc_.d.ts → cli-Dfnc66gs.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +17 -17
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -18
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/namespaces/migrate.js +9 -9
- package/dist/namespaces/search.js +8 -8
- package/dist/operator-toolkit.js +10 -10
- package/dist/orchestrator.js +18 -18
- package/dist/qmd.js +2 -2
- package/dist/schemas.d.ts +84 -84
- package/dist/search/factory.js +7 -7
- package/dist/search/index.js +7 -7
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +4 -3
- package/dist/search/port.js +3 -1
- package/dist/search/remote-backend.js +2 -1
- package/dist/shared-context/manager.d.ts +8 -8
- package/dist/transfer/types.d.ts +66 -66
- package/package.json +2 -2
- package/src/access-http-cancellation.test.ts +240 -0
- package/src/access-http.ts +54 -2
- package/src/access-recall-surface.ts +1 -0
- package/src/access-service.ts +10 -10
- package/src/search/lancedb-backend.ts +8 -0
- package/src/search/meilisearch-backend.ts +8 -0
- package/src/search/orama-backend.ts +8 -0
- package/src/search/port.ts +15 -2
- package/src/search/remote-backend.ts +32 -3
- package/dist/chunk-422OELQ3.js.map +0 -1
- package/dist/chunk-5CEJH5ZN.js.map +0 -1
- package/dist/chunk-LQ6JI4VH.js.map +0 -1
- package/dist/chunk-SANZHXY2.js.map +0 -1
- package/dist/chunk-UQEE4H6Z.js.map +0 -1
- package/dist/chunk-WRFKZEO6.js.map +0 -1
- package/dist/chunk-YNQ6DFSV.js.map +0 -1
- /package/dist/{chunk-NKP6II6G.js.map → chunk-4HYFKIGH.js.map} +0 -0
- /package/dist/{chunk-CGLRKKMF.js.map → chunk-4JG55YV3.js.map} +0 -0
- /package/dist/{chunk-BRYPUVJU.js.map → chunk-CKNAVW34.js.map} +0 -0
- /package/dist/{chunk-RJCQPRLB.js.map → chunk-GLERZDM7.js.map} +0 -0
- /package/dist/{chunk-SKT66QI5.js.map → chunk-HBOPSFQQ.js.map} +0 -0
- /package/dist/{chunk-TOF25WKK.js.map → chunk-IGVKWKR2.js.map} +0 -0
- /package/dist/{chunk-5JF4DIKZ.js.map → chunk-MSGPLITO.js.map} +0 -0
- /package/dist/{chunk-K43PI6DQ.js.map → chunk-MYNRJGOY.js.map} +0 -0
- /package/dist/{chunk-TUXRWLIQ.js.map → chunk-PA5ALD3S.js.map} +0 -0
- /package/dist/{chunk-P6ZZ4GX4.js.map → chunk-TVLN5EZZ.js.map} +0 -0
- /package/dist/{chunk-KXG7HHIQ.js.map → chunk-U5GFYMV7.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSearchBackend
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4HYFKIGH.js";
|
|
4
4
|
import {
|
|
5
5
|
namespaceIdentityToken,
|
|
6
6
|
normalizeNamespaceIdentity
|
|
@@ -404,4 +404,4 @@ export {
|
|
|
404
404
|
namespaceCollectionName,
|
|
405
405
|
NamespaceSearchRouter
|
|
406
406
|
};
|
|
407
|
-
//# sourceMappingURL=chunk-
|
|
407
|
+
//# sourceMappingURL=chunk-CKNAVW34.js.map
|
|
@@ -6,8 +6,9 @@ import {
|
|
|
6
6
|
throwIfSearchAborted
|
|
7
7
|
} from "./chunk-CINZGPSJ.js";
|
|
8
8
|
import {
|
|
9
|
+
reportSearchDegradation,
|
|
9
10
|
resolveEnsureCollectionArgs
|
|
10
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-WU46YPY6.js";
|
|
11
12
|
import {
|
|
12
13
|
log
|
|
13
14
|
} from "./chunk-NU3CSQ4H.js";
|
|
@@ -218,6 +219,13 @@ var MeilisearchBackend = class {
|
|
|
218
219
|
} catch (err) {
|
|
219
220
|
log.debug(`MeilisearchBackend search failed: ${err}`);
|
|
220
221
|
if (rethrow) throw err;
|
|
222
|
+
if (!isSearchAborted(execution)) {
|
|
223
|
+
reportSearchDegradation(execution, {
|
|
224
|
+
backend: "meilisearch",
|
|
225
|
+
code: "backend_error",
|
|
226
|
+
detail: err instanceof Error ? err.name : typeof err
|
|
227
|
+
});
|
|
228
|
+
}
|
|
221
229
|
return [];
|
|
222
230
|
}
|
|
223
231
|
}
|
|
@@ -245,4 +253,4 @@ function isMeilisearchIndexNotFoundError(err) {
|
|
|
245
253
|
export {
|
|
246
254
|
MeilisearchBackend
|
|
247
255
|
};
|
|
248
|
-
//# sourceMappingURL=chunk-
|
|
256
|
+
//# sourceMappingURL=chunk-DMKMQTBH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/search/meilisearch-backend.ts"],"sourcesContent":["import { log } from \"../logger.js\";\nimport {\n reportSearchDegradation,\n resolveEnsureCollectionArgs,\n type SearchBackend,\n type SearchExecutionOptions,\n type SearchQueryOptions,\n type SearchResult,\n} from \"./port.js\";\nimport { scanMemoryDir } from \"./document-scanner.js\";\nimport { isSearchAborted, throwIfSearchAborted } from \"./abort.js\";\n\nexport interface MeilisearchBackendOptions {\n host: string;\n apiKey?: string;\n collection: string;\n timeoutMs?: number;\n autoIndex?: boolean;\n memoryDir?: string;\n}\n\n/**\n * Meilisearch search backend — server-based SDK client.\n *\n * Requires a running Meilisearch instance. Uses the official `meilisearch` SDK.\n * When `autoIndex` is true, update() pushes docs from the local memory directory.\n */\nexport class MeilisearchBackend implements SearchBackend {\n private readonly host: string;\n private readonly apiKey?: string;\n private readonly collection: string;\n private readonly timeoutMs: number;\n private readonly autoIndex: boolean;\n private readonly memoryDir?: string;\n private available = false;\n private client: any = null;\n private meiliModule: any = null;\n\n constructor(opts: MeilisearchBackendOptions) {\n this.host = opts.host;\n this.apiKey = opts.apiKey;\n this.collection = opts.collection;\n this.timeoutMs = opts.timeoutMs ?? 30_000;\n this.autoIndex = opts.autoIndex ?? false;\n this.memoryDir = opts.memoryDir;\n }\n\n async probe(): Promise<boolean> {\n try {\n const client = await this.ensureClient();\n await client.health();\n this.available = true;\n return true;\n } catch (err) {\n log.debug(`MeilisearchBackend probe failed: ${err}`);\n this.available = false;\n return false;\n }\n }\n\n isAvailable(): boolean {\n return this.available;\n }\n\n debugStatus(): string {\n return `backend=meilisearch available=${this.available} host=${this.host}`;\n }\n\n async search(\n query: string,\n collection?: string,\n maxResults?: number,\n _options?: SearchQueryOptions,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]> {\n if (isSearchAborted(execution)) return [];\n // Try hybrid first; fall back to plain FTS only if hybrid throws (e.g. no embedder configured)\n try {\n return await this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 0.5, embedder: \"default\" } }, collection, true, execution);\n } catch {\n if (isSearchAborted(execution)) return [];\n return this.bm25Search(query, collection, maxResults, execution);\n }\n }\n\n async searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n const limit = maxResults ?? 10;\n if (!this.available) return [];\n\n try {\n throwIfSearchAborted(execution, \"MeilisearchBackend global search aborted\");\n const client = await this.ensureClient();\n const indexes = await client.getIndexes();\n throwIfSearchAborted(execution, \"MeilisearchBackend global search aborted\");\n const queries = (indexes.results ?? []).map((idx: any) => ({\n indexUid: idx.uid,\n q: query,\n limit,\n showRankingScore: true,\n }));\n if (queries.length === 0) return [];\n\n const multiResult = await client.multiSearch({ queries });\n throwIfSearchAborted(execution, \"MeilisearchBackend global search aborted\");\n const allResults: SearchResult[] = [];\n for (const result of multiResult.results ?? []) {\n allResults.push(...this.mapHits(result.hits ?? []));\n }\n allResults.sort((a, b) => b.score - a.score);\n return allResults.slice(0, limit);\n } catch (err) {\n log.debug(`MeilisearchBackend searchGlobal failed: ${err}`);\n return [];\n }\n }\n\n async bm25Search(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n return this.doSearch(query, maxResults ?? 10, undefined, collection, false, execution);\n }\n\n async vectorSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n return this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 1.0, embedder: \"default\" } }, collection, false, execution);\n }\n\n async hybridSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n return this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 0.5, embedder: \"default\" } }, collection, false, execution);\n }\n\n async update(execution?: SearchExecutionOptions): Promise<void> {\n await this.updateCollection(this.collection, execution);\n }\n\n async updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void> {\n if (!this.memoryDir) return;\n await this.updateCollectionFromDir(collection, this.memoryDir, execution);\n }\n\n async updateCollectionFromDir(collection: string, memoryDir: string, execution?: SearchExecutionOptions): Promise<void> {\n if (!this.autoIndex) return;\n if (!this.available) return;\n if (isSearchAborted(execution)) return;\n\n try {\n const ensured = await this.ensureCollection(memoryDir, collection, execution);\n if (ensured === \"skipped\" || ensured === \"missing\") return;\n const client = await this.ensureClient();\n if (isSearchAborted(execution)) return;\n const docs = await scanMemoryDir(memoryDir);\n if (isSearchAborted(execution)) return;\n const index = client.index(collection);\n\n const meilDocs = docs.map((d) => ({\n id: d.docid,\n path: d.path,\n content: d.content,\n snippet: d.snippet,\n }));\n\n // Upsert current docs and wait for the task to complete\n if (isSearchAborted(execution)) return;\n const addTask = await index.addDocuments(meilDocs, { primaryKey: \"id\" });\n await client.waitForTask(addTask.taskUid, { timeOutMs: this.timeoutMs });\n if (isSearchAborted(execution)) return;\n\n // Remove docs that no longer exist on disk (paginated to handle large indexes)\n const currentIds = new Set(docs.map((d) => d.docid));\n try {\n const PAGE_SIZE = 1000;\n let offset = 0;\n let staleIds: string[] = [];\n let hasMore = true;\n while (hasMore) {\n if (isSearchAborted(execution)) return;\n const page = await index.getDocuments({ limit: PAGE_SIZE, offset, fields: [\"id\"] });\n const results = page.results ?? [];\n for (const doc of results) {\n const id = doc.id as string;\n if (!currentIds.has(id)) staleIds.push(id);\n }\n offset += results.length;\n hasMore = results.length === PAGE_SIZE;\n }\n if (staleIds.length > 0) {\n if (isSearchAborted(execution)) return;\n const delTask = await index.deleteDocuments(staleIds);\n await client.waitForTask(delTask.taskUid, { timeOutMs: this.timeoutMs });\n }\n } catch {\n // Deletion cleanup is best-effort\n }\n } catch (err) {\n log.debug(`MeilisearchBackend update failed: ${err}`);\n }\n }\n\n async embed(): Promise<void> {\n // Meilisearch handles its own embedding when configured with an embedder\n }\n\n async embedCollection(collection: string): Promise<void> {\n // Meilisearch handles its own embedding when configured with an embedder\n // The collection parameter is accepted for interface compliance but Meilisearch\n // manages embeddings server-side per index (collection).\n }\n\n async ensureCollection(\n _memoryDir: string,\n collectionOrExecution?: string | SearchExecutionOptions,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\"> {\n const { collection, execution: effectiveExecution } = resolveEnsureCollectionArgs(\n collectionOrExecution,\n execution,\n );\n if (!this.available) return \"skipped\";\n if (isSearchAborted(effectiveExecution)) return \"skipped\";\n const targetCollection = collection ?? this.collection;\n try {\n const client = await this.ensureClient();\n if (isSearchAborted(effectiveExecution)) return \"skipped\";\n try {\n await client.getIndex(targetCollection);\n return \"present\";\n } catch (err) {\n if (!isMeilisearchIndexNotFoundError(err)) {\n log.debug(\n `MeilisearchBackend collection check unavailable for \"${targetCollection}\" (will not skip update): ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n return \"unknown\";\n }\n // Index doesn't exist — create it\n if (isSearchAborted(effectiveExecution)) return \"skipped\";\n const createTask = await client.createIndex(targetCollection, { primaryKey: \"id\" });\n if (isSearchAborted(effectiveExecution)) return \"skipped\";\n if (createTask?.taskUid !== undefined && createTask?.taskUid !== null) {\n await client.waitForTask(createTask.taskUid, { timeOutMs: this.timeoutMs });\n }\n return \"present\";\n }\n } catch (err) {\n log.debug(\n `MeilisearchBackend collection check failed for \"${targetCollection}\" (will not disable updates): ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n return \"unknown\";\n }\n }\n\n private async ensureClient(): Promise<any> {\n if (this.client) return this.client;\n if (!this.meiliModule) {\n this.meiliModule = await import(\"meilisearch\");\n }\n const MeiliSearch = this.meiliModule.MeiliSearch ?? this.meiliModule.default?.MeiliSearch;\n this.client = new MeiliSearch({\n host: this.host,\n apiKey: this.apiKey,\n timeout: this.timeoutMs,\n });\n return this.client;\n }\n\n private async doSearch(\n query: string,\n limit: number,\n extra?: Record<string, unknown>,\n collection?: string,\n rethrow = false,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]> {\n if (!this.available) return [];\n if (isSearchAborted(execution)) return [];\n try {\n const client = await this.ensureClient();\n throwIfSearchAborted(execution, \"MeilisearchBackend search aborted\");\n const index = client.index(collection ?? this.collection);\n const result = await index.search(query, { limit, showRankingScore: true, ...extra });\n throwIfSearchAborted(execution, \"MeilisearchBackend search aborted\");\n return this.mapHits(result.hits ?? []);\n } catch (err) {\n log.debug(`MeilisearchBackend search failed: ${err}`);\n if (rethrow) throw err;\n if (!isSearchAborted(execution)) {\n reportSearchDegradation(execution, {\n backend: \"meilisearch\",\n code: \"backend_error\",\n detail: err instanceof Error ? err.name : typeof err,\n });\n }\n return [];\n }\n }\n\n private mapHits(hits: any[]): SearchResult[] {\n return hits.map((hit) => ({\n docid: hit.id ?? \"\",\n path: hit.path ?? \"\",\n snippet: hit._formatted?.content ?? hit.snippet ?? hit.content?.slice(0, 200) ?? \"\",\n score: hit._rankingScore ?? 0.5,\n }));\n }\n}\n\nfunction isMeilisearchIndexNotFoundError(err: unknown): boolean {\n if (!err || typeof err !== \"object\") {\n return false;\n }\n const record = err as Record<string, unknown>;\n const code = typeof record.code === \"string\" ? record.code.toLowerCase() : \"\";\n const type = typeof record.type === \"string\" ? record.type.toLowerCase() : \"\";\n const status =\n typeof record.status === \"number\"\n ? record.status\n : typeof record.statusCode === \"number\"\n ? record.statusCode\n : undefined;\n const message = err instanceof Error\n ? err.message.toLowerCase()\n : typeof record.message === \"string\"\n ? record.message.toLowerCase()\n : \"\";\n\n return (\n code === \"index_not_found\"\n || type === \"index_not_found\"\n || status === 404\n || message.includes(\"index_not_found\")\n || /index .*not found/.test(message)\n || /index .*does not exist/.test(message)\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -21,10 +21,10 @@ import {
|
|
|
21
21
|
} from "./chunk-T4WDJPEZ.js";
|
|
22
22
|
import {
|
|
23
23
|
defineOperation
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-MSGPLITO.js";
|
|
25
25
|
import {
|
|
26
26
|
EngramAccessInputError
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-OAREUC7N.js";
|
|
28
28
|
import {
|
|
29
29
|
projectTagProjectId
|
|
30
30
|
} from "./chunk-BAVVI5GP.js";
|
|
@@ -417,4 +417,4 @@ defineOperation({ name: "offline_sync_snapshot_stream", description: "SSE stream
|
|
|
417
417
|
defineOperation({ name: "graph_events", description: "SSE graph events.", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { stream: "sse" } }) });
|
|
418
418
|
defineOperation({ name: "chat_message", description: "Chat message.", schema: strictSchema({ message: S.str, chatSessionId: S.str }), handler: async (_i, _ctx) => ({ result: { ok: true } }) });
|
|
419
419
|
defineOperation({ name: "chat_events", description: "SSE chat events.", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { stream: "sse" } }) });
|
|
420
|
-
//# sourceMappingURL=chunk-
|
|
420
|
+
//# sourceMappingURL=chunk-GLERZDM7.js.map
|
|
@@ -126,12 +126,12 @@ import {
|
|
|
126
126
|
runOperatorInventory,
|
|
127
127
|
runOperatorRepair,
|
|
128
128
|
runOperatorSetup
|
|
129
|
-
} from "./chunk-
|
|
129
|
+
} from "./chunk-IGVKWKR2.js";
|
|
130
130
|
import {
|
|
131
131
|
listNamespaces,
|
|
132
132
|
runNamespaceMigration,
|
|
133
133
|
verifyNamespaces
|
|
134
|
-
} from "./chunk-
|
|
134
|
+
} from "./chunk-U5GFYMV7.js";
|
|
135
135
|
import {
|
|
136
136
|
analyzeSessionIntegrity,
|
|
137
137
|
applySessionRepair,
|
|
@@ -213,7 +213,7 @@ import {
|
|
|
213
213
|
} from "./chunk-OADWQ5CR.js";
|
|
214
214
|
import {
|
|
215
215
|
EngramAccessHttpServer
|
|
216
|
-
} from "./chunk-
|
|
216
|
+
} from "./chunk-J3UJJZKI.js";
|
|
217
217
|
import {
|
|
218
218
|
WearablesInputError
|
|
219
219
|
} from "./chunk-7WV3F5DQ.js";
|
|
@@ -226,10 +226,10 @@ import {
|
|
|
226
226
|
createProductionChatLlmAdapter,
|
|
227
227
|
loadChatSession,
|
|
228
228
|
sessionBelongsToPrincipal
|
|
229
|
-
} from "./chunk-
|
|
229
|
+
} from "./chunk-TVLN5EZZ.js";
|
|
230
230
|
import {
|
|
231
231
|
EngramAccessService
|
|
232
|
-
} from "./chunk-
|
|
232
|
+
} from "./chunk-OAREUC7N.js";
|
|
233
233
|
import {
|
|
234
234
|
WorkStorage
|
|
235
235
|
} from "./chunk-GDB4J2H3.js";
|
|
@@ -7520,4 +7520,4 @@ export {
|
|
|
7520
7520
|
listMemoryMarkdownFilePaths,
|
|
7521
7521
|
registerCli
|
|
7522
7522
|
};
|
|
7523
|
-
//# sourceMappingURL=chunk-
|
|
7523
|
+
//# sourceMappingURL=chunk-HBOPSFQQ.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-NFWTMM2M.js";
|
|
7
7
|
import {
|
|
8
8
|
listNamespaces
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-U5GFYMV7.js";
|
|
10
10
|
import {
|
|
11
11
|
analyzeSessionIntegrity,
|
|
12
12
|
applySessionRepair,
|
|
@@ -1599,4 +1599,4 @@ export {
|
|
|
1599
1599
|
runBenchmarkRecall,
|
|
1600
1600
|
runOperatorRepair
|
|
1601
1601
|
};
|
|
1602
|
-
//# sourceMappingURL=chunk-
|
|
1602
|
+
//# sourceMappingURL=chunk-IGVKWKR2.js.map
|
|
@@ -11,17 +11,17 @@ import {
|
|
|
11
11
|
processChatMessage,
|
|
12
12
|
sessionBelongsToPrincipal,
|
|
13
13
|
subscribeChatTranscript
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-TVLN5EZZ.js";
|
|
15
15
|
import {
|
|
16
16
|
validateRequest
|
|
17
17
|
} from "./chunk-2MR3MFQB.js";
|
|
18
18
|
import {
|
|
19
19
|
getOperation
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-MSGPLITO.js";
|
|
21
21
|
import {
|
|
22
22
|
CorrectionContractError,
|
|
23
23
|
EngramAccessInputError
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-OAREUC7N.js";
|
|
25
25
|
import {
|
|
26
26
|
isTrustZoneName
|
|
27
27
|
} from "./chunk-JGSKJHF7.js";
|
|
@@ -45,6 +45,10 @@ import {
|
|
|
45
45
|
OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
|
|
46
46
|
OFFLINE_SYNC_SNAPSHOT_BASE_MAX_BODY_BYTES
|
|
47
47
|
} from "./chunk-X64YLC24.js";
|
|
48
|
+
import {
|
|
49
|
+
abortError,
|
|
50
|
+
isAbortError
|
|
51
|
+
} from "./chunk-PVGDJXVK.js";
|
|
48
52
|
|
|
49
53
|
// src/access-http.ts
|
|
50
54
|
import { createServer } from "http";
|
|
@@ -347,6 +351,7 @@ var EngramAccessHttpServer = class {
|
|
|
347
351
|
adminControls;
|
|
348
352
|
trustPrincipalHeader;
|
|
349
353
|
adapterRegistry;
|
|
354
|
+
readiness;
|
|
350
355
|
writeRequestTimestamps = [];
|
|
351
356
|
mcpServer;
|
|
352
357
|
server = null;
|
|
@@ -383,6 +388,7 @@ var EngramAccessHttpServer = class {
|
|
|
383
388
|
this.adminConsolePrefillToken = options.adminConsolePrefillToken === true ? this.authToken : void 0;
|
|
384
389
|
this.adminControls = options.adminControls;
|
|
385
390
|
this.trustPrincipalHeader = options.trustPrincipalHeader === true;
|
|
391
|
+
this.readiness = options.readiness ?? (() => ({ ready: true, warmupAttempts: 0 }));
|
|
386
392
|
this.adapterRegistry = options.enableAdapters !== false ? options.adapterRegistry ?? new AdapterRegistry() : null;
|
|
387
393
|
this.mcpServer = new EngramMcpServer(this.service, {
|
|
388
394
|
principal: options.principal,
|
|
@@ -404,8 +410,22 @@ var EngramAccessHttpServer = class {
|
|
|
404
410
|
if (this.server) return this.status();
|
|
405
411
|
const server = createServer((req, res) => {
|
|
406
412
|
const correlationId = randomUUID();
|
|
413
|
+
const abortController = new AbortController();
|
|
414
|
+
const abortDisconnectedRequest = () => {
|
|
415
|
+
if (!res.writableFinished && !abortController.signal.aborted) {
|
|
416
|
+
abortController.abort(abortError("HTTP client disconnected"));
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
req.once("aborted", abortDisconnectedRequest);
|
|
420
|
+
res.once("close", abortDisconnectedRequest);
|
|
407
421
|
correlationIdStore.run(correlationId, () => {
|
|
408
|
-
void this.handle(req, res, correlationId).catch((err) => {
|
|
422
|
+
void this.handle(req, res, correlationId, abortController.signal).catch((err) => {
|
|
423
|
+
if (isAbortError(err)) {
|
|
424
|
+
if (!res.destroyed && !res.writableEnded) {
|
|
425
|
+
res.end();
|
|
426
|
+
}
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
409
429
|
log.debug(`engram access HTTP request failed [${correlationId}]: ${err}`);
|
|
410
430
|
if (err instanceof HttpError) {
|
|
411
431
|
const payload = { error: err.message, code: err.code };
|
|
@@ -430,6 +450,9 @@ var EngramAccessHttpServer = class {
|
|
|
430
450
|
err
|
|
431
451
|
);
|
|
432
452
|
this.respondJson(res, 500, { error: "internal_error", code: "internal_error" });
|
|
453
|
+
}).finally(() => {
|
|
454
|
+
req.off("aborted", abortDisconnectedRequest);
|
|
455
|
+
res.off("close", abortDisconnectedRequest);
|
|
433
456
|
});
|
|
434
457
|
});
|
|
435
458
|
});
|
|
@@ -605,12 +628,25 @@ var EngramAccessHttpServer = class {
|
|
|
605
628
|
}
|
|
606
629
|
return queryDisclosure;
|
|
607
630
|
}
|
|
608
|
-
async handle(req, res, correlationId) {
|
|
631
|
+
async handle(req, res, correlationId, abortSignal) {
|
|
609
632
|
const parsed = new URL(req.url ?? "/", `http://${hostToUrlAuthority(this.host)}`);
|
|
610
633
|
const pathname = parsed.pathname;
|
|
611
634
|
if (this.adminConsoleEnabled && await this.handleAdminConsole(req, res, pathname)) {
|
|
612
635
|
return;
|
|
613
636
|
}
|
|
637
|
+
if (req.method === "GET" && pathname === "/engram/v1/health") {
|
|
638
|
+
const readiness = this.readiness();
|
|
639
|
+
if (!readiness.ready) {
|
|
640
|
+
this.respondJson(res, 503, {
|
|
641
|
+
ok: false,
|
|
642
|
+
ready: false,
|
|
643
|
+
warmupAttempts: readiness.warmupAttempts,
|
|
644
|
+
lastError: readiness.lastError ?? null,
|
|
645
|
+
code: "not_ready"
|
|
646
|
+
});
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
614
650
|
if (!this.isAuthorized(req, pathname)) {
|
|
615
651
|
const body = JSON.stringify({ error: "unauthorized", code: "unauthorized" });
|
|
616
652
|
res.writeHead(401, {
|
|
@@ -725,7 +761,8 @@ var EngramAccessHttpServer = class {
|
|
|
725
761
|
...asOf !== void 0 ? { asOf } : {},
|
|
726
762
|
...tags !== void 0 ? { tags } : {},
|
|
727
763
|
...tagMatch !== void 0 ? { tagMatch } : {},
|
|
728
|
-
...includeLowConfidence ? { includeLowConfidence: true } : {}
|
|
764
|
+
...includeLowConfidence ? { includeLowConfidence: true } : {},
|
|
765
|
+
abortSignal
|
|
729
766
|
});
|
|
730
767
|
this.respondJson(res, 200, response);
|
|
731
768
|
return;
|
|
@@ -2627,4 +2664,4 @@ function positiveIntQueryParam(value, label) {
|
|
|
2627
2664
|
export {
|
|
2628
2665
|
EngramAccessHttpServer
|
|
2629
2666
|
};
|
|
2630
|
-
//# sourceMappingURL=chunk-
|
|
2667
|
+
//# sourceMappingURL=chunk-J3UJJZKI.js.map
|