@remnic/core 9.3.629 → 9.3.630

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 (211) hide show
  1. package/dist/access-cli.js +13 -13
  2. package/dist/access-http.d.ts +5 -4
  3. package/dist/access-http.js +6 -6
  4. package/dist/access-mcp.d.ts +5 -4
  5. package/dist/access-mcp.js +5 -5
  6. package/dist/{access-service-BdThkfIE.d.ts → access-service-C4v-eFjB.d.ts} +2 -2
  7. package/dist/access-service.d.ts +5 -4
  8. package/dist/access-service.js +4 -4
  9. package/dist/action-confidence.d.ts +1 -1
  10. package/dist/active-memory-bridge.d.ts +1 -1
  11. package/dist/active-recall.d.ts +1 -1
  12. package/dist/active-recall.js +1 -1
  13. package/dist/behavior-learner.d.ts +1 -1
  14. package/dist/behavior-signals.d.ts +1 -1
  15. package/dist/bootstrap.d.ts +4 -3
  16. package/dist/briefing.d.ts +1 -1
  17. package/dist/briefing.js +2 -2
  18. package/dist/buffer-surprise-report.d.ts +1 -1
  19. package/dist/buffer.d.ts +1 -1
  20. package/dist/calibration.d.ts +1 -1
  21. package/dist/causal-behavior.d.ts +1 -1
  22. package/dist/causal-consolidation.d.ts +1 -1
  23. package/dist/causal-consolidation.js +3 -3
  24. package/dist/{chunk-GE7Q7KXP.js → chunk-2VJ7AJFX.js} +2 -2
  25. package/dist/{chunk-KVFYTRMV.js → chunk-4QEUKASL.js} +2 -2
  26. package/dist/{chunk-KB4MFBF5.js → chunk-5S6IREG3.js} +3 -3
  27. package/dist/{chunk-LQYTQCXM.js → chunk-6LBQL5US.js} +2 -2
  28. package/dist/{chunk-TZDSNIRO.js → chunk-ADOD7PJC.js} +5 -5
  29. package/dist/{chunk-54KDA6UK.js → chunk-BL33LBTN.js} +3 -3
  30. package/dist/{chunk-532VCWYW.js → chunk-BWK5EEKS.js} +2 -2
  31. package/dist/{chunk-KKTXCFD7.js → chunk-EORL2IDM.js} +39 -8
  32. package/dist/{chunk-KKTXCFD7.js.map → chunk-EORL2IDM.js.map} +1 -1
  33. package/dist/{chunk-JXHMAQYT.js → chunk-F6USGHMO.js} +4 -4
  34. package/dist/{chunk-NKCW223V.js → chunk-GXWFZYSR.js} +2 -2
  35. package/dist/{chunk-XXO5TI3B.js → chunk-K3BTOW7N.js} +3 -3
  36. package/dist/{chunk-N5RGXWLQ.js → chunk-MQ24KOOR.js} +2 -2
  37. package/dist/{chunk-3MNBW7R7.js → chunk-NRQJBK36.js} +2 -2
  38. package/dist/{chunk-3R2UZV3U.js → chunk-OOFBE62K.js} +2 -2
  39. package/dist/{chunk-MVQN73GT.js → chunk-OQMR2SDZ.js} +2 -2
  40. package/dist/{chunk-UGHUNQ74.js → chunk-RSKUUEBA.js} +73 -1
  41. package/dist/chunk-RSKUUEBA.js.map +1 -0
  42. package/dist/{chunk-QDV6VAD4.js → chunk-S5W37FPX.js} +2 -2
  43. package/dist/{chunk-57QXN2CS.js → chunk-SACS6KE6.js} +2 -2
  44. package/dist/{chunk-JKCDQBDW.js → chunk-UE57H4MA.js} +2 -2
  45. package/dist/{chunk-OLNNOHBC.js → chunk-VUTPRX7K.js} +20 -14
  46. package/dist/{chunk-OLNNOHBC.js.map → chunk-VUTPRX7K.js.map} +1 -1
  47. package/dist/{chunk-3GLCUPXP.js → chunk-YJOWWRRS.js} +429 -45
  48. package/dist/chunk-YJOWWRRS.js.map +1 -0
  49. package/dist/{chunk-P2D2MM47.js → chunk-ZZSXUZF3.js} +2 -2
  50. package/dist/{cli-DAsHklrf.d.ts → cli-B_6EMiQc.d.ts} +3 -3
  51. package/dist/cli.d.ts +6 -5
  52. package/dist/cli.js +17 -17
  53. package/dist/compounding/engine.d.ts +1 -1
  54. package/dist/compounding/engine.js +2 -2
  55. package/dist/compounding/preference-consolidator.d.ts +1 -1
  56. package/dist/compression-optimizer.d.ts +1 -1
  57. package/dist/config.d.ts +1 -1
  58. package/dist/config.js +1 -1
  59. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  60. package/dist/connectors/codex-materialize-runner.js +2 -2
  61. package/dist/connectors/codex-materialize.d.ts +1 -1
  62. package/dist/connectors/index.d.ts +1 -1
  63. package/dist/connectors/index.js +2 -2
  64. package/dist/consolidation-provenance-check.d.ts +1 -1
  65. package/dist/consolidation-undo.d.ts +1 -1
  66. package/dist/contradiction/index.d.ts +1 -1
  67. package/dist/conversation-index/backend.d.ts +1 -1
  68. package/dist/conversation-index/chunker.d.ts +1 -1
  69. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  70. package/dist/conversation-index/indexer.d.ts +1 -1
  71. package/dist/conversation-index/search.d.ts +1 -1
  72. package/dist/day-summary.d.ts +1 -1
  73. package/dist/delinearize.d.ts +1 -1
  74. package/dist/direct-answer-wiring.d.ts +1 -1
  75. package/dist/direct-answer.d.ts +1 -1
  76. package/dist/embedding-fallback.d.ts +1 -1
  77. package/dist/enrichment/index.d.ts +1 -1
  78. package/dist/entity-retrieval.d.ts +1 -1
  79. package/dist/entity-retrieval.js +2 -2
  80. package/dist/entity-schema.d.ts +1 -1
  81. package/dist/explicit-capture.d.ts +4 -3
  82. package/dist/extraction-judge-telemetry.d.ts +1 -1
  83. package/dist/extraction-judge-training.d.ts +1 -1
  84. package/dist/extraction-judge.d.ts +1 -1
  85. package/dist/extraction.d.ts +1 -1
  86. package/dist/fallback-llm.d.ts +1 -1
  87. package/dist/identity-continuity.d.ts +1 -1
  88. package/dist/importance.d.ts +1 -1
  89. package/dist/index.d.ts +8 -8
  90. package/dist/index.js +22 -22
  91. package/dist/intent.d.ts +1 -1
  92. package/dist/lcm/engine.d.ts +1 -1
  93. package/dist/lcm/index.d.ts +1 -1
  94. package/dist/lcm/tools.d.ts +1 -1
  95. package/dist/lifecycle.d.ts +1 -1
  96. package/dist/live-connectors-runner.d.ts +1 -1
  97. package/dist/local-llm.d.ts +1 -1
  98. package/dist/maintenance/memory-governance.d.ts +1 -1
  99. package/dist/maintenance/memory-governance.js +2 -2
  100. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
  101. package/dist/maintenance/rebuild-memory-projection.js +3 -3
  102. package/dist/mcp-memory-inspector-app.d.ts +5 -4
  103. package/dist/memory-action-policy.d.ts +1 -1
  104. package/dist/memory-cache.d.ts +1 -1
  105. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  106. package/dist/memory-projection-store.d.ts +1 -1
  107. package/dist/memory-provenance.d.ts +1 -1
  108. package/dist/memory-worth-outcomes.d.ts +1 -1
  109. package/dist/models-json.d.ts +1 -1
  110. package/dist/namespaces/migrate.d.ts +1 -1
  111. package/dist/namespaces/migrate.js +3 -3
  112. package/dist/namespaces/principal.d.ts +1 -1
  113. package/dist/namespaces/search.d.ts +1 -1
  114. package/dist/namespaces/storage.d.ts +1 -1
  115. package/dist/namespaces/storage.js +2 -2
  116. package/dist/native-knowledge.d.ts +1 -1
  117. package/dist/operator-toolkit.d.ts +1 -1
  118. package/dist/operator-toolkit.js +6 -6
  119. package/dist/{orchestrator-BexeSJ2j.d.ts → orchestrator-Dlw3ae4B.d.ts} +101 -10
  120. package/dist/orchestrator.d.ts +4 -3
  121. package/dist/orchestrator.js +10 -10
  122. package/dist/patterns-cli.d.ts +1 -1
  123. package/dist/policy-runtime.d.ts +1 -1
  124. package/dist/qmd-recall-cache.d.ts +1 -1
  125. package/dist/qmd.d.ts +1 -1
  126. package/dist/recall-disclosure-escalation.d.ts +1 -1
  127. package/dist/recall-explain-renderer.d.ts +1 -1
  128. package/dist/recall-planner-llm.d.ts +1 -1
  129. package/dist/recall-state.d.ts +1 -1
  130. package/dist/recall-tag-filter.d.ts +1 -1
  131. package/dist/recall-xray-cli.d.ts +1 -1
  132. package/dist/recall-xray-renderer.d.ts +1 -1
  133. package/dist/recall-xray.d.ts +1 -1
  134. package/dist/resolve-auth-token.d.ts +1 -1
  135. package/dist/resume-bundles.js +2 -2
  136. package/dist/retrieval-agents.d.ts +1 -1
  137. package/dist/retrieval-tiers.d.ts +1 -1
  138. package/dist/routing/engine.d.ts +1 -1
  139. package/dist/routing/store.d.ts +1 -1
  140. package/dist/schemas.d.ts +22 -22
  141. package/dist/search/embed-helper.d.ts +1 -1
  142. package/dist/search/factory.d.ts +1 -1
  143. package/dist/search/index.d.ts +1 -1
  144. package/dist/search/lancedb-backend.d.ts +1 -1
  145. package/dist/search/meilisearch-backend.d.ts +1 -1
  146. package/dist/search/noop-backend.d.ts +1 -1
  147. package/dist/search/orama-backend.d.ts +1 -1
  148. package/dist/search/port.d.ts +1 -1
  149. package/dist/search/remote-backend.d.ts +1 -1
  150. package/dist/{semantic-consolidation-PwkzNfdK.d.ts → semantic-consolidation-C4sefXEI.d.ts} +1 -1
  151. package/dist/semantic-consolidation.d.ts +2 -2
  152. package/dist/semantic-consolidation.js +3 -3
  153. package/dist/semantic-rule-promotion.js +2 -2
  154. package/dist/semantic-rule-verifier.d.ts +1 -1
  155. package/dist/semantic-rule-verifier.js +2 -2
  156. package/dist/session-observer-bands.d.ts +1 -1
  157. package/dist/session-observer-state.d.ts +1 -1
  158. package/dist/shared-context/manager.d.ts +1 -1
  159. package/dist/signal.d.ts +1 -1
  160. package/dist/storage.d.ts +38 -2
  161. package/dist/storage.js +5 -3
  162. package/dist/summarizer.d.ts +1 -1
  163. package/dist/summary-snapshot.d.ts +1 -1
  164. package/dist/temporal-supersession.d.ts +1 -1
  165. package/dist/temporal-validity.d.ts +1 -1
  166. package/dist/threading.d.ts +1 -1
  167. package/dist/tier-migration.d.ts +1 -1
  168. package/dist/tier-routing.d.ts +1 -1
  169. package/dist/topics.d.ts +1 -1
  170. package/dist/transcript.d.ts +1 -1
  171. package/dist/transfer/types.d.ts +12 -12
  172. package/dist/{types-BCF2wqKa.d.ts → types-2vqxmO0j.d.ts} +39 -10
  173. package/dist/types.d.ts +1 -1
  174. package/dist/utility-runtime.d.ts +1 -1
  175. package/dist/verified-recall.js +2 -2
  176. package/package.json +1 -1
  177. package/src/orchestrator.ts +16 -0
  178. package/src/storage.ts +100 -0
  179. package/src/wearables/cli.ts +6 -0
  180. package/src/wearables/config.test.ts +33 -4
  181. package/src/wearables/config.ts +39 -7
  182. package/src/wearables/memory-gen.test.ts +416 -1
  183. package/src/wearables/memory-gen.ts +381 -23
  184. package/src/wearables/pipeline.test.ts +309 -1
  185. package/src/wearables/pipeline.ts +131 -9
  186. package/src/wearables/service.test.ts +172 -0
  187. package/src/wearables/service.ts +84 -3
  188. package/src/wearables/storage-io.test.ts +81 -0
  189. package/src/wearables/trust.test.ts +123 -0
  190. package/src/wearables/trust.ts +168 -0
  191. package/src/wearables/types.ts +37 -8
  192. package/dist/chunk-3GLCUPXP.js.map +0 -1
  193. package/dist/chunk-UGHUNQ74.js.map +0 -1
  194. /package/dist/{chunk-GE7Q7KXP.js.map → chunk-2VJ7AJFX.js.map} +0 -0
  195. /package/dist/{chunk-KVFYTRMV.js.map → chunk-4QEUKASL.js.map} +0 -0
  196. /package/dist/{chunk-KB4MFBF5.js.map → chunk-5S6IREG3.js.map} +0 -0
  197. /package/dist/{chunk-LQYTQCXM.js.map → chunk-6LBQL5US.js.map} +0 -0
  198. /package/dist/{chunk-TZDSNIRO.js.map → chunk-ADOD7PJC.js.map} +0 -0
  199. /package/dist/{chunk-54KDA6UK.js.map → chunk-BL33LBTN.js.map} +0 -0
  200. /package/dist/{chunk-532VCWYW.js.map → chunk-BWK5EEKS.js.map} +0 -0
  201. /package/dist/{chunk-JXHMAQYT.js.map → chunk-F6USGHMO.js.map} +0 -0
  202. /package/dist/{chunk-NKCW223V.js.map → chunk-GXWFZYSR.js.map} +0 -0
  203. /package/dist/{chunk-XXO5TI3B.js.map → chunk-K3BTOW7N.js.map} +0 -0
  204. /package/dist/{chunk-N5RGXWLQ.js.map → chunk-MQ24KOOR.js.map} +0 -0
  205. /package/dist/{chunk-3MNBW7R7.js.map → chunk-NRQJBK36.js.map} +0 -0
  206. /package/dist/{chunk-3R2UZV3U.js.map → chunk-OOFBE62K.js.map} +0 -0
  207. /package/dist/{chunk-MVQN73GT.js.map → chunk-OQMR2SDZ.js.map} +0 -0
  208. /package/dist/{chunk-QDV6VAD4.js.map → chunk-S5W37FPX.js.map} +0 -0
  209. /package/dist/{chunk-57QXN2CS.js.map → chunk-SACS6KE6.js.map} +0 -0
  210. /package/dist/{chunk-JKCDQBDW.js.map → chunk-UE57H4MA.js.map} +0 -0
  211. /package/dist/{chunk-P2D2MM47.js.map → chunk-ZZSXUZF3.js.map} +0 -0
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Wearable memory trust scoring — the "smart" memoryMode engine.
3
+ *
4
+ * Grounded in how production memory systems handle noisy ingest:
5
+ *
6
+ * - **LLM-as-judge gating** (Remnic's own extraction judge,
7
+ * `judgeFactDurability`): an LLM verdict on durability decides
8
+ * accept / defer / reject before anything persists.
9
+ * - **Provenance priors**: each source carries a configurable trust
10
+ * prior (`sourceTrust`) — a noisy ASR channel contributes less
11
+ * confidence than a clean one (provenance-weighted fusion).
12
+ * - **Corroboration**: independent agreement raises trust. A fact
13
+ * supported by a second wearable that recorded the same day, or by
14
+ * an existing active memory, is far less likely to be an ASR
15
+ * artifact (ensemble agreement / self-consistency).
16
+ *
17
+ * The combined score maps to a three-way decision:
18
+ *
19
+ * trust >= autoApproveTrust -> written ACTIVE
20
+ * trust >= reviewTrust -> written pending_review
21
+ * below -> dropped
22
+ *
23
+ * with the judge able to short-circuit (reject -> drop,
24
+ * defer -> pending_review regardless of score). The score, verdict,
25
+ * and corroboration evidence persist on the memory (confidence +
26
+ * structuredAttributes + verificationState), so Remnic's existing
27
+ * trust machinery — memory-worth outcome counters, pattern
28
+ * reinforcement, temporal supersession, contradiction scans — keeps
29
+ * calibrating these memories after they land.
30
+ */
31
+
32
+ import {
33
+ countRecallTokenOverlap,
34
+ normalizeRecallTokens,
35
+ } from "../recall-tokenization.js";
36
+
37
+ /** Judge adjustments and corroboration boosts (documented, fixed). */
38
+ export const TRUST_JUDGE_ACCEPT_BOOST = 0.15;
39
+ export const TRUST_CROSS_SOURCE_BOOST = 0.15;
40
+ export const TRUST_SUPPORTING_MEMORY_BOOST = 0.1;
41
+
42
+ /** Minimum distinct tokens before similarity is meaningful. */
43
+ const MIN_FACT_TOKENS = 4;
44
+ /** Fact-token coverage required to call a day-text corroborating. */
45
+ const CROSS_SOURCE_COVERAGE = 0.6;
46
+ /** Fact-token coverage required to call an existing memory supporting. */
47
+ const MEMORY_SUPPORT_COVERAGE = 0.7;
48
+ /** Bound on existing memories scanned per fact batch. */
49
+ const MAX_MEMORIES_SCANNED = 5_000;
50
+
51
+ export interface TrustEvidence {
52
+ /** Other-source ids whose same-day content corroborates the fact. */
53
+ corroboratedBySources: string[];
54
+ /** Id of an existing active memory whose content supports the fact. */
55
+ supportingMemoryId?: string;
56
+ }
57
+
58
+ export interface TrustScoreInput {
59
+ /** Extraction confidence for the fact (defaults to 0.7 when absent). */
60
+ extractionConfidence: number | undefined;
61
+ /** Per-source trust prior from config (0..1). */
62
+ sourceTrust: number;
63
+ /** Judge verdict kind when a judge ran; undefined when unavailable. */
64
+ judgeVerdict?: "accept" | "reject" | "defer";
65
+ evidence: TrustEvidence;
66
+ }
67
+
68
+ export function computeTrustScore(input: TrustScoreInput): number {
69
+ const confidence =
70
+ typeof input.extractionConfidence === "number" &&
71
+ Number.isFinite(input.extractionConfidence)
72
+ ? Math.min(1, Math.max(0, input.extractionConfidence))
73
+ : 0.7;
74
+ let trust = confidence * Math.min(1, Math.max(0, input.sourceTrust));
75
+ if (input.judgeVerdict === "accept") trust += TRUST_JUDGE_ACCEPT_BOOST;
76
+ if (input.evidence.corroboratedBySources.length > 0) {
77
+ trust += TRUST_CROSS_SOURCE_BOOST;
78
+ }
79
+ if (input.evidence.supportingMemoryId !== undefined) {
80
+ trust += TRUST_SUPPORTING_MEMORY_BOOST;
81
+ }
82
+ return Math.min(1, Math.max(0, trust));
83
+ }
84
+
85
+ export interface CorroborationContext {
86
+ /**
87
+ * Same-day transcript bodies from OTHER sources, keyed by source id.
88
+ * Pre-tokenized once per sync (day bodies are large).
89
+ */
90
+ otherSourceDayTokens: Map<string, Set<string>>;
91
+ /** Existing active memories: id + content. */
92
+ existingMemories: Array<{ id: string; content: string }>;
93
+ }
94
+
95
+ /** Tokenize a day body once for repeated per-fact coverage checks. */
96
+ export function tokenizeDayBody(body: string): Set<string> {
97
+ return new Set(normalizeRecallTokens(body));
98
+ }
99
+
100
+ /**
101
+ * Find corroborating evidence for one fact. Deterministic and local:
102
+ * token-coverage similarity via the shared recall tokenizer — no LLM
103
+ * cost on the corroboration path.
104
+ */
105
+ export function findCorroboration(
106
+ factText: string,
107
+ context: CorroborationContext,
108
+ ): TrustEvidence {
109
+ const factTokens = normalizeRecallTokens(factText);
110
+ const evidence: TrustEvidence = { corroboratedBySources: [] };
111
+ if (factTokens.length < MIN_FACT_TOKENS) return evidence;
112
+ const factTokenSet = new Set(factTokens);
113
+
114
+ for (const [sourceId, dayTokens] of context.otherSourceDayTokens) {
115
+ let matches = 0;
116
+ for (const token of factTokenSet) {
117
+ if (dayTokens.has(token)) matches += 1;
118
+ }
119
+ if (matches / factTokenSet.size >= CROSS_SOURCE_COVERAGE) {
120
+ evidence.corroboratedBySources.push(sourceId);
121
+ }
122
+ }
123
+ evidence.corroboratedBySources.sort();
124
+
125
+ let scanned = 0;
126
+ for (const memory of context.existingMemories) {
127
+ if (scanned >= MAX_MEMORIES_SCANNED) break;
128
+ scanned += 1;
129
+ const matches = countRecallTokenOverlap(factTokenSet, memory.content);
130
+ if (matches / factTokenSet.size >= MEMORY_SUPPORT_COVERAGE) {
131
+ evidence.supportingMemoryId = memory.id;
132
+ break;
133
+ }
134
+ }
135
+ return evidence;
136
+ }
137
+
138
+ export interface SmartDecision {
139
+ outcome: "active" | "review" | "drop";
140
+ reason:
141
+ | "judge-rejected"
142
+ | "judge-deferred"
143
+ | "auto-approved"
144
+ | "queued-for-review"
145
+ | "below-trust";
146
+ trust: number;
147
+ }
148
+
149
+ /** Map judge verdict + trust score to the smart-mode decision. */
150
+ export function decideSmart(
151
+ trust: number,
152
+ judgeVerdict: "accept" | "reject" | "defer" | undefined,
153
+ thresholds: { autoApproveTrust: number; reviewTrust: number },
154
+ ): SmartDecision {
155
+ if (judgeVerdict === "reject") {
156
+ return { outcome: "drop", reason: "judge-rejected", trust };
157
+ }
158
+ if (judgeVerdict === "defer") {
159
+ return { outcome: "review", reason: "judge-deferred", trust };
160
+ }
161
+ if (trust >= thresholds.autoApproveTrust) {
162
+ return { outcome: "active", reason: "auto-approved", trust };
163
+ }
164
+ if (trust >= thresholds.reviewTrust) {
165
+ return { outcome: "review", reason: "queued-for-review", trust };
166
+ }
167
+ return { outcome: "drop", reason: "below-trust", trust };
168
+ }
@@ -143,14 +143,34 @@ export interface WearableSourceSettings {
143
143
  userId?: string;
144
144
  /**
145
145
  * Memory creation mode (trust gate):
146
+ * - "smart": DEFAULT. Fully automated trust pipeline: the
147
+ * extraction judge (LLM-as-judge) plus a per-source
148
+ * trust prior, cross-device corroboration, and
149
+ * existing-memory support combine into a trust score.
150
+ * High-trust facts are written active; borderline facts
151
+ * go to the review queue; low-trust/judge-rejected
152
+ * facts are dropped. See wearables/trust.ts.
146
153
  * - "off": transcripts only; never create memories.
147
- * - "review": extract candidate memories but write every one with
148
- * status "pending_review" so nothing enters active
149
- * recall without operator approval. Default.
150
- * - "auto": extracted memories that pass the quality gates are
151
- * written active, like live-conversation extraction.
154
+ * - "review": every extracted candidate is written
155
+ * "pending_review" nothing enters active recall
156
+ * without operator approval.
157
+ * - "auto": deterministic gates only; survivors written active
158
+ * (no judge, no trust scoring).
152
159
  */
153
160
  memoryMode: WearableMemoryMode;
161
+ /**
162
+ * Trust prior for this source's transcription quality (0..1).
163
+ * Multiplies extraction confidence in smart mode — lower it for a
164
+ * device that mis-transcribes often. Default 0.8.
165
+ */
166
+ sourceTrust: number;
167
+ /** Smart mode: trust at/above which facts are written active. */
168
+ autoApproveTrust: number;
169
+ /**
170
+ * Smart mode: trust at/above which borderline facts are queued for
171
+ * review instead of dropped. Must be below autoApproveTrust.
172
+ */
173
+ reviewTrust: number;
154
174
  /** Drop extracted facts below this confidence (0–1). */
155
175
  minConfidence: number;
156
176
  /** Drop extracted facts scored below this importance level. */
@@ -161,14 +181,19 @@ export interface WearableSourceSettings {
161
181
  maxMemoriesPerDay: number;
162
182
  /**
163
183
  * Import provider-extracted memories (Bee facts / Omi memories).
164
- * "review" lands them in the review queue; "off" (default) skips.
184
+ * - "smart": DEFAULT. Same trust pipeline as transcript facts
185
+ * (judge + trust prior + corroboration) with a slightly reduced
186
+ * prior — provider extraction quality is outside Remnic's
187
+ * control.
188
+ * - "review": always pending_review.
189
+ * - "off": skip.
165
190
  */
166
- importNativeMemories: "off" | "review";
191
+ importNativeMemories: "off" | "review" | "smart";
167
192
  /** Transcript cleanup toggles. */
168
193
  cleanup: WearableCleanupSettings;
169
194
  }
170
195
 
171
- export type WearableMemoryMode = "off" | "review" | "auto";
196
+ export type WearableMemoryMode = "off" | "review" | "auto" | "smart";
172
197
 
173
198
  export interface WearableCleanupSettings {
174
199
  /** Merge consecutive segments from the same speaker. */
@@ -244,6 +269,10 @@ export interface WearableSyncSummary {
244
269
  /** Day files written (skipped-unchanged days are not listed). */
245
270
  transcriptsWritten: string[];
246
271
  memoriesCreated: number;
272
+ /** Earlier borderline writes promoted to active by new evidence. */
273
+ memoriesPromoted: number;
274
+ /** Earlier pending writes retired by a fresh judge-reject verdict. */
275
+ memoriesDemoted: number;
247
276
  memoriesSkipped: number;
248
277
  nativeMemoriesImported: number;
249
278
  /** Non-fatal warnings surfaced to the operator. */