nlm-memory 0.12.0 → 0.13.1
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/README.md +1 -1
- package/dist/cli/classify-parity.js +1 -1
- package/dist/cli/classify-parity.js.map +1 -1
- package/dist/cli/nlm.js +327 -56
- package/dist/cli/nlm.js.map +1 -1
- package/dist/core/classifier/prompt.d.ts +70 -0
- package/dist/core/classifier/prompt.js +71 -2
- package/dist/core/classifier/prompt.js.map +1 -1
- package/dist/core/exemplars/extract-exemplar.d.ts +36 -0
- package/dist/core/exemplars/extract-exemplar.js +177 -0
- package/dist/core/exemplars/extract-exemplar.js.map +1 -0
- package/dist/core/exemplars/ingest-exemplar.d.ts +30 -0
- package/dist/core/exemplars/ingest-exemplar.js +71 -0
- package/dist/core/exemplars/ingest-exemplar.js.map +1 -0
- package/dist/core/exemplars/recall-code.d.ts +25 -0
- package/dist/core/exemplars/recall-code.js +49 -0
- package/dist/core/exemplars/recall-code.js.map +1 -0
- package/dist/core/facts/backfill-facts.d.ts +4 -2
- package/dist/core/facts/backfill-facts.js +18 -27
- package/dist/core/facts/backfill-facts.js.map +1 -1
- package/dist/core/hook/strip-injected-context.d.ts +24 -0
- package/dist/core/hook/strip-injected-context.js +73 -0
- package/dist/core/hook/strip-injected-context.js.map +1 -0
- package/dist/core/ingest/ingest-session.d.ts +4 -2
- package/dist/core/ingest/ingest-session.js +12 -4
- package/dist/core/ingest/ingest-session.js.map +1 -1
- package/dist/core/providers/provider-registry.d.ts +31 -11
- package/dist/core/providers/provider-registry.js +27 -13
- package/dist/core/providers/provider-registry.js.map +1 -1
- package/dist/core/recall-facts/fact-recall-service.js +75 -28
- package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
- package/dist/core/scheduler/scheduler.d.ts +4 -2
- package/dist/core/scheduler/scheduler.js +26 -15
- package/dist/core/scheduler/scheduler.js.map +1 -1
- package/dist/core/sources/source-registry.d.ts +36 -12
- package/dist/core/sources/source-registry.js +59 -44
- package/dist/core/sources/source-registry.js.map +1 -1
- package/dist/core/storage/backup-rotation.d.ts +38 -0
- package/dist/core/storage/backup-rotation.js +82 -0
- package/dist/core/storage/backup-rotation.js.map +1 -0
- package/dist/core/storage/null-code-exemplar-store.d.ts +21 -0
- package/dist/core/storage/null-code-exemplar-store.js +19 -0
- package/dist/core/storage/null-code-exemplar-store.js.map +1 -0
- package/dist/core/storage/pg-fact-store.d.ts +2 -0
- package/dist/core/storage/pg-fact-store.js +34 -3
- package/dist/core/storage/pg-fact-store.js.map +1 -1
- package/dist/core/storage/pg-session-store.d.ts +14 -4
- package/dist/core/storage/pg-session-store.js +123 -2
- package/dist/core/storage/pg-session-store.js.map +1 -1
- package/dist/core/storage/pg-storage.d.ts +11 -2
- package/dist/core/storage/pg-storage.js +14 -2
- package/dist/core/storage/pg-storage.js.map +1 -1
- package/dist/core/storage/pg-tx-context.d.ts +2 -0
- package/dist/core/storage/pg-tx-context.js +12 -0
- package/dist/core/storage/pg-tx-context.js.map +1 -1
- package/dist/core/storage/sqlite-code-exemplar-store.d.ts +40 -0
- package/dist/core/storage/sqlite-code-exemplar-store.js +247 -0
- package/dist/core/storage/sqlite-code-exemplar-store.js.map +1 -0
- package/dist/core/storage/sqlite-fact-store.d.ts +2 -0
- package/dist/core/storage/sqlite-fact-store.js +30 -2
- package/dist/core/storage/sqlite-fact-store.js.map +1 -1
- package/dist/core/storage/sqlite-session-store.d.ts +21 -0
- package/dist/core/storage/sqlite-session-store.js +23 -0
- package/dist/core/storage/sqlite-session-store.js.map +1 -1
- package/dist/core/storage/sqlite-storage.d.ts +6 -0
- package/dist/core/storage/sqlite-storage.js +14 -2
- package/dist/core/storage/sqlite-storage.js.map +1 -1
- package/dist/core/storage/supersedence-log.d.ts +8 -0
- package/dist/core/storage/supersedence-log.js +19 -0
- package/dist/core/storage/supersedence-log.js.map +1 -1
- package/dist/hook/prompt-recall-hook.d.ts +5 -4
- package/dist/hook/prompt-recall-hook.js +12 -7
- package/dist/hook/prompt-recall-hook.js.map +1 -1
- package/dist/http/app.d.ts +7 -1
- package/dist/http/app.js +226 -83
- package/dist/http/app.js.map +1 -1
- package/dist/install/codex.d.ts +29 -1
- package/dist/install/codex.js +117 -15
- package/dist/install/codex.js.map +1 -1
- package/dist/install/cursor.d.ts +4 -4
- package/dist/install/cursor.js +7 -7
- package/dist/install/cursor.js.map +1 -1
- package/dist/install/health.d.ts +56 -0
- package/dist/install/health.js +133 -0
- package/dist/install/health.js.map +1 -0
- package/dist/install/setup.js +1 -1
- package/dist/install/setup.js.map +1 -1
- package/dist/install/windsurf.d.ts +4 -4
- package/dist/install/windsurf.js +7 -7
- package/dist/install/windsurf.js.map +1 -1
- package/dist/llm/classifier-box.d.ts +4 -0
- package/dist/llm/classifier-box.js +9 -2
- package/dist/llm/classifier-box.js.map +1 -1
- package/dist/llm/ollama-client.d.ts +19 -1
- package/dist/llm/ollama-client.js +14 -6
- package/dist/llm/ollama-client.js.map +1 -1
- package/dist/llm/ollama-code-embedder.d.ts +28 -0
- package/dist/llm/ollama-code-embedder.js +73 -0
- package/dist/llm/ollama-code-embedder.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.js +132 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/ports/code-embedder.d.ts +27 -0
- package/dist/ports/code-embedder.js +15 -0
- package/dist/ports/code-embedder.js.map +1 -0
- package/dist/ports/code-exemplar-store.d.ts +45 -0
- package/dist/ports/code-exemplar-store.js +11 -0
- package/dist/ports/code-exemplar-store.js.map +1 -0
- package/dist/ports/fact-store.d.ts +0 -0
- package/dist/ports/fact-store.js.map +1 -1
- package/dist/ports/storage.d.ts +8 -0
- package/dist/shared/types.d.ts +35 -0
- package/dist/ui/assets/{index-Fr5AMEPj.js → index-CVo7KKw2.js} +1 -1
- package/dist/ui/assets/{index-C74N8APQ.css → index-DCuQrzJH.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/migrations/021_code_exemplars.sql +51 -0
- package/migrations/022_facts_retired_at.sql +17 -0
- package/migrations/pg/021_code_exemplars.sql +45 -0
- package/migrations/pg/022_facts_retired_at.sql +12 -0
- package/nlm/index.js +6 -1
- package/package.json +3 -2
- package/plugin/.codex-plugin/plugin.json +2 -2
- package/plugin/hooks/hooks.json +13 -2
- package/plugin/scripts/prompt-recall-hook.mjs +7 -1
- package/plugin/scripts/session-start-hook.mjs +275 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { createHash } from "node:crypto";
|
|
10
10
|
import { extractFacts } from "../facts/extract-facts.js";
|
|
11
|
+
import { PgSessionStore } from "../storage/pg-session-store.js";
|
|
11
12
|
const BODY_CAP = 200_000;
|
|
12
13
|
const CONFIDENCE_FLOOR = 0.3;
|
|
13
14
|
export function deriveSessionId(runtime, startedAt, text) {
|
|
@@ -62,10 +63,17 @@ export async function ingestSession(input, deps) {
|
|
|
62
63
|
decisions: classification.decisions,
|
|
63
64
|
openQuestions: classification.open,
|
|
64
65
|
};
|
|
65
|
-
const
|
|
66
|
-
?
|
|
67
|
-
:
|
|
68
|
-
|
|
66
|
+
const facts = deps.factStore
|
|
67
|
+
? extractFacts(classification, id, startedAt)
|
|
68
|
+
: [];
|
|
69
|
+
// Store + factStore come from the same backend (see buildStack); the cast
|
|
70
|
+
// is sound — TS can't correlate the two union members at one call site.
|
|
71
|
+
if (deps.store instanceof PgSessionStore) {
|
|
72
|
+
await deps.store.insertSession(record, deps.embedder, null, deps.factStore ? { factStore: deps.factStore, facts } : null);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
await deps.store.insertSession(record, deps.embedder, null, deps.factStore ? { factStore: deps.factStore, facts } : null);
|
|
76
|
+
}
|
|
69
77
|
return { id, status: "ingested", latencyMs: Date.now() - t0, confidence: classification.confidence };
|
|
70
78
|
}
|
|
71
79
|
//# sourceMappingURL=ingest-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-session.js","sourceRoot":"","sources":["../../../src/core/ingest/ingest-session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"ingest-session.js","sourceRoot":"","sources":["../../../src/core/ingest/ingest-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,34 +42,54 @@ export interface ProviderUpdate {
|
|
|
42
42
|
readonly defaultModel?: string | null;
|
|
43
43
|
readonly enabled?: boolean;
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* ProviderRegistryPort — the backend-agnostic provider-registry contract that
|
|
47
|
+
* SqliteStorage and PgStorage expose as `storage.providers`. Async across both
|
|
48
|
+
* backends (the SQLite impl declares async methods with sync bodies, matching
|
|
49
|
+
* the SignalStore/FactStore convention). `seedDefaults` is intentionally NOT on
|
|
50
|
+
* the port: it bridges from the local `DEEPSEEK_API_KEY` env, which is a
|
|
51
|
+
* single-user SQLite concern — seeding a hosted multi-tenant PG from one
|
|
52
|
+
* operator's env would be wrong, so the PG adapter never seeds providers.
|
|
53
|
+
*/
|
|
54
|
+
export interface ProviderRegistryPort {
|
|
55
|
+
list(): Promise<ProviderRow[]>;
|
|
56
|
+
get(id: number): Promise<ProviderRow | null>;
|
|
57
|
+
getByName(name: string): Promise<ProviderRow | null>;
|
|
58
|
+
getSecret(id: number): Promise<string | null>;
|
|
59
|
+
insert(input: ProviderInsert): Promise<ProviderRow>;
|
|
60
|
+
update(id: number, patch: ProviderUpdate): Promise<ProviderRow | null>;
|
|
61
|
+
delete(id: number): Promise<boolean>;
|
|
62
|
+
}
|
|
63
|
+
export declare class ProviderRegistry implements ProviderRegistryPort {
|
|
46
64
|
private readonly db;
|
|
47
65
|
constructor(db: Database.Database);
|
|
48
|
-
list(): ProviderRow[]
|
|
49
|
-
get(id: number): ProviderRow | null
|
|
50
|
-
getByName(name: string): ProviderRow | null
|
|
66
|
+
list(): Promise<ProviderRow[]>;
|
|
67
|
+
get(id: number): Promise<ProviderRow | null>;
|
|
68
|
+
getByName(name: string): Promise<ProviderRow | null>;
|
|
51
69
|
/** Returns the secret. Use only inside the daemon — never echo to HTTP. */
|
|
52
|
-
getSecret(id: number): string | null
|
|
53
|
-
insert(input: ProviderInsert): ProviderRow
|
|
54
|
-
update(id: number, patch: ProviderUpdate): ProviderRow | null
|
|
55
|
-
delete(id: number): boolean
|
|
70
|
+
getSecret(id: number): Promise<string | null>;
|
|
71
|
+
insert(input: ProviderInsert): Promise<ProviderRow>;
|
|
72
|
+
update(id: number, patch: ProviderUpdate): Promise<ProviderRow | null>;
|
|
73
|
+
delete(id: number): Promise<boolean>;
|
|
56
74
|
/**
|
|
57
75
|
* Seed defaults on an empty registry. Bridges from the legacy env-var
|
|
58
76
|
* setup: if DEEPSEEK_API_KEY is present, the DeepSeek row carries it
|
|
59
|
-
* forward; Ollama is always seeded since it needs no key.
|
|
77
|
+
* forward; Ollama is always seeded since it needs no key. SQLite-only —
|
|
78
|
+
* not on ProviderRegistryPort (see the port's doc comment).
|
|
60
79
|
*/
|
|
61
|
-
seedDefaults(): void
|
|
80
|
+
seedDefaults(): Promise<void>;
|
|
62
81
|
}
|
|
63
82
|
import type { Pool } from "pg";
|
|
64
83
|
/**
|
|
65
84
|
* PgProviderRegistry — CRUD over `providers` for the PG storage path.
|
|
66
85
|
* API mirrors ProviderRegistry exactly.
|
|
67
86
|
*/
|
|
68
|
-
export declare class PgProviderRegistry {
|
|
87
|
+
export declare class PgProviderRegistry implements ProviderRegistryPort {
|
|
69
88
|
private readonly pool;
|
|
70
89
|
constructor(pool: Pool);
|
|
71
90
|
list(): Promise<ProviderRow[]>;
|
|
72
91
|
get(id: number): Promise<ProviderRow | null>;
|
|
92
|
+
getByName(name: string): Promise<ProviderRow | null>;
|
|
73
93
|
getSecret(id: number): Promise<string | null>;
|
|
74
94
|
insert(input: ProviderInsert): Promise<ProviderRow>;
|
|
75
95
|
update(id: number, patch: ProviderUpdate): Promise<ProviderRow | null>;
|
|
@@ -36,7 +36,7 @@ const DEFAULT_BASE_URLS = {
|
|
|
36
36
|
};
|
|
37
37
|
const DEFAULT_MODELS = {
|
|
38
38
|
deepseek: "deepseek-v4-flash",
|
|
39
|
-
ollama: "qwen3:4b
|
|
39
|
+
ollama: "qwen3.5:4b",
|
|
40
40
|
openai: "gpt-4o-mini",
|
|
41
41
|
anthropic: "claude-haiku-4-5-20251001",
|
|
42
42
|
openrouter: "anthropic/claude-haiku-4-5",
|
|
@@ -47,24 +47,24 @@ export class ProviderRegistry {
|
|
|
47
47
|
constructor(db) {
|
|
48
48
|
this.db = db;
|
|
49
49
|
}
|
|
50
|
-
list() {
|
|
50
|
+
async list() {
|
|
51
51
|
const rows = this.db.prepare(`SELECT * FROM providers ORDER BY id ASC`).all();
|
|
52
52
|
return rows.map((r) => rowFromDb(r, false));
|
|
53
53
|
}
|
|
54
|
-
get(id) {
|
|
54
|
+
async get(id) {
|
|
55
55
|
const row = this.db.prepare(`SELECT * FROM providers WHERE id = ?`).get(id);
|
|
56
56
|
return row ? rowFromDb(row, false) : null;
|
|
57
57
|
}
|
|
58
|
-
getByName(name) {
|
|
58
|
+
async getByName(name) {
|
|
59
59
|
const row = this.db.prepare(`SELECT * FROM providers WHERE name = ?`).get(name);
|
|
60
60
|
return row ? rowFromDb(row, false) : null;
|
|
61
61
|
}
|
|
62
62
|
/** Returns the secret. Use only inside the daemon — never echo to HTTP. */
|
|
63
|
-
getSecret(id) {
|
|
63
|
+
async getSecret(id) {
|
|
64
64
|
const row = this.db.prepare(`SELECT * FROM providers WHERE id = ?`).get(id);
|
|
65
65
|
return row?.api_key ?? null;
|
|
66
66
|
}
|
|
67
|
-
insert(input) {
|
|
67
|
+
async insert(input) {
|
|
68
68
|
const baseUrl = input.baseUrl ?? DEFAULT_BASE_URLS[input.kind];
|
|
69
69
|
const defaultModel = input.defaultModel ?? DEFAULT_MODELS[input.kind];
|
|
70
70
|
const result = this.db.prepare(`
|
|
@@ -79,12 +79,12 @@ export class ProviderRegistry {
|
|
|
79
79
|
enabled: input.enabled === false ? 0 : 1,
|
|
80
80
|
});
|
|
81
81
|
const id = Number(result.lastInsertRowid);
|
|
82
|
-
const row = this.get(id);
|
|
82
|
+
const row = await this.get(id);
|
|
83
83
|
if (!row)
|
|
84
84
|
throw new Error(`ProviderRegistry.insert: row ${id} not found after insert`);
|
|
85
85
|
return row;
|
|
86
86
|
}
|
|
87
|
-
update(id, patch) {
|
|
87
|
+
async update(id, patch) {
|
|
88
88
|
const fields = [];
|
|
89
89
|
const params = { id };
|
|
90
90
|
if (patch.name !== undefined) {
|
|
@@ -113,26 +113,27 @@ export class ProviderRegistry {
|
|
|
113
113
|
this.db.prepare(`UPDATE providers SET ${fields.join(", ")} WHERE id = @id`).run(params);
|
|
114
114
|
return this.get(id);
|
|
115
115
|
}
|
|
116
|
-
delete(id) {
|
|
116
|
+
async delete(id) {
|
|
117
117
|
const result = this.db.prepare(`DELETE FROM providers WHERE id = ?`).run(id);
|
|
118
118
|
return result.changes > 0;
|
|
119
119
|
}
|
|
120
120
|
/**
|
|
121
121
|
* Seed defaults on an empty registry. Bridges from the legacy env-var
|
|
122
122
|
* setup: if DEEPSEEK_API_KEY is present, the DeepSeek row carries it
|
|
123
|
-
* forward; Ollama is always seeded since it needs no key.
|
|
123
|
+
* forward; Ollama is always seeded since it needs no key. SQLite-only —
|
|
124
|
+
* not on ProviderRegistryPort (see the port's doc comment).
|
|
124
125
|
*/
|
|
125
|
-
seedDefaults() {
|
|
126
|
+
async seedDefaults() {
|
|
126
127
|
const count = this.db.prepare(`SELECT COUNT(*) AS c FROM providers`).get();
|
|
127
128
|
if ((count?.c ?? 0) > 0)
|
|
128
129
|
return;
|
|
129
|
-
this.insert({
|
|
130
|
+
await this.insert({
|
|
130
131
|
kind: "ollama",
|
|
131
132
|
name: "Ollama (local)",
|
|
132
133
|
baseUrl: process.env["NLM_OLLAMA_URL"] ?? "http://localhost:11434",
|
|
133
134
|
});
|
|
134
135
|
const deepseekKey = process.env["DEEPSEEK_API_KEY"];
|
|
135
|
-
this.insert({
|
|
136
|
+
await this.insert({
|
|
136
137
|
kind: "deepseek",
|
|
137
138
|
name: "DeepSeek",
|
|
138
139
|
apiKey: deepseekKey ?? null,
|
|
@@ -172,6 +173,19 @@ export class PgProviderRegistry {
|
|
|
172
173
|
createdAt: r.created_at, updatedAt: r.updated_at,
|
|
173
174
|
};
|
|
174
175
|
}
|
|
176
|
+
async getByName(name) {
|
|
177
|
+
const result = await this.pool.query(`SELECT id, kind, name, base_url, api_key, default_model, enabled, created_at, updated_at
|
|
178
|
+
FROM providers WHERE name = $1`, [name]);
|
|
179
|
+
if (!result.rows[0])
|
|
180
|
+
return null;
|
|
181
|
+
const r = result.rows[0];
|
|
182
|
+
return {
|
|
183
|
+
id: r.id, kind: r.kind, name: r.name, baseUrl: r.base_url,
|
|
184
|
+
apiKey: null, hasApiKey: r.api_key !== null && r.api_key.length > 0,
|
|
185
|
+
defaultModel: r.default_model, enabled: r.enabled,
|
|
186
|
+
createdAt: r.created_at, updatedAt: r.updated_at,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
175
189
|
async getSecret(id) {
|
|
176
190
|
const result = await this.pool.query("SELECT api_key FROM providers WHERE id = $1", [id]);
|
|
177
191
|
return result.rows[0]?.api_key ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../../src/core/providers/provider-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAuDH,SAAS,SAAS,CAAC,CAAgB,EAAE,aAAsB;IACzD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAoB;QAC5B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACxC,SAAS,EAAE,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACrD,YAAY,EAAE,CAAC,CAAC,aAAa;QAC7B,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC;QACxB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,SAAS,EAAE,CAAC,CAAC,UAAU;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAwC;IAC7D,QAAQ,EAAE,0BAA0B;IACpC,MAAM,EAAE,wBAAwB;IAChC,MAAM,EAAE,2BAA2B;IACnC,SAAS,EAAE,2BAA2B;IACtC,UAAU,EAAE,8BAA8B;IAC1C,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAEF,MAAM,cAAc,GAAwC;IAC1D,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../../src/core/providers/provider-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,6 @@ const DEFAULT_LIMIT = 10;
|
|
|
25
25
|
const MAX_LIMIT = 100;
|
|
26
26
|
const DEFAULT_MIN_CONFIDENCE = 0.6;
|
|
27
27
|
const STORAGE_FETCH_CAP = 500;
|
|
28
|
-
const HYBRID_KW_WEIGHT = 0.4;
|
|
29
|
-
const HYBRID_SEM_WEIGHT = 0.6;
|
|
30
28
|
const SEMANTIC_OVERFETCH = 3;
|
|
31
29
|
const DEFAULT_BOOST_CAP = 2.0;
|
|
32
30
|
function readBoostCap() {
|
|
@@ -79,10 +77,14 @@ export class FactRecallService {
|
|
|
79
77
|
...(input.kind !== undefined ? { kind: input.kind } : {}),
|
|
80
78
|
};
|
|
81
79
|
const candidates = await this.deps.factStore.listForRecall(filter);
|
|
82
|
-
if (candidates.length === 0)
|
|
83
|
-
return empty;
|
|
84
80
|
const byId = new Map(candidates.map((f) => [f.id, f]));
|
|
85
81
|
const queryTokens = queryText ? new Set(tokenSet(queryText)) : new Set();
|
|
82
|
+
// The keyword candidate set is recency-capped (listForRecall ORDER BY
|
|
83
|
+
// created_at DESC LIMIT STORAGE_FETCH_CAP). Semantic recall must reach the
|
|
84
|
+
// whole corpus, so it resolves vector neighbours independently of this
|
|
85
|
+
// window and re-applies the same filters via `accept`. Without this, ~93%
|
|
86
|
+
// of facts (everything older than the recent cap) were silently unreachable.
|
|
87
|
+
const accept = makeFilterPredicate(filter);
|
|
86
88
|
const kwHits = mode === "keyword" || mode === "hybrid"
|
|
87
89
|
? scoreAll(candidates, queryTokens)
|
|
88
90
|
: [];
|
|
@@ -90,7 +92,7 @@ export class FactRecallService {
|
|
|
90
92
|
let semError = null;
|
|
91
93
|
if ((mode === "semantic" || mode === "hybrid") && queryText) {
|
|
92
94
|
try {
|
|
93
|
-
semHits = await this.runSemantic(queryText, byId, limit * SEMANTIC_OVERFETCH);
|
|
95
|
+
semHits = await this.runSemantic(queryText, byId, accept, limit * SEMANTIC_OVERFETCH);
|
|
94
96
|
}
|
|
95
97
|
catch (err) {
|
|
96
98
|
if (err instanceof LLMUnreachableError) {
|
|
@@ -126,7 +128,7 @@ export class FactRecallService {
|
|
|
126
128
|
return finalize(queryText, subject, predicate, kind, mode, limit, boosted);
|
|
127
129
|
}
|
|
128
130
|
// hybrid
|
|
129
|
-
const merged = mergeHybrid(kwHits, semHits
|
|
131
|
+
const merged = mergeHybrid(kwHits, semHits);
|
|
130
132
|
const boosted = await this.applyCorroboration(merged);
|
|
131
133
|
const result = finalize(queryText, subject, predicate, kind, mode, limit, boosted);
|
|
132
134
|
return semError ? { ...result, modeUnavailable: semError } : result;
|
|
@@ -182,19 +184,45 @@ export class FactRecallService {
|
|
|
182
184
|
return hits;
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
|
-
async runSemantic(query, byId, fetchLimit) {
|
|
187
|
+
async runSemantic(query, byId, accept, fetchLimit) {
|
|
186
188
|
const embedding = await this.deps.llm.embed(query, "query");
|
|
187
189
|
const neighbors = await this.deps.factStore.semanticSearch(embedding.vector, fetchLimit);
|
|
190
|
+
// Resolve neighbours that fall outside the recency-capped keyword window
|
|
191
|
+
// in one batch, then apply the same filters the SQL pre-filter would have.
|
|
192
|
+
const missingIds = neighbors.filter((n) => !byId.has(n.factId)).map((n) => n.factId);
|
|
193
|
+
const fetched = missingIds.length > 0 ? await this.deps.factStore.getByIds(missingIds) : [];
|
|
194
|
+
const fetchedById = new Map(fetched.map((f) => [f.id, f]));
|
|
188
195
|
const hits = [];
|
|
189
196
|
for (const n of neighbors) {
|
|
190
|
-
const fact = byId.get(n.factId);
|
|
191
|
-
if (!fact)
|
|
192
|
-
continue;
|
|
197
|
+
const fact = byId.get(n.factId) ?? fetchedById.get(n.factId);
|
|
198
|
+
if (!fact || !accept(fact))
|
|
199
|
+
continue;
|
|
193
200
|
hits.push({ fact, similarity: cosineFromL2(n.distance) });
|
|
194
201
|
}
|
|
195
202
|
return hits;
|
|
196
203
|
}
|
|
197
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Replicates the SQL pre-filter (listForRecall) so semantic neighbours fetched
|
|
207
|
+
* outside the keyword candidate window are held to the same standard:
|
|
208
|
+
* non-superseded (unless requested), at/above the confidence floor, and
|
|
209
|
+
* matching any structured subject/predicate/kind constraint.
|
|
210
|
+
*/
|
|
211
|
+
function makeFilterPredicate(filter) {
|
|
212
|
+
return (f) => {
|
|
213
|
+
if (filter.includeSuperseded !== true && f.supersededBy !== null)
|
|
214
|
+
return false;
|
|
215
|
+
if (filter.minConfidence !== undefined && f.confidence < filter.minConfidence)
|
|
216
|
+
return false;
|
|
217
|
+
if (filter.kind !== undefined && f.kind !== filter.kind)
|
|
218
|
+
return false;
|
|
219
|
+
if (filter.subject !== undefined && f.subject !== filter.subject)
|
|
220
|
+
return false;
|
|
221
|
+
if (filter.predicate !== undefined && f.predicate !== filter.predicate)
|
|
222
|
+
return false;
|
|
223
|
+
return true;
|
|
224
|
+
};
|
|
225
|
+
}
|
|
198
226
|
function scoreAll(facts, queryTokens) {
|
|
199
227
|
if (queryTokens.size === 0)
|
|
200
228
|
return [];
|
|
@@ -227,30 +255,49 @@ function scoreFact(fact, queryTokens) {
|
|
|
227
255
|
}
|
|
228
256
|
return { score, matchedIn };
|
|
229
257
|
}
|
|
230
|
-
|
|
231
|
-
|
|
258
|
+
/**
|
|
259
|
+
* Semantic-primary hybrid merge.
|
|
260
|
+
*
|
|
261
|
+
* For short fact triples, semantic similarity is the dominant quality signal
|
|
262
|
+
* and the keyword leg is both recency-windowed (see listForRecall) and noisy
|
|
263
|
+
* (few tokens to match on). An equal-weight blend let high keyword scores on
|
|
264
|
+
* recent-but-wrong facts dilute strong semantic hits — measured ~14pts of R@5
|
|
265
|
+
* lost vs pure semantic on the paraphrase gold set (2026-06-16 report).
|
|
266
|
+
*
|
|
267
|
+
* So semantic hits occupy the upper score band [0.5, 1.0] (ranked by
|
|
268
|
+
* similarity); keyword-only hits — facts semantic never surfaced — backfill the
|
|
269
|
+
* lower band [0, 0.5). Co-occurrence isn't rewarded (that was the dilution
|
|
270
|
+
* source). When semantic is unavailable (Ollama down) semHits is empty and this
|
|
271
|
+
* degrades to pure keyword, preserving the graceful-degradation contract.
|
|
272
|
+
*/
|
|
273
|
+
function mergeHybrid(kwHits, semHits) {
|
|
232
274
|
const maxSem = Math.max(1, ...semHits.map((h) => h.similarity));
|
|
275
|
+
const maxKw = Math.max(1, ...kwHits.map((h) => h.score));
|
|
233
276
|
const kwMap = new Map(kwHits.map((h) => [h.fact.id, h]));
|
|
234
|
-
const semMap = new Map(semHits.map((h) => [h.fact.id, h]));
|
|
235
|
-
const allIds = new Set([...kwMap.keys(), ...semMap.keys()]);
|
|
236
277
|
const rows = [];
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
const kw = kwMap.get(id);
|
|
242
|
-
const sem = semMap.get(id);
|
|
243
|
-
const kwNorm = kw ? kw.score / maxKw : 0;
|
|
244
|
-
const semNorm = sem ? sem.similarity / maxSem : 0;
|
|
245
|
-
const combined = round4(HYBRID_SEM_WEIGHT * semNorm + HYBRID_KW_WEIGHT * kwNorm);
|
|
246
|
-
const matchedIn = uniqueFields(kw?.matchedIn ?? [], sem ? ["semantic"] : []);
|
|
278
|
+
const seen = new Set();
|
|
279
|
+
for (const sem of semHits) {
|
|
280
|
+
const semNorm = sem.similarity / maxSem;
|
|
281
|
+
const kw = kwMap.get(sem.fact.id);
|
|
247
282
|
rows.push({
|
|
248
|
-
...fact,
|
|
249
|
-
matchScore:
|
|
250
|
-
matchedIn,
|
|
251
|
-
keywordScore: round4(
|
|
283
|
+
...sem.fact,
|
|
284
|
+
matchScore: round4(0.5 + 0.5 * semNorm),
|
|
285
|
+
matchedIn: uniqueFields(kw?.matchedIn ?? [], ["semantic"]),
|
|
286
|
+
keywordScore: round4(kw ? kw.score / maxKw : 0),
|
|
252
287
|
semanticScore: round4(semNorm),
|
|
253
288
|
});
|
|
289
|
+
seen.add(sem.fact.id);
|
|
290
|
+
}
|
|
291
|
+
for (const kw of kwHits) {
|
|
292
|
+
if (seen.has(kw.fact.id))
|
|
293
|
+
continue;
|
|
294
|
+
rows.push({
|
|
295
|
+
...kw.fact,
|
|
296
|
+
matchScore: round4(0.5 * (kw.score / maxKw)),
|
|
297
|
+
matchedIn: kw.matchedIn,
|
|
298
|
+
keywordScore: round4(kw.score / maxKw),
|
|
299
|
+
semanticScore: 0,
|
|
300
|
+
});
|
|
254
301
|
}
|
|
255
302
|
rows.sort((a, b) => b.matchScore - a.matchScore);
|
|
256
303
|
return rows;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact-recall-service.js","sourceRoot":"","sources":["../../../src/core/recall-facts/fact-recall-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fact-recall-service.js","sourceRoot":"","sources":["../../../src/core/recall-facts/fact-recall-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,10 @@ import type { TranscriptAdapter } from "../../ports/transcript-adapter.js";
|
|
|
21
21
|
import type { SignalStore } from "../../ports/signal-store.js";
|
|
22
22
|
import type { SqliteFactStore } from "../storage/sqlite-fact-store.js";
|
|
23
23
|
import type { SqliteSessionStore } from "../storage/sqlite-session-store.js";
|
|
24
|
+
import { PgSessionStore } from "../storage/pg-session-store.js";
|
|
25
|
+
import type { PgFactStore } from "../storage/pg-fact-store.js";
|
|
24
26
|
export interface SchedulerOptions {
|
|
25
|
-
readonly store: SqliteSessionStore;
|
|
27
|
+
readonly store: SqliteSessionStore | PgSessionStore;
|
|
26
28
|
readonly adapters: ReadonlyArray<TranscriptAdapter>;
|
|
27
29
|
readonly classifier: LLMClient;
|
|
28
30
|
readonly embedder?: LLMClient | null;
|
|
@@ -33,7 +35,7 @@ export interface SchedulerOptions {
|
|
|
33
35
|
* with no facts written (backwards-compatible default for tests not yet
|
|
34
36
|
* updated, and for any future caller that wants facts off).
|
|
35
37
|
*/
|
|
36
|
-
readonly factStore?: SqliteFactStore | null;
|
|
38
|
+
readonly factStore?: SqliteFactStore | PgFactStore | null;
|
|
37
39
|
/** SignalStore for the self-improvement lane. When set, the tick drains
|
|
38
40
|
* each chunk's embedded nlm.signal payloads, decoupled from classification. */
|
|
39
41
|
readonly signalStore?: SignalStore | null;
|
|
@@ -21,6 +21,7 @@ import { dirname, join } from "node:path";
|
|
|
21
21
|
import { homedir } from "node:os";
|
|
22
22
|
import { extractFacts } from "../facts/extract-facts.js";
|
|
23
23
|
import { normalizeSignal } from "../signals/ingest-signal.js";
|
|
24
|
+
import { PgSessionStore } from "../storage/pg-session-store.js";
|
|
24
25
|
import { MAX_CLASSIFY_FAILURES, getFileSize, recordClassified, recordClassifiedPg, recordFailed, recordFailedPg, recordSkippedLowConfidence, recordSkippedLowConfidencePg, scanOnce, scanOncePg } from "./scan-once.js";
|
|
25
26
|
import { runCheapChecksOnSqlite } from "../integrity/check-invariants.js";
|
|
26
27
|
const DEFAULT_INTERVAL_MS = 30 * 60 * 1000; // 30 min, matches Python default
|
|
@@ -102,10 +103,14 @@ export class ScanScheduler {
|
|
|
102
103
|
let storageFailures = 0;
|
|
103
104
|
let chunksSeen = 0;
|
|
104
105
|
const now = Date.now();
|
|
105
|
-
|
|
106
|
+
// Backend split: exactly one of (_pgPool, sqliteDb) is non-null. PG branches
|
|
107
|
+
// use the pool; SQLite branches use the raw better-sqlite3 handle.
|
|
108
|
+
const store = this.opts.store;
|
|
109
|
+
const _pgPool = store instanceof PgSessionStore ? store.pool : null;
|
|
110
|
+
const sqliteDb = store instanceof PgSessionStore ? null : store.rawDb();
|
|
106
111
|
if (!_pgPool && shouldRunIntegrityCheck(now)) {
|
|
107
112
|
try {
|
|
108
|
-
const violations = runCheapChecksOnSqlite(
|
|
113
|
+
const violations = runCheapChecksOnSqlite(sqliteDb);
|
|
109
114
|
markIntegrityCheckRan(now);
|
|
110
115
|
for (const v of violations) {
|
|
111
116
|
this.opts.logger(`[integrity] FAIL ${v.id} count=${v.count} ${v.description} run \`nlm doctor\` to inspect or \`nlm doctor --fix\` to repair`);
|
|
@@ -120,7 +125,7 @@ export class ScanScheduler {
|
|
|
120
125
|
try {
|
|
121
126
|
results = _pgPool
|
|
122
127
|
? await scanOncePg(adapter, this.opts.idleMinutes, _pgPool)
|
|
123
|
-
: await scanOnce(adapter, this.opts.idleMinutes,
|
|
128
|
+
: await scanOnce(adapter, this.opts.idleMinutes, sqliteDb);
|
|
124
129
|
}
|
|
125
130
|
catch (e) {
|
|
126
131
|
this.opts.logger(`[scheduler] scanOnce error for ${adapter.name}: ${e instanceof Error ? e.message : String(e)}`);
|
|
@@ -141,8 +146,8 @@ export class ScanScheduler {
|
|
|
141
146
|
count = await recordFailedPg(_pgPool, adapter.name, chunk.sourcePath, getFileSize(chunk.sourcePath));
|
|
142
147
|
}
|
|
143
148
|
else {
|
|
144
|
-
recordFailed(
|
|
145
|
-
count =
|
|
149
|
+
recordFailed(sqliteDb, adapter.name, chunk.sourcePath);
|
|
150
|
+
count = sqliteDb
|
|
146
151
|
.prepare("SELECT COALESCE(failure_count, 0) AS failure_count FROM adapter_state WHERE adapter_name = ? AND source_path = ?")
|
|
147
152
|
.get(adapter.name, chunk.sourcePath)?.failure_count ?? 1;
|
|
148
153
|
}
|
|
@@ -156,7 +161,7 @@ export class ScanScheduler {
|
|
|
156
161
|
await recordSkippedLowConfidencePg(_pgPool, adapter.name, chunk.sourcePath);
|
|
157
162
|
}
|
|
158
163
|
else {
|
|
159
|
-
recordSkippedLowConfidence(
|
|
164
|
+
recordSkippedLowConfidence(sqliteDb, adapter.name, chunk.sourcePath);
|
|
160
165
|
}
|
|
161
166
|
this.opts.logger(`[scheduler] low-confidence (${classification.confidence} < ${this.opts.confidenceFloor}) for ${chunk.id} - skipping until file grows`);
|
|
162
167
|
continue;
|
|
@@ -180,19 +185,25 @@ export class ScanScheduler {
|
|
|
180
185
|
decisions: classification.decisions,
|
|
181
186
|
openQuestions: classification.open,
|
|
182
187
|
};
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
: null;
|
|
188
|
+
const supersedesArg = supersedes ? { priorSessionId: supersedes, kind: "replaces" } : null;
|
|
189
|
+
const facts = this.opts.factStore
|
|
190
|
+
? extractFacts(classification, chunk.id, chunk.startedAt)
|
|
191
|
+
: [];
|
|
189
192
|
try {
|
|
190
|
-
|
|
193
|
+
// Store + factStore are constructed from the same backend, so the
|
|
194
|
+
// factStore cast below is sound — TS just can't correlate the two
|
|
195
|
+
// union members across a single call site.
|
|
196
|
+
if (store instanceof PgSessionStore) {
|
|
197
|
+
await store.insertSession(record, this.opts.embedder, supersedesArg, this.opts.factStore ? { factStore: this.opts.factStore, facts } : null);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
await store.insertSession(record, this.opts.embedder, supersedesArg, this.opts.factStore ? { factStore: this.opts.factStore, facts } : null);
|
|
201
|
+
}
|
|
191
202
|
if (_pgPool) {
|
|
192
203
|
await recordClassifiedPg(_pgPool, adapter.name, chunk.sourcePath, chunk.id);
|
|
193
204
|
}
|
|
194
205
|
else {
|
|
195
|
-
recordClassified(
|
|
206
|
+
recordClassified(sqliteDb, adapter.name, chunk.sourcePath, chunk.id);
|
|
196
207
|
}
|
|
197
208
|
inserted += 1;
|
|
198
209
|
}
|
|
@@ -202,7 +213,7 @@ export class ScanScheduler {
|
|
|
202
213
|
await recordFailedPg(_pgPool, adapter.name, chunk.sourcePath, getFileSize(chunk.sourcePath));
|
|
203
214
|
}
|
|
204
215
|
else {
|
|
205
|
-
recordFailed(
|
|
216
|
+
recordFailed(sqliteDb, adapter.name, chunk.sourcePath);
|
|
206
217
|
}
|
|
207
218
|
this.opts.logger(`[scheduler] storage error for ${chunk.id}: ${e instanceof Error ? e.message : String(e)}`);
|
|
208
219
|
}
|