@remnic/core 9.3.651 → 9.3.653

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 (90) hide show
  1. package/dist/access-cli.js +10 -10
  2. package/dist/access-http.d.ts +3 -2
  3. package/dist/access-http.js +12 -12
  4. package/dist/access-mcp.d.ts +3 -2
  5. package/dist/access-mcp.js +11 -11
  6. package/dist/access-schema.d.ts +3 -0
  7. package/dist/access-schema.js +1 -1
  8. package/dist/{access-service-DIZRHQ7Q.d.ts → access-service-CdJFd3_b.d.ts} +23 -2
  9. package/dist/access-service.d.ts +3 -2
  10. package/dist/access-service.js +9 -9
  11. package/dist/bootstrap.d.ts +2 -1
  12. package/dist/briefing.js +1 -1
  13. package/dist/{chunk-QT4THOLT.js → chunk-2DGQLOOM.js} +1 -1
  14. package/dist/chunk-2DGQLOOM.js.map +1 -0
  15. package/dist/{chunk-FOVPSMGI.js → chunk-7WEB3FLJ.js} +2 -2
  16. package/dist/{chunk-IJHLC5CH.js → chunk-BNFRL6QW.js} +31 -21
  17. package/dist/{chunk-IJHLC5CH.js.map → chunk-BNFRL6QW.js.map} +1 -1
  18. package/dist/{chunk-SLYD3AH4.js → chunk-E3J6O6N7.js} +177 -5
  19. package/dist/chunk-E3J6O6N7.js.map +1 -0
  20. package/dist/{chunk-MF32AL7N.js → chunk-EW52H5EM.js} +4 -4
  21. package/dist/{chunk-WJK75OCH.js → chunk-GI45G4BK.js} +2 -2
  22. package/dist/{chunk-76QTEJ2Q.js → chunk-JBHXMCYN.js} +2 -2
  23. package/dist/{chunk-4PTKFBST.js → chunk-JVRPJ7D4.js} +126 -26
  24. package/dist/chunk-JVRPJ7D4.js.map +1 -0
  25. package/dist/{chunk-TQUWNX7C.js → chunk-JX2RINDR.js} +2 -2
  26. package/dist/{chunk-RSS2KWN6.js → chunk-NOBL7OUP.js} +14 -6
  27. package/dist/chunk-NOBL7OUP.js.map +1 -0
  28. package/dist/{chunk-I4COC5XW.js → chunk-PYWNNF2I.js} +47 -9
  29. package/dist/chunk-PYWNNF2I.js.map +1 -0
  30. package/dist/{chunk-RKN5J4RO.js → chunk-QQHIQ7JD.js} +6 -6
  31. package/dist/{chunk-5WSDHTBO.js → chunk-SPMZZUEJ.js} +8 -5
  32. package/dist/chunk-SPMZZUEJ.js.map +1 -0
  33. package/dist/{chunk-4HYSMH7D.js → chunk-UAU5U5ML.js} +3 -2
  34. package/dist/chunk-UAU5U5ML.js.map +1 -0
  35. package/dist/{chunk-LFTLXOFX.js → chunk-WTI35CVJ.js} +2 -2
  36. package/dist/{chunk-6UKL6IXM.js → chunk-YM3LR4LS.js} +5 -5
  37. package/dist/{cli-BG4ybtJr.d.ts → cli-DDo7Qgs-.d.ts} +2 -2
  38. package/dist/cli.d.ts +4 -3
  39. package/dist/cli.js +15 -15
  40. package/dist/explicit-capture.d.ts +2 -1
  41. package/dist/index.d.ts +5 -4
  42. package/dist/index.js +16 -16
  43. package/dist/mcp-memory-inspector-app.d.ts +3 -2
  44. package/dist/namespaces/migrate.js +8 -8
  45. package/dist/namespaces/search.d.ts +18 -1
  46. package/dist/namespaces/search.js +7 -7
  47. package/dist/operator-toolkit.js +9 -9
  48. package/dist/{orchestrator-CX-oqwJq.d.ts → orchestrator-8fTZsa0y.d.ts} +2 -0
  49. package/dist/orchestrator.d.ts +2 -1
  50. package/dist/orchestrator.js +9 -9
  51. package/dist/qmd.d.ts +2 -1
  52. package/dist/qmd.js +2 -2
  53. package/dist/schemas.d.ts +22 -22
  54. package/dist/search/factory.js +6 -6
  55. package/dist/search/index.js +6 -6
  56. package/dist/search/lancedb-backend.js +2 -2
  57. package/dist/search/meilisearch-backend.js +2 -2
  58. package/dist/search/orama-backend.js +2 -2
  59. package/dist/search/port.d.ts +6 -0
  60. package/dist/search/port.js +1 -1
  61. package/dist/transfer/types.d.ts +12 -12
  62. package/package.json +1 -1
  63. package/src/access-mcp.test.ts +70 -1
  64. package/src/access-mcp.ts +12 -2
  65. package/src/access-schema.ts +1 -0
  66. package/src/access-service-health.test.ts +402 -0
  67. package/src/access-service.ts +274 -2
  68. package/src/briefing.test.ts +70 -0
  69. package/src/briefing.ts +30 -20
  70. package/src/namespaces/search.test.ts +258 -3
  71. package/src/namespaces/search.ts +184 -30
  72. package/src/orchestrator.ts +11 -1
  73. package/src/qmd.test.ts +102 -0
  74. package/src/qmd.ts +54 -7
  75. package/src/search/port.ts +6 -0
  76. package/dist/chunk-4HYSMH7D.js.map +0 -1
  77. package/dist/chunk-4PTKFBST.js.map +0 -1
  78. package/dist/chunk-5WSDHTBO.js.map +0 -1
  79. package/dist/chunk-I4COC5XW.js.map +0 -1
  80. package/dist/chunk-QT4THOLT.js.map +0 -1
  81. package/dist/chunk-RSS2KWN6.js.map +0 -1
  82. package/dist/chunk-SLYD3AH4.js.map +0 -1
  83. /package/dist/{chunk-FOVPSMGI.js.map → chunk-7WEB3FLJ.js.map} +0 -0
  84. /package/dist/{chunk-MF32AL7N.js.map → chunk-EW52H5EM.js.map} +0 -0
  85. /package/dist/{chunk-WJK75OCH.js.map → chunk-GI45G4BK.js.map} +0 -0
  86. /package/dist/{chunk-76QTEJ2Q.js.map → chunk-JBHXMCYN.js.map} +0 -0
  87. /package/dist/{chunk-TQUWNX7C.js.map → chunk-JX2RINDR.js.map} +0 -0
  88. /package/dist/{chunk-RKN5J4RO.js.map → chunk-QQHIQ7JD.js.map} +0 -0
  89. /package/dist/{chunk-LFTLXOFX.js.map → chunk-WTI35CVJ.js.map} +0 -0
  90. /package/dist/{chunk-6UKL6IXM.js.map → chunk-YM3LR4LS.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Orchestrator
3
- } from "./chunk-5WSDHTBO.js";
3
+ } from "./chunk-SPMZZUEJ.js";
4
4
  import "./chunk-4SKKVWLQ.js";
5
5
  import "./chunk-7HYPN2GC.js";
6
6
  import "./chunk-666A3MOW.js";
@@ -123,7 +123,7 @@ import "./chunk-OADWQ5CR.js";
123
123
  import "./chunk-7WV3F5DQ.js";
124
124
  import {
125
125
  EngramAccessService
126
- } from "./chunk-SLYD3AH4.js";
126
+ } from "./chunk-E3J6O6N7.js";
127
127
  import "./chunk-GDASG7NC.js";
128
128
  import "./chunk-GDB4J2H3.js";
129
129
  import "./chunk-DHGSZ3UD.js";
@@ -137,14 +137,14 @@ import "./chunk-5RIRL3XL.js";
137
137
  import "./chunk-JGSKJHF7.js";
138
138
  import "./chunk-FF4KLI5W.js";
139
139
  import "./chunk-BEMWL2FZ.js";
140
- import "./chunk-4PTKFBST.js";
141
- import "./chunk-6UKL6IXM.js";
142
- import "./chunk-TQUWNX7C.js";
140
+ import "./chunk-JVRPJ7D4.js";
141
+ import "./chunk-YM3LR4LS.js";
142
+ import "./chunk-JX2RINDR.js";
143
143
  import "./chunk-CYEPCZN5.js";
144
- import "./chunk-76QTEJ2Q.js";
144
+ import "./chunk-JBHXMCYN.js";
145
145
  import "./chunk-JOASJWQR.js";
146
146
  import "./chunk-RN7MUWON.js";
147
- import "./chunk-FOVPSMGI.js";
147
+ import "./chunk-7WEB3FLJ.js";
148
148
  import "./chunk-Q4CAQGKQ.js";
149
149
  import "./chunk-CINZGPSJ.js";
150
150
  import "./chunk-ZFXCQPNO.js";
@@ -152,8 +152,8 @@ import "./chunk-7OGJQP7T.js";
152
152
  import "./chunk-E6ZDCOHM.js";
153
153
  import "./chunk-OIF36KGD.js";
154
154
  import "./chunk-7DTASS5T.js";
155
- import "./chunk-I4COC5XW.js";
156
- import "./chunk-QT4THOLT.js";
155
+ import "./chunk-PYWNNF2I.js";
156
+ import "./chunk-2DGQLOOM.js";
157
157
  import "./chunk-BMFZLLNI.js";
158
158
  import "./chunk-CI7RKSRE.js";
159
159
  import "./chunk-6HMYUWXR.js";
@@ -169,7 +169,7 @@ import "./chunk-3ONXXHQO.js";
169
169
  import "./chunk-Y56J7CXW.js";
170
170
  import "./chunk-2LSZVONP.js";
171
171
  import "./chunk-DEUNUKTD.js";
172
- import "./chunk-IJHLC5CH.js";
172
+ import "./chunk-BNFRL6QW.js";
173
173
  import "./chunk-Y7NWBBHV.js";
174
174
  import "./chunk-M7XQSUBB.js";
175
175
  import "./chunk-5UZXUTVO.js";
@@ -1,5 +1,5 @@
1
1
  import { IncomingMessage } from 'node:http';
2
- import { E as EngramAccessService } from './access-service-DIZRHQ7Q.js';
2
+ import { E as EngramAccessService } from './access-service-CdJFd3_b.js';
3
3
  import { ResolvedIdentity } from './adapters/types.js';
4
4
  import { AdapterRegistry } from './adapters/registry.js';
5
5
  import './storage.js';
@@ -21,7 +21,7 @@ import './user-model.js';
21
21
  import './recall-audit-anomaly.js';
22
22
  import './recall-audit.js';
23
23
  import './explicit-capture.js';
24
- import './orchestrator-CX-oqwJq.js';
24
+ import './orchestrator-8fTZsa0y.js';
25
25
  import './briefing.js';
26
26
  import './buffer.js';
27
27
  import './search/port.js';
@@ -53,6 +53,7 @@ import './conversation-index/backend.js';
53
53
  import './conversation-index/chunker.js';
54
54
  import './faiss-adapter-BHecI1fF.js';
55
55
  import './runtime/child-process.js';
56
+ import './namespaces/search.js';
56
57
  import './shared-context/manager.js';
57
58
  import 'zod';
58
59
  import './compounding/engine.js';
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EngramAccessHttpServer
3
- } from "./chunk-MF32AL7N.js";
3
+ } from "./chunk-EW52H5EM.js";
4
4
  import "./chunk-SEDEKFYQ.js";
5
5
  import "./chunk-RKNJBZ55.js";
6
6
  import "./chunk-J64TK33U.js";
@@ -9,10 +9,10 @@ import "./chunk-42NQ7AVG.js";
9
9
  import "./chunk-TMSXWOBZ.js";
10
10
  import "./chunk-7RXCMVFQ.js";
11
11
  import "./chunk-7WV3F5DQ.js";
12
- import "./chunk-RSS2KWN6.js";
12
+ import "./chunk-NOBL7OUP.js";
13
13
  import "./chunk-T4WDJPEZ.js";
14
14
  import "./chunk-D24OXEPB.js";
15
- import "./chunk-SLYD3AH4.js";
15
+ import "./chunk-E3J6O6N7.js";
16
16
  import "./chunk-GDASG7NC.js";
17
17
  import "./chunk-GDB4J2H3.js";
18
18
  import "./chunk-DHGSZ3UD.js";
@@ -26,14 +26,14 @@ import "./chunk-5RIRL3XL.js";
26
26
  import "./chunk-JGSKJHF7.js";
27
27
  import "./chunk-FF4KLI5W.js";
28
28
  import "./chunk-BEMWL2FZ.js";
29
- import "./chunk-4PTKFBST.js";
30
- import "./chunk-6UKL6IXM.js";
31
- import "./chunk-TQUWNX7C.js";
29
+ import "./chunk-JVRPJ7D4.js";
30
+ import "./chunk-YM3LR4LS.js";
31
+ import "./chunk-JX2RINDR.js";
32
32
  import "./chunk-CYEPCZN5.js";
33
- import "./chunk-76QTEJ2Q.js";
33
+ import "./chunk-JBHXMCYN.js";
34
34
  import "./chunk-JOASJWQR.js";
35
35
  import "./chunk-RN7MUWON.js";
36
- import "./chunk-FOVPSMGI.js";
36
+ import "./chunk-7WEB3FLJ.js";
37
37
  import "./chunk-Q4CAQGKQ.js";
38
38
  import "./chunk-CINZGPSJ.js";
39
39
  import "./chunk-ZFXCQPNO.js";
@@ -41,8 +41,8 @@ import "./chunk-7OGJQP7T.js";
41
41
  import "./chunk-E6ZDCOHM.js";
42
42
  import "./chunk-OIF36KGD.js";
43
43
  import "./chunk-7DTASS5T.js";
44
- import "./chunk-I4COC5XW.js";
45
- import "./chunk-QT4THOLT.js";
44
+ import "./chunk-PYWNNF2I.js";
45
+ import "./chunk-2DGQLOOM.js";
46
46
  import "./chunk-BMFZLLNI.js";
47
47
  import "./chunk-CI7RKSRE.js";
48
48
  import "./chunk-6HMYUWXR.js";
@@ -58,7 +58,7 @@ import "./chunk-3ONXXHQO.js";
58
58
  import "./chunk-Y56J7CXW.js";
59
59
  import "./chunk-2LSZVONP.js";
60
60
  import "./chunk-DEUNUKTD.js";
61
- import "./chunk-IJHLC5CH.js";
61
+ import "./chunk-BNFRL6QW.js";
62
62
  import "./chunk-Y7NWBBHV.js";
63
63
  import "./chunk-M7XQSUBB.js";
64
64
  import "./chunk-5UZXUTVO.js";
@@ -92,7 +92,7 @@ import "./chunk-TVVEYCNW.js";
92
92
  import "./chunk-RFYAYKTD.js";
93
93
  import "./chunk-LBLXEFWK.js";
94
94
  import "./chunk-VFUEZZBS.js";
95
- import "./chunk-4HYSMH7D.js";
95
+ import "./chunk-UAU5U5ML.js";
96
96
  import "./chunk-KQAFEZQX.js";
97
97
  import "./chunk-WEHSQBFR.js";
98
98
  import "./chunk-X7Y7WX73.js";
@@ -1,5 +1,5 @@
1
1
  import { Readable, Writable } from 'node:stream';
2
- import { E as EngramAccessService } from './access-service-DIZRHQ7Q.js';
2
+ import { E as EngramAccessService } from './access-service-CdJFd3_b.js';
3
3
  import './storage.js';
4
4
  import './page-versioning.js';
5
5
  import './consolidation-operator.js';
@@ -19,7 +19,7 @@ import './user-model.js';
19
19
  import './recall-audit-anomaly.js';
20
20
  import './recall-audit.js';
21
21
  import './explicit-capture.js';
22
- import './orchestrator-CX-oqwJq.js';
22
+ import './orchestrator-8fTZsa0y.js';
23
23
  import './briefing.js';
24
24
  import './buffer.js';
25
25
  import './search/port.js';
@@ -51,6 +51,7 @@ import './conversation-index/backend.js';
51
51
  import './conversation-index/chunker.js';
52
52
  import './faiss-adapter-BHecI1fF.js';
53
53
  import './runtime/child-process.js';
54
+ import './namespaces/search.js';
54
55
  import './shared-context/manager.js';
55
56
  import 'zod';
56
57
  import './compounding/engine.js';
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  EngramMcpServer
3
- } from "./chunk-RSS2KWN6.js";
3
+ } from "./chunk-NOBL7OUP.js";
4
4
  import "./chunk-T4WDJPEZ.js";
5
5
  import "./chunk-D24OXEPB.js";
6
- import "./chunk-SLYD3AH4.js";
6
+ import "./chunk-E3J6O6N7.js";
7
7
  import "./chunk-GDASG7NC.js";
8
8
  import "./chunk-GDB4J2H3.js";
9
9
  import "./chunk-DHGSZ3UD.js";
@@ -17,14 +17,14 @@ import "./chunk-5RIRL3XL.js";
17
17
  import "./chunk-JGSKJHF7.js";
18
18
  import "./chunk-FF4KLI5W.js";
19
19
  import "./chunk-BEMWL2FZ.js";
20
- import "./chunk-4PTKFBST.js";
21
- import "./chunk-6UKL6IXM.js";
22
- import "./chunk-TQUWNX7C.js";
20
+ import "./chunk-JVRPJ7D4.js";
21
+ import "./chunk-YM3LR4LS.js";
22
+ import "./chunk-JX2RINDR.js";
23
23
  import "./chunk-CYEPCZN5.js";
24
- import "./chunk-76QTEJ2Q.js";
24
+ import "./chunk-JBHXMCYN.js";
25
25
  import "./chunk-JOASJWQR.js";
26
26
  import "./chunk-RN7MUWON.js";
27
- import "./chunk-FOVPSMGI.js";
27
+ import "./chunk-7WEB3FLJ.js";
28
28
  import "./chunk-Q4CAQGKQ.js";
29
29
  import "./chunk-CINZGPSJ.js";
30
30
  import "./chunk-ZFXCQPNO.js";
@@ -32,8 +32,8 @@ import "./chunk-7OGJQP7T.js";
32
32
  import "./chunk-E6ZDCOHM.js";
33
33
  import "./chunk-OIF36KGD.js";
34
34
  import "./chunk-7DTASS5T.js";
35
- import "./chunk-I4COC5XW.js";
36
- import "./chunk-QT4THOLT.js";
35
+ import "./chunk-PYWNNF2I.js";
36
+ import "./chunk-2DGQLOOM.js";
37
37
  import "./chunk-BMFZLLNI.js";
38
38
  import "./chunk-CI7RKSRE.js";
39
39
  import "./chunk-6HMYUWXR.js";
@@ -49,7 +49,7 @@ import "./chunk-3ONXXHQO.js";
49
49
  import "./chunk-Y56J7CXW.js";
50
50
  import "./chunk-2LSZVONP.js";
51
51
  import "./chunk-DEUNUKTD.js";
52
- import "./chunk-IJHLC5CH.js";
52
+ import "./chunk-BNFRL6QW.js";
53
53
  import "./chunk-Y7NWBBHV.js";
54
54
  import "./chunk-M7XQSUBB.js";
55
55
  import "./chunk-5UZXUTVO.js";
@@ -83,7 +83,7 @@ import "./chunk-TVVEYCNW.js";
83
83
  import "./chunk-RFYAYKTD.js";
84
84
  import "./chunk-LBLXEFWK.js";
85
85
  import "./chunk-VFUEZZBS.js";
86
- import "./chunk-4HYSMH7D.js";
86
+ import "./chunk-UAU5U5ML.js";
87
87
  import "./chunk-KQAFEZQX.js";
88
88
  import "./chunk-WEHSQBFR.js";
89
89
  import "./chunk-X7Y7WX73.js";
@@ -601,9 +601,12 @@ declare const capsuleImportRequestSchema: z.ZodObject<{
601
601
  }>;
602
602
  declare const capsuleListRequestSchema: z.ZodObject<{
603
603
  namespace: z.ZodOptional<z.ZodString>;
604
+ sessionKey: z.ZodOptional<z.ZodString>;
604
605
  }, "strip", z.ZodTypeAny, {
606
+ sessionKey?: string | undefined;
605
607
  namespace?: string | undefined;
606
608
  }, {
609
+ sessionKey?: string | undefined;
607
610
  namespace?: string | undefined;
608
611
  }>;
609
612
  declare const offlineSyncSnapshotRequestSchema: z.ZodObject<{
@@ -25,7 +25,7 @@ import {
25
25
  trustZoneDemoSeedRequestSchema,
26
26
  trustZonePromoteRequestSchema,
27
27
  validateRequest
28
- } from "./chunk-4HYSMH7D.js";
28
+ } from "./chunk-UAU5U5ML.js";
29
29
  import "./chunk-KQAFEZQX.js";
30
30
  import "./chunk-WEHSQBFR.js";
31
31
  import "./chunk-X7Y7WX73.js";
@@ -6,7 +6,7 @@ import { AnomalyDetectorResult } from './recall-audit-anomaly.js';
6
6
  import { ExplicitCaptureInput } from './explicit-capture.js';
7
7
  import { BudgetDecision } from './cross-namespace-budget.js';
8
8
  import { readMemoryGovernanceRunArtifact } from './maintenance/memory-governance.js';
9
- import { O as Orchestrator, I as IntentDebugSnapshot, G as GraphRecallSnapshot, P as PatternReinforcementResult, W as WearablesService } from './orchestrator-CX-oqwJq.js';
9
+ import { O as Orchestrator, I as IntentDebugSnapshot, G as GraphRecallSnapshot, P as PatternReinforcementResult, W as WearablesService } from './orchestrator-8fTZsa0y.js';
10
10
  import { LiveConnectorsRunSummary } from './live-connectors-runner.js';
11
11
  import { LastRecallSnapshot } from './recall-state.js';
12
12
  import { GraphSnapshotRequest, GraphSnapshotResponse } from './graph-snapshot.js';
@@ -179,9 +179,25 @@ interface EngramAccessHealthResponse {
179
179
  defaultNamespace: string;
180
180
  searchBackend: string;
181
181
  qmdEnabled: boolean;
182
+ qmd: EngramAccessQmdHealthResponse;
182
183
  nativeKnowledgeEnabled: boolean;
183
184
  projectionAvailable: boolean;
184
185
  }
186
+ type EngramAccessQmdCollectionState = "present" | "missing" | "unknown" | "skipped";
187
+ interface EngramAccessQmdHealthResponse {
188
+ enabled: boolean;
189
+ active: boolean;
190
+ degraded: boolean;
191
+ mode: "cli" | "daemon" | "fallback" | "disabled" | "not-selected";
192
+ collection: string;
193
+ collectionState: EngramAccessQmdCollectionState;
194
+ installedVersion: string | null;
195
+ supportedVersion: string | null;
196
+ supported: boolean | null;
197
+ upgradeAvailable: boolean | null;
198
+ doctorAvailable: boolean | null;
199
+ debugStatus: string;
200
+ }
185
201
  interface EngramAccessRecallRequest {
186
202
  query: string;
187
203
  sessionKey?: string;
@@ -960,6 +976,11 @@ declare class EngramAccessService {
960
976
  private withIdempotencyLock;
961
977
  private withBudgetLock;
962
978
  health(namespace?: string): Promise<EngramAccessHealthResponse>;
979
+ private qmdCollectionForHealth;
980
+ private qmdHealth;
981
+ private namespaceQmdHealth;
982
+ private qmdCollectionState;
983
+ private qmdProbeAvailable;
963
984
  actionConfidence(request?: EngramAccessActionConfidenceRequest): Promise<EngramAccessActionConfidenceResponse>;
964
985
  daySummary(request: EngramAccessDaySummaryRequest): Promise<DaySummaryResult | null>;
965
986
  /**
@@ -1835,4 +1856,4 @@ declare class EngramAccessService {
1835
1856
  }): Promise<Awaited<ReturnType<WearablesService["transcriptMemories"]>>>;
1836
1857
  }
1837
1858
 
1838
- export { type EngramAccessReviewDispositionRequest as $, type EngramAccessMemoryBrowseRequest as A, type EngramAccessMemoryBrowseResponse as B, type CodingScopedWriteInput as C, type EngramAccessMemoryRecord as D, EngramAccessService as E, type EngramAccessMemoryResponse as F, type EngramAccessMemoryStoreRequest as G, type EngramAccessMemorySummary as H, type EngramAccessObserveMessage as I, type EngramAccessObserveRequest as J, type EngramAccessObserveResponse as K, type EngramAccessOfflineSyncApplyFileContentRequest as L, type EngramAccessOfflineSyncApplyFileContentResponse as M, type EngramAccessOfflineSyncApplyRequest as N, type EngramAccessOfflineSyncApplyResponse as O, type ProcedureStatsConfigSnapshot as P, type EngramAccessOfflineSyncFileContentRequest as Q, type EngramAccessOfflineSyncFileContentResponse as R, type EngramAccessOfflineSyncFilesRequest as S, type EngramAccessOfflineSyncFilesResponse as T, type EngramAccessOfflineSyncSnapshotRequest as U, type EngramAccessOfflineSyncSnapshotResponse as V, type EngramAccessOfflineSyncSnapshotStreamResponse as W, type EngramAccessQualityResponse as X, type EngramAccessRecallExplainRequest as Y, type EngramAccessRecallExplainResponse as Z, type EngramAccessRecallRequest as _, type EngramAccessRecallResponse as a, type EngramAccessReviewDispositionResponse as a0, type EngramAccessReviewQueueResponse as a1, type EngramAccessScopeDebug as a2, type EngramAccessSetCodingContextRequest as a3, type EngramAccessSuggestionSubmitRequest as a4, type EngramAccessTimelineResponse as a5, type EngramAccessTrustZoneBrowseRequest as a6, type EngramAccessTrustZoneBrowseResponse as a7, type EngramAccessTrustZoneDemoSeedRequest as a8, type EngramAccessTrustZoneDemoSeedResponse as a9, type EngramAccessTrustZonePromoteRequest as aa, type EngramAccessTrustZonePromoteResponse as ab, type EngramAccessTrustZoneRecordSummary as ac, type EngramAccessTrustZoneStatusResponse as ad, type EngramAccessWriteEnvelope as ae, type EngramAccessWriteResponse as af, type MemoryScopePlan as ag, shapeMemorySummary as ah, EngramAccessInputError as b, type ProcedureStatsRecent as c, type ProcedureStatsReport as d, type ProcedureStatusCounts as e, computeProcedureStats as f, formatProcedureStatsText as g, ENGRAM_ACCESS_WRITE_SCHEMA_VERSION as h, type EngramAccessActionConfidenceRequest as i, type EngramAccessActionConfidenceResponse as j, type EngramAccessBriefingRequest as k, type EngramAccessBriefingResponse as l, type EngramAccessCapsuleListResponse as m, type EngramAccessDaySummaryRequest as n, type EngramAccessEntityListResponse as o, type EngramAccessEntityResponse as p, type EngramAccessEntitySummary as q, type EngramAccessHealthResponse as r, type EngramAccessLcmCompactionFlushRequest as s, type EngramAccessLcmCompactionFlushResponse as t, type EngramAccessLcmCompactionRecordRequest as u, type EngramAccessLcmCompactionRecordResponse as v, type EngramAccessLcmSearchRequest as w, type EngramAccessLcmSearchResponse as x, type EngramAccessLcmStatusResponse as y, type EngramAccessMaintenanceResponse as z };
1859
+ export { type EngramAccessRecallExplainResponse as $, type EngramAccessMemoryBrowseRequest as A, type EngramAccessMemoryBrowseResponse as B, type CodingScopedWriteInput as C, type EngramAccessMemoryRecord as D, EngramAccessService as E, type EngramAccessMemoryResponse as F, type EngramAccessMemoryStoreRequest as G, type EngramAccessMemorySummary as H, type EngramAccessObserveMessage as I, type EngramAccessObserveRequest as J, type EngramAccessObserveResponse as K, type EngramAccessOfflineSyncApplyFileContentRequest as L, type EngramAccessOfflineSyncApplyFileContentResponse as M, type EngramAccessOfflineSyncApplyRequest as N, type EngramAccessOfflineSyncApplyResponse as O, type ProcedureStatsConfigSnapshot as P, type EngramAccessOfflineSyncFileContentRequest as Q, type EngramAccessOfflineSyncFileContentResponse as R, type EngramAccessOfflineSyncFilesRequest as S, type EngramAccessOfflineSyncFilesResponse as T, type EngramAccessOfflineSyncSnapshotRequest as U, type EngramAccessOfflineSyncSnapshotResponse as V, type EngramAccessOfflineSyncSnapshotStreamResponse as W, type EngramAccessQmdCollectionState as X, type EngramAccessQmdHealthResponse as Y, type EngramAccessQualityResponse as Z, type EngramAccessRecallExplainRequest as _, type EngramAccessRecallResponse as a, type EngramAccessRecallRequest as a0, type EngramAccessReviewDispositionRequest as a1, type EngramAccessReviewDispositionResponse as a2, type EngramAccessReviewQueueResponse as a3, type EngramAccessScopeDebug as a4, type EngramAccessSetCodingContextRequest as a5, type EngramAccessSuggestionSubmitRequest as a6, type EngramAccessTimelineResponse as a7, type EngramAccessTrustZoneBrowseRequest as a8, type EngramAccessTrustZoneBrowseResponse as a9, type EngramAccessTrustZoneDemoSeedRequest as aa, type EngramAccessTrustZoneDemoSeedResponse as ab, type EngramAccessTrustZonePromoteRequest as ac, type EngramAccessTrustZonePromoteResponse as ad, type EngramAccessTrustZoneRecordSummary as ae, type EngramAccessTrustZoneStatusResponse as af, type EngramAccessWriteEnvelope as ag, type EngramAccessWriteResponse as ah, type MemoryScopePlan as ai, shapeMemorySummary as aj, EngramAccessInputError as b, type ProcedureStatsRecent as c, type ProcedureStatsReport as d, type ProcedureStatusCounts as e, computeProcedureStats as f, formatProcedureStatsText as g, ENGRAM_ACCESS_WRITE_SCHEMA_VERSION as h, type EngramAccessActionConfidenceRequest as i, type EngramAccessActionConfidenceResponse as j, type EngramAccessBriefingRequest as k, type EngramAccessBriefingResponse as l, type EngramAccessCapsuleListResponse as m, type EngramAccessDaySummaryRequest as n, type EngramAccessEntityListResponse as o, type EngramAccessEntityResponse as p, type EngramAccessEntitySummary as q, type EngramAccessHealthResponse as r, type EngramAccessLcmCompactionFlushRequest as s, type EngramAccessLcmCompactionFlushResponse as t, type EngramAccessLcmCompactionRecordRequest as u, type EngramAccessLcmCompactionRecordResponse as v, type EngramAccessLcmSearchRequest as w, type EngramAccessLcmSearchResponse as x, type EngramAccessLcmStatusResponse as y, type EngramAccessMaintenanceResponse as z };
@@ -1,13 +1,13 @@
1
1
  import './storage.js';
2
2
  import './types-B1VHaf2w.js';
3
- export { C as CodingScopedWriteInput, h as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, i as EngramAccessActionConfidenceRequest, j as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, m as EngramAccessCapsuleListResponse, n as EngramAccessDaySummaryRequest, o as EngramAccessEntityListResponse, p as EngramAccessEntityResponse, q as EngramAccessEntitySummary, r as EngramAccessHealthResponse, b as EngramAccessInputError, s as EngramAccessLcmCompactionFlushRequest, t as EngramAccessLcmCompactionFlushResponse, u as EngramAccessLcmCompactionRecordRequest, v as EngramAccessLcmCompactionRecordResponse, w as EngramAccessLcmSearchRequest, x as EngramAccessLcmSearchResponse, y as EngramAccessLcmStatusResponse, z as EngramAccessMaintenanceResponse, A as EngramAccessMemoryBrowseRequest, B as EngramAccessMemoryBrowseResponse, D as EngramAccessMemoryRecord, F as EngramAccessMemoryResponse, G as EngramAccessMemoryStoreRequest, H as EngramAccessMemorySummary, I as EngramAccessObserveMessage, J as EngramAccessObserveRequest, K as EngramAccessObserveResponse, L as EngramAccessOfflineSyncApplyFileContentRequest, M as EngramAccessOfflineSyncApplyFileContentResponse, N as EngramAccessOfflineSyncApplyRequest, O as EngramAccessOfflineSyncApplyResponse, Q as EngramAccessOfflineSyncFileContentRequest, R as EngramAccessOfflineSyncFileContentResponse, S as EngramAccessOfflineSyncFilesRequest, T as EngramAccessOfflineSyncFilesResponse, U as EngramAccessOfflineSyncSnapshotRequest, V as EngramAccessOfflineSyncSnapshotResponse, W as EngramAccessOfflineSyncSnapshotStreamResponse, X as EngramAccessQualityResponse, Y as EngramAccessRecallExplainRequest, Z as EngramAccessRecallExplainResponse, _ as EngramAccessRecallRequest, a as EngramAccessRecallResponse, $ as EngramAccessReviewDispositionRequest, a0 as EngramAccessReviewDispositionResponse, a1 as EngramAccessReviewQueueResponse, a2 as EngramAccessScopeDebug, E as EngramAccessService, a3 as EngramAccessSetCodingContextRequest, a4 as EngramAccessSuggestionSubmitRequest, a5 as EngramAccessTimelineResponse, a6 as EngramAccessTrustZoneBrowseRequest, a7 as EngramAccessTrustZoneBrowseResponse, a8 as EngramAccessTrustZoneDemoSeedRequest, a9 as EngramAccessTrustZoneDemoSeedResponse, aa as EngramAccessTrustZonePromoteRequest, ab as EngramAccessTrustZonePromoteResponse, ac as EngramAccessTrustZoneRecordSummary, ad as EngramAccessTrustZoneStatusResponse, ae as EngramAccessWriteEnvelope, af as EngramAccessWriteResponse, ag as MemoryScopePlan, ah as shapeMemorySummary } from './access-service-DIZRHQ7Q.js';
3
+ export { C as CodingScopedWriteInput, h as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, i as EngramAccessActionConfidenceRequest, j as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, m as EngramAccessCapsuleListResponse, n as EngramAccessDaySummaryRequest, o as EngramAccessEntityListResponse, p as EngramAccessEntityResponse, q as EngramAccessEntitySummary, r as EngramAccessHealthResponse, b as EngramAccessInputError, s as EngramAccessLcmCompactionFlushRequest, t as EngramAccessLcmCompactionFlushResponse, u as EngramAccessLcmCompactionRecordRequest, v as EngramAccessLcmCompactionRecordResponse, w as EngramAccessLcmSearchRequest, x as EngramAccessLcmSearchResponse, y as EngramAccessLcmStatusResponse, z as EngramAccessMaintenanceResponse, A as EngramAccessMemoryBrowseRequest, B as EngramAccessMemoryBrowseResponse, D as EngramAccessMemoryRecord, F as EngramAccessMemoryResponse, G as EngramAccessMemoryStoreRequest, H as EngramAccessMemorySummary, I as EngramAccessObserveMessage, J as EngramAccessObserveRequest, K as EngramAccessObserveResponse, L as EngramAccessOfflineSyncApplyFileContentRequest, M as EngramAccessOfflineSyncApplyFileContentResponse, N as EngramAccessOfflineSyncApplyRequest, O as EngramAccessOfflineSyncApplyResponse, Q as EngramAccessOfflineSyncFileContentRequest, R as EngramAccessOfflineSyncFileContentResponse, S as EngramAccessOfflineSyncFilesRequest, T as EngramAccessOfflineSyncFilesResponse, U as EngramAccessOfflineSyncSnapshotRequest, V as EngramAccessOfflineSyncSnapshotResponse, W as EngramAccessOfflineSyncSnapshotStreamResponse, X as EngramAccessQmdCollectionState, Y as EngramAccessQmdHealthResponse, Z as EngramAccessQualityResponse, _ as EngramAccessRecallExplainRequest, $ as EngramAccessRecallExplainResponse, a0 as EngramAccessRecallRequest, a as EngramAccessRecallResponse, a1 as EngramAccessReviewDispositionRequest, a2 as EngramAccessReviewDispositionResponse, a3 as EngramAccessReviewQueueResponse, a4 as EngramAccessScopeDebug, E as EngramAccessService, a5 as EngramAccessSetCodingContextRequest, a6 as EngramAccessSuggestionSubmitRequest, a7 as EngramAccessTimelineResponse, a8 as EngramAccessTrustZoneBrowseRequest, a9 as EngramAccessTrustZoneBrowseResponse, aa as EngramAccessTrustZoneDemoSeedRequest, ab as EngramAccessTrustZoneDemoSeedResponse, ac as EngramAccessTrustZonePromoteRequest, ad as EngramAccessTrustZonePromoteResponse, ae as EngramAccessTrustZoneRecordSummary, af as EngramAccessTrustZoneStatusResponse, ag as EngramAccessWriteEnvelope, ah as EngramAccessWriteResponse, ai as MemoryScopePlan, aj as shapeMemorySummary } from './access-service-CdJFd3_b.js';
4
4
  import './recall-explain-renderer.js';
5
5
  import './types-D8yUmSik.js';
6
6
  import './recall-audit-anomaly.js';
7
7
  import './explicit-capture.js';
8
8
  import './cross-namespace-budget.js';
9
9
  import './maintenance/memory-governance.js';
10
- import './orchestrator-CX-oqwJq.js';
10
+ import './orchestrator-8fTZsa0y.js';
11
11
  import './live-connectors-runner.js';
12
12
  import './recall-state.js';
13
13
  import './graph-snapshot.js';
@@ -59,6 +59,7 @@ import './conversation-index/backend.js';
59
59
  import './conversation-index/chunker.js';
60
60
  import './faiss-adapter-BHecI1fF.js';
61
61
  import './runtime/child-process.js';
62
+ import './namespaces/search.js';
62
63
  import './shared-context/manager.js';
63
64
  import 'zod';
64
65
  import './compounding/engine.js';
@@ -3,7 +3,7 @@ import {
3
3
  EngramAccessInputError,
4
4
  EngramAccessService,
5
5
  shapeMemorySummary
6
- } from "./chunk-SLYD3AH4.js";
6
+ } from "./chunk-E3J6O6N7.js";
7
7
  import "./chunk-GDASG7NC.js";
8
8
  import "./chunk-GDB4J2H3.js";
9
9
  import "./chunk-DHGSZ3UD.js";
@@ -17,14 +17,14 @@ import "./chunk-5RIRL3XL.js";
17
17
  import "./chunk-JGSKJHF7.js";
18
18
  import "./chunk-FF4KLI5W.js";
19
19
  import "./chunk-BEMWL2FZ.js";
20
- import "./chunk-4PTKFBST.js";
21
- import "./chunk-6UKL6IXM.js";
22
- import "./chunk-TQUWNX7C.js";
20
+ import "./chunk-JVRPJ7D4.js";
21
+ import "./chunk-YM3LR4LS.js";
22
+ import "./chunk-JX2RINDR.js";
23
23
  import "./chunk-CYEPCZN5.js";
24
- import "./chunk-76QTEJ2Q.js";
24
+ import "./chunk-JBHXMCYN.js";
25
25
  import "./chunk-JOASJWQR.js";
26
26
  import "./chunk-RN7MUWON.js";
27
- import "./chunk-FOVPSMGI.js";
27
+ import "./chunk-7WEB3FLJ.js";
28
28
  import "./chunk-Q4CAQGKQ.js";
29
29
  import "./chunk-CINZGPSJ.js";
30
30
  import "./chunk-ZFXCQPNO.js";
@@ -32,8 +32,8 @@ import "./chunk-7OGJQP7T.js";
32
32
  import "./chunk-E6ZDCOHM.js";
33
33
  import "./chunk-OIF36KGD.js";
34
34
  import "./chunk-7DTASS5T.js";
35
- import "./chunk-I4COC5XW.js";
36
- import "./chunk-QT4THOLT.js";
35
+ import "./chunk-PYWNNF2I.js";
36
+ import "./chunk-2DGQLOOM.js";
37
37
  import "./chunk-BMFZLLNI.js";
38
38
  import "./chunk-CI7RKSRE.js";
39
39
  import "./chunk-6HMYUWXR.js";
@@ -49,7 +49,7 @@ import "./chunk-3ONXXHQO.js";
49
49
  import "./chunk-Y56J7CXW.js";
50
50
  import "./chunk-2LSZVONP.js";
51
51
  import "./chunk-DEUNUKTD.js";
52
- import "./chunk-IJHLC5CH.js";
52
+ import "./chunk-BNFRL6QW.js";
53
53
  import "./chunk-Y7NWBBHV.js";
54
54
  import "./chunk-M7XQSUBB.js";
55
55
  import "./chunk-5UZXUTVO.js";
@@ -1,5 +1,5 @@
1
1
  import { P as PluginConfig } from './types-D8yUmSik.js';
2
- import { O as Orchestrator } from './orchestrator-CX-oqwJq.js';
2
+ import { O as Orchestrator } from './orchestrator-8fTZsa0y.js';
3
3
  import './types-ByK7T3L6.js';
4
4
  import './index-DJ9QWMw-.js';
5
5
  import './briefing.js';
@@ -44,6 +44,7 @@ import './conversation-index/backend.js';
44
44
  import './conversation-index/chunker.js';
45
45
  import './faiss-adapter-BHecI1fF.js';
46
46
  import './runtime/child-process.js';
47
+ import './namespaces/search.js';
47
48
  import './shared-context/manager.js';
48
49
  import 'zod';
49
50
  import './compounding/engine.js';
package/dist/briefing.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  renderBriefingMarkdown,
18
18
  resolveBriefingSaveDir,
19
19
  validateBriefingFormat
20
- } from "./chunk-IJHLC5CH.js";
20
+ } from "./chunk-BNFRL6QW.js";
21
21
  import "./chunk-Y7NWBBHV.js";
22
22
  import "./chunk-M7XQSUBB.js";
23
23
  import "./chunk-5UZXUTVO.js";
@@ -9,4 +9,4 @@ function resolveEnsureCollectionArgs(collectionOrExecution, execution) {
9
9
  export {
10
10
  resolveEnsureCollectionArgs
11
11
  };
12
- //# sourceMappingURL=chunk-QT4THOLT.js.map
12
+ //# sourceMappingURL=chunk-2DGQLOOM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/search/port.ts"],"sourcesContent":["import type { QmdSearchResult } from \"../types.js\";\n\n/** Alias so consumers don't need to reference \"Qmd\" in a backend-agnostic context. */\nexport type SearchResult = QmdSearchResult;\n\nexport interface SearchQueryOptions {\n intent?: string;\n explain?: boolean;\n candidateLimit?: number;\n rerank?: boolean;\n chunkStrategy?: \"auto\" | \"regex\";\n structuredSearches?: Array<{ type: \"lex\" | \"vec\" | \"hyde\"; query: string }>;\n}\n\nexport interface SearchExecutionOptions {\n signal?: AbortSignal;\n}\n\nexport function resolveEnsureCollectionArgs(\n collectionOrExecution?: string | SearchExecutionOptions,\n execution?: SearchExecutionOptions,\n): { collection?: string; execution?: SearchExecutionOptions } {\n if (typeof collectionOrExecution === \"string\") {\n return { collection: collectionOrExecution, execution };\n }\n return { collection: undefined, execution: collectionOrExecution ?? execution };\n}\n\n/**\n * Abstract search backend interface.\n *\n * Implementations:\n * - QmdClient (default, local hybrid BM25+vector+reranking)\n * - OramaBackend (embedded, pure JS, hybrid FTS+vector)\n * - LanceDbBackend (embedded, native Arrow bindings, RRF reranking)\n * - MeilisearchBackend (server-based SDK, hybrid search)\n * - RemoteSearchBackend (HTTP REST adapter)\n * - NoopSearchBackend (graceful degradation)\n *\n * See docs/writing-a-search-backend.md for the implementation guide.\n */\nexport interface SearchBackend {\n // ── Lifecycle ──\n probe(): Promise<boolean>;\n /**\n * Optional non-mutating availability probe for health/readiness checks.\n * Implementations must avoid auto-upgrades, collection creation, daemon\n * startup, or any other runtime-modifying side effects.\n */\n checkAvailability?(execution?: SearchExecutionOptions): Promise<boolean>;\n isAvailable(): boolean;\n debugStatus(): string;\n\n // ── Search ──\n search(\n query: string,\n collection?: string,\n maxResults?: number,\n options?: SearchQueryOptions,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]>;\n bm25Search(\n query: string,\n collection?: string,\n maxResults?: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n vectorSearch(\n query: string,\n collection?: string,\n maxResults?: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n hybridSearch(\n query: string,\n collection?: string,\n maxResults?: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n\n // ── Maintenance ──\n update(execution?: SearchExecutionOptions): Promise<void>;\n updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void>;\n updateCollectionFromDir?(collection: string, memoryDir: string, execution?: SearchExecutionOptions): Promise<void>;\n /**\n * True when update() refreshes every indexed collection, not just this\n * backend's configured collection. Namespace routers use this to avoid\n * repeating the same expensive global update once per namespace.\n */\n updatesAllCollections?(): boolean;\n /**\n * Optional strict refresh used by callers that must know whether a collection\n * was actually refreshed before writing success markers. Ordinary update\n * calls remain fail-open for migration/maintenance resilience.\n */\n updateCollectionStrict?(collection: string, execution?: SearchExecutionOptions): Promise<void>;\n embed(): Promise<void>;\n embedCollection(collection: string): Promise<void>;\n\n // ── Collection management ──\n /**\n * Optional non-mutating collection probe. Backends that can distinguish a\n * missing collection from a transient probe failure should implement this so\n * callers can avoid auto-creating collections in unsafe layouts.\n */\n checkCollection?(\n collectionOrExecution?: string | SearchExecutionOptions,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\">;\n ensureCollection(\n memoryDir: string,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\">;\n ensureCollection(\n memoryDir: string,\n collection?: string,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\">;\n}\n"],"mappings":";AAkBO,SAAS,4BACd,uBACA,WAC6D;AAC7D,MAAI,OAAO,0BAA0B,UAAU;AAC7C,WAAO,EAAE,YAAY,uBAAuB,UAAU;AAAA,EACxD;AACA,SAAO,EAAE,YAAY,QAAW,WAAW,yBAAyB,UAAU;AAChF;","names":[]}
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-CINZGPSJ.js";
8
8
  import {
9
9
  resolveEnsureCollectionArgs
10
- } from "./chunk-QT4THOLT.js";
10
+ } from "./chunk-2DGQLOOM.js";
11
11
  import {
12
12
  log
13
13
  } from "./chunk-2ODBA7MQ.js";
@@ -491,4 +491,4 @@ function isMissingVectorProviderColumnError(err) {
491
491
  export {
492
492
  LanceDbBackend
493
493
  };
494
- //# sourceMappingURL=chunk-FOVPSMGI.js.map
494
+ //# sourceMappingURL=chunk-7WEB3FLJ.js.map
@@ -731,27 +731,37 @@ function buildFollowupPrompt(sections, windowLabel, maxFollowups) {
731
731
  return lines.join("\n");
732
732
  }
733
733
  function parseFollowupResponse(raw, max) {
734
- const parsed = JSON.parse(raw);
735
- if (!parsed || typeof parsed !== "object") {
736
- throw new Error(`LLM returned non-object JSON: ${typeof parsed}`);
737
- }
738
- const arr = parsed.followups;
739
- if (!Array.isArray(arr)) {
740
- throw new Error(`LLM response missing "followups" array`);
741
- }
742
- const out = [];
743
- for (const entry of arr) {
744
- if (!entry || typeof entry !== "object") continue;
745
- const text = entry.text;
746
- if (typeof text !== "string" || text.trim().length === 0) continue;
747
- const rationale = entry.rationale;
748
- out.push({
749
- text: text.trim(),
750
- rationale: typeof rationale === "string" ? rationale.trim() : void 0
751
- });
752
- if (out.length >= max) break;
734
+ const candidates = extractJsonCandidates(raw);
735
+ let lastError;
736
+ for (const candidate of candidates) {
737
+ try {
738
+ const parsed = JSON.parse(candidate);
739
+ if (!parsed || typeof parsed !== "object") {
740
+ throw new Error(`LLM returned non-object JSON: ${typeof parsed}`);
741
+ }
742
+ const arr = parsed.followups;
743
+ if (!Array.isArray(arr)) {
744
+ throw new Error(`LLM response missing "followups" array`);
745
+ }
746
+ const out = [];
747
+ for (const entry of arr) {
748
+ if (!entry || typeof entry !== "object") continue;
749
+ const text = entry.text;
750
+ if (typeof text !== "string" || text.trim().length === 0) continue;
751
+ const rationale = entry.rationale;
752
+ out.push({
753
+ text: text.trim(),
754
+ rationale: typeof rationale === "string" ? rationale.trim() : void 0
755
+ });
756
+ if (out.length >= max) break;
757
+ }
758
+ return out;
759
+ } catch (err) {
760
+ lastError = err;
761
+ }
753
762
  }
754
- return out;
763
+ if (lastError) throw lastError;
764
+ throw new Error("LLM response contained no JSON candidates");
755
765
  }
756
766
  function stringifyError(err) {
757
767
  if (err instanceof Error) return err.message;
@@ -860,4 +870,4 @@ export {
860
870
  resolveBriefingSaveDir,
861
871
  briefingFilename
862
872
  };
863
- //# sourceMappingURL=chunk-IJHLC5CH.js.map
873
+ //# sourceMappingURL=chunk-BNFRL6QW.js.map