@kybernesis/brain-core 0.11.0 → 0.13.0

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.
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `LocalBrainProvider` — the local half of the Layer-2 `BrainProvider` seam
3
+ * (ADR-0016, KYB-102).
4
+ *
5
+ * `createLocalBrainProvider(t)` returns a `BrainProvider` (the interface lives
6
+ * in `@kybernesis/brain-contracts`) bound to ONE tenant. Every method is a thin
7
+ * delegation to the matching `brain-core` free function — NO new logic, NO
8
+ * behaviour change, NO new runtime dependency. The provider's value is the type
9
+ * contract (one seam KAD/KBDE/Arcana share), not new algorithm.
10
+ *
11
+ * Write-consistency (ADR-0016): every write here is immediately readable — this
12
+ * is the LOCAL provider. A future `RemoteBrainProvider` may queue writes
13
+ * (eventually consistent); the interface JSDoc carries that caveat. This
14
+ * provider ignores `opts.idempotencyKey` (the single-writer queue + UNIQUE
15
+ * constraints already make local writes idempotent — see WriteOpts).
16
+ */
17
+ import type { TenantContext, BrainProvider } from '@kybernesis/brain-contracts';
18
+ /**
19
+ * Build a `BrainProvider` bound to tenant `t`, backed by the local `brain-core`
20
+ * kernel (SQLite via the auto-defaulted Layer-3 `StorageProvider`).
21
+ *
22
+ * @param t the tenant whose brain this provider operates on (captured at
23
+ * construction — methods take no tenant parameter).
24
+ */
25
+ export declare function createLocalBrainProvider(t: TenantContext): BrainProvider;
26
+ //# sourceMappingURL=brain-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-provider.d.ts","sourceRoot":"","sources":["../src/brain-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAgBd,MAAM,6BAA6B,CAAC;AAkBrC;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAkIxE"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * `LocalBrainProvider` — the local half of the Layer-2 `BrainProvider` seam
3
+ * (ADR-0016, KYB-102).
4
+ *
5
+ * `createLocalBrainProvider(t)` returns a `BrainProvider` (the interface lives
6
+ * in `@kybernesis/brain-contracts`) bound to ONE tenant. Every method is a thin
7
+ * delegation to the matching `brain-core` free function — NO new logic, NO
8
+ * behaviour change, NO new runtime dependency. The provider's value is the type
9
+ * contract (one seam KAD/KBDE/Arcana share), not new algorithm.
10
+ *
11
+ * Write-consistency (ADR-0016): every write here is immediately readable — this
12
+ * is the LOCAL provider. A future `RemoteBrainProvider` may queue writes
13
+ * (eventually consistent); the interface JSDoc carries that caveat. This
14
+ * provider ignores `opts.idempotencyKey` (the single-writer queue + UNIQUE
15
+ * constraints already make local writes idempotent — see WriteOpts).
16
+ */
17
+ import { EntityTypeSchema } from '@kybernesis/brain-contracts';
18
+ import { storeConversation } from './store-conversation.js';
19
+ import { hybridSearch } from './hybrid-search.js';
20
+ import { queryTimeline, getTimelineStats } from './timeline.js';
21
+ import { getEntityContext, findOrCreateEntity, getEntityGraphStats, pinEntity as pinEntityById, listPinned, } from './entity-graph.js';
22
+ import { vectorStats } from './vectors.js';
23
+ import { factsCount } from './fact-store.js';
24
+ import { runSleepCycleNow } from './sleep/index.js';
25
+ /**
26
+ * Build a `BrainProvider` bound to tenant `t`, backed by the local `brain-core`
27
+ * kernel (SQLite via the auto-defaulted Layer-3 `StorageProvider`).
28
+ *
29
+ * @param t the tenant whose brain this provider operates on (captured at
30
+ * construction — methods take no tenant parameter).
31
+ */
32
+ export function createLocalBrainProvider(t) {
33
+ return {
34
+ // ─ Writes ──────────────────────────────────────────────────────────────
35
+ async remember(input, _opts) {
36
+ // _opts.idempotencyKey ignored — local writes already idempotent.
37
+ return storeConversation(t, input);
38
+ },
39
+ async addNote(input, _opts) {
40
+ const type = input.type ?? 'note';
41
+ const title = input.title ?? 'untitled note';
42
+ // entities_touched: snapshot the entity count before/after so the figure
43
+ // comes from a brain-core free function, not a raw DB handle (no
44
+ // Layer-3/Database leak across the seam).
45
+ const before = await getEntityGraphStats(t).catch(() => ({ totalEntities: 0 }));
46
+ await storeConversation(t, {
47
+ prompt: input.content,
48
+ response: '',
49
+ channel: 'note',
50
+ timestamp: new Date().toISOString(),
51
+ eventType: type,
52
+ metadata: {
53
+ title,
54
+ ...(input.source_path ? { source_path: input.source_path } : {}),
55
+ },
56
+ });
57
+ const after = await getEntityGraphStats(t).catch(() => ({ totalEntities: before.totalEntities }));
58
+ const entitiesTouched = Math.max(0, after.totalEntities - before.totalEntities);
59
+ // Length-based segment estimate (parity with KAD's CLI feedback figure).
60
+ const segments = Math.max(1, Math.ceil(input.content.length / 250));
61
+ return { ok: true, title, type, segments, entities_touched: entitiesTouched };
62
+ },
63
+ async upsertEntity(body, _opts) {
64
+ // FIX 2b: validate type at the seam so an invalid value throws a clean,
65
+ // named error here — NOT a SQLite CHECK violation surfaced from deep in
66
+ // the storage write path. The interface already types `type` as
67
+ // EntityType (compile-time guard); this guards the runtime/untyped caller.
68
+ const rawType = body.type ?? 'topic';
69
+ const parsed = EntityTypeSchema.safeParse(rawType);
70
+ if (!parsed.success) {
71
+ const allowed = EntityTypeSchema.options.join(', ');
72
+ throw new Error(`upsertEntity: invalid entity type ${JSON.stringify(rawType)} — allowed types: ${allowed}`);
73
+ }
74
+ const type = parsed.data;
75
+ // FIX 1: findOrCreateEntity matches on (normalized_name AND type), but
76
+ // getEntityContext matches by normalized_name/alias ONLY (type-agnostic).
77
+ // So `!before` would wrongly report created=false when the same name is
78
+ // inserted under a NEW type. Determine `created` by comparing the row id:
79
+ // if findOrCreateEntity returns an id that differs from any pre-existing
80
+ // same-name row (or there was none), it inserted.
81
+ const before = await getEntityContext(t, body.name);
82
+ const entity = await findOrCreateEntity(t, body.name, type, new Date().toISOString());
83
+ const created = before?.entity?.id !== entity.id;
84
+ return { id: String(entity.id), created };
85
+ },
86
+ async pinEntity(nameOrId, pinned, _opts) {
87
+ // Resolve name OR numeric id through getEntityContext (accepts string |
88
+ // number) — no raw DB query, no Database handle across the seam.
89
+ const asId = parseInt(nameOrId, 10);
90
+ const lookup = Number.isFinite(asId) && String(asId) === nameOrId ? asId : nameOrId;
91
+ const ctx = await getEntityContext(t, lookup);
92
+ if (!ctx)
93
+ return null;
94
+ await pinEntityById(t, ctx.entity.id, pinned);
95
+ return { ok: true, id: ctx.entity.id, name: ctx.entity.name, pinned };
96
+ },
97
+ // ─ Reads ───────────────────────────────────────────────────────────────
98
+ async query(query, opts) {
99
+ return hybridSearch(t, query, opts ?? {});
100
+ },
101
+ async timeline(opts) {
102
+ return queryTimeline(t, opts ?? {});
103
+ },
104
+ async recallEntity(name) {
105
+ const ctx = await getEntityContext(t, name);
106
+ if (!ctx)
107
+ return null;
108
+ return {
109
+ entity: ctx.entity,
110
+ mentions: ctx.mentions,
111
+ related_entities: ctx.relatedEntities,
112
+ };
113
+ },
114
+ async getPinnedEntities() {
115
+ const pinned = await listPinned(t);
116
+ return pinned.map((e) => ({
117
+ id: e.id,
118
+ name: e.name,
119
+ type: e.type,
120
+ mention_count: e.mention_count,
121
+ last_seen: e.last_seen,
122
+ }));
123
+ },
124
+ async stats() {
125
+ const [tl, eg, vec, facts] = await Promise.all([
126
+ getTimelineStats(t),
127
+ getEntityGraphStats(t),
128
+ vectorStats(t).catch(() => ({ count: 0, available: false })),
129
+ factsCount(t).catch(() => 0),
130
+ ]);
131
+ return {
132
+ timeline_rows: tl.totalEvents,
133
+ fact_rows: facts,
134
+ entity_rows: eg.totalEntities,
135
+ vector_rows: vec.count,
136
+ vector_backend: vec.available ? 'sqlite-vec' : 'none',
137
+ };
138
+ },
139
+ // ─ Sleep ───────────────────────────────────────────────────────────────
140
+ async sleep(cfg) {
141
+ // SleepCycleConfig is the contract-level structural alias; widen to the
142
+ // real Partial<SleepConfig> at the call site (the contract stays decoupled
143
+ // from the sleep tuning knobs). The returned RunMetrics is structurally a
144
+ // SleepCycleMetrics.
145
+ return runSleepCycleNow(t, (cfg ?? {}));
146
+ },
147
+ };
148
+ }
149
+ //# sourceMappingURL=brain-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-provider.js","sourceRoot":"","sources":["../src/brain-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Read-time fact-confidence decay (KYB-80).
3
+ *
4
+ * A pure scoring policy — NO schema change, NO cron. Mirrors gbrain's
5
+ * "Hot Memory" model: per-category exponential confidence decay, clamped to
6
+ * [0,1]. Recall multiplies this UNIFORMLY into every scored fact (see the
7
+ * single decay pass in fact-retrieval.ts/factFirstSearch) so that, all else
8
+ * equal, a fresh fact outranks a stale one and short-lived categories (events)
9
+ * fade far faster than durable ones (biographical). Applying it uniformly over
10
+ * all sources — not at one scoring site — is deliberate: direct, entity, scene
11
+ * and bridge scores share one ranking, so decaying only one source would
12
+ * distort their relative order.
13
+ *
14
+ * Formula: `effectiveConfidence = confidence × 2^(-age_days / halflife_days)`.
15
+ * NOTE this is a TRUE half-life — value is exactly 50% of `confidence` at one
16
+ * half-life. gbrain documents `exp(-age / halflife)`, but that form reaches
17
+ * 1/e (≈37%) at "halflife", i.e. its constant is really a time-constant τ, not
18
+ * a half-life. We keep the name honest: `FACT_HALF_LIVES_DAYS` means literal
19
+ * 50%-life. (Equivalent up to a ln2 rescale; values are tunable and gated on
20
+ * brain-bench before going default-on — see KYB-84 for the measurement path.)
21
+ *
22
+ * Age is taken from the fact's `timestamp` (assertion time, stored ISO-UTC).
23
+ * Reinforcement-aware decay (resetting the clock on `last_reinforced_at`) is a
24
+ * future extension: it needs that column threaded through the retrieval seam
25
+ * (RetrievalFactRow + the FTS/entity/scene/bridge queries), so it is NOT
26
+ * modelled here rather than advertised on a contract no caller can honor.
27
+ *
28
+ * Expiry (expires_at / is_latest) is handled upstream by the retrieval seam
29
+ * and the expiry sweep — intentionally NOT re-implemented here, so this stays
30
+ * a single-responsibility decay function.
31
+ *
32
+ * Ref: docs/research/competitors/gbrain-CONTEXT.md (Confidence decay),
33
+ * docs/research/gap-analysis-2026-06-12.md (finding 3), KYB-80.
34
+ */
35
+ import type { FactCategory } from '@kybernesis/brain-contracts';
36
+ /** The fact attributes decay needs. A subset of the full Fact, so callers can
37
+ * pass a lightweight retrieval row. */
38
+ export interface DecayableFact {
39
+ confidence: number;
40
+ category: string;
41
+ /** ISO timestamp the fact was asserted. */
42
+ timestamp: string;
43
+ }
44
+ /**
45
+ * Per-category half-life in DAYS. Cortex's 8 fact categories mapped onto
46
+ * gbrain's per-kind half-lives (event 7d, commitment/preference 90d,
47
+ * belief/fact 365d), with two Cortex-specific calls:
48
+ * - `temporal` facts are explicitly time-bound → short (14d).
49
+ * - `opinion` sits between preference and belief (180d).
50
+ * Durable identity facts (biographical, relationship) and the catch-all
51
+ * (general) get the long 365d half-life.
52
+ *
53
+ * Keyed by `FactCategory` (the contract enum) ON PURPOSE: adding a 9th category
54
+ * to FactCategorySchema without giving it a half-life here is a COMPILE error,
55
+ * not a silent fall-through to the 365d default (which would be the least decay
56
+ * — the opposite of a safe default).
57
+ */
58
+ export declare const FACT_HALF_LIVES_DAYS: Readonly<Record<FactCategory, number>>;
59
+ /** Half-life used for any category not in the table. */
60
+ export declare const DEFAULT_HALF_LIFE_DAYS = 365;
61
+ /** Half-life (days) for a fact category, falling back to the default for any
62
+ * string outside the enum (defensive — callers pass raw DB strings). */
63
+ export declare function halfLifeForCategory(category: string): number;
64
+ /**
65
+ * Effective (decayed) confidence of a fact at `now` (epoch ms).
66
+ *
67
+ * Returns 0 for non-positive/non-finite confidence. If the fact has no usable
68
+ * timestamp, or its category resolves to a non-positive/non-finite half-life,
69
+ * the confidence is returned undecayed (clamped) rather than thrown or turned
70
+ * into NaN — decay degrades gracefully to "no decay". Future-dated facts
71
+ * (age < 0) get no boost above their stored confidence.
72
+ */
73
+ export declare function effectiveConfidence(fact: DecayableFact, now: number): number;
74
+ //# sourceMappingURL=fact-decay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fact-decay.d.ts","sourceRoot":"","sources":["../src/fact-decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;wCACwC;AACxC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CASvE,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAQ1C;yEACyE;AACzE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAY5E"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Read-time fact-confidence decay (KYB-80).
3
+ *
4
+ * A pure scoring policy — NO schema change, NO cron. Mirrors gbrain's
5
+ * "Hot Memory" model: per-category exponential confidence decay, clamped to
6
+ * [0,1]. Recall multiplies this UNIFORMLY into every scored fact (see the
7
+ * single decay pass in fact-retrieval.ts/factFirstSearch) so that, all else
8
+ * equal, a fresh fact outranks a stale one and short-lived categories (events)
9
+ * fade far faster than durable ones (biographical). Applying it uniformly over
10
+ * all sources — not at one scoring site — is deliberate: direct, entity, scene
11
+ * and bridge scores share one ranking, so decaying only one source would
12
+ * distort their relative order.
13
+ *
14
+ * Formula: `effectiveConfidence = confidence × 2^(-age_days / halflife_days)`.
15
+ * NOTE this is a TRUE half-life — value is exactly 50% of `confidence` at one
16
+ * half-life. gbrain documents `exp(-age / halflife)`, but that form reaches
17
+ * 1/e (≈37%) at "halflife", i.e. its constant is really a time-constant τ, not
18
+ * a half-life. We keep the name honest: `FACT_HALF_LIVES_DAYS` means literal
19
+ * 50%-life. (Equivalent up to a ln2 rescale; values are tunable and gated on
20
+ * brain-bench before going default-on — see KYB-84 for the measurement path.)
21
+ *
22
+ * Age is taken from the fact's `timestamp` (assertion time, stored ISO-UTC).
23
+ * Reinforcement-aware decay (resetting the clock on `last_reinforced_at`) is a
24
+ * future extension: it needs that column threaded through the retrieval seam
25
+ * (RetrievalFactRow + the FTS/entity/scene/bridge queries), so it is NOT
26
+ * modelled here rather than advertised on a contract no caller can honor.
27
+ *
28
+ * Expiry (expires_at / is_latest) is handled upstream by the retrieval seam
29
+ * and the expiry sweep — intentionally NOT re-implemented here, so this stays
30
+ * a single-responsibility decay function.
31
+ *
32
+ * Ref: docs/research/competitors/gbrain-CONTEXT.md (Confidence decay),
33
+ * docs/research/gap-analysis-2026-06-12.md (finding 3), KYB-80.
34
+ */
35
+ /**
36
+ * Per-category half-life in DAYS. Cortex's 8 fact categories mapped onto
37
+ * gbrain's per-kind half-lives (event 7d, commitment/preference 90d,
38
+ * belief/fact 365d), with two Cortex-specific calls:
39
+ * - `temporal` facts are explicitly time-bound → short (14d).
40
+ * - `opinion` sits between preference and belief (180d).
41
+ * Durable identity facts (biographical, relationship) and the catch-all
42
+ * (general) get the long 365d half-life.
43
+ *
44
+ * Keyed by `FactCategory` (the contract enum) ON PURPOSE: adding a 9th category
45
+ * to FactCategorySchema without giving it a half-life here is a COMPILE error,
46
+ * not a silent fall-through to the 365d default (which would be the least decay
47
+ * — the opposite of a safe default).
48
+ */
49
+ export const FACT_HALF_LIVES_DAYS = {
50
+ event: 7,
51
+ temporal: 14,
52
+ plan: 90,
53
+ preference: 90,
54
+ opinion: 180,
55
+ relationship: 365,
56
+ biographical: 365,
57
+ general: 365,
58
+ };
59
+ /** Half-life used for any category not in the table. */
60
+ export const DEFAULT_HALF_LIFE_DAYS = 365;
61
+ const MS_PER_DAY = 86_400_000;
62
+ function clamp01(x) {
63
+ return x < 0 ? 0 : x > 1 ? 1 : x;
64
+ }
65
+ /** Half-life (days) for a fact category, falling back to the default for any
66
+ * string outside the enum (defensive — callers pass raw DB strings). */
67
+ export function halfLifeForCategory(category) {
68
+ return FACT_HALF_LIVES_DAYS[category] ?? DEFAULT_HALF_LIFE_DAYS;
69
+ }
70
+ /**
71
+ * Effective (decayed) confidence of a fact at `now` (epoch ms).
72
+ *
73
+ * Returns 0 for non-positive/non-finite confidence. If the fact has no usable
74
+ * timestamp, or its category resolves to a non-positive/non-finite half-life,
75
+ * the confidence is returned undecayed (clamped) rather than thrown or turned
76
+ * into NaN — decay degrades gracefully to "no decay". Future-dated facts
77
+ * (age < 0) get no boost above their stored confidence.
78
+ */
79
+ export function effectiveConfidence(fact, now) {
80
+ const c = fact.confidence;
81
+ if (!Number.isFinite(c) || c <= 0)
82
+ return 0;
83
+ const t = Date.parse(fact.timestamp);
84
+ if (!Number.isFinite(t))
85
+ return clamp01(c); // unparseable → no decay
86
+ const halflife = halfLifeForCategory(fact.category);
87
+ if (!(halflife > 0))
88
+ return clamp01(c); // guards 0 / negative / NaN half-life
89
+ const ageDays = Math.max(0, (now - t) / MS_PER_DAY); // clamp future-dated to 0
90
+ return clamp01(c * Math.pow(2, -ageDays / halflife)); // true half-life: 50% at age == halflife
91
+ }
92
+ //# sourceMappingURL=fact-decay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fact-decay.js","sourceRoot":"","sources":["../src/fact-decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAaH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2C;IAC1E,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,EAAE;IACd,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IACjB,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,wDAAwD;AACxD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,oBAAoB,CAAC,QAAwB,CAAC,IAAI,sBAAsB,CAAC;AAClF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAmB,EAAE,GAAW;IAClE,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAE5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;IAErE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC;IAE9E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,0BAA0B;IAC/E,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,yCAAyC;AACjG,CAAC"}
@@ -17,6 +17,11 @@ export interface FactSearchOptions {
17
17
  tokenBudget?: number;
18
18
  includeSupporting?: boolean;
19
19
  maxSupportingPerFact?: number;
20
+ /** KYB-80: weight every fact's score by read-time decayed confidence
21
+ * (`effectiveConfidence`), applied uniformly across all sources before the
22
+ * final ranking. Default off — gated on brain-bench (KYB-84) before going
23
+ * default-on. */
24
+ useDecay?: boolean;
20
25
  }
21
26
  export interface FactSearchResult {
22
27
  facts: Array<{
@@ -28,6 +33,11 @@ export interface FactSearchResult {
28
33
  entities: string[];
29
34
  score: number;
30
35
  source: 'direct' | 'entity_expansion' | 'graph_expansion' | 'scene_expansion' | 'bridge';
36
+ /** Originating timeline event title (the relpath-bearing
37
+ * `[channel] File: <relpath>` string), when the fact's conversation
38
+ * resolves to one. Lets consumers expose the same scorable source as
39
+ * timeline retrieval. */
40
+ source_title?: string;
31
41
  }>;
32
42
  supporting_context: Array<{
33
43
  content: string;
@@ -45,6 +55,10 @@ export interface FactSearchResult {
45
55
  bridge_facts: number;
46
56
  supporting_chunks: number;
47
57
  pruned_items: number;
58
+ /** Returned facts with NO resolved source_title — i.e. unscorable by the
59
+ * source-hit bench (their title isn't a relpath). A high count flags a
60
+ * measurement blind spot, not necessarily bad retrieval. */
61
+ unscorable_facts: number;
48
62
  };
49
63
  }
50
64
  export declare function factFirstSearch(t: TenantContext, query: string, options?: FactSearchOptions): Promise<FactSearchResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"fact-retrieval.d.ts","sourceRoot":"","sources":["../src/fact-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,QAAQ,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;KAC1F,CAAC,CAAC;IACH,kBAAkB,EAAE,KAAK,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AA0QD,wBAAsB,eAAe,CACnC,CAAC,EAAE,aAAa,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA2H3B"}
1
+ {"version":3,"file":"fact-retrieval.d.ts","sourceRoot":"","sources":["../src/fact-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;sBAGkB;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,QAAQ,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;QACzF;;;kCAG0B;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,kBAAkB,EAAE,KAAK,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB;;qEAE6D;QAC7D,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AA8QD,wBAAsB,eAAe,CACnC,CAAC,EAAE,aAAa,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAuK3B"}
@@ -15,6 +15,7 @@ import { getStorage } from './storage.js';
15
15
  import { ensureFactsTable, getFactsForEntity } from './fact-store.js';
16
16
  import { semanticSearch } from './vectors.js';
17
17
  import { sanitizeFtsQuery } from './fts-sanitizer.js';
18
+ import { effectiveConfidence } from './fact-decay.js';
18
19
  // P4 tie-break: when two facts have the same score, prefer the more
19
20
  // reliable source. Bridge (cross-cluster connector) > direct (exact-fact
20
21
  // hit) > entity_expansion (1-hop expansion) > graph_expansion (multi-hop)
@@ -61,11 +62,14 @@ async function searchFactsDirect(t, query, limit) {
61
62
  const matchedCount = ftsTokens.filter(w => contentLower.includes(w)).length;
62
63
  const wordMatchRatio = ftsTokens.length > 0 ? matchedCount / ftsTokens.length : 0;
63
64
  const score = 0.5 + wordMatchRatio * 0.5;
65
+ // `?? 0.7` (not `|| 0.7`): a fact legitimately stored at confidence 0
66
+ // must stay 0, not be resurrected to the default.
67
+ const confidence = row.confidence ?? 0.7;
64
68
  results.push({
65
69
  id: row.id,
66
70
  content: row.content,
67
71
  category: row.category || 'general',
68
- confidence: row.confidence || 0.7,
72
+ confidence,
69
73
  timestamp: row.timestamp,
70
74
  entities: JSON.parse(row.entities_json || '[]'),
71
75
  score,
@@ -235,7 +239,8 @@ function assembleContext(facts, supporting, tokenBudget) {
235
239
  }
236
240
  // ─── Main entry point ─────────────────────────────────────────────────────────
237
241
  export async function factFirstSearch(t, query, options = {}) {
238
- const { limit = 15, tokenBudget = 4000, includeSupporting = true, maxSupportingPerFact = 2, } = options;
242
+ const { limit = 15, tokenBudget = 4000, includeSupporting = true, maxSupportingPerFact = 2, useDecay = false, } = options;
243
+ const now = Date.now();
239
244
  // Layer 1
240
245
  const directFacts = await searchFactsDirect(t, query, limit * 2);
241
246
  // Layer 2
@@ -266,7 +271,7 @@ export async function factFirstSearch(t, query, options = {}) {
266
271
  sceneExpandedCount++;
267
272
  allFacts.push({
268
273
  id: n.id, content: n.content, category: n.category || 'general',
269
- confidence: n.confidence || 0.7, timestamp: n.timestamp,
274
+ confidence: n.confidence ?? 0.7, timestamp: n.timestamp,
270
275
  entities: JSON.parse(n.entities_json || '[]'),
271
276
  score: topFact.score * 0.6, source: 'scene_expansion',
272
277
  source_conversation_id: n.source_conversation_id ?? undefined,
@@ -302,9 +307,11 @@ export async function factFirstSearch(t, query, options = {}) {
302
307
  allFacts.push({
303
308
  id: candidate.id, content: candidate.content,
304
309
  category: candidate.category || 'general',
305
- confidence: candidate.confidence || 0.7, timestamp: candidate.timestamp,
310
+ confidence: candidate.confidence ?? 0.7, timestamp: candidate.timestamp,
306
311
  entities: JSON.parse(candidate.entities_json || '[]'),
307
312
  score: bridgeScore, source: 'bridge',
313
+ // carry provenance so bridge facts are scorable (source_title resolves)
314
+ source_conversation_id: candidate.source_conversation_id ?? undefined,
308
315
  });
309
316
  }
310
317
  }
@@ -315,12 +322,48 @@ export async function factFirstSearch(t, query, options = {}) {
315
322
  catch (err) {
316
323
  console.warn('[brain-core/fact-retrieval] scene/bridge expansion failed', { err: String(err) });
317
324
  }
325
+ // KYB-80: read-time confidence decay, applied UNIFORMLY over every scored
326
+ // source (direct / entity / graph / scene / bridge) on its own age before the
327
+ // final ranking. Doing it here — not at one scoring site — keeps the score
328
+ // formulas on a single comparable scale; decaying only the direct score would
329
+ // silently demote direct facts beneath undecayed expansion/bridge hits.
330
+ // NOTE this also scales the bridge's structural P6 boost (≥1.05) by the bridge
331
+ // fact's own confidence/age, so under decay a stale bridge can fall below a
332
+ // fresh entity hit. That's an intentional freshness re-rank, but exactly the
333
+ // kind of cross-source tradeoff KYB-84's brain-bench A/B must validate before
334
+ // this flag goes default-on. Default off until then.
335
+ if (useDecay) {
336
+ for (const f of allFacts) {
337
+ f.score *= effectiveConfidence({ confidence: f.confidence, category: f.category, timestamp: f.timestamp }, now);
338
+ }
339
+ // Re-rank after mutating scores so BOTH consumers below — supporting-context
340
+ // selection and the final topFacts slice — see the decayed order. Without
341
+ // this, supporting context is gathered for the pre-decay leaders.
342
+ allFacts.sort((a, b) => b.score - a.score);
343
+ }
318
344
  // Layer 3: supporting context
319
345
  const supporting = includeSupporting
320
346
  ? await findSupportingContext(t, allFacts.slice(0, limit), Math.min(limit, 10), maxSupportingPerFact)
321
347
  : [];
322
348
  // Layer 4: assemble context
323
349
  const topFacts = allFacts.sort((a, b) => b.score - a.score).slice(0, limit);
350
+ // Provenance: resolve each top fact's conversation back to its originating
351
+ // timeline title (relpath-bearing) so callers can surface the same scorable
352
+ // source as timeline retrieval. Best-effort, batched over the returned set.
353
+ const convIds = [...new Set(topFacts.map(f => f.source_conversation_id).filter((c) => !!c))];
354
+ if (convIds.length > 0) {
355
+ try {
356
+ const titles = await getStorage().domain.factRetrieval.resolveSourceTitles(t, convIds);
357
+ for (const f of topFacts) {
358
+ const title = f.source_conversation_id ? titles[f.source_conversation_id] : undefined;
359
+ if (title)
360
+ f.source_title = title;
361
+ }
362
+ }
363
+ catch (err) {
364
+ console.warn('[brain-core/fact-retrieval] source-title resolution failed', { err: String(err) });
365
+ }
366
+ }
324
367
  const { assembled, tokenEstimate, pruned } = assembleContext(topFacts, supporting, tokenBudget);
325
368
  const directCount = topFacts.filter(f => f.source === 'direct').length;
326
369
  const expandedCount = topFacts.filter(f => f.source === 'entity_expansion').length;
@@ -343,6 +386,7 @@ export async function factFirstSearch(t, query, options = {}) {
343
386
  bridge_facts: bridgeCount,
344
387
  supporting_chunks: supporting.length,
345
388
  pruned_items: pruned,
389
+ unscorable_facts: topFacts.filter(f => !f.source_title).length,
346
390
  },
347
391
  };
348
392
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fact-retrieval.js","sourceRoot":"","sources":["../src/fact-retrieval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fact-retrieval.js","sourceRoot":"","sources":["../src/fact-retrieval.ts"],"names":[],"mappings":"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"}
@@ -13,37 +13,7 @@
13
13
  * segment dedup — over rows the seam returns. No raw database handles here.
14
14
  */
15
15
  import type { TenantContext } from '@kybernesis/brain-contracts';
16
- export interface HybridSearchResult {
17
- id: string;
18
- title: string;
19
- content: string;
20
- source_path: string;
21
- timestamp: string;
22
- type: string;
23
- tier?: string;
24
- priority?: number;
25
- tags?: string[];
26
- semanticScore: number;
27
- metadataScore: number;
28
- hybridScore: number;
29
- matchType: 'semantic' | 'keyword' | 'both';
30
- relatedMemories?: string[];
31
- }
32
- export interface HybridSearchOptions {
33
- limit?: number;
34
- tier?: 'hot' | 'warm' | 'archive' | 'all';
35
- minPriority?: number;
36
- includeRelated?: boolean;
37
- semanticWeight?: number;
38
- metadataWeight?: number;
39
- type?: 'conversation' | 'idea' | 'file' | 'transcript' | 'note';
40
- entity?: string;
41
- entityMatch?: 'all' | 'any';
42
- after?: Date;
43
- before?: Date;
44
- expandQuery?: boolean;
45
- factFirst?: boolean;
46
- rerank?: boolean;
47
- }
16
+ import type { HybridSearchResult, HybridSearchOptions } from '@kybernesis/brain-contracts';
17
+ export type { HybridSearchResult, HybridSearchOptions };
48
18
  export declare function hybridSearch(t: TenantContext, query: string, options?: HybridSearchOptions): Promise<HybridSearchResult[]>;
49
19
  //# sourceMappingURL=hybrid-search.d.ts.map