@remnic/core 9.3.764 → 9.3.766

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 (106) hide show
  1. package/dist/access-admin-ops-surface.d.ts +1 -1
  2. package/dist/access-admin-ops-surface.js +9 -9
  3. package/dist/access-boundary.d.ts +1 -1
  4. package/dist/access-boundary.js +10 -10
  5. package/dist/access-cli.js +20 -20
  6. package/dist/access-http.d.ts +13 -2
  7. package/dist/access-http.js +14 -14
  8. package/dist/access-identity-continuity-surface.js +9 -9
  9. package/dist/access-lcm-surface.d.ts +1 -1
  10. package/dist/access-lcm-surface.js +9 -9
  11. package/dist/access-mcp.d.ts +1 -1
  12. package/dist/access-mcp.js +13 -13
  13. package/dist/access-observe-write-surface.d.ts +1 -1
  14. package/dist/access-observe-write-surface.js +9 -9
  15. package/dist/access-operations-batch.js +11 -11
  16. package/dist/access-operations.d.ts +1 -1
  17. package/dist/access-operations.js +12 -12
  18. package/dist/access-recall-surface.d.ts +1 -1
  19. package/dist/access-recall-surface.js +9 -9
  20. package/dist/{access-service-CAoJ4qN8.d.ts → access-service-CdW6B2qQ.d.ts} +3 -5
  21. package/dist/access-service.d.ts +1 -1
  22. package/dist/access-service.js +9 -9
  23. package/dist/access-surface-catalog.d.ts +1 -1
  24. package/dist/active-recall.js +1 -1
  25. package/dist/{chunk-NKP6II6G.js → chunk-4HYFKIGH.js} +6 -6
  26. package/dist/{chunk-CGLRKKMF.js → chunk-4JG55YV3.js} +3 -3
  27. package/dist/{chunk-BRYPUVJU.js → chunk-CKNAVW34.js} +2 -2
  28. package/dist/{chunk-WRFKZEO6.js → chunk-DMKMQTBH.js} +10 -2
  29. package/dist/chunk-DMKMQTBH.js.map +1 -0
  30. package/dist/{chunk-RJCQPRLB.js → chunk-GLERZDM7.js} +3 -3
  31. package/dist/{chunk-2V6CTSSA.js → chunk-HBOPSFQQ.js} +8 -8
  32. package/dist/{chunk-N3QDLE2N.js → chunk-IGVKWKR2.js} +3 -3
  33. package/dist/{chunk-422OELQ3.js → chunk-J3UJJZKI.js} +44 -7
  34. package/dist/chunk-J3UJJZKI.js.map +1 -0
  35. package/dist/{chunk-5CEJH5ZN.js → chunk-K2I3AWBR.js} +10 -2
  36. package/dist/chunk-K2I3AWBR.js.map +1 -0
  37. package/dist/{chunk-5JF4DIKZ.js → chunk-MSGPLITO.js} +2 -2
  38. package/dist/{chunk-K43PI6DQ.js → chunk-MYNRJGOY.js} +2 -2
  39. package/dist/{chunk-UQEE4H6Z.js → chunk-OAREUC7N.js} +13 -7
  40. package/dist/chunk-OAREUC7N.js.map +1 -0
  41. package/dist/{chunk-RIOJRLJ6.js → chunk-PA5ALD3S.js} +6 -6
  42. package/dist/{chunk-2HAG7JOI.js → chunk-T4AWNIXJ.js} +48 -58
  43. package/dist/chunk-T4AWNIXJ.js.map +1 -0
  44. package/dist/{chunk-P6ZZ4GX4.js → chunk-TVLN5EZZ.js} +3 -3
  45. package/dist/{chunk-KXG7HHIQ.js → chunk-U5GFYMV7.js} +2 -2
  46. package/dist/{chunk-4XL3CVII.js → chunk-WRBDUNSW.js} +2 -2
  47. package/dist/{chunk-YNQ6DFSV.js → chunk-WU46YPY6.js} +8 -1
  48. package/dist/chunk-WU46YPY6.js.map +1 -0
  49. package/dist/{chunk-LQ6JI4VH.js → chunk-XG4NBBRW.js} +10 -2
  50. package/dist/chunk-XG4NBBRW.js.map +1 -0
  51. package/dist/{chunk-SANZHXY2.js → chunk-ZZMRXJFY.js} +29 -3
  52. package/dist/chunk-ZZMRXJFY.js.map +1 -0
  53. package/dist/{cli-WRmxvfc_.d.ts → cli-Dfnc66gs.d.ts} +1 -1
  54. package/dist/cli.d.ts +2 -2
  55. package/dist/cli.js +19 -19
  56. package/dist/config.js +1 -1
  57. package/dist/index.d.ts +2 -2
  58. package/dist/index.js +20 -20
  59. package/dist/mcp-memory-inspector-app.d.ts +1 -1
  60. package/dist/namespaces/migrate.js +9 -9
  61. package/dist/namespaces/search.js +8 -8
  62. package/dist/operator-toolkit.js +11 -11
  63. package/dist/orchestrator.js +20 -20
  64. package/dist/qmd.js +2 -2
  65. package/dist/resume-bundles.js +2 -2
  66. package/dist/search/factory.js +7 -7
  67. package/dist/search/index.js +7 -7
  68. package/dist/search/lancedb-backend.js +2 -2
  69. package/dist/search/meilisearch-backend.js +2 -2
  70. package/dist/search/orama-backend.js +2 -2
  71. package/dist/search/port.d.ts +4 -3
  72. package/dist/search/port.js +3 -1
  73. package/dist/search/remote-backend.js +2 -1
  74. package/package.json +2 -2
  75. package/src/access-http-cancellation.test.ts +240 -0
  76. package/src/access-http.ts +54 -2
  77. package/src/access-recall-surface.ts +1 -0
  78. package/src/access-service.ts +10 -10
  79. package/src/config.ts +5 -261
  80. package/src/namespaces/scope-profile-config.test.ts +60 -0
  81. package/src/namespaces/scope-profile-config.ts +243 -0
  82. package/src/search/lancedb-backend.ts +8 -0
  83. package/src/search/meilisearch-backend.ts +8 -0
  84. package/src/search/orama-backend.ts +8 -0
  85. package/src/search/port.ts +15 -2
  86. package/src/search/remote-backend.ts +32 -3
  87. package/dist/chunk-2HAG7JOI.js.map +0 -1
  88. package/dist/chunk-422OELQ3.js.map +0 -1
  89. package/dist/chunk-5CEJH5ZN.js.map +0 -1
  90. package/dist/chunk-LQ6JI4VH.js.map +0 -1
  91. package/dist/chunk-SANZHXY2.js.map +0 -1
  92. package/dist/chunk-UQEE4H6Z.js.map +0 -1
  93. package/dist/chunk-WRFKZEO6.js.map +0 -1
  94. package/dist/chunk-YNQ6DFSV.js.map +0 -1
  95. /package/dist/{chunk-NKP6II6G.js.map → chunk-4HYFKIGH.js.map} +0 -0
  96. /package/dist/{chunk-CGLRKKMF.js.map → chunk-4JG55YV3.js.map} +0 -0
  97. /package/dist/{chunk-BRYPUVJU.js.map → chunk-CKNAVW34.js.map} +0 -0
  98. /package/dist/{chunk-RJCQPRLB.js.map → chunk-GLERZDM7.js.map} +0 -0
  99. /package/dist/{chunk-2V6CTSSA.js.map → chunk-HBOPSFQQ.js.map} +0 -0
  100. /package/dist/{chunk-N3QDLE2N.js.map → chunk-IGVKWKR2.js.map} +0 -0
  101. /package/dist/{chunk-5JF4DIKZ.js.map → chunk-MSGPLITO.js.map} +0 -0
  102. /package/dist/{chunk-K43PI6DQ.js.map → chunk-MYNRJGOY.js.map} +0 -0
  103. /package/dist/{chunk-RIOJRLJ6.js.map → chunk-PA5ALD3S.js.map} +0 -0
  104. /package/dist/{chunk-P6ZZ4GX4.js.map → chunk-TVLN5EZZ.js.map} +0 -0
  105. /package/dist/{chunk-KXG7HHIQ.js.map → chunk-U5GFYMV7.js.map} +0 -0
  106. /package/dist/{chunk-4XL3CVII.js.map → chunk-WRBDUNSW.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AccessRecallSurface
3
- } from "./chunk-UQEE4H6Z.js";
3
+ } from "./chunk-OAREUC7N.js";
4
4
  import "./chunk-GDASG7NC.js";
5
5
  import "./chunk-GDB4J2H3.js";
6
6
  import "./chunk-M5QKGHCR.js";
@@ -17,14 +17,14 @@ import "./chunk-2KK5WNQB.js";
17
17
  import "./chunk-SOBJ6NEY.js";
18
18
  import "./chunk-6MMONPHM.js";
19
19
  import "./chunk-BAVVI5GP.js";
20
- import "./chunk-BRYPUVJU.js";
21
- import "./chunk-NKP6II6G.js";
22
- import "./chunk-WRFKZEO6.js";
20
+ import "./chunk-CKNAVW34.js";
21
+ import "./chunk-4HYFKIGH.js";
22
+ import "./chunk-DMKMQTBH.js";
23
23
  import "./chunk-CYEPCZN5.js";
24
- import "./chunk-LQ6JI4VH.js";
25
- import "./chunk-SANZHXY2.js";
24
+ import "./chunk-XG4NBBRW.js";
25
+ import "./chunk-ZZMRXJFY.js";
26
26
  import "./chunk-HM6UJPPO.js";
27
- import "./chunk-5CEJH5ZN.js";
27
+ import "./chunk-K2I3AWBR.js";
28
28
  import "./chunk-AER6MT24.js";
29
29
  import "./chunk-CINZGPSJ.js";
30
30
  import "./chunk-EGGE52UU.js";
@@ -33,8 +33,8 @@ import "./chunk-DCWIQFNA.js";
33
33
  import "./chunk-XBZQRZ6G.js";
34
34
  import "./chunk-KCQA46NR.js";
35
35
  import "./chunk-SJHM6I4J.js";
36
- import "./chunk-K43PI6DQ.js";
37
- import "./chunk-YNQ6DFSV.js";
36
+ import "./chunk-MYNRJGOY.js";
37
+ import "./chunk-WU46YPY6.js";
38
38
  import "./chunk-EIR5VLIH.js";
39
39
  import "./chunk-ICP53SKG.js";
40
40
  import "./chunk-AQEJKOKI.js";
@@ -1041,12 +1041,10 @@ interface EngramAccessRecallRequest {
1041
1041
  topK?: number;
1042
1042
  mode?: RecallPlanMode | "auto";
1043
1043
  includeDebug?: boolean;
1044
+ abortSignal?: AbortSignal;
1044
1045
  /**
1045
- * Recall disclosure depth (issue #677). Selects how much content each
1046
- * result returns: `"chunk"` (default), `"section"`, or `"raw"`. Omitting
1047
- * this field is equivalent to passing `"chunk"` and preserves pre-#677
1048
- * behavior. Surfaces (CLI / HTTP / MCP) and per-level token telemetry
1049
- * are wired in subsequent PRs of #677.
1046
+ * Recall disclosure depth. Omitting it preserves the `"chunk"` default.
1047
+ * Other accepted values are `"section"` and `"raw"`.
1050
1048
  */
1051
1049
  disclosure?: RecallDisclosure;
1052
1050
  /**
@@ -1,4 +1,4 @@
1
- export { A as AccessProfilingReportRequest, a as AccessProfilingReportResponse, C as CodingScopedWriteInput, N as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, O as EngramAccessActionConfidenceRequest, Q as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, b as EngramAccessCapsuleListResponse, R as EngramAccessDaySummaryRequest, S as EngramAccessEntityListResponse, T as EngramAccessEntityResponse, U as EngramAccessEntitySummary, V as EngramAccessHealthResponse, G as EngramAccessInputError, W as EngramAccessLcmCompactionFlushRequest, X as EngramAccessLcmCompactionFlushResponse, Y as EngramAccessLcmCompactionRecordRequest, Z as EngramAccessLcmCompactionRecordResponse, d as EngramAccessLcmSearchRequest, e as EngramAccessLcmSearchResponse, _ as EngramAccessLcmStatusResponse, $ as EngramAccessMaintenanceResponse, a0 as EngramAccessMemoryBrowseRequest, a1 as EngramAccessMemoryBrowseResponse, a2 as EngramAccessMemoryRecord, u as EngramAccessMemoryResponse, i as EngramAccessMemoryStoreRequest, y as EngramAccessMemorySummary, a3 as EngramAccessObserveMessage, n as EngramAccessObserveRequest, o as EngramAccessObserveResponse, a4 as EngramAccessOfflineSyncApplyFileContentRequest, a5 as EngramAccessOfflineSyncApplyFileContentResponse, a6 as EngramAccessOfflineSyncApplyRequest, a7 as EngramAccessOfflineSyncApplyResponse, a8 as EngramAccessOfflineSyncFileContentRequest, a9 as EngramAccessOfflineSyncFileContentResponse, aa as EngramAccessOfflineSyncFilesRequest, ab as EngramAccessOfflineSyncFilesResponse, ac as EngramAccessOfflineSyncSnapshotRequest, ad as EngramAccessOfflineSyncSnapshotResponse, ae as EngramAccessOfflineSyncSnapshotStreamResponse, h as EngramAccessQmdCollectionState, g as EngramAccessQmdHealthResponse, af as EngramAccessQualityResponse, ag as EngramAccessRecallExplainRequest, ah as EngramAccessRecallExplainResponse, B as EngramAccessRecallRequest, x as EngramAccessRecallResponse, ai as EngramAccessReviewDispositionRequest, aj as EngramAccessReviewDispositionResponse, E as EngramAccessReviewQueueResponse, ak as EngramAccessScopeDebug, F as EngramAccessService, z as EngramAccessSetCodingContextRequest, j as EngramAccessSuggestionSubmitRequest, al as EngramAccessTimelineResponse, am as EngramAccessTrustZoneBrowseRequest, an as EngramAccessTrustZoneBrowseResponse, ao as EngramAccessTrustZoneDemoSeedRequest, ap as EngramAccessTrustZoneDemoSeedResponse, aq as EngramAccessTrustZonePromoteRequest, ar as EngramAccessTrustZonePromoteResponse, as as EngramAccessTrustZoneRecordSummary, at as EngramAccessTrustZoneStatusResponse, au as EngramAccessWriteEnvelope, m as EngramAccessWriteResponse, f as MemoryScopePlan, av as buildProjectedGovernanceProposedActions, aw as hasGroupedGovernanceActions, ax as shapeMemorySummary } from './access-service-CAoJ4qN8.js';
1
+ export { A as AccessProfilingReportRequest, a as AccessProfilingReportResponse, C as CodingScopedWriteInput, N as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, O as EngramAccessActionConfidenceRequest, Q as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, b as EngramAccessCapsuleListResponse, R as EngramAccessDaySummaryRequest, S as EngramAccessEntityListResponse, T as EngramAccessEntityResponse, U as EngramAccessEntitySummary, V as EngramAccessHealthResponse, G as EngramAccessInputError, W as EngramAccessLcmCompactionFlushRequest, X as EngramAccessLcmCompactionFlushResponse, Y as EngramAccessLcmCompactionRecordRequest, Z as EngramAccessLcmCompactionRecordResponse, d as EngramAccessLcmSearchRequest, e as EngramAccessLcmSearchResponse, _ as EngramAccessLcmStatusResponse, $ as EngramAccessMaintenanceResponse, a0 as EngramAccessMemoryBrowseRequest, a1 as EngramAccessMemoryBrowseResponse, a2 as EngramAccessMemoryRecord, u as EngramAccessMemoryResponse, i as EngramAccessMemoryStoreRequest, y as EngramAccessMemorySummary, a3 as EngramAccessObserveMessage, n as EngramAccessObserveRequest, o as EngramAccessObserveResponse, a4 as EngramAccessOfflineSyncApplyFileContentRequest, a5 as EngramAccessOfflineSyncApplyFileContentResponse, a6 as EngramAccessOfflineSyncApplyRequest, a7 as EngramAccessOfflineSyncApplyResponse, a8 as EngramAccessOfflineSyncFileContentRequest, a9 as EngramAccessOfflineSyncFileContentResponse, aa as EngramAccessOfflineSyncFilesRequest, ab as EngramAccessOfflineSyncFilesResponse, ac as EngramAccessOfflineSyncSnapshotRequest, ad as EngramAccessOfflineSyncSnapshotResponse, ae as EngramAccessOfflineSyncSnapshotStreamResponse, h as EngramAccessQmdCollectionState, g as EngramAccessQmdHealthResponse, af as EngramAccessQualityResponse, ag as EngramAccessRecallExplainRequest, ah as EngramAccessRecallExplainResponse, B as EngramAccessRecallRequest, x as EngramAccessRecallResponse, ai as EngramAccessReviewDispositionRequest, aj as EngramAccessReviewDispositionResponse, E as EngramAccessReviewQueueResponse, ak as EngramAccessScopeDebug, F as EngramAccessService, z as EngramAccessSetCodingContextRequest, j as EngramAccessSuggestionSubmitRequest, al as EngramAccessTimelineResponse, am as EngramAccessTrustZoneBrowseRequest, an as EngramAccessTrustZoneBrowseResponse, ao as EngramAccessTrustZoneDemoSeedRequest, ap as EngramAccessTrustZoneDemoSeedResponse, aq as EngramAccessTrustZonePromoteRequest, ar as EngramAccessTrustZonePromoteResponse, as as EngramAccessTrustZoneRecordSummary, at as EngramAccessTrustZoneStatusResponse, au as EngramAccessWriteEnvelope, m as EngramAccessWriteResponse, f as MemoryScopePlan, av as buildProjectedGovernanceProposedActions, aw as hasGroupedGovernanceActions, ax as shapeMemorySummary } from './access-service-CdW6B2qQ.js';
2
2
  import './storage.js';
3
3
  import './types-B1VHaf2w.js';
4
4
  import './recall-explain-renderer.js';
@@ -5,7 +5,7 @@ import {
5
5
  buildProjectedGovernanceProposedActions,
6
6
  hasGroupedGovernanceActions,
7
7
  shapeMemorySummary
8
- } from "./chunk-UQEE4H6Z.js";
8
+ } from "./chunk-OAREUC7N.js";
9
9
  import "./chunk-GDASG7NC.js";
10
10
  import "./chunk-GDB4J2H3.js";
11
11
  import "./chunk-M5QKGHCR.js";
@@ -22,14 +22,14 @@ import "./chunk-2KK5WNQB.js";
22
22
  import "./chunk-SOBJ6NEY.js";
23
23
  import "./chunk-6MMONPHM.js";
24
24
  import "./chunk-BAVVI5GP.js";
25
- import "./chunk-BRYPUVJU.js";
26
- import "./chunk-NKP6II6G.js";
27
- import "./chunk-WRFKZEO6.js";
25
+ import "./chunk-CKNAVW34.js";
26
+ import "./chunk-4HYFKIGH.js";
27
+ import "./chunk-DMKMQTBH.js";
28
28
  import "./chunk-CYEPCZN5.js";
29
- import "./chunk-LQ6JI4VH.js";
30
- import "./chunk-SANZHXY2.js";
29
+ import "./chunk-XG4NBBRW.js";
30
+ import "./chunk-ZZMRXJFY.js";
31
31
  import "./chunk-HM6UJPPO.js";
32
- import "./chunk-5CEJH5ZN.js";
32
+ import "./chunk-K2I3AWBR.js";
33
33
  import "./chunk-AER6MT24.js";
34
34
  import "./chunk-CINZGPSJ.js";
35
35
  import "./chunk-EGGE52UU.js";
@@ -38,8 +38,8 @@ import "./chunk-DCWIQFNA.js";
38
38
  import "./chunk-XBZQRZ6G.js";
39
39
  import "./chunk-KCQA46NR.js";
40
40
  import "./chunk-SJHM6I4J.js";
41
- import "./chunk-K43PI6DQ.js";
42
- import "./chunk-YNQ6DFSV.js";
41
+ import "./chunk-MYNRJGOY.js";
42
+ import "./chunk-WU46YPY6.js";
43
43
  import "./chunk-EIR5VLIH.js";
44
44
  import "./chunk-ICP53SKG.js";
45
45
  import "./chunk-AQEJKOKI.js";
@@ -1,6 +1,6 @@
1
1
  import { OperationName } from './access-boundary.js';
2
2
  import 'zod';
3
- import './access-service-CAoJ4qN8.js';
3
+ import './access-service-CdW6B2qQ.js';
4
4
  import './catalog-bflYNWsM.js';
5
5
  import './types-D1iBqhJA.js';
6
6
  import './types-gb_SNtjR.js';
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_REASONING_MODEL
3
- } from "./chunk-2HAG7JOI.js";
3
+ } from "./chunk-T4AWNIXJ.js";
4
4
  import "./chunk-NDAH7BJ5.js";
5
5
  import "./chunk-Z5LAYHGJ.js";
6
6
  import "./chunk-G6NKALRN.js";
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  MeilisearchBackend
3
- } from "./chunk-WRFKZEO6.js";
3
+ } from "./chunk-DMKMQTBH.js";
4
4
  import {
5
5
  NoopSearchBackend
6
6
  } from "./chunk-CYEPCZN5.js";
7
7
  import {
8
8
  OramaBackend
9
- } from "./chunk-LQ6JI4VH.js";
9
+ } from "./chunk-XG4NBBRW.js";
10
10
  import {
11
11
  RemoteSearchBackend
12
- } from "./chunk-SANZHXY2.js";
12
+ } from "./chunk-ZZMRXJFY.js";
13
13
  import {
14
14
  EmbedHelper
15
15
  } from "./chunk-HM6UJPPO.js";
16
16
  import {
17
17
  LanceDbBackend
18
- } from "./chunk-5CEJH5ZN.js";
18
+ } from "./chunk-K2I3AWBR.js";
19
19
  import {
20
20
  createConversationIndexBackend
21
21
  } from "./chunk-DCWIQFNA.js";
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-XBZQRZ6G.js";
25
25
  import {
26
26
  QmdClient
27
- } from "./chunk-K43PI6DQ.js";
27
+ } from "./chunk-MYNRJGOY.js";
28
28
  import {
29
29
  resolveIndexingCapabilities,
30
30
  resolvePipelineProcessingCapabilities,
@@ -175,4 +175,4 @@ export {
175
175
  createConversationSearchBackend,
176
176
  createConversationIndexRuntime
177
177
  };
178
- //# sourceMappingURL=chunk-NKP6II6G.js.map
178
+ //# sourceMappingURL=chunk-4HYFKIGH.js.map
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-2MR3MFQB.js";
4
4
  import {
5
5
  defineOperation
6
- } from "./chunk-5JF4DIKZ.js";
6
+ } from "./chunk-MSGPLITO.js";
7
7
  import {
8
8
  CorrectionContractError,
9
9
  DECISION_SUBCOMMANDS,
10
10
  DELTA_SUBCOMMANDS,
11
11
  EngramAccessInputError,
12
12
  isCodegraphToolName
13
- } from "./chunk-UQEE4H6Z.js";
13
+ } from "./chunk-OAREUC7N.js";
14
14
 
15
15
  // src/access-operations.ts
16
16
  import { z } from "zod";
@@ -463,4 +463,4 @@ export {
463
463
  codegraphIngestTracesOperation,
464
464
  REGISTERED_OPERATIONS
465
465
  };
466
- //# sourceMappingURL=chunk-CGLRKKMF.js.map
466
+ //# sourceMappingURL=chunk-4JG55YV3.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createSearchBackend
3
- } from "./chunk-NKP6II6G.js";
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-BRYPUVJU.js.map
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-YNQ6DFSV.js";
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-WRFKZEO6.js.map
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-5JF4DIKZ.js";
24
+ } from "./chunk-MSGPLITO.js";
25
25
  import {
26
26
  EngramAccessInputError
27
- } from "./chunk-UQEE4H6Z.js";
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-RJCQPRLB.js.map
420
+ //# sourceMappingURL=chunk-GLERZDM7.js.map
@@ -102,7 +102,7 @@ import {
102
102
  buildResumeBundleFromState,
103
103
  getResumeBundleStatus,
104
104
  recordResumeBundle
105
- } from "./chunk-4XL3CVII.js";
105
+ } from "./chunk-WRBDUNSW.js";
106
106
  import {
107
107
  getWorkProductLedgerStatus,
108
108
  recordWorkProductLedgerEntry,
@@ -126,12 +126,12 @@ import {
126
126
  runOperatorInventory,
127
127
  runOperatorRepair,
128
128
  runOperatorSetup
129
- } from "./chunk-N3QDLE2N.js";
129
+ } from "./chunk-IGVKWKR2.js";
130
130
  import {
131
131
  listNamespaces,
132
132
  runNamespaceMigration,
133
133
  verifyNamespaces
134
- } from "./chunk-KXG7HHIQ.js";
134
+ } from "./chunk-U5GFYMV7.js";
135
135
  import {
136
136
  analyzeSessionIntegrity,
137
137
  applySessionRepair,
@@ -207,13 +207,13 @@ import {
207
207
  } from "./chunk-UQ7RN5HK.js";
208
208
  import {
209
209
  parseConfig
210
- } from "./chunk-2HAG7JOI.js";
210
+ } from "./chunk-T4AWNIXJ.js";
211
211
  import {
212
212
  getAbstractionNodeStoreStatus
213
213
  } from "./chunk-OADWQ5CR.js";
214
214
  import {
215
215
  EngramAccessHttpServer
216
- } from "./chunk-422OELQ3.js";
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-P6ZZ4GX4.js";
229
+ } from "./chunk-TVLN5EZZ.js";
230
230
  import {
231
231
  EngramAccessService
232
- } from "./chunk-UQEE4H6Z.js";
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-2V6CTSSA.js.map
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-KXG7HHIQ.js";
9
+ } from "./chunk-U5GFYMV7.js";
10
10
  import {
11
11
  analyzeSessionIntegrity,
12
12
  applySessionRepair,
@@ -38,7 +38,7 @@ import {
38
38
  } from "./chunk-YBPYIAA5.js";
39
39
  import {
40
40
  parseConfig
41
- } from "./chunk-2HAG7JOI.js";
41
+ } from "./chunk-T4AWNIXJ.js";
42
42
  import {
43
43
  listMemoryGovernanceRuns,
44
44
  readMemoryGovernanceRunArtifact
@@ -1599,4 +1599,4 @@ export {
1599
1599
  runBenchmarkRecall,
1600
1600
  runOperatorRepair
1601
1601
  };
1602
- //# sourceMappingURL=chunk-N3QDLE2N.js.map
1602
+ //# sourceMappingURL=chunk-IGVKWKR2.js.map
@@ -11,17 +11,17 @@ import {
11
11
  processChatMessage,
12
12
  sessionBelongsToPrincipal,
13
13
  subscribeChatTranscript
14
- } from "./chunk-P6ZZ4GX4.js";
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-5JF4DIKZ.js";
20
+ } from "./chunk-MSGPLITO.js";
21
21
  import {
22
22
  CorrectionContractError,
23
23
  EngramAccessInputError
24
- } from "./chunk-UQEE4H6Z.js";
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-422OELQ3.js.map
2667
+ //# sourceMappingURL=chunk-J3UJJZKI.js.map