@remnic/core 9.3.628 → 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.
- package/dist/access-cli.js +18 -18
- package/dist/access-http.d.ts +6 -4
- package/dist/access-http.js +7 -6
- package/dist/access-mcp.d.ts +6 -4
- package/dist/access-mcp.js +6 -5
- package/dist/{access-service-C_sfOHsX.d.ts → access-service-C4v-eFjB.d.ts} +2 -2
- package/dist/access-service.d.ts +6 -4
- package/dist/access-service.js +5 -4
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +6 -4
- package/dist/briefing.d.ts +33 -2
- package/dist/briefing.js +5 -2
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +1 -1
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +2 -2
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +5 -5
- package/dist/{chunk-GE7Q7KXP.js → chunk-2VJ7AJFX.js} +2 -2
- package/dist/{chunk-KVFYTRMV.js → chunk-4QEUKASL.js} +2 -2
- package/dist/{chunk-KB4MFBF5.js → chunk-5S6IREG3.js} +3 -3
- package/dist/{chunk-LQYTQCXM.js → chunk-6LBQL5US.js} +2 -2
- package/dist/{chunk-KGIGRNR6.js → chunk-723OMPUI.js} +4 -4
- package/dist/{chunk-TZDSNIRO.js → chunk-ADOD7PJC.js} +5 -5
- package/dist/{chunk-SHV5Y2WU.js → chunk-BL33LBTN.js} +3 -3
- package/dist/{chunk-532VCWYW.js → chunk-BWK5EEKS.js} +2 -2
- package/dist/{chunk-KKTXCFD7.js → chunk-EORL2IDM.js} +39 -8
- package/dist/{chunk-KKTXCFD7.js.map → chunk-EORL2IDM.js.map} +1 -1
- package/dist/{chunk-F3FY3D3S.js → chunk-F6USGHMO.js} +10 -5
- package/dist/chunk-F6USGHMO.js.map +1 -0
- package/dist/{chunk-STDAAGH7.js → chunk-GXWFZYSR.js} +39 -3
- package/dist/chunk-GXWFZYSR.js.map +1 -0
- package/dist/{chunk-3VONWEQB.js → chunk-HZVIYZYN.js} +2 -2
- package/dist/{chunk-Y3TMFC6I.js → chunk-K3BTOW7N.js} +3 -3
- package/dist/{chunk-Z3CCEP6F.js → chunk-K47C6M2C.js} +5 -5
- package/dist/{chunk-N5RGXWLQ.js → chunk-MQ24KOOR.js} +2 -2
- package/dist/{chunk-3MNBW7R7.js → chunk-NRQJBK36.js} +2 -2
- package/dist/{chunk-MON3LMO7.js → chunk-NRST7W5Q.js} +5 -5
- package/dist/{chunk-3R2UZV3U.js → chunk-OOFBE62K.js} +2 -2
- package/dist/{chunk-MVQN73GT.js → chunk-OQMR2SDZ.js} +2 -2
- package/dist/{chunk-UGHUNQ74.js → chunk-RSKUUEBA.js} +73 -1
- package/dist/chunk-RSKUUEBA.js.map +1 -0
- package/dist/{chunk-QDV6VAD4.js → chunk-S5W37FPX.js} +2 -2
- package/dist/{chunk-57QXN2CS.js → chunk-SACS6KE6.js} +2 -2
- package/dist/{chunk-UELS6WWF.js → chunk-UE57H4MA.js} +2 -2
- package/dist/{chunk-2RHI3FGV.js → chunk-VUTPRX7K.js} +20 -14
- package/dist/{chunk-2RHI3FGV.js.map → chunk-VUTPRX7K.js.map} +1 -1
- package/dist/{chunk-AZ4RI3QD.js → chunk-YJOWWRRS.js} +450 -48
- package/dist/chunk-YJOWWRRS.js.map +1 -0
- package/dist/{chunk-P2D2MM47.js → chunk-ZZSXUZF3.js} +2 -2
- package/dist/{cli-EZv6YE6_.d.ts → cli-B_6EMiQc.d.ts} +3 -3
- package/dist/cli.d.ts +7 -5
- package/dist/cli.js +18 -17
- package/dist/compounding/engine.d.ts +1 -1
- package/dist/compounding/engine.js +2 -2
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +2 -2
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +2 -2
- package/dist/consolidation-provenance-check.d.ts +1 -1
- package/dist/consolidation-undo.d.ts +1 -1
- package/dist/contradiction/index.d.ts +1 -1
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +1 -1
- package/dist/entity-retrieval.js +2 -2
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +6 -4
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-judge.js +3 -3
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +3 -3
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/fallback-llm.js +2 -2
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.js +29 -27
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +6 -4
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +1 -1
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +1 -1
- package/dist/namespaces/migrate.js +3 -3
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +1 -1
- package/dist/namespaces/storage.js +2 -2
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +1 -1
- package/dist/operator-toolkit.js +6 -6
- package/dist/{orchestrator-CEycaY3M.d.ts → orchestrator-Dlw3ae4B.d.ts} +111 -10
- package/dist/orchestrator.d.ts +5 -3
- package/dist/orchestrator.js +15 -14
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-planner-llm.js +2 -2
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.d.ts +1 -1
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/schemas.d.ts +24 -24
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-FbhPeJjB.d.ts → semantic-consolidation-C4sefXEI.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +3 -3
- package/dist/semantic-rule-promotion.js +2 -2
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/storage.d.ts +38 -2
- package/dist/storage.js +5 -3
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -3
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +1 -1
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/types.d.ts +12 -12
- package/dist/{types-D5VRAI04.d.ts → types-2vqxmO0j.d.ts} +39 -10
- package/dist/types.d.ts +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +2 -2
- package/package.json +1 -1
- package/src/access-service.ts +7 -0
- package/src/briefing.ts +67 -1
- package/src/index.ts +2 -0
- package/src/orchestrator.ts +42 -0
- package/src/storage.ts +100 -0
- package/src/wearables/cli.ts +6 -0
- package/src/wearables/config.test.ts +33 -4
- package/src/wearables/config.ts +39 -7
- package/src/wearables/memory-gen.test.ts +416 -1
- package/src/wearables/memory-gen.ts +381 -23
- package/src/wearables/pipeline.test.ts +309 -1
- package/src/wearables/pipeline.ts +131 -9
- package/src/wearables/service.test.ts +172 -0
- package/src/wearables/service.ts +84 -3
- package/src/wearables/storage-io.test.ts +81 -0
- package/src/wearables/trust.test.ts +123 -0
- package/src/wearables/trust.ts +168 -0
- package/src/wearables/types.ts +37 -8
- package/dist/chunk-AZ4RI3QD.js.map +0 -1
- package/dist/chunk-F3FY3D3S.js.map +0 -1
- package/dist/chunk-STDAAGH7.js.map +0 -1
- package/dist/chunk-UGHUNQ74.js.map +0 -1
- /package/dist/{chunk-GE7Q7KXP.js.map → chunk-2VJ7AJFX.js.map} +0 -0
- /package/dist/{chunk-KVFYTRMV.js.map → chunk-4QEUKASL.js.map} +0 -0
- /package/dist/{chunk-KB4MFBF5.js.map → chunk-5S6IREG3.js.map} +0 -0
- /package/dist/{chunk-LQYTQCXM.js.map → chunk-6LBQL5US.js.map} +0 -0
- /package/dist/{chunk-KGIGRNR6.js.map → chunk-723OMPUI.js.map} +0 -0
- /package/dist/{chunk-TZDSNIRO.js.map → chunk-ADOD7PJC.js.map} +0 -0
- /package/dist/{chunk-SHV5Y2WU.js.map → chunk-BL33LBTN.js.map} +0 -0
- /package/dist/{chunk-532VCWYW.js.map → chunk-BWK5EEKS.js.map} +0 -0
- /package/dist/{chunk-3VONWEQB.js.map → chunk-HZVIYZYN.js.map} +0 -0
- /package/dist/{chunk-Y3TMFC6I.js.map → chunk-K3BTOW7N.js.map} +0 -0
- /package/dist/{chunk-Z3CCEP6F.js.map → chunk-K47C6M2C.js.map} +0 -0
- /package/dist/{chunk-N5RGXWLQ.js.map → chunk-MQ24KOOR.js.map} +0 -0
- /package/dist/{chunk-3MNBW7R7.js.map → chunk-NRQJBK36.js.map} +0 -0
- /package/dist/{chunk-MON3LMO7.js.map → chunk-NRST7W5Q.js.map} +0 -0
- /package/dist/{chunk-3R2UZV3U.js.map → chunk-OOFBE62K.js.map} +0 -0
- /package/dist/{chunk-MVQN73GT.js.map → chunk-OQMR2SDZ.js.map} +0 -0
- /package/dist/{chunk-QDV6VAD4.js.map → chunk-S5W37FPX.js.map} +0 -0
- /package/dist/{chunk-57QXN2CS.js.map → chunk-SACS6KE6.js.map} +0 -0
- /package/dist/{chunk-UELS6WWF.js.map → chunk-UE57H4MA.js.map} +0 -0
- /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
|
+
}
|
package/src/wearables/types.ts
CHANGED
|
@@ -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":
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* - "auto":
|
|
151
|
-
*
|
|
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
|
-
* "
|
|
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. */
|