memonaut 0.3.0 → 0.4.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.
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli-main.js +96 -5
- package/dist/cli-main.js.map +1 -1
- package/dist/db.d.ts +9 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +18 -1
- package/dist/db.js.map +1 -1
- package/dist/indexer.d.ts +66 -1
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +138 -6
- package/dist/indexer.js.map +1 -1
- package/package.json +1 -1
- package/skills/memonaut/SKILL.md +4 -2
- package/src/cli-main.ts +108 -5
- package/src/db.ts +27 -1
- package/src/indexer.ts +185 -7
- package/dist/silence-sqlite-warning.d.ts +0 -2
- package/dist/silence-sqlite-warning.d.ts.map +0 -1
- package/dist/silence-sqlite-warning.js +0 -9
- package/dist/silence-sqlite-warning.js.map +0 -1
package/dist/cli-main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAwPA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,IAAI,CAqBf;AAueD,uEAAuE;AACvE,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAMzC"}
|
package/dist/cli-main.js
CHANGED
|
@@ -5,7 +5,7 @@ import { parseArgs } from 'node:util';
|
|
|
5
5
|
import { loadConfig, writeStarterConfig } from './config.js';
|
|
6
6
|
import { getMeta, openDb } from './db.js';
|
|
7
7
|
import { colorsEnabled, makeStyle, renderHit, renderTable, relativeTime, tildify, } from './format.js';
|
|
8
|
-
import { index } from './indexer.js';
|
|
8
|
+
import { freshness, index } from './indexer.js';
|
|
9
9
|
import { TIERS } from './model.js';
|
|
10
10
|
import { readRawEntry } from './pi-source.js';
|
|
11
11
|
import { DEFAULT_MAX_MATCHES, DEFAULT_MAX_PER_FILE, regexSearch, } from './regex.js';
|
|
@@ -21,8 +21,10 @@ COMMANDS
|
|
|
21
21
|
search <query...> Search transcripts, grouped by fork lineage
|
|
22
22
|
search --regex <pat> Exact regex search over the original transcripts
|
|
23
23
|
show <ref> Print a thread (file id, session uuid prefix, name or path)
|
|
24
|
+
(show and sql sync first too; --no-sync skips it)
|
|
24
25
|
sql <query> Run a read-only SQL query against the index
|
|
25
26
|
stats Summarise what is indexed
|
|
27
|
+
status How fresh the index is, and how much is pending
|
|
26
28
|
config Show config paths, or write a starter config
|
|
27
29
|
skills [install] List or install the agent skill (into ~/.agents/skills)
|
|
28
30
|
|
|
@@ -137,14 +139,25 @@ function withTier(config, tier) {
|
|
|
137
139
|
fail(`unknown tier "${tier}" (expected ${TIERS.join(', ')})`);
|
|
138
140
|
return { ...config, tier: tier };
|
|
139
141
|
}
|
|
140
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Cheap incremental catch-up so a query is never answered from a stale index.
|
|
144
|
+
*
|
|
145
|
+
* A missing index builds itself here rather than failing. Telling somebody who
|
|
146
|
+
* just typed a search to go and type a different command first is a worse
|
|
147
|
+
* answer than taking ~35 s once and saying so.
|
|
148
|
+
*/
|
|
141
149
|
function sync(config, quiet) {
|
|
142
|
-
|
|
143
|
-
|
|
150
|
+
// "Cold" is about whether a build has ever FINISHED, not whether a file is
|
|
151
|
+
// there: an interrupted first build leaves a file behind, and judging by
|
|
152
|
+
// existence alone would swallow the banner and hand the user a silent
|
|
153
|
+
// 35-second hang the second time too.
|
|
154
|
+
const cold = lastIndexedAt(config) === null;
|
|
155
|
+
if (cold && !quiet) {
|
|
156
|
+
process.stderr.write(`recall: no index at ${tildify(config.dbPath)} yet, building it once (well under a minute)…\n`);
|
|
144
157
|
}
|
|
145
158
|
const stats = index({ config, onProgress: () => { } });
|
|
146
159
|
if (!quiet && stats.filesIndexed > 0) {
|
|
147
|
-
process.stderr.write(`recall: synced ${stats.filesIndexed} transcript(s) in ${stats.durationMs}ms\n`);
|
|
160
|
+
process.stderr.write(`recall: ${cold ? 'indexed' : 'synced'} ${stats.filesIndexed} transcript(s) in ${stats.durationMs}ms\n`);
|
|
148
161
|
}
|
|
149
162
|
}
|
|
150
163
|
function cmdIndex(argv) {
|
|
@@ -363,6 +376,7 @@ function cmdShow(argv) {
|
|
|
363
376
|
limit: { type: 'string', default: '40' },
|
|
364
377
|
full: { type: 'boolean', default: false },
|
|
365
378
|
json: { type: 'boolean', default: false },
|
|
379
|
+
'no-sync': { type: 'boolean', default: false },
|
|
366
380
|
},
|
|
367
381
|
allowPositionals: true,
|
|
368
382
|
});
|
|
@@ -370,6 +384,11 @@ function cmdShow(argv) {
|
|
|
370
384
|
if (!ref)
|
|
371
385
|
fail('which thread? Pass a file id, a session uuid prefix, a name, or a path');
|
|
372
386
|
const config = loadConfig();
|
|
387
|
+
// A thread can have grown since the search that found it, so this syncs too:
|
|
388
|
+
// "every query syncs before it answers" has to be true of all of them, or the
|
|
389
|
+
// sentence is not worth writing down.
|
|
390
|
+
if (!values['no-sync'])
|
|
391
|
+
sync(config, Boolean(values.json));
|
|
373
392
|
const db = openDb(config.dbPath, { readOnly: true });
|
|
374
393
|
const thread = resolveThread(db, ref);
|
|
375
394
|
if (!thread)
|
|
@@ -421,6 +440,7 @@ function cmdSql(argv) {
|
|
|
421
440
|
options: {
|
|
422
441
|
json: { type: 'boolean', default: false },
|
|
423
442
|
limit: { type: 'string', default: '200' },
|
|
443
|
+
'no-sync': { type: 'boolean', default: false },
|
|
424
444
|
},
|
|
425
445
|
allowPositionals: true,
|
|
426
446
|
});
|
|
@@ -428,6 +448,8 @@ function cmdSql(argv) {
|
|
|
428
448
|
if (!sql)
|
|
429
449
|
fail('no SQL given');
|
|
430
450
|
const config = loadConfig();
|
|
451
|
+
if (!values['no-sync'])
|
|
452
|
+
sync(config, Boolean(values.json));
|
|
431
453
|
const db = openDb(config.dbPath, { readOnly: true });
|
|
432
454
|
let rows;
|
|
433
455
|
try {
|
|
@@ -484,6 +506,73 @@ function cmdStats(argv) {
|
|
|
484
506
|
].join('\n') + '\n');
|
|
485
507
|
db.close();
|
|
486
508
|
}
|
|
509
|
+
/** Epoch ms of the last COMPLETED catch-up, or null if one never finished. */
|
|
510
|
+
function lastIndexedAt(config) {
|
|
511
|
+
if (!fs.existsSync(config.dbPath))
|
|
512
|
+
return null;
|
|
513
|
+
try {
|
|
514
|
+
const db = openDb(config.dbPath, { readOnly: true });
|
|
515
|
+
try {
|
|
516
|
+
const value = Number(getMeta(db, 'indexed_at') ?? NaN);
|
|
517
|
+
return Number.isFinite(value) ? value : null;
|
|
518
|
+
}
|
|
519
|
+
finally {
|
|
520
|
+
db.close();
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
catch {
|
|
524
|
+
return null;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* `recall status`: how far behind the index is, without touching it.
|
|
529
|
+
*
|
|
530
|
+
* Every read path syncs before it answers, so this is not what keeps results
|
|
531
|
+
* correct. It exists so a human (or a scheduler asking whether it is earning
|
|
532
|
+
* its keep) can see the lag, and tell "nothing to do" apart from "the next
|
|
533
|
+
* query pays for a month of catch-up".
|
|
534
|
+
*/
|
|
535
|
+
function cmdStatus(argv) {
|
|
536
|
+
const { values } = parseArgs({
|
|
537
|
+
args: argv,
|
|
538
|
+
options: { json: { type: 'boolean', default: false } },
|
|
539
|
+
allowPositionals: false,
|
|
540
|
+
});
|
|
541
|
+
const config = loadConfig();
|
|
542
|
+
const report = freshness(config);
|
|
543
|
+
const pending = report.changed + report.unseen + report.vanished;
|
|
544
|
+
if (values.json) {
|
|
545
|
+
process.stdout.write(JSON.stringify({
|
|
546
|
+
...report,
|
|
547
|
+
pending,
|
|
548
|
+
indexedAt: report.indexedAt
|
|
549
|
+
? new Date(report.indexedAt).toISOString()
|
|
550
|
+
: null,
|
|
551
|
+
}, null, 2) + '\n');
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
const style = makeStyle(colorsEnabled());
|
|
555
|
+
if (!report.exists) {
|
|
556
|
+
process.stdout.write([
|
|
557
|
+
`${style.bold('no index yet')} at ${tildify(report.dbPath)}`,
|
|
558
|
+
`${report.transcriptsOnDisk} transcript(s) on disk waiting to be indexed`,
|
|
559
|
+
style.dim('Run `recall index`, or just search: any query builds it.'),
|
|
560
|
+
].join('\n') + '\n');
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
const verdict = pending === 0
|
|
564
|
+
? style.bold('up to date')
|
|
565
|
+
: style.bold(`${pending} transcript(s) pending`);
|
|
566
|
+
process.stdout.write([
|
|
567
|
+
`${verdict} · last indexed ${relativeTime(report.indexedAt ? new Date(report.indexedAt).toISOString() : null)}`,
|
|
568
|
+
`${report.transcriptsIndexed} indexed · ${report.changed} changed · ${report.unseen} never seen · ${report.vanished} gone · ${report.transcriptsOnDisk} on disk`,
|
|
569
|
+
`tier ${report.tier ?? '?'} · db ${(report.dbBytes / 1e6).toFixed(1)} MB`,
|
|
570
|
+
style.dim(tildify(report.dbPath)),
|
|
571
|
+
style.dim(pending === 0
|
|
572
|
+
? 'Every search syncs first, so this is informational.'
|
|
573
|
+
: `Every search syncs first, so those ${pending} will be folded in by the next query.`),
|
|
574
|
+
].join('\n') + '\n');
|
|
575
|
+
}
|
|
487
576
|
function cmdConfig(argv) {
|
|
488
577
|
const { values } = parseArgs({
|
|
489
578
|
args: argv,
|
|
@@ -558,6 +647,8 @@ async function main() {
|
|
|
558
647
|
return cmdSql(rest);
|
|
559
648
|
case 'stats':
|
|
560
649
|
return cmdStats(rest);
|
|
650
|
+
case 'status':
|
|
651
|
+
return cmdStatus(rest);
|
|
561
652
|
case 'config':
|
|
562
653
|
return cmdConfig(rest);
|
|
563
654
|
case 'skills':
|
package/dist/cli-main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts
CHANGED
|
@@ -11,6 +11,15 @@ export interface OpenOptions {
|
|
|
11
11
|
readOnly?: boolean;
|
|
12
12
|
/** Throw instead of rebuilding when the schema version differs. */
|
|
13
13
|
noRebuild?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Leave `query_only` off on a read-only connection, so TEMP objects can be
|
|
16
|
+
* created. The index file itself is still unwritable, because that comes
|
|
17
|
+
* from opening it read-only, not from the pragma.
|
|
18
|
+
*
|
|
19
|
+
* This exists for one caller: the SQL tool shadows the real tables with temp
|
|
20
|
+
* views so arbitrary queries cannot reach private transcripts.
|
|
21
|
+
*/
|
|
22
|
+
writableTemp?: boolean;
|
|
14
23
|
}
|
|
15
24
|
export declare function getMeta(db: DB, key: string): string | undefined;
|
|
16
25
|
export declare function setMeta(db: DB, key: string, value: string): void;
|
package/dist/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,MAAM,MAAM,EAAE,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,MAAM,MAAM,EAAE,GAAG,YAAY,CAAC;AA0G9B,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/D;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIhE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,EAAE,CAyCjE;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAYpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW5D;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOvD"}
|
package/dist/db.js
CHANGED
|
@@ -8,6 +8,18 @@ import { DatabaseSync } from 'node:sqlite';
|
|
|
8
8
|
* carrying migration code forever.
|
|
9
9
|
*/
|
|
10
10
|
export const SCHEMA_VERSION = 1;
|
|
11
|
+
/**
|
|
12
|
+
* How long a connection waits for a writer to finish before giving up.
|
|
13
|
+
*
|
|
14
|
+
* Several processes share this index by design: the human's CLI, a pi
|
|
15
|
+
* extension flushing on shutdown, and any number of concurrent agents, each of
|
|
16
|
+
* which syncs before it queries. Without a busy timeout SQLite returns
|
|
17
|
+
* SQLITE_BUSY on the FIRST contended write, which surfaces to an agent as a
|
|
18
|
+
* failed recall. A warm catch-up takes ~120 ms and a cold build ~35 s, so 5 s
|
|
19
|
+
* covers every realistic overlap except a first-ever build, which is exactly
|
|
20
|
+
* the case where failing fast and reporting it is the honest answer.
|
|
21
|
+
*/
|
|
22
|
+
const BUSY_TIMEOUT_MS = 5_000;
|
|
11
23
|
const SCHEMA = `
|
|
12
24
|
CREATE TABLE IF NOT EXISTS meta(
|
|
13
25
|
key TEXT PRIMARY KEY,
|
|
@@ -117,12 +129,17 @@ export function openDb(dbPath, opts = {}) {
|
|
|
117
129
|
throw new Error(`no index at ${dbPath}. Run \`recall index\` first.`);
|
|
118
130
|
}
|
|
119
131
|
const db = new DatabaseSync(dbPath, { readOnly: true });
|
|
120
|
-
|
|
132
|
+
if (!opts.writableTemp)
|
|
133
|
+
db.exec('PRAGMA query_only = 1');
|
|
134
|
+
// Readers do not block on writers under WAL, but they do contend with
|
|
135
|
+
// checkpointing, so the timeout matters here too.
|
|
136
|
+
db.exec(`PRAGMA busy_timeout = ${BUSY_TIMEOUT_MS}`);
|
|
121
137
|
return db;
|
|
122
138
|
}
|
|
123
139
|
fs.mkdirSync(path.dirname(dbPath), { recursive: true });
|
|
124
140
|
const fresh = !fs.existsSync(dbPath);
|
|
125
141
|
const db = new DatabaseSync(dbPath);
|
|
142
|
+
db.exec(`PRAGMA busy_timeout = ${BUSY_TIMEOUT_MS}`);
|
|
126
143
|
db.exec('PRAGMA journal_mode = WAL');
|
|
127
144
|
db.exec('PRAGMA synchronous = NORMAL');
|
|
128
145
|
db.exec('PRAGMA foreign_keys = OFF');
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAIhC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFd,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/indexer.d.ts
CHANGED
|
@@ -6,6 +6,21 @@ export interface IndexOptions {
|
|
|
6
6
|
full?: boolean;
|
|
7
7
|
db?: DB;
|
|
8
8
|
onProgress?: (progress: IndexProgress) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Stop ingesting once this many ms have passed, leaving the rest for the
|
|
11
|
+
* next run. Checked BETWEEN lineages, never inside one, so the per-lineage
|
|
12
|
+
* transaction and the watermark-written-last rule both still hold.
|
|
13
|
+
*
|
|
14
|
+
* For callers that must not hang: a session shutting down after a long gap
|
|
15
|
+
* could otherwise sit through a multi-second catch-up on the way out.
|
|
16
|
+
*
|
|
17
|
+
* It bounds the INGEST LOOP, not the whole run: the scan and the identity
|
|
18
|
+
* pass ahead of it are ~120 ms on a 4,831-file corpus and always run. A full
|
|
19
|
+
* rebuild is refused outright rather than truncated, see below.
|
|
20
|
+
*/
|
|
21
|
+
budgetMs?: number;
|
|
22
|
+
/** Clock seam, so the budget can be tested without racing a real one. */
|
|
23
|
+
now?: () => number;
|
|
9
24
|
}
|
|
10
25
|
export interface IndexProgress {
|
|
11
26
|
phase: 'scan' | 'ingest';
|
|
@@ -29,6 +44,8 @@ export interface IndexStats {
|
|
|
29
44
|
bytesRead: number;
|
|
30
45
|
durationMs: number;
|
|
31
46
|
fullRebuild: boolean;
|
|
47
|
+
/** True when `budgetMs` cut the run short and work is still outstanding. */
|
|
48
|
+
budgetExhausted: boolean;
|
|
32
49
|
}
|
|
33
50
|
export declare function index(opts: IndexOptions): IndexStats;
|
|
34
51
|
/** Absolute path of the index for a config, for messages and tooling. */
|
|
@@ -38,6 +55,17 @@ export interface SyncResult {
|
|
|
38
55
|
ran: boolean;
|
|
39
56
|
stats?: IndexStats;
|
|
40
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* There is no index yet, as opposed to there being one that could not be read.
|
|
60
|
+
*
|
|
61
|
+
* The distinction is the whole point of the type. "No index" is fixed by
|
|
62
|
+
* building one; "index is locked" or "index is corrupt" is not, and a caller
|
|
63
|
+
* that collapses the two tells the user to run a command that will not help.
|
|
64
|
+
*/
|
|
65
|
+
export declare class MissingIndexError extends Error {
|
|
66
|
+
readonly dbPath: string;
|
|
67
|
+
constructor(dbPath: string);
|
|
68
|
+
}
|
|
41
69
|
/**
|
|
42
70
|
* Catch the index up, unless it was already synced within `ttlMs`.
|
|
43
71
|
*
|
|
@@ -46,5 +74,42 @@ export interface SyncResult {
|
|
|
46
74
|
* turn. The TTL is what makes "always fresh" affordable for callers that query
|
|
47
75
|
* in a burst.
|
|
48
76
|
*/
|
|
49
|
-
export declare function syncIfStale(config: Config, ttlMs?: number): SyncResult;
|
|
77
|
+
export declare function syncIfStale(config: Config, ttlMs?: number, budgetMs?: number): SyncResult;
|
|
78
|
+
export interface Freshness {
|
|
79
|
+
dbPath: string;
|
|
80
|
+
exists: boolean;
|
|
81
|
+
dbBytes: number;
|
|
82
|
+
tier: string | null;
|
|
83
|
+
/** When the last catch-up finished, epoch ms. */
|
|
84
|
+
indexedAt: number | null;
|
|
85
|
+
ageMs: number | null;
|
|
86
|
+
/** Transcripts on disk, before ignore rules. */
|
|
87
|
+
transcriptsOnDisk: number;
|
|
88
|
+
/** Transcripts the index knows about. */
|
|
89
|
+
transcriptsIndexed: number;
|
|
90
|
+
/** Known transcripts that have grown or changed since their watermark. */
|
|
91
|
+
changed: number;
|
|
92
|
+
/**
|
|
93
|
+
* Transcripts whose CONTENT is not in the index: never discovered, or
|
|
94
|
+
* discovered but not yet ingested (a run cut short by its time budget
|
|
95
|
+
* registers the file before reading it). Ignore rules applied.
|
|
96
|
+
*/
|
|
97
|
+
unseen: number;
|
|
98
|
+
/** Indexed transcripts no longer on disk, which the next sync will delete. */
|
|
99
|
+
vanished: number;
|
|
100
|
+
sources: string[];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* How far behind the index is, without changing it.
|
|
104
|
+
*
|
|
105
|
+
* This is a `stat` pass over the corpus plus a header read for the few files
|
|
106
|
+
* the index has never seen, because whether a new file is ignored can only be
|
|
107
|
+
* decided from its header `cwd`, never from its mangled directory name.
|
|
108
|
+
* Measured at ~70 ms over 4,831 transcripts.
|
|
109
|
+
*
|
|
110
|
+
* Every read path already syncs before it answers, so this is not how anything
|
|
111
|
+
* stays correct: it is how a human or an agent can SEE the lag, and how they
|
|
112
|
+
* can tell "nothing to do" apart from "about to pay for a month of catch-up".
|
|
113
|
+
*/
|
|
114
|
+
export declare function freshness(config: Config): Freshness;
|
|
50
115
|
//# sourceMappingURL=indexer.d.ts.map
|
package/dist/indexer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,SAAS,CAAC;AAahC,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,SAAS,CAAC;AAahC,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/C;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,eAAe,EAAE,OAAO,CAAC;CACzB;AAgCD,wBAAgB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CA6bpD;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,UAAU;IAC1B,qEAAqE;IACrE,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM;CAK1B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAC1B,MAAM,EAAE,MAAM,EACd,KAAK,SAAS,EACd,QAAQ,CAAC,EAAE,MAAM,GACf,UAAU,CAUZ;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gDAAgD;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAgFnD"}
|
package/dist/indexer.js
CHANGED
|
@@ -12,7 +12,8 @@ function probe(file) {
|
|
|
12
12
|
return { header: readHeader(file), headHash: headFingerprint(file) };
|
|
13
13
|
}
|
|
14
14
|
export function index(opts) {
|
|
15
|
-
const
|
|
15
|
+
const clock = opts.now ?? Date.now;
|
|
16
|
+
const started = clock();
|
|
16
17
|
const { config } = opts;
|
|
17
18
|
const db = opts.db ?? openDb(config.dbPath);
|
|
18
19
|
const report = opts.onProgress ?? (() => { });
|
|
@@ -32,6 +33,7 @@ export function index(opts) {
|
|
|
32
33
|
bytesRead: 0,
|
|
33
34
|
durationMs: 0,
|
|
34
35
|
fullRebuild: false,
|
|
36
|
+
budgetExhausted: false,
|
|
35
37
|
};
|
|
36
38
|
// A tier change alters what text exists at all, so it forces a rebuild.
|
|
37
39
|
const storedTier = getMeta(db, 'tier');
|
|
@@ -39,6 +41,18 @@ export function index(opts) {
|
|
|
39
41
|
if (storedTier !== undefined && storedTier !== config.tier)
|
|
40
42
|
full = true;
|
|
41
43
|
stats.fullRebuild = full;
|
|
44
|
+
// A rebuild is all-or-nothing: it DELETEs every chunk, entry and membership
|
|
45
|
+
// before reading a byte, so truncating one would leave an index that later
|
|
46
|
+
// queries would answer from as though it were complete. A budget means the
|
|
47
|
+
// caller cannot afford to finish, so the honest move is not to start.
|
|
48
|
+
// Reachable without `opts.full`: a tier change forces one (line above).
|
|
49
|
+
if (full && opts.budgetMs !== undefined) {
|
|
50
|
+
stats.budgetExhausted = true;
|
|
51
|
+
stats.durationMs = clock() - started;
|
|
52
|
+
if (!opts.db)
|
|
53
|
+
db.close();
|
|
54
|
+
return stats;
|
|
55
|
+
}
|
|
42
56
|
const isIgnored = matcher(config.ignore);
|
|
43
57
|
const isPrivate = matcher(config.private);
|
|
44
58
|
// Everything already known, loaded up front. This is what lets a warm run
|
|
@@ -293,6 +307,12 @@ export function index(opts) {
|
|
|
293
307
|
};
|
|
294
308
|
let done = 0;
|
|
295
309
|
for (const unit of work) {
|
|
310
|
+
// `>=` so that a budget of 0 means "do nothing", even on a machine fast
|
|
311
|
+
// enough to reach this in the same millisecond it started.
|
|
312
|
+
if (opts.budgetMs !== undefined && clock() - started >= opts.budgetMs) {
|
|
313
|
+
stats.budgetExhausted = true;
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
296
316
|
db.exec('BEGIN');
|
|
297
317
|
try {
|
|
298
318
|
const lineageId = idOf.get(unit.lineageRoot);
|
|
@@ -368,9 +388,13 @@ export function index(opts) {
|
|
|
368
388
|
});
|
|
369
389
|
}
|
|
370
390
|
setMeta(db, 'tier', config.tier);
|
|
371
|
-
|
|
391
|
+
// Only claim to be caught up when we actually are. `indexed_at` is what the
|
|
392
|
+
// sync TTL reads, so advancing it after a budget-truncated run would let the
|
|
393
|
+
// next query skip the catch-up and answer from an index we KNOW is behind.
|
|
394
|
+
if (!stats.budgetExhausted)
|
|
395
|
+
setMeta(db, 'indexed_at', String(Date.now()));
|
|
372
396
|
setMeta(db, 'roots', JSON.stringify(config.sources.map((s) => s.root)));
|
|
373
|
-
stats.durationMs =
|
|
397
|
+
stats.durationMs = clock() - started;
|
|
374
398
|
if (!opts.db)
|
|
375
399
|
db.close();
|
|
376
400
|
return stats;
|
|
@@ -379,6 +403,21 @@ export function index(opts) {
|
|
|
379
403
|
export function describeIndex(config) {
|
|
380
404
|
return path.resolve(config.dbPath);
|
|
381
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* There is no index yet, as opposed to there being one that could not be read.
|
|
408
|
+
*
|
|
409
|
+
* The distinction is the whole point of the type. "No index" is fixed by
|
|
410
|
+
* building one; "index is locked" or "index is corrupt" is not, and a caller
|
|
411
|
+
* that collapses the two tells the user to run a command that will not help.
|
|
412
|
+
*/
|
|
413
|
+
export class MissingIndexError extends Error {
|
|
414
|
+
dbPath;
|
|
415
|
+
constructor(dbPath) {
|
|
416
|
+
super(`no index at ${dbPath}`);
|
|
417
|
+
this.name = 'MissingIndexError';
|
|
418
|
+
this.dbPath = dbPath;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
382
421
|
/**
|
|
383
422
|
* Catch the index up, unless it was already synced within `ttlMs`.
|
|
384
423
|
*
|
|
@@ -387,18 +426,111 @@ export function describeIndex(config) {
|
|
|
387
426
|
* turn. The TTL is what makes "always fresh" affordable for callers that query
|
|
388
427
|
* in a burst.
|
|
389
428
|
*/
|
|
390
|
-
export function syncIfStale(config, ttlMs = 15_000) {
|
|
429
|
+
export function syncIfStale(config, ttlMs = 15_000, budgetMs) {
|
|
391
430
|
if (!fs.existsSync(config.dbPath))
|
|
392
|
-
throw new
|
|
431
|
+
throw new MissingIndexError(config.dbPath);
|
|
393
432
|
const db = openDb(config.dbPath);
|
|
394
433
|
try {
|
|
395
434
|
const last = Number(getMeta(db, 'indexed_at') ?? 0);
|
|
396
435
|
if (Number.isFinite(last) && Date.now() - last < ttlMs)
|
|
397
436
|
return { ran: false };
|
|
398
|
-
return { ran: true, stats: index({ config, db }) };
|
|
437
|
+
return { ran: true, stats: index({ config, db, budgetMs }) };
|
|
399
438
|
}
|
|
400
439
|
finally {
|
|
401
440
|
db.close();
|
|
402
441
|
}
|
|
403
442
|
}
|
|
443
|
+
/**
|
|
444
|
+
* How far behind the index is, without changing it.
|
|
445
|
+
*
|
|
446
|
+
* This is a `stat` pass over the corpus plus a header read for the few files
|
|
447
|
+
* the index has never seen, because whether a new file is ignored can only be
|
|
448
|
+
* decided from its header `cwd`, never from its mangled directory name.
|
|
449
|
+
* Measured at ~70 ms over 4,831 transcripts.
|
|
450
|
+
*
|
|
451
|
+
* Every read path already syncs before it answers, so this is not how anything
|
|
452
|
+
* stays correct: it is how a human or an agent can SEE the lag, and how they
|
|
453
|
+
* can tell "nothing to do" apart from "about to pay for a month of catch-up".
|
|
454
|
+
*/
|
|
455
|
+
export function freshness(config) {
|
|
456
|
+
const report = {
|
|
457
|
+
dbPath: config.dbPath,
|
|
458
|
+
exists: fs.existsSync(config.dbPath),
|
|
459
|
+
dbBytes: 0,
|
|
460
|
+
tier: null,
|
|
461
|
+
indexedAt: null,
|
|
462
|
+
ageMs: null,
|
|
463
|
+
transcriptsOnDisk: 0,
|
|
464
|
+
transcriptsIndexed: 0,
|
|
465
|
+
changed: 0,
|
|
466
|
+
unseen: 0,
|
|
467
|
+
vanished: 0,
|
|
468
|
+
sources: config.sources.map((s) => s.root),
|
|
469
|
+
};
|
|
470
|
+
// Null size/mtime means "row exists, content never ingested", which is a
|
|
471
|
+
// different thing from "ingested and since changed", so the nulls are kept.
|
|
472
|
+
const known = new Map();
|
|
473
|
+
if (report.exists) {
|
|
474
|
+
report.dbBytes = fs.statSync(config.dbPath).size;
|
|
475
|
+
const db = openDb(config.dbPath, { readOnly: true });
|
|
476
|
+
try {
|
|
477
|
+
report.tier = getMeta(db, 'tier') ?? null;
|
|
478
|
+
const at = Number(getMeta(db, 'indexed_at') ?? NaN);
|
|
479
|
+
if (Number.isFinite(at)) {
|
|
480
|
+
report.indexedAt = at;
|
|
481
|
+
report.ageMs = Date.now() - at;
|
|
482
|
+
}
|
|
483
|
+
for (const row of db
|
|
484
|
+
.prepare('SELECT path, size, mtime FROM file')
|
|
485
|
+
.all()) {
|
|
486
|
+
known.set(row.path, {
|
|
487
|
+
size: row.size === null ? null : num(row.size),
|
|
488
|
+
mtime: row.mtime === null ? null : num(row.mtime),
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
finally {
|
|
493
|
+
db.close();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
report.transcriptsIndexed = known.size;
|
|
497
|
+
const isIgnored = matcher(config.ignore);
|
|
498
|
+
// Tracked so a deletion counts as pending work too: reporting "up to date"
|
|
499
|
+
// while the next sync still has N `deleteFile` calls to make would undercut
|
|
500
|
+
// the only thing this command is for.
|
|
501
|
+
const seen = new Set();
|
|
502
|
+
for (const source of config.sources) {
|
|
503
|
+
if (!fs.existsSync(source.root))
|
|
504
|
+
continue;
|
|
505
|
+
for (const file of listTranscripts(source.root)) {
|
|
506
|
+
report.transcriptsOnDisk++;
|
|
507
|
+
let st;
|
|
508
|
+
try {
|
|
509
|
+
st = fs.statSync(file);
|
|
510
|
+
}
|
|
511
|
+
catch {
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
514
|
+
seen.add(file);
|
|
515
|
+
const row = known.get(file);
|
|
516
|
+
if (!row) {
|
|
517
|
+
// Only a file the index has never heard of has to be opened, and only
|
|
518
|
+
// because the ignore rules match the header cwd, never the mangled
|
|
519
|
+
// directory name.
|
|
520
|
+
const header = readHeader(file);
|
|
521
|
+
if (header && !isIgnored(header.cwd ?? file))
|
|
522
|
+
report.unseen++;
|
|
523
|
+
continue;
|
|
524
|
+
}
|
|
525
|
+
if (row.size === null || row.mtime === null)
|
|
526
|
+
report.unseen++;
|
|
527
|
+
else if (row.size !== st.size || row.mtime !== Math.floor(st.mtimeMs))
|
|
528
|
+
report.changed++;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
for (const knownPath of known.keys())
|
|
532
|
+
if (!seen.has(knownPath))
|
|
533
|
+
report.vanished++;
|
|
534
|
+
return report;
|
|
535
|
+
}
|
|
404
536
|
//# sourceMappingURL=indexer.js.map
|
package/dist/indexer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/memonaut/SKILL.md
CHANGED
|
@@ -107,11 +107,13 @@ recall show 2585 --from 120
|
|
|
107
107
|
recall sql "select project, count(*) n from file group by 1 order by n desc limit 10"
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
Add `--json` for machine-readable output.
|
|
110
|
+
Add `--json` for machine-readable output. `recall status` reports how fresh the index is; `recall status --json` gives `indexedAt`, `ageMs`, `changed`, `unseen`.
|
|
111
|
+
|
|
112
|
+
You do not have to keep the index fresh. Every query runs an incremental catch-up first (~120 ms warm): all three tools, and `recall search` / `recall show` / `recall sql` on the CLI. If no index exists at all, the first query builds one (~35 s, once) and tells you it did. Pass that on to the user when it happens, and otherwise do not offer to run `recall index`: it is not what makes results current.
|
|
111
113
|
|
|
112
114
|
## What is not there
|
|
113
115
|
|
|
114
|
-
- **Private conversations.** The user's config lists working directories that are indexed for them but never exposed to tools. If a thread comes back as private, do not try to route around it; tell the user.
|
|
116
|
+
- **Private conversations.** The user's config lists working directories that are indexed for them but never exposed to tools. This holds for `recall_sql` too: the tables it queries are filtered, so a `COUNT(*)` is a count of what you may see, and `main.file`, `ATTACH` and `chunk_fts` are refused because they would go around that filter. If a thread comes back as private, do not try to route around it; tell the user.
|
|
115
117
|
- **Full tool output.** Tool results are stored truncated or not at all (they are 42% of the bytes and rarely what anyone is looking for). The discussion is indexed; the command output usually is not. For full fidelity the original transcript is still on disk, and `recall search --regex` reads it.
|
|
116
118
|
- **Anything the user chose to ignore.** Ignored directories were never read at all.
|
|
117
119
|
|
package/src/cli-main.ts
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
tildify,
|
|
14
14
|
type Style,
|
|
15
15
|
} from './format.js';
|
|
16
|
-
import {index} from './indexer.js';
|
|
16
|
+
import {freshness, index} from './indexer.js';
|
|
17
17
|
import {TIERS, type ChunkKind, type SearchHit, type Tier} from './model.js';
|
|
18
18
|
import {readRawEntry} from './pi-source.js';
|
|
19
19
|
import {
|
|
@@ -40,8 +40,10 @@ COMMANDS
|
|
|
40
40
|
search <query...> Search transcripts, grouped by fork lineage
|
|
41
41
|
search --regex <pat> Exact regex search over the original transcripts
|
|
42
42
|
show <ref> Print a thread (file id, session uuid prefix, name or path)
|
|
43
|
+
(show and sql sync first too; --no-sync skips it)
|
|
43
44
|
sql <query> Run a read-only SQL query against the index
|
|
44
45
|
stats Summarise what is indexed
|
|
46
|
+
status How fresh the index is, and how much is pending
|
|
45
47
|
config Show config paths, or write a starter config
|
|
46
48
|
skills [install] List or install the agent skill (into ~/.agents/skills)
|
|
47
49
|
|
|
@@ -160,15 +162,28 @@ function withTier(config: Config, tier: string | undefined): Config {
|
|
|
160
162
|
return {...config, tier: tier as Tier};
|
|
161
163
|
}
|
|
162
164
|
|
|
163
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Cheap incremental catch-up so a query is never answered from a stale index.
|
|
167
|
+
*
|
|
168
|
+
* A missing index builds itself here rather than failing. Telling somebody who
|
|
169
|
+
* just typed a search to go and type a different command first is a worse
|
|
170
|
+
* answer than taking ~35 s once and saying so.
|
|
171
|
+
*/
|
|
164
172
|
function sync(config: Config, quiet: boolean): void {
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
// "Cold" is about whether a build has ever FINISHED, not whether a file is
|
|
174
|
+
// there: an interrupted first build leaves a file behind, and judging by
|
|
175
|
+
// existence alone would swallow the banner and hand the user a silent
|
|
176
|
+
// 35-second hang the second time too.
|
|
177
|
+
const cold = lastIndexedAt(config) === null;
|
|
178
|
+
if (cold && !quiet) {
|
|
179
|
+
process.stderr.write(
|
|
180
|
+
`recall: no index at ${tildify(config.dbPath)} yet, building it once (well under a minute)…\n`,
|
|
181
|
+
);
|
|
167
182
|
}
|
|
168
183
|
const stats = index({config, onProgress: () => {}});
|
|
169
184
|
if (!quiet && stats.filesIndexed > 0) {
|
|
170
185
|
process.stderr.write(
|
|
171
|
-
`recall: synced ${stats.filesIndexed} transcript(s) in ${stats.durationMs}ms\n`,
|
|
186
|
+
`recall: ${cold ? 'indexed' : 'synced'} ${stats.filesIndexed} transcript(s) in ${stats.durationMs}ms\n`,
|
|
172
187
|
);
|
|
173
188
|
}
|
|
174
189
|
}
|
|
@@ -411,6 +426,7 @@ function cmdShow(argv: string[]): void {
|
|
|
411
426
|
limit: {type: 'string', default: '40'},
|
|
412
427
|
full: {type: 'boolean', default: false},
|
|
413
428
|
json: {type: 'boolean', default: false},
|
|
429
|
+
'no-sync': {type: 'boolean', default: false},
|
|
414
430
|
},
|
|
415
431
|
allowPositionals: true,
|
|
416
432
|
});
|
|
@@ -421,6 +437,10 @@ function cmdShow(argv: string[]): void {
|
|
|
421
437
|
);
|
|
422
438
|
|
|
423
439
|
const config = loadConfig();
|
|
440
|
+
// A thread can have grown since the search that found it, so this syncs too:
|
|
441
|
+
// "every query syncs before it answers" has to be true of all of them, or the
|
|
442
|
+
// sentence is not worth writing down.
|
|
443
|
+
if (!values['no-sync']) sync(config, Boolean(values.json));
|
|
424
444
|
const db = openDb(config.dbPath, {readOnly: true});
|
|
425
445
|
const thread = resolveThread(db, ref);
|
|
426
446
|
if (!thread) fail(`no thread matching "${ref}"`);
|
|
@@ -489,12 +509,14 @@ function cmdSql(argv: string[]): void {
|
|
|
489
509
|
options: {
|
|
490
510
|
json: {type: 'boolean', default: false},
|
|
491
511
|
limit: {type: 'string', default: '200'},
|
|
512
|
+
'no-sync': {type: 'boolean', default: false},
|
|
492
513
|
},
|
|
493
514
|
allowPositionals: true,
|
|
494
515
|
});
|
|
495
516
|
const sql = positionals.join(' ').trim();
|
|
496
517
|
if (!sql) fail('no SQL given');
|
|
497
518
|
const config = loadConfig();
|
|
519
|
+
if (!values['no-sync']) sync(config, Boolean(values.json));
|
|
498
520
|
const db = openDb(config.dbPath, {readOnly: true});
|
|
499
521
|
let rows: Array<Record<string, unknown>>;
|
|
500
522
|
try {
|
|
@@ -555,6 +577,85 @@ function cmdStats(argv: string[]): void {
|
|
|
555
577
|
db.close();
|
|
556
578
|
}
|
|
557
579
|
|
|
580
|
+
/** Epoch ms of the last COMPLETED catch-up, or null if one never finished. */
|
|
581
|
+
function lastIndexedAt(config: Config): number | null {
|
|
582
|
+
if (!fs.existsSync(config.dbPath)) return null;
|
|
583
|
+
try {
|
|
584
|
+
const db = openDb(config.dbPath, {readOnly: true});
|
|
585
|
+
try {
|
|
586
|
+
const value = Number(getMeta(db, 'indexed_at') ?? NaN);
|
|
587
|
+
return Number.isFinite(value) ? value : null;
|
|
588
|
+
} finally {
|
|
589
|
+
db.close();
|
|
590
|
+
}
|
|
591
|
+
} catch {
|
|
592
|
+
return null;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* `recall status`: how far behind the index is, without touching it.
|
|
598
|
+
*
|
|
599
|
+
* Every read path syncs before it answers, so this is not what keeps results
|
|
600
|
+
* correct. It exists so a human (or a scheduler asking whether it is earning
|
|
601
|
+
* its keep) can see the lag, and tell "nothing to do" apart from "the next
|
|
602
|
+
* query pays for a month of catch-up".
|
|
603
|
+
*/
|
|
604
|
+
function cmdStatus(argv: string[]): void {
|
|
605
|
+
const {values} = parseArgs({
|
|
606
|
+
args: argv,
|
|
607
|
+
options: {json: {type: 'boolean', default: false}},
|
|
608
|
+
allowPositionals: false,
|
|
609
|
+
});
|
|
610
|
+
const config = loadConfig();
|
|
611
|
+
const report = freshness(config);
|
|
612
|
+
const pending = report.changed + report.unseen + report.vanished;
|
|
613
|
+
if (values.json) {
|
|
614
|
+
process.stdout.write(
|
|
615
|
+
JSON.stringify(
|
|
616
|
+
{
|
|
617
|
+
...report,
|
|
618
|
+
pending,
|
|
619
|
+
indexedAt: report.indexedAt
|
|
620
|
+
? new Date(report.indexedAt).toISOString()
|
|
621
|
+
: null,
|
|
622
|
+
},
|
|
623
|
+
null,
|
|
624
|
+
2,
|
|
625
|
+
) + '\n',
|
|
626
|
+
);
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
const style = makeStyle(colorsEnabled());
|
|
630
|
+
if (!report.exists) {
|
|
631
|
+
process.stdout.write(
|
|
632
|
+
[
|
|
633
|
+
`${style.bold('no index yet')} at ${tildify(report.dbPath)}`,
|
|
634
|
+
`${report.transcriptsOnDisk} transcript(s) on disk waiting to be indexed`,
|
|
635
|
+
style.dim('Run `recall index`, or just search: any query builds it.'),
|
|
636
|
+
].join('\n') + '\n',
|
|
637
|
+
);
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
const verdict =
|
|
641
|
+
pending === 0
|
|
642
|
+
? style.bold('up to date')
|
|
643
|
+
: style.bold(`${pending} transcript(s) pending`);
|
|
644
|
+
process.stdout.write(
|
|
645
|
+
[
|
|
646
|
+
`${verdict} · last indexed ${relativeTime(report.indexedAt ? new Date(report.indexedAt).toISOString() : null)}`,
|
|
647
|
+
`${report.transcriptsIndexed} indexed · ${report.changed} changed · ${report.unseen} never seen · ${report.vanished} gone · ${report.transcriptsOnDisk} on disk`,
|
|
648
|
+
`tier ${report.tier ?? '?'} · db ${(report.dbBytes / 1e6).toFixed(1)} MB`,
|
|
649
|
+
style.dim(tildify(report.dbPath)),
|
|
650
|
+
style.dim(
|
|
651
|
+
pending === 0
|
|
652
|
+
? 'Every search syncs first, so this is informational.'
|
|
653
|
+
: `Every search syncs first, so those ${pending} will be folded in by the next query.`,
|
|
654
|
+
),
|
|
655
|
+
].join('\n') + '\n',
|
|
656
|
+
);
|
|
657
|
+
}
|
|
658
|
+
|
|
558
659
|
function cmdConfig(argv: string[]): void {
|
|
559
660
|
const {values} = parseArgs({
|
|
560
661
|
args: argv,
|
|
@@ -646,6 +747,8 @@ async function main(): Promise<void> {
|
|
|
646
747
|
return cmdSql(rest);
|
|
647
748
|
case 'stats':
|
|
648
749
|
return cmdStats(rest);
|
|
750
|
+
case 'status':
|
|
751
|
+
return cmdStatus(rest);
|
|
649
752
|
case 'config':
|
|
650
753
|
return cmdConfig(rest);
|
|
651
754
|
case 'skills':
|
package/src/db.ts
CHANGED
|
@@ -12,6 +12,19 @@ export const SCHEMA_VERSION = 1;
|
|
|
12
12
|
|
|
13
13
|
export type DB = DatabaseSync;
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* How long a connection waits for a writer to finish before giving up.
|
|
17
|
+
*
|
|
18
|
+
* Several processes share this index by design: the human's CLI, a pi
|
|
19
|
+
* extension flushing on shutdown, and any number of concurrent agents, each of
|
|
20
|
+
* which syncs before it queries. Without a busy timeout SQLite returns
|
|
21
|
+
* SQLITE_BUSY on the FIRST contended write, which surfaces to an agent as a
|
|
22
|
+
* failed recall. A warm catch-up takes ~120 ms and a cold build ~35 s, so 5 s
|
|
23
|
+
* covers every realistic overlap except a first-ever build, which is exactly
|
|
24
|
+
* the case where failing fast and reporting it is the honest answer.
|
|
25
|
+
*/
|
|
26
|
+
const BUSY_TIMEOUT_MS = 5_000;
|
|
27
|
+
|
|
15
28
|
const SCHEMA = `
|
|
16
29
|
CREATE TABLE IF NOT EXISTS meta(
|
|
17
30
|
key TEXT PRIMARY KEY,
|
|
@@ -107,6 +120,15 @@ export interface OpenOptions {
|
|
|
107
120
|
readOnly?: boolean;
|
|
108
121
|
/** Throw instead of rebuilding when the schema version differs. */
|
|
109
122
|
noRebuild?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Leave `query_only` off on a read-only connection, so TEMP objects can be
|
|
125
|
+
* created. The index file itself is still unwritable, because that comes
|
|
126
|
+
* from opening it read-only, not from the pragma.
|
|
127
|
+
*
|
|
128
|
+
* This exists for one caller: the SQL tool shadows the real tables with temp
|
|
129
|
+
* views so arbitrary queries cannot reach private transcripts.
|
|
130
|
+
*/
|
|
131
|
+
writableTemp?: boolean;
|
|
110
132
|
}
|
|
111
133
|
|
|
112
134
|
export function getMeta(db: DB, key: string): string | undefined {
|
|
@@ -133,13 +155,17 @@ export function openDb(dbPath: string, opts: OpenOptions = {}): DB {
|
|
|
133
155
|
throw new Error(`no index at ${dbPath}. Run \`recall index\` first.`);
|
|
134
156
|
}
|
|
135
157
|
const db = new DatabaseSync(dbPath, {readOnly: true});
|
|
136
|
-
db.exec('PRAGMA query_only = 1');
|
|
158
|
+
if (!opts.writableTemp) db.exec('PRAGMA query_only = 1');
|
|
159
|
+
// Readers do not block on writers under WAL, but they do contend with
|
|
160
|
+
// checkpointing, so the timeout matters here too.
|
|
161
|
+
db.exec(`PRAGMA busy_timeout = ${BUSY_TIMEOUT_MS}`);
|
|
137
162
|
return db;
|
|
138
163
|
}
|
|
139
164
|
|
|
140
165
|
fs.mkdirSync(path.dirname(dbPath), {recursive: true});
|
|
141
166
|
const fresh = !fs.existsSync(dbPath);
|
|
142
167
|
const db = new DatabaseSync(dbPath);
|
|
168
|
+
db.exec(`PRAGMA busy_timeout = ${BUSY_TIMEOUT_MS}`);
|
|
143
169
|
db.exec('PRAGMA journal_mode = WAL');
|
|
144
170
|
db.exec('PRAGMA synchronous = NORMAL');
|
|
145
171
|
db.exec('PRAGMA foreign_keys = OFF');
|
package/src/indexer.ts
CHANGED
|
@@ -20,6 +20,21 @@ export interface IndexOptions {
|
|
|
20
20
|
full?: boolean;
|
|
21
21
|
db?: DB;
|
|
22
22
|
onProgress?: (progress: IndexProgress) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Stop ingesting once this many ms have passed, leaving the rest for the
|
|
25
|
+
* next run. Checked BETWEEN lineages, never inside one, so the per-lineage
|
|
26
|
+
* transaction and the watermark-written-last rule both still hold.
|
|
27
|
+
*
|
|
28
|
+
* For callers that must not hang: a session shutting down after a long gap
|
|
29
|
+
* could otherwise sit through a multi-second catch-up on the way out.
|
|
30
|
+
*
|
|
31
|
+
* It bounds the INGEST LOOP, not the whole run: the scan and the identity
|
|
32
|
+
* pass ahead of it are ~120 ms on a 4,831-file corpus and always run. A full
|
|
33
|
+
* rebuild is refused outright rather than truncated, see below.
|
|
34
|
+
*/
|
|
35
|
+
budgetMs?: number;
|
|
36
|
+
/** Clock seam, so the budget can be tested without racing a real one. */
|
|
37
|
+
now?: () => number;
|
|
23
38
|
}
|
|
24
39
|
|
|
25
40
|
export interface IndexProgress {
|
|
@@ -45,6 +60,8 @@ export interface IndexStats {
|
|
|
45
60
|
bytesRead: number;
|
|
46
61
|
durationMs: number;
|
|
47
62
|
fullRebuild: boolean;
|
|
63
|
+
/** True when `budgetMs` cut the run short and work is still outstanding. */
|
|
64
|
+
budgetExhausted: boolean;
|
|
48
65
|
}
|
|
49
66
|
|
|
50
67
|
interface FileRow {
|
|
@@ -78,7 +95,8 @@ function probe(file: string): {
|
|
|
78
95
|
}
|
|
79
96
|
|
|
80
97
|
export function index(opts: IndexOptions): IndexStats {
|
|
81
|
-
const
|
|
98
|
+
const clock = opts.now ?? Date.now;
|
|
99
|
+
const started = clock();
|
|
82
100
|
const {config} = opts;
|
|
83
101
|
const db = opts.db ?? openDb(config.dbPath);
|
|
84
102
|
const report = opts.onProgress ?? (() => {});
|
|
@@ -99,6 +117,7 @@ export function index(opts: IndexOptions): IndexStats {
|
|
|
99
117
|
bytesRead: 0,
|
|
100
118
|
durationMs: 0,
|
|
101
119
|
fullRebuild: false,
|
|
120
|
+
budgetExhausted: false,
|
|
102
121
|
};
|
|
103
122
|
|
|
104
123
|
// A tier change alters what text exists at all, so it forces a rebuild.
|
|
@@ -107,6 +126,18 @@ export function index(opts: IndexOptions): IndexStats {
|
|
|
107
126
|
if (storedTier !== undefined && storedTier !== config.tier) full = true;
|
|
108
127
|
stats.fullRebuild = full;
|
|
109
128
|
|
|
129
|
+
// A rebuild is all-or-nothing: it DELETEs every chunk, entry and membership
|
|
130
|
+
// before reading a byte, so truncating one would leave an index that later
|
|
131
|
+
// queries would answer from as though it were complete. A budget means the
|
|
132
|
+
// caller cannot afford to finish, so the honest move is not to start.
|
|
133
|
+
// Reachable without `opts.full`: a tier change forces one (line above).
|
|
134
|
+
if (full && opts.budgetMs !== undefined) {
|
|
135
|
+
stats.budgetExhausted = true;
|
|
136
|
+
stats.durationMs = clock() - started;
|
|
137
|
+
if (!opts.db) db.close();
|
|
138
|
+
return stats;
|
|
139
|
+
}
|
|
140
|
+
|
|
110
141
|
const isIgnored = matcher(config.ignore);
|
|
111
142
|
const isPrivate = matcher(config.private);
|
|
112
143
|
|
|
@@ -397,6 +428,12 @@ export function index(opts: IndexOptions): IndexStats {
|
|
|
397
428
|
|
|
398
429
|
let done = 0;
|
|
399
430
|
for (const unit of work) {
|
|
431
|
+
// `>=` so that a budget of 0 means "do nothing", even on a machine fast
|
|
432
|
+
// enough to reach this in the same millisecond it started.
|
|
433
|
+
if (opts.budgetMs !== undefined && clock() - started >= opts.budgetMs) {
|
|
434
|
+
stats.budgetExhausted = true;
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
400
437
|
db.exec('BEGIN');
|
|
401
438
|
try {
|
|
402
439
|
const lineageId = idOf.get(unit.lineageRoot);
|
|
@@ -493,10 +530,13 @@ export function index(opts: IndexOptions): IndexStats {
|
|
|
493
530
|
}
|
|
494
531
|
|
|
495
532
|
setMeta(db, 'tier', config.tier);
|
|
496
|
-
|
|
533
|
+
// Only claim to be caught up when we actually are. `indexed_at` is what the
|
|
534
|
+
// sync TTL reads, so advancing it after a budget-truncated run would let the
|
|
535
|
+
// next query skip the catch-up and answer from an index we KNOW is behind.
|
|
536
|
+
if (!stats.budgetExhausted) setMeta(db, 'indexed_at', String(Date.now()));
|
|
497
537
|
setMeta(db, 'roots', JSON.stringify(config.sources.map((s) => s.root)));
|
|
498
538
|
|
|
499
|
-
stats.durationMs =
|
|
539
|
+
stats.durationMs = clock() - started;
|
|
500
540
|
if (!opts.db) db.close();
|
|
501
541
|
return stats;
|
|
502
542
|
}
|
|
@@ -512,6 +552,22 @@ export interface SyncResult {
|
|
|
512
552
|
stats?: IndexStats;
|
|
513
553
|
}
|
|
514
554
|
|
|
555
|
+
/**
|
|
556
|
+
* There is no index yet, as opposed to there being one that could not be read.
|
|
557
|
+
*
|
|
558
|
+
* The distinction is the whole point of the type. "No index" is fixed by
|
|
559
|
+
* building one; "index is locked" or "index is corrupt" is not, and a caller
|
|
560
|
+
* that collapses the two tells the user to run a command that will not help.
|
|
561
|
+
*/
|
|
562
|
+
export class MissingIndexError extends Error {
|
|
563
|
+
readonly dbPath: string;
|
|
564
|
+
constructor(dbPath: string) {
|
|
565
|
+
super(`no index at ${dbPath}`);
|
|
566
|
+
this.name = 'MissingIndexError';
|
|
567
|
+
this.dbPath = dbPath;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
515
571
|
/**
|
|
516
572
|
* Catch the index up, unless it was already synced within `ttlMs`.
|
|
517
573
|
*
|
|
@@ -520,15 +576,137 @@ export interface SyncResult {
|
|
|
520
576
|
* turn. The TTL is what makes "always fresh" affordable for callers that query
|
|
521
577
|
* in a burst.
|
|
522
578
|
*/
|
|
523
|
-
export function syncIfStale(
|
|
524
|
-
|
|
525
|
-
|
|
579
|
+
export function syncIfStale(
|
|
580
|
+
config: Config,
|
|
581
|
+
ttlMs = 15_000,
|
|
582
|
+
budgetMs?: number,
|
|
583
|
+
): SyncResult {
|
|
584
|
+
if (!fs.existsSync(config.dbPath)) throw new MissingIndexError(config.dbPath);
|
|
526
585
|
const db = openDb(config.dbPath);
|
|
527
586
|
try {
|
|
528
587
|
const last = Number(getMeta(db, 'indexed_at') ?? 0);
|
|
529
588
|
if (Number.isFinite(last) && Date.now() - last < ttlMs) return {ran: false};
|
|
530
|
-
return {ran: true, stats: index({config, db})};
|
|
589
|
+
return {ran: true, stats: index({config, db, budgetMs})};
|
|
531
590
|
} finally {
|
|
532
591
|
db.close();
|
|
533
592
|
}
|
|
534
593
|
}
|
|
594
|
+
|
|
595
|
+
export interface Freshness {
|
|
596
|
+
dbPath: string;
|
|
597
|
+
exists: boolean;
|
|
598
|
+
dbBytes: number;
|
|
599
|
+
tier: string | null;
|
|
600
|
+
/** When the last catch-up finished, epoch ms. */
|
|
601
|
+
indexedAt: number | null;
|
|
602
|
+
ageMs: number | null;
|
|
603
|
+
/** Transcripts on disk, before ignore rules. */
|
|
604
|
+
transcriptsOnDisk: number;
|
|
605
|
+
/** Transcripts the index knows about. */
|
|
606
|
+
transcriptsIndexed: number;
|
|
607
|
+
/** Known transcripts that have grown or changed since their watermark. */
|
|
608
|
+
changed: number;
|
|
609
|
+
/**
|
|
610
|
+
* Transcripts whose CONTENT is not in the index: never discovered, or
|
|
611
|
+
* discovered but not yet ingested (a run cut short by its time budget
|
|
612
|
+
* registers the file before reading it). Ignore rules applied.
|
|
613
|
+
*/
|
|
614
|
+
unseen: number;
|
|
615
|
+
/** Indexed transcripts no longer on disk, which the next sync will delete. */
|
|
616
|
+
vanished: number;
|
|
617
|
+
sources: string[];
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* How far behind the index is, without changing it.
|
|
622
|
+
*
|
|
623
|
+
* This is a `stat` pass over the corpus plus a header read for the few files
|
|
624
|
+
* the index has never seen, because whether a new file is ignored can only be
|
|
625
|
+
* decided from its header `cwd`, never from its mangled directory name.
|
|
626
|
+
* Measured at ~70 ms over 4,831 transcripts.
|
|
627
|
+
*
|
|
628
|
+
* Every read path already syncs before it answers, so this is not how anything
|
|
629
|
+
* stays correct: it is how a human or an agent can SEE the lag, and how they
|
|
630
|
+
* can tell "nothing to do" apart from "about to pay for a month of catch-up".
|
|
631
|
+
*/
|
|
632
|
+
export function freshness(config: Config): Freshness {
|
|
633
|
+
const report: Freshness = {
|
|
634
|
+
dbPath: config.dbPath,
|
|
635
|
+
exists: fs.existsSync(config.dbPath),
|
|
636
|
+
dbBytes: 0,
|
|
637
|
+
tier: null,
|
|
638
|
+
indexedAt: null,
|
|
639
|
+
ageMs: null,
|
|
640
|
+
transcriptsOnDisk: 0,
|
|
641
|
+
transcriptsIndexed: 0,
|
|
642
|
+
changed: 0,
|
|
643
|
+
unseen: 0,
|
|
644
|
+
vanished: 0,
|
|
645
|
+
sources: config.sources.map((s) => s.root),
|
|
646
|
+
};
|
|
647
|
+
|
|
648
|
+
// Null size/mtime means "row exists, content never ingested", which is a
|
|
649
|
+
// different thing from "ingested and since changed", so the nulls are kept.
|
|
650
|
+
const known = new Map<string, {size: number | null; mtime: number | null}>();
|
|
651
|
+
if (report.exists) {
|
|
652
|
+
report.dbBytes = fs.statSync(config.dbPath).size;
|
|
653
|
+
const db = openDb(config.dbPath, {readOnly: true});
|
|
654
|
+
try {
|
|
655
|
+
report.tier = getMeta(db, 'tier') ?? null;
|
|
656
|
+
const at = Number(getMeta(db, 'indexed_at') ?? NaN);
|
|
657
|
+
if (Number.isFinite(at)) {
|
|
658
|
+
report.indexedAt = at;
|
|
659
|
+
report.ageMs = Date.now() - at;
|
|
660
|
+
}
|
|
661
|
+
for (const row of db
|
|
662
|
+
.prepare('SELECT path, size, mtime FROM file')
|
|
663
|
+
.all() as unknown as Array<{
|
|
664
|
+
path: string;
|
|
665
|
+
size: number | null;
|
|
666
|
+
mtime: number | null;
|
|
667
|
+
}>) {
|
|
668
|
+
known.set(row.path, {
|
|
669
|
+
size: row.size === null ? null : num(row.size),
|
|
670
|
+
mtime: row.mtime === null ? null : num(row.mtime),
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
} finally {
|
|
674
|
+
db.close();
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
report.transcriptsIndexed = known.size;
|
|
678
|
+
|
|
679
|
+
const isIgnored = matcher(config.ignore);
|
|
680
|
+
// Tracked so a deletion counts as pending work too: reporting "up to date"
|
|
681
|
+
// while the next sync still has N `deleteFile` calls to make would undercut
|
|
682
|
+
// the only thing this command is for.
|
|
683
|
+
const seen = new Set<string>();
|
|
684
|
+
for (const source of config.sources) {
|
|
685
|
+
if (!fs.existsSync(source.root)) continue;
|
|
686
|
+
for (const file of listTranscripts(source.root)) {
|
|
687
|
+
report.transcriptsOnDisk++;
|
|
688
|
+
let st: fs.Stats;
|
|
689
|
+
try {
|
|
690
|
+
st = fs.statSync(file);
|
|
691
|
+
} catch {
|
|
692
|
+
continue;
|
|
693
|
+
}
|
|
694
|
+
seen.add(file);
|
|
695
|
+
const row = known.get(file);
|
|
696
|
+
if (!row) {
|
|
697
|
+
// Only a file the index has never heard of has to be opened, and only
|
|
698
|
+
// because the ignore rules match the header cwd, never the mangled
|
|
699
|
+
// directory name.
|
|
700
|
+
const header = readHeader(file);
|
|
701
|
+
if (header && !isIgnored(header.cwd ?? file)) report.unseen++;
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
704
|
+
if (row.size === null || row.mtime === null) report.unseen++;
|
|
705
|
+
else if (row.size !== st.size || row.mtime !== Math.floor(st.mtimeMs))
|
|
706
|
+
report.changed++;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
for (const knownPath of known.keys())
|
|
710
|
+
if (!seen.has(knownPath)) report.vanished++;
|
|
711
|
+
return report;
|
|
712
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"silence-sqlite-warning.d.ts","sourceRoot":"","sources":["../src/silence-sqlite-warning.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { silenceSqliteWarning } from './quiet.js';
|
|
2
|
-
/**
|
|
3
|
-
* Side-effect module. Imported FIRST by the CLI so the patch is installed
|
|
4
|
-
* before `node:sqlite` is ever loaded: ES modules evaluate all imports before
|
|
5
|
-
* the importing module's body runs, so calling the function from `main()` would
|
|
6
|
-
* be far too late.
|
|
7
|
-
*/
|
|
8
|
-
silenceSqliteWarning();
|
|
9
|
-
//# sourceMappingURL=silence-sqlite-warning.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"silence-sqlite-warning.js","sourceRoot":"","sources":["../src/silence-sqlite-warning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,oBAAoB,EAAE,CAAC"}
|