@dzhechkov/harness-core 0.3.48 → 0.3.52
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/book-kb.d.ts +1 -0
- package/dist/book-kb.d.ts.map +1 -1
- package/dist/book-kb.js +5 -1
- package/dist/book-kb.js.map +1 -1
- package/dist/brain.d.ts +131 -4
- package/dist/brain.d.ts.map +1 -1
- package/dist/brain.js +423 -76
- package/dist/brain.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/book-kb.ts +6 -2
- package/src/brain.ts +477 -84
- package/src/index.ts +7 -0
package/dist/brain.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @packageDocumentation
|
|
16
16
|
*/
|
|
17
|
-
import { join } from 'node:path';
|
|
17
|
+
import { join, dirname } from 'node:path';
|
|
18
18
|
import { homedir } from 'node:os';
|
|
19
19
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
20
20
|
import { pathToFileURL } from 'node:url';
|
|
@@ -82,27 +82,57 @@ function resolveSqlite(depsRoot) {
|
|
|
82
82
|
return { error: 'better-sqlite3 not installed (run: dz setup --memory agentdb)' };
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
/**
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
/** Reconstruct a {@link BookKU} from a raw `book_knowledge` row (shared by every reader below). */
|
|
86
|
+
function rowToKu(r) {
|
|
87
|
+
const pages = jsonPages(r.pages);
|
|
88
|
+
const meta = jsonObj(r.metadata);
|
|
89
|
+
return {
|
|
90
|
+
book: r.book,
|
|
91
|
+
kuId: r.ku_id,
|
|
92
|
+
corpusVersion: r.corpus_version,
|
|
93
|
+
type: r.type,
|
|
94
|
+
name: r.name,
|
|
95
|
+
problem: r.problem,
|
|
96
|
+
content: r.content,
|
|
97
|
+
...(r.chapter !== null ? { chapter: r.chapter } : {}),
|
|
98
|
+
...(pages !== undefined ? { pages } : {}),
|
|
99
|
+
...(Object.keys(meta).length > 0 ? { metadata: meta } : {}),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Read reconstructed KUs from ANY `books.sqlite`-format lexical store (a project store, the brain
|
|
104
|
+
* store, or a per-source slice) — the single shared reader behind {@link promoteProjectToBrain},
|
|
105
|
+
* {@link buildPrimer}, {@link exportBrainSlice}, and {@link importBrainSlice}. `source` narrows to
|
|
106
|
+
* one book; default reads all. Synchronous (native `better-sqlite3` via `createRequire`) and
|
|
107
|
+
* best-effort: an absent store or unresolved dependency returns an honest `error`, never throws.
|
|
108
|
+
*/
|
|
109
|
+
export function readBookKus(opts) {
|
|
110
|
+
const depsRoot = opts.depsRoot ?? process.cwd();
|
|
111
|
+
if (!existsSync(opts.storePath))
|
|
112
|
+
return { kus: [], error: `no book store at ${opts.storePath}` };
|
|
113
|
+
let Database;
|
|
90
114
|
try {
|
|
91
|
-
const
|
|
92
|
-
|
|
115
|
+
const req = createRequire(join(depsRoot, 'package.json'));
|
|
116
|
+
Database = req('better-sqlite3');
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return { kus: [], error: 'better-sqlite3 not installed (run: dz setup --memory agentdb)' };
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const db = new Database(opts.storePath, { readonly: true });
|
|
93
123
|
try {
|
|
94
124
|
const cols = 'book, ku_id, corpus_version, type, name, problem, content, chapter, pages, metadata';
|
|
95
|
-
const rows = (source !== undefined
|
|
96
|
-
? db.prepare(`SELECT ${cols} FROM book_knowledge WHERE book = ?`).all(source)
|
|
125
|
+
const rows = (opts.source !== undefined
|
|
126
|
+
? db.prepare(`SELECT ${cols} FROM book_knowledge WHERE book = ?`).all(opts.source)
|
|
97
127
|
: db.prepare(`SELECT ${cols} FROM book_knowledge`).all());
|
|
98
|
-
return { rows };
|
|
128
|
+
return { kus: rows.map(rowToKu) };
|
|
99
129
|
}
|
|
100
130
|
finally {
|
|
101
131
|
db.close();
|
|
102
132
|
}
|
|
103
133
|
}
|
|
104
134
|
catch (err) {
|
|
105
|
-
return { error: `read
|
|
135
|
+
return { kus: [], error: `read book KB failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
106
136
|
}
|
|
107
137
|
}
|
|
108
138
|
/**
|
|
@@ -168,102 +198,299 @@ function worthScore(meta) {
|
|
|
168
198
|
return 0.5;
|
|
169
199
|
}
|
|
170
200
|
}
|
|
201
|
+
// ──────────────────────────────────────── Primers ───────────────────────────────────────────
|
|
202
|
+
/** Clamp + whitespace-collapse a one-line problem for the primer (deterministic). */
|
|
203
|
+
function primerLine(s, max = 120) {
|
|
204
|
+
const flat = s.replace(/\s+/g, ' ').trim();
|
|
205
|
+
return flat.length <= max ? flat : `${flat.slice(0, max - 1).trimEnd()}…`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Render a source's capability card (ADR-001 §5.4) from its registry entry + KUs — PURE and
|
|
209
|
+
* DETERMINISTIC (no clock, no query): a header (slug/kind/kuCount/corpusVersion/isbn/lang/license),
|
|
210
|
+
* a KU-TYPE histogram (count per type, count-desc then type-asc), and the top ~8 decision/framework
|
|
211
|
+
* KUs (name + one-line problem, page-anchored), ranked by declared `worth` then `kuId`.
|
|
212
|
+
*/
|
|
213
|
+
function buildPrimerMarkdown(source, kus) {
|
|
214
|
+
const lines = [`# Primer: ${source.slug}`, ''];
|
|
215
|
+
lines.push(`- kind: ${source.kind}`);
|
|
216
|
+
lines.push(`- KUs: ${source.kuCount}`);
|
|
217
|
+
if (source.corpusVersion !== undefined && source.corpusVersion !== '')
|
|
218
|
+
lines.push(`- corpusVersion: ${source.corpusVersion}`);
|
|
219
|
+
if (source.isbn !== undefined)
|
|
220
|
+
lines.push(`- isbn: ${source.isbn}`);
|
|
221
|
+
if (source.lang !== undefined)
|
|
222
|
+
lines.push(`- lang: ${source.lang}`);
|
|
223
|
+
if (source.license !== undefined)
|
|
224
|
+
lines.push(`- license: ${source.license}`);
|
|
225
|
+
lines.push('');
|
|
226
|
+
// KU-type histogram — count per type, count-desc then type-asc (stable, deterministic).
|
|
227
|
+
const counts = new Map();
|
|
228
|
+
for (const k of kus)
|
|
229
|
+
counts.set(k.type, (counts.get(k.type) ?? 0) + 1);
|
|
230
|
+
const hist = [...counts.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
|
|
231
|
+
lines.push('## KU types');
|
|
232
|
+
for (const [type, n] of hist)
|
|
233
|
+
lines.push(`- ${type}: ${n}`);
|
|
234
|
+
lines.push('');
|
|
235
|
+
// Top decision-grade KUs — worth-desc then kuId-asc, first 8; page-anchored provenance. Match the
|
|
236
|
+
// ACTUAL KU type vocabulary (decision-framework / tradeoff-table / methodology / heuristic), not the
|
|
237
|
+
// legacy 'decision'/'framework' shorthands that never occur in real KUs (primer showed _none_).
|
|
238
|
+
const DECISION_TYPES = new Set(['decision-framework', 'tradeoff-table', 'methodology', 'heuristic', 'decision', 'framework']);
|
|
239
|
+
const top = kus
|
|
240
|
+
.filter((k) => DECISION_TYPES.has(k.type))
|
|
241
|
+
.sort((a, b) => worthScore(b.metadata ?? {}) - worthScore(a.metadata ?? {}) || a.kuId.localeCompare(b.kuId))
|
|
242
|
+
.slice(0, 8);
|
|
243
|
+
lines.push('## Top decision moments');
|
|
244
|
+
if (top.length === 0) {
|
|
245
|
+
lines.push('_none_');
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
top.forEach((k, i) => {
|
|
249
|
+
const ch = k.chapter !== undefined && k.chapter !== '' ? ` гл.${k.chapter}` : '';
|
|
250
|
+
const pg = k.pages !== undefined && k.pages.length > 0 ? ` с.${k.pages.join('–')}` : '';
|
|
251
|
+
lines.push(`${i + 1}. ${k.name} — ${primerLine(k.problem)}${ch}${pg}`);
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
lines.push('');
|
|
255
|
+
return lines.join('\n');
|
|
256
|
+
}
|
|
257
|
+
/** Synthesize a {@link BrainSource} for a primer when the registry has no entry yet (metadata-derived). */
|
|
258
|
+
function sourceFromKus(slug, kus) {
|
|
259
|
+
const meta0 = kus[0]?.metadata ?? {};
|
|
260
|
+
const corpusVersion = kus[0]?.corpusVersion ?? '';
|
|
261
|
+
return {
|
|
262
|
+
slug,
|
|
263
|
+
kind: 'book',
|
|
264
|
+
kuCount: kus.length,
|
|
265
|
+
addedTs: '',
|
|
266
|
+
...(corpusVersion !== '' ? { corpusVersion } : {}),
|
|
267
|
+
...(typeof meta0['lang'] === 'string' ? { lang: meta0['lang'] } : {}),
|
|
268
|
+
...(typeof meta0['isbn'] === 'string' ? { isbn: meta0['isbn'] } : {}),
|
|
269
|
+
...(typeof meta0['license'] === 'string' ? { license: meta0['license'] } : {}),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
171
272
|
/**
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
|
|
273
|
+
* Build a source's capability card (ADR-001 §5.4) by reading its KUs from the brain lexical store
|
|
274
|
+
* ({@link readBookKus}) + its registry entry, then rendering {@link buildPrimerMarkdown}. Best-effort:
|
|
275
|
+
* a missing store/source returns an honest `error` with empty `markdown`, never throws.
|
|
276
|
+
*/
|
|
277
|
+
export async function buildPrimer(opts) {
|
|
278
|
+
const home = opts.brainHome ?? brainHome();
|
|
279
|
+
const depsRoot = opts.depsRoot ?? process.cwd();
|
|
280
|
+
const read = readBookKus({ storePath: brainBooksPath(home), depsRoot, source: opts.slug });
|
|
281
|
+
if (read.error !== undefined)
|
|
282
|
+
return { markdown: '', error: read.error };
|
|
283
|
+
if (read.kus.length === 0)
|
|
284
|
+
return { markdown: '', error: `no KUs for source '${opts.slug}' in brain` };
|
|
285
|
+
const source = readRegistry(home).sources[opts.slug] ?? sourceFromKus(opts.slug, read.kus);
|
|
286
|
+
return { markdown: buildPrimerMarkdown(source, read.kus) };
|
|
287
|
+
}
|
|
288
|
+
/** Write a source's primer to `<brainHome>/primers/<slug>.md` (mkdir). Best-effort; honest error. */
|
|
289
|
+
export async function writePrimer(opts) {
|
|
290
|
+
const home = opts.brainHome ?? brainHome();
|
|
291
|
+
const path = join(home, 'primers', `${opts.slug}.md`);
|
|
292
|
+
const built = await buildPrimer(opts);
|
|
293
|
+
if (built.error !== undefined)
|
|
294
|
+
return { path, error: built.error };
|
|
295
|
+
try {
|
|
296
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
297
|
+
writeFileSync(path, built.markdown);
|
|
298
|
+
return { path };
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
return { path, error: `write primer failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// ──────────────────────────────────────── Mirror ────────────────────────────────────────────
|
|
305
|
+
/**
|
|
306
|
+
* The ONE shared "mirror KUs into the brain + register + primer" path behind
|
|
307
|
+
* {@link promoteProjectToBrain}, {@link importBrainSlice}, and {@link registerKusToBrain}. Groups
|
|
308
|
+
* the KUs by `book` and, per book: (1) lexical-mirrors via the idempotent {@link putBookKnowledge},
|
|
309
|
+
* (2) re-embeds via {@link indexPatternsToAgentdb} after pre-deleting the book's stale vectors, and
|
|
310
|
+
* (3) writes/refreshes the registry entry — then generates `primers/<slug>.md` best-effort (a primer
|
|
311
|
+
* failure never fails the mirror) and stores its relative path on the entry.
|
|
176
312
|
*
|
|
177
|
-
* **Non-clobbering:**
|
|
313
|
+
* **Non-clobbering:** mirroring the same book twice does not duplicate — the lexical upsert keys on
|
|
178
314
|
* `(book, ku_id, corpus_version)` and the vector rows are pre-deleted before re-index.
|
|
179
315
|
*/
|
|
180
|
-
|
|
181
|
-
const home = opts
|
|
182
|
-
|
|
183
|
-
const projectDbPath = bookKbPath(opts.projectRoot);
|
|
184
|
-
if (!existsSync(projectDbPath))
|
|
185
|
-
return { sources: [], kus: 0, error: 'no project book KB' };
|
|
186
|
-
const read = await readProjectRows(depsRoot, projectDbPath, opts.source);
|
|
187
|
-
if ('error' in read)
|
|
188
|
-
return { sources: [], kus: 0, error: read.error };
|
|
189
|
-
if (read.rows.length === 0)
|
|
316
|
+
async function mirrorKusToBrain(opts) {
|
|
317
|
+
const { home, depsRoot } = opts;
|
|
318
|
+
if (opts.kus.length === 0)
|
|
190
319
|
return { sources: [], kus: 0 };
|
|
191
|
-
// Group
|
|
320
|
+
// Group KUs by book (each book is one mirror unit + one registry entry).
|
|
192
321
|
const byBook = new Map();
|
|
193
|
-
for (const
|
|
194
|
-
const bucket = byBook.get(
|
|
322
|
+
for (const k of opts.kus) {
|
|
323
|
+
const bucket = byBook.get(k.book);
|
|
195
324
|
if (bucket)
|
|
196
|
-
bucket.push(
|
|
325
|
+
bucket.push(k);
|
|
197
326
|
else
|
|
198
|
-
byBook.set(
|
|
327
|
+
byBook.set(k.book, [k]);
|
|
199
328
|
}
|
|
200
329
|
const reg = readRegistry(home);
|
|
201
330
|
const sources = { ...reg.sources };
|
|
202
|
-
const
|
|
331
|
+
const mirrored = [];
|
|
203
332
|
let totalKus = 0;
|
|
204
333
|
let firstError;
|
|
205
|
-
for (const [book,
|
|
334
|
+
for (const [book, kus] of byBook) {
|
|
206
335
|
// 1. Lexical mirror — reuse the idempotent upsert, pointed at the brain store.
|
|
207
|
-
const kus = rows.map((r) => {
|
|
208
|
-
const pages = jsonPages(r.pages);
|
|
209
|
-
const meta = jsonObj(r.metadata);
|
|
210
|
-
return {
|
|
211
|
-
book: r.book,
|
|
212
|
-
kuId: r.ku_id,
|
|
213
|
-
corpusVersion: r.corpus_version,
|
|
214
|
-
type: r.type,
|
|
215
|
-
name: r.name,
|
|
216
|
-
problem: r.problem,
|
|
217
|
-
content: r.content,
|
|
218
|
-
...(r.chapter !== null ? { chapter: r.chapter } : {}),
|
|
219
|
-
...(pages !== undefined ? { pages } : {}),
|
|
220
|
-
...(Object.keys(meta).length > 0 ? { metadata: meta } : {}),
|
|
221
|
-
};
|
|
222
|
-
});
|
|
223
336
|
const lex = await putBookKnowledge(depsRoot, kus, { dbPath: brainBooksPath(home) });
|
|
224
337
|
if (lex.error !== undefined && firstError === undefined)
|
|
225
338
|
firstError = lex.error;
|
|
226
339
|
// 2. Vector re-embed — pre-delete this book's stale vectors (insert-only primitive), then index.
|
|
227
340
|
await deleteBrainVectors(depsRoot, brainAgentdbPath(home), book);
|
|
228
|
-
const vecRows =
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
},
|
|
241
|
-
};
|
|
242
|
-
});
|
|
341
|
+
const vecRows = kus.map((k) => ({
|
|
342
|
+
taskType: 'book-knowledge',
|
|
343
|
+
text: `${k.name}: ${k.problem}`,
|
|
344
|
+
score: worthScore(k.metadata ?? {}),
|
|
345
|
+
tags: ['book', k.book, k.type],
|
|
346
|
+
metadata: {
|
|
347
|
+
chapter: k.chapter ?? null,
|
|
348
|
+
pages: k.pages ?? null,
|
|
349
|
+
ku_id: k.kuId,
|
|
350
|
+
corpus_version: k.corpusVersion,
|
|
351
|
+
},
|
|
352
|
+
}));
|
|
243
353
|
const vec = await indexPatternsToAgentdb(depsRoot, vecRows, { dbPath: brainAgentdbPath(home) });
|
|
244
354
|
if (vec.error !== undefined && firstError === undefined)
|
|
245
355
|
firstError = vec.error;
|
|
246
|
-
// 3. Registry entry
|
|
247
|
-
const meta0 =
|
|
248
|
-
const corpusVersion =
|
|
249
|
-
const lang = typeof meta0['lang'] === 'string' ? meta0['lang'] : undefined;
|
|
356
|
+
// 3. Registry entry — corpus_version/lang/isbn/license from opts (explicit) then first KU's metadata.
|
|
357
|
+
const meta0 = kus[0].metadata ?? {};
|
|
358
|
+
const corpusVersion = kus[0].corpusVersion;
|
|
359
|
+
const lang = opts.lang ?? (typeof meta0['lang'] === 'string' ? meta0['lang'] : undefined);
|
|
250
360
|
const isbn = typeof meta0['isbn'] === 'string' ? meta0['isbn'] : undefined;
|
|
251
|
-
|
|
361
|
+
const license = opts.license ?? (typeof meta0['license'] === 'string' ? meta0['license'] : undefined);
|
|
362
|
+
const entry = {
|
|
252
363
|
slug: book,
|
|
253
|
-
kind:
|
|
254
|
-
kuCount:
|
|
364
|
+
kind: opts.kind,
|
|
365
|
+
kuCount: kus.length,
|
|
255
366
|
addedTs: opts.addedTs,
|
|
256
367
|
...(corpusVersion !== undefined && corpusVersion !== '' ? { corpusVersion } : {}),
|
|
257
368
|
...(lang !== undefined ? { lang } : {}),
|
|
258
369
|
...(isbn !== undefined ? { isbn } : {}),
|
|
370
|
+
...(license !== undefined ? { license } : {}),
|
|
259
371
|
};
|
|
260
|
-
|
|
261
|
-
|
|
372
|
+
// 4. Primer — best-effort: a primer failure must not fail the mirror. Store the relative path.
|
|
373
|
+
let primerRel;
|
|
374
|
+
try {
|
|
375
|
+
const rel = join('primers', `${book}.md`);
|
|
376
|
+
const primerPath = join(home, rel);
|
|
377
|
+
mkdirSync(dirname(primerPath), { recursive: true });
|
|
378
|
+
writeFileSync(primerPath, buildPrimerMarkdown(entry, kus));
|
|
379
|
+
primerRel = rel;
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
/* primer is advisory — never fail the mirror on it */
|
|
383
|
+
}
|
|
384
|
+
sources[book] = primerRel !== undefined ? { ...entry, primer: primerRel } : entry;
|
|
385
|
+
mirrored.push(book);
|
|
386
|
+
totalKus += kus.length;
|
|
262
387
|
}
|
|
263
388
|
writeRegistry(home, { version: 1, sources });
|
|
264
389
|
return firstError !== undefined
|
|
265
|
-
? { sources:
|
|
266
|
-
: { sources:
|
|
390
|
+
? { sources: mirrored, kus: totalKus, error: firstError }
|
|
391
|
+
: { sources: mirrored, kus: totalKus };
|
|
392
|
+
}
|
|
393
|
+
// ──────────────────────────────────────── Promote ───────────────────────────────────────────
|
|
394
|
+
/**
|
|
395
|
+
* Promote a PROJECT's digitized book KB into the durable cross-project brain (ADR-001 P0
|
|
396
|
+
* `book-brain-register`). Reads the project's lexical `books.sqlite` ({@link readBookKus}) and mirrors
|
|
397
|
+
* every KU into the brain via the shared {@link mirrorKusToBrain} path (lexical + vector + registry +
|
|
398
|
+
* primer). `kind: 'book'`.
|
|
399
|
+
*
|
|
400
|
+
* **Non-clobbering:** promoting the same book twice does not duplicate — the lexical upsert keys on
|
|
401
|
+
* `(book, ku_id, corpus_version)` and the vector rows are pre-deleted before re-index.
|
|
402
|
+
*/
|
|
403
|
+
export async function promoteProjectToBrain(opts) {
|
|
404
|
+
const home = opts.brainHome ?? brainHome();
|
|
405
|
+
const depsRoot = opts.depsRoot ?? opts.projectRoot;
|
|
406
|
+
const projectDbPath = bookKbPath(opts.projectRoot);
|
|
407
|
+
if (!existsSync(projectDbPath))
|
|
408
|
+
return { sources: [], kus: 0, error: 'no project book KB' };
|
|
409
|
+
const read = readBookKus({ storePath: projectDbPath, depsRoot, ...(opts.source !== undefined ? { source: opts.source } : {}) });
|
|
410
|
+
if (read.error !== undefined)
|
|
411
|
+
return { sources: [], kus: 0, error: read.error };
|
|
412
|
+
if (read.kus.length === 0)
|
|
413
|
+
return { sources: [], kus: 0 };
|
|
414
|
+
return mirrorKusToBrain({ home, depsRoot, kus: read.kus, kind: 'book', addedTs: opts.addedTs });
|
|
415
|
+
}
|
|
416
|
+
// ────────────────────────────────────── Slices / ingest ─────────────────────────────────────
|
|
417
|
+
/**
|
|
418
|
+
* Export ONE source's KUs from the brain as a STANDALONE lexical-only `books.sqlite` slice at
|
|
419
|
+
* `outPath` (ADR-001 §8.1). Reads via {@link readBookKus} and writes via {@link putBookKnowledge} —
|
|
420
|
+
* lexical only; vectors re-embed on import. This is the portable, per-book shareable unit.
|
|
421
|
+
*/
|
|
422
|
+
export async function exportBrainSlice(opts) {
|
|
423
|
+
const home = opts.brainHome ?? brainHome();
|
|
424
|
+
const depsRoot = opts.depsRoot ?? process.cwd();
|
|
425
|
+
const read = readBookKus({ storePath: brainBooksPath(home), depsRoot, source: opts.slug });
|
|
426
|
+
if (read.error !== undefined)
|
|
427
|
+
return { kuCount: 0, error: read.error };
|
|
428
|
+
if (read.kus.length === 0)
|
|
429
|
+
return { kuCount: 0, error: `no KUs for source '${opts.slug}' in brain` };
|
|
430
|
+
const put = await putBookKnowledge(depsRoot, read.kus, { dbPath: opts.outPath });
|
|
431
|
+
if (put.error !== undefined)
|
|
432
|
+
return { kuCount: 0, error: put.error };
|
|
433
|
+
return { kuCount: read.kus.length };
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Import a per-book slice ({@link exportBrainSlice} output, or a pack's `brain/<slug>.sqlite`) into
|
|
437
|
+
* the brain (ADR-001 §8.1). Reads the slice's KUs ({@link readBookKus}) and mirrors them via the same
|
|
438
|
+
* non-clobbering {@link mirrorKusToBrain} path as promote (upsert + re-embed + registry + primer).
|
|
439
|
+
*/
|
|
440
|
+
export async function importBrainSlice(opts) {
|
|
441
|
+
const home = opts.brainHome ?? brainHome();
|
|
442
|
+
const depsRoot = opts.depsRoot ?? process.cwd();
|
|
443
|
+
const read = readBookKus({ storePath: opts.slicePath, depsRoot });
|
|
444
|
+
if (read.error !== undefined)
|
|
445
|
+
return { sources: [], kus: 0, error: read.error };
|
|
446
|
+
if (read.kus.length === 0)
|
|
447
|
+
return { sources: [], kus: 0 };
|
|
448
|
+
return mirrorKusToBrain({ home, depsRoot, kus: read.kus, kind: 'book', addedTs: opts.addedTs });
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Register an array of already-shaped KUs (from a repo deep-walk, §6, or raw JSON) into the brain via
|
|
452
|
+
* the shared {@link mirrorKusToBrain} path — the CLI `--from-kus` backend. `slug` is authoritative:
|
|
453
|
+
* every KU is registered under it (so a repo's `book` field is normalized to the source slug). The
|
|
454
|
+
* registry entry carries `kind` and, for `repo`, `license`.
|
|
455
|
+
*/
|
|
456
|
+
/**
|
|
457
|
+
* SPDX ids the license gate treats as clearly-permissive (auto-pass for repo ingest). Anything else
|
|
458
|
+
* — including an absent license — is refused unless `override:true`. Kept deliberately small and
|
|
459
|
+
* conservative (ADR §8: repos carry their own licenses; the brain must not silently ingest
|
|
460
|
+
* unknown/incompatible source into a redistributable slice).
|
|
461
|
+
*/
|
|
462
|
+
export const PERMISSIVE_LICENSES = [
|
|
463
|
+
'MIT', 'Apache-2.0', 'BSD-2-Clause', 'BSD-3-Clause', 'ISC', 'Unlicense', 'CC0-1.0', '0BSD', 'MIT-0',
|
|
464
|
+
];
|
|
465
|
+
export async function registerKusToBrain(opts) {
|
|
466
|
+
const home = opts.brainHome ?? brainHome();
|
|
467
|
+
const depsRoot = opts.depsRoot ?? process.cwd();
|
|
468
|
+
if (opts.kus.length === 0)
|
|
469
|
+
return { kus: 0 };
|
|
470
|
+
// License gate (ADR §8) — repo/paper sources must declare a permissive license, else refuse unless
|
|
471
|
+
// explicitly overridden. Books promoted from a digitized pack are exempt (own CP5 flow). No writes
|
|
472
|
+
// happen before this check, so a refusal never leaves a partial brain.
|
|
473
|
+
if (opts.kind !== 'book' && opts.override !== true) {
|
|
474
|
+
const lic = opts.license;
|
|
475
|
+
if (lic === undefined || lic === '') {
|
|
476
|
+
return { kus: 0, error: `refusing to ingest '${opts.slug}' (${opts.kind}) with no --license; pass a permissive SPDX id (${PERMISSIVE_LICENSES.join(', ')}) or --override` };
|
|
477
|
+
}
|
|
478
|
+
if (!PERMISSIVE_LICENSES.includes(lic)) {
|
|
479
|
+
return { kus: 0, error: `refusing to ingest '${opts.slug}': license '${lic}' is not in the permissive allow-list (${PERMISSIVE_LICENSES.join(', ')}); pass --override to ingest anyway` };
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
// Normalize every KU under the source slug so the batch shares one `book` (putBookKnowledge's key).
|
|
483
|
+
const kus = opts.kus.map((k) => (k.book === opts.slug ? k : { ...k, book: opts.slug }));
|
|
484
|
+
const mirror = await mirrorKusToBrain({
|
|
485
|
+
home,
|
|
486
|
+
depsRoot,
|
|
487
|
+
kus,
|
|
488
|
+
kind: opts.kind,
|
|
489
|
+
addedTs: opts.addedTs,
|
|
490
|
+
...(opts.lang !== undefined ? { lang: opts.lang } : {}),
|
|
491
|
+
...(opts.license !== undefined ? { license: opts.license } : {}),
|
|
492
|
+
});
|
|
493
|
+
return mirror.error !== undefined ? { kus: mirror.kus, error: mirror.error } : { kus: mirror.kus };
|
|
267
494
|
}
|
|
268
495
|
// ───────────────────────────────────────── Query ────────────────────────────────────────────
|
|
269
496
|
/**
|
|
@@ -278,6 +505,126 @@ export async function queryBrain(opts) {
|
|
|
278
505
|
qopts.book = opts.source;
|
|
279
506
|
if (opts.limit !== undefined)
|
|
280
507
|
qopts.limit = opts.limit;
|
|
508
|
+
if (opts.match !== undefined)
|
|
509
|
+
qopts.match = opts.match;
|
|
281
510
|
return queryBookKnowledge(depsRoot, opts.query, qopts);
|
|
282
511
|
}
|
|
512
|
+
// ──────────────────────────────────────── Grounding ─────────────────────────────────────────
|
|
513
|
+
/**
|
|
514
|
+
* A small bilingual (RU+EN) stopword list. Deliberately tiny — the goal is only to strip the most
|
|
515
|
+
* common glue words so the residual tokens are CONTENT terms worth grounding on, not to do real NLP.
|
|
516
|
+
*/
|
|
517
|
+
const STOPWORDS = new Set([
|
|
518
|
+
// EN
|
|
519
|
+
'the', 'and', 'for', 'are', 'but', 'not', 'you', 'all', 'any', 'can', 'her', 'was', 'one',
|
|
520
|
+
'our', 'out', 'has', 'had', 'his', 'how', 'its', 'who', 'get', 'got', 'use', 'via', 'per',
|
|
521
|
+
'with', 'this', 'that', 'from', 'into', 'over', 'your', 'they', 'them', 'then', 'than', 'have',
|
|
522
|
+
'will', 'what', 'when', 'why', 'where', 'which', 'about', 'would', 'should', 'could', 'does',
|
|
523
|
+
'did', 'yes', 'no', 'or', 'a', 'an', 'of', 'to', 'in', 'on', 'is', 'it', 'be', 'as', 'at', 'by',
|
|
524
|
+
// RU
|
|
525
|
+
'и', 'в', 'на', 'как', 'для', 'что', 'это', 'или', 'но', 'же', 'то', 'по', 'из', 'за', 'от',
|
|
526
|
+
'до', 'со', 'об', 'при', 'без', 'над', 'под', 'про', 'так', 'уже', 'еще', 'ещё', 'вот', 'бы',
|
|
527
|
+
'ли', 'не', 'ни', 'да', 'нет', 'мне', 'мой', 'моя', 'вы', 'ты', 'он', 'она', 'они', 'оно',
|
|
528
|
+
'кто', 'где', 'чем', 'чей', 'быть', 'если', 'чтобы', 'этот', 'эта', 'эти', 'все', 'всё', 'меня',
|
|
529
|
+
]);
|
|
530
|
+
/**
|
|
531
|
+
* Extract meaningful CONTENT TERMS from a prompt: lowercase, keep `\p{L}\p{N}` tokens of length ≥ 3,
|
|
532
|
+
* and drop the small RU+EN stopword list. Deterministic; deduped preserving first-seen order.
|
|
533
|
+
*/
|
|
534
|
+
function contentTerms(prompt) {
|
|
535
|
+
const seen = new Set();
|
|
536
|
+
const out = [];
|
|
537
|
+
// Split on anything that is not a Unicode letter or number (handles RU + EN + punctuation).
|
|
538
|
+
for (const raw of prompt.toLowerCase().split(/[^\p{L}\p{N}]+/u)) {
|
|
539
|
+
if (raw.length < 3)
|
|
540
|
+
continue;
|
|
541
|
+
if (STOPWORDS.has(raw))
|
|
542
|
+
continue;
|
|
543
|
+
if (seen.has(raw))
|
|
544
|
+
continue;
|
|
545
|
+
seen.add(raw);
|
|
546
|
+
out.push(raw);
|
|
547
|
+
}
|
|
548
|
+
return out;
|
|
549
|
+
}
|
|
550
|
+
/** Clamp a snippet to a max length, collapsing whitespace, with an ellipsis when truncated. */
|
|
551
|
+
function snippet(s, max = 160) {
|
|
552
|
+
const flat = s.replace(/\s+/g, ' ').trim();
|
|
553
|
+
return flat.length <= max ? flat : `${flat.slice(0, max - 1).trimEnd()}…`;
|
|
554
|
+
}
|
|
555
|
+
/** The directive line prepended to every grounding block (§7.1). */
|
|
556
|
+
const GROUNDING_DIRECTIVE = 'Ground your answer in the KNOWLEDGE BRAIN below; prefer these ingested sources over ' +
|
|
557
|
+
'training-data recall; cite [Kn] source+page per claim; if the brain is silent on a point, say so.';
|
|
558
|
+
/**
|
|
559
|
+
* The grounding-enforcement hook entrypoint (ADR-001 §7, P1). Given a user prompt, deterministically
|
|
560
|
+
* builds a GROUNDING DIRECTIVE block from the brain's top lexical hits — the mechanical half of
|
|
561
|
+
* ruvnet-brain's "answer from source, not drift" (the agent honoring it is the soft, agent-enforced
|
|
562
|
+
* half, §7.2). Best-effort and **silent by design**: grounding must never inject noise or block a
|
|
563
|
+
* prompt, so any generic prompt, empty brain, store error, or thrown exception yields
|
|
564
|
+
* `{ emitted:false, block:'', hitCount:0 }` rather than an error to the user.
|
|
565
|
+
*
|
|
566
|
+
* **Relevance gate (P1):** `≥ 1 content term AND ≥ 1 lexical hit` under OR/any-term matching. The
|
|
567
|
+
* query uses `match:'any'` (OR), not AND: a natural-language prompt carries terms not in the KB
|
|
568
|
+
* (a verb like "проектирую", filler), and AND-ing them all returns 0 even when the topical terms
|
|
569
|
+
* (репликация, кворум) match — the too-strict gate that made real prompts silent. OR lets the
|
|
570
|
+
* matching terms surface KUs, FTS5-rank-ordered; the stopword filter still keeps "how are you"
|
|
571
|
+
* silent (no content terms). A numeric `--min-score` threshold (§7.1/§7.3) is deferred to **P3**:
|
|
572
|
+
* FTS5's `rank` isn't exposed and a meaningful score needs the vector (cosine) path the sync hook
|
|
573
|
+
* doesn't run. Until then, "≥1 content-term OR-hit clears the gate" is the honest P1 rule.
|
|
574
|
+
*/
|
|
575
|
+
export async function groundPrompt(opts) {
|
|
576
|
+
const silent = { emitted: false, block: '', hitCount: 0 };
|
|
577
|
+
try {
|
|
578
|
+
// Gate 1: at least one CONTENT term (all-stopword prompts like "how are you" → silent).
|
|
579
|
+
const terms = contentTerms(opts.prompt ?? '');
|
|
580
|
+
if (terms.length < 1)
|
|
581
|
+
return silent;
|
|
582
|
+
// Best-effort OR/any-term lexical recall over the whole brain. Never throws. `match:'any'` so a
|
|
583
|
+
// matching topical term surfaces KUs even when other prompt terms (a verb, filler) miss — the
|
|
584
|
+
// fix for real-prompt silence (AND required every term to co-occur). Rank ordering + top-K keep
|
|
585
|
+
// it precise; the stopword filter keeps generic prompts silent.
|
|
586
|
+
const query = {
|
|
587
|
+
query: terms.join(' '),
|
|
588
|
+
limit: opts.k ?? 5,
|
|
589
|
+
match: 'any',
|
|
590
|
+
};
|
|
591
|
+
if (opts.brainHome !== undefined)
|
|
592
|
+
query.brainHome = opts.brainHome;
|
|
593
|
+
if (opts.depsRoot !== undefined)
|
|
594
|
+
query.depsRoot = opts.depsRoot;
|
|
595
|
+
if (opts.source !== undefined)
|
|
596
|
+
query.source = opts.source;
|
|
597
|
+
const res = await queryBrain(query);
|
|
598
|
+
// Gate 2: any lexical hit? On error or zero hits, stay silent (no noise, no block).
|
|
599
|
+
if (res.error !== undefined)
|
|
600
|
+
return silent;
|
|
601
|
+
if (res.hits.length === 0)
|
|
602
|
+
return silent;
|
|
603
|
+
// Gate 3 — COVERAGE (the OR balance): OR recall alone over-fires when a single common term
|
|
604
|
+
// ("today", "data") incidentally matches a KU. Require the retrieved hits to actually cover the
|
|
605
|
+
// prompt's intent: for a single-content-term prompt ("кворум") one hit suffices; for a
|
|
606
|
+
// multi-term prompt, ≥2 DISTINCT content terms must prefix-appear in the hit set — so an
|
|
607
|
+
// off-topic prompt whose only matching word is incidental ("weather today" → only "today"
|
|
608
|
+
// matches) stays silent, while a real one ("репликацию single multi leader" → 4 covered) grounds.
|
|
609
|
+
if (terms.length >= 2) {
|
|
610
|
+
const hay = res.hits.map((h) => `${h.name} ${h.problem} ${h.content}`.toLowerCase()).join(' ');
|
|
611
|
+
const covered = terms.filter((t) => hay.includes(t.toLowerCase())).length;
|
|
612
|
+
if (covered < 2)
|
|
613
|
+
return silent;
|
|
614
|
+
}
|
|
615
|
+
// Build the GROUNDING DIRECTIVE block (§7.1): directive line + numbered citations.
|
|
616
|
+
const lines = [GROUNDING_DIRECTIVE, ''];
|
|
617
|
+
res.hits.forEach((h, i) => {
|
|
618
|
+
const ch = h.chapter !== undefined && h.chapter !== '' ? ` гл.${h.chapter}` : '';
|
|
619
|
+
const pg = h.pages !== undefined && h.pages.length > 0 ? ` с.${h.pages.join('–')}` : '';
|
|
620
|
+
const body = snippet(h.problem !== '' ? h.problem : h.content);
|
|
621
|
+
lines.push(`[K${i + 1}] ${h.book}${ch}${pg} — ${h.name}: ${body}`);
|
|
622
|
+
});
|
|
623
|
+
return { emitted: true, block: lines.join('\n'), hitCount: res.hits.length };
|
|
624
|
+
}
|
|
625
|
+
catch {
|
|
626
|
+
// Grounding is advisory — a bug here must never surface to the user or block the prompt.
|
|
627
|
+
return silent;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
283
630
|
//# sourceMappingURL=brain.js.map
|
package/dist/brain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"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"}
|