memonaut 0.0.0 → 0.2.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.
Files changed (81) hide show
  1. package/LICENSE +661 -0
  2. package/dist/cli-main.d.ts +14 -0
  3. package/dist/cli-main.d.ts.map +1 -0
  4. package/dist/cli-main.js +551 -0
  5. package/dist/cli-main.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +16 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +38 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +86 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/db.d.ts +37 -0
  15. package/dist/db.d.ts.map +1 -0
  16. package/dist/db.js +184 -0
  17. package/dist/db.js.map +1 -0
  18. package/dist/format.d.ts +22 -0
  19. package/dist/format.d.ts.map +1 -0
  20. package/dist/format.js +143 -0
  21. package/dist/format.js.map +1 -0
  22. package/dist/glob.d.ts +17 -0
  23. package/dist/glob.d.ts.map +1 -0
  24. package/dist/glob.js +77 -0
  25. package/dist/glob.js.map +1 -0
  26. package/dist/index.d.ts +13 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +15 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/indexer.d.ts +50 -0
  31. package/dist/indexer.d.ts.map +1 -0
  32. package/dist/indexer.js +404 -0
  33. package/dist/indexer.js.map +1 -0
  34. package/dist/lineage.d.ts +31 -0
  35. package/dist/lineage.d.ts.map +1 -0
  36. package/dist/lineage.js +94 -0
  37. package/dist/lineage.js.map +1 -0
  38. package/dist/model.d.ts +121 -0
  39. package/dist/model.d.ts.map +1 -0
  40. package/dist/model.js +41 -0
  41. package/dist/model.js.map +1 -0
  42. package/dist/pi-source.d.ts +47 -0
  43. package/dist/pi-source.d.ts.map +1 -0
  44. package/dist/pi-source.js +309 -0
  45. package/dist/pi-source.js.map +1 -0
  46. package/dist/quiet.d.ts +7 -0
  47. package/dist/quiet.d.ts.map +1 -0
  48. package/dist/quiet.js +19 -0
  49. package/dist/quiet.js.map +1 -0
  50. package/dist/regex.d.ts +75 -0
  51. package/dist/regex.d.ts.map +1 -0
  52. package/dist/regex.js +242 -0
  53. package/dist/regex.js.map +1 -0
  54. package/dist/ripgrep.d.ts +52 -0
  55. package/dist/ripgrep.d.ts.map +1 -0
  56. package/dist/ripgrep.js +217 -0
  57. package/dist/ripgrep.js.map +1 -0
  58. package/dist/search.d.ts +114 -0
  59. package/dist/search.d.ts.map +1 -0
  60. package/dist/search.js +309 -0
  61. package/dist/search.js.map +1 -0
  62. package/dist/silence-sqlite-warning.d.ts +2 -0
  63. package/dist/silence-sqlite-warning.d.ts.map +1 -0
  64. package/dist/silence-sqlite-warning.js +9 -0
  65. package/dist/silence-sqlite-warning.js.map +1 -0
  66. package/package.json +57 -2
  67. package/src/cli-main.ts +618 -0
  68. package/src/cli.ts +17 -0
  69. package/src/config.ts +130 -0
  70. package/src/db.ts +213 -0
  71. package/src/format.ts +185 -0
  72. package/src/glob.ts +79 -0
  73. package/src/index.ts +19 -0
  74. package/src/indexer.ts +534 -0
  75. package/src/lineage.ts +111 -0
  76. package/src/model.ts +157 -0
  77. package/src/pi-source.ts +328 -0
  78. package/src/quiet.ts +22 -0
  79. package/src/regex.ts +378 -0
  80. package/src/ripgrep.ts +263 -0
  81. package/src/search.ts +504 -0
@@ -0,0 +1,551 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { parseArgs } from 'node:util';
5
+ import { loadConfig, writeStarterConfig } from './config.js';
6
+ import { getMeta, openDb } from './db.js';
7
+ import { colorsEnabled, makeStyle, renderHit, renderTable, relativeTime, tildify, } from './format.js';
8
+ import { index } from './indexer.js';
9
+ import { TIERS } from './model.js';
10
+ import { readRawEntry } from './pi-source.js';
11
+ import { DEFAULT_MAX_MATCHES, DEFAULT_MAX_PER_FILE, regexSearch, } from './regex.js';
12
+ import { indexStats, readThread, resolveThread, search } from './search.js';
13
+ const USAGE = `memonaut — search your agent conversation transcripts
14
+
15
+ USAGE
16
+ recall <command> [options]
17
+
18
+ COMMANDS
19
+ index Bring the index up to date (incremental by default)
20
+ search <query...> Search transcripts, grouped by fork lineage
21
+ search --regex <pat> Exact regex search over the original transcripts
22
+ show <ref> Print a thread (file id, session uuid prefix, name or path)
23
+ sql <query> Run a read-only SQL query against the index
24
+ stats Summarise what is indexed
25
+ config Show config paths, or write a starter config
26
+
27
+ SEARCH OPTIONS
28
+ --cwd <glob> Filter by working directory (repeatable, globs, ~ ok)
29
+ --project <name> Filter by project (last segment of the cwd, repeatable)
30
+ --role <role> user | assistant | toolResult | bashExecution | ... (repeatable)
31
+ --tool <name> Filter by tool name (repeatable)
32
+ --kind <kind> user | assistant | thinking | toolCall | toolResult | bash | summary | name
33
+ --since <when> 30d, 6h, 2w, or an ISO date
34
+ --until <when> Same forms as --since
35
+ --limit <n> Result groups (default 20)
36
+ --threads <n|all> Threads shown per group (default 3)
37
+ --private Include transcripts matched by the config's private globs
38
+ --raw Pass the query to FTS5 verbatim (no quoting fallback)
39
+ --no-recency Rank on bm25 x kind weight only
40
+ --path Show full transcript paths
41
+ --json Machine-readable output
42
+ --no-sync Skip the incremental catch-up before querying
43
+
44
+ REGEX OPTIONS
45
+ --regex <pattern> Exact regex search, run by ripgrep over the ORIGINAL
46
+ transcripts instead of the index. It can therefore
47
+ match text the index does not hold at all, notably
48
+ tool output (42% of the bytes, excluded by default),
49
+ and it can match inside identifiers, which FTS5
50
+ cannot. There is no relevance ranking: results are
51
+ ordered by recency. Needs ripgrep installed.
52
+ Every filter above applies, and the candidate files
53
+ come from the index, so ignored and (unless --private)
54
+ private transcripts are still never read.
55
+ -i, --ignore-case Case-insensitive matching (put it AFTER the pattern)
56
+ -F, --fixed Treat the pattern as a literal string, not a regex
57
+ --max-per-file <n> Stop after n matches in one transcript (default ${DEFAULT_MAX_PER_FILE}, 0 = all)
58
+ --max-matches <n> Stop the scan after n matching entries (default ${DEFAULT_MAX_MATCHES})
59
+
60
+ INDEX OPTIONS
61
+ --full Rebuild from scratch
62
+ --tier <t> slim | default | full (overrides config for this run)
63
+ --quiet No progress output
64
+
65
+ QUERY SYNTAX
66
+ The query is an FTS5 MATCH expression: bare words are ANDed, "quoted phrases"
67
+ match in order, OR / NOT / NEAR(a b, 5) work, and trailing * is a prefix.
68
+ If that fails to parse, the query is retried as quoted literal tokens.
69
+
70
+ EXAMPLES
71
+ recall search steering queue --project wherever --since 30d
72
+ recall search '"fork point" OR parentSession' --threads all
73
+ recall search --tool bash --kind bash 'fuser -k'
74
+ recall search --regex 'ERR_[A-Z_]+' --since 30d
75
+ recall search --regex 'handleToolCall(' --fixed --project wherever
76
+ recall sql "select project, count(*) n from file group by 1 order by n desc limit 10"
77
+ `;
78
+ function fail(message) {
79
+ process.stderr.write(`recall: ${message}\n`);
80
+ process.exit(1);
81
+ }
82
+ function version() {
83
+ try {
84
+ const here = path.dirname(fileURLToPath(import.meta.url));
85
+ for (const candidate of [
86
+ path.join(here, '../package.json'),
87
+ path.join(here, '../../package.json'),
88
+ ]) {
89
+ if (fs.existsSync(candidate)) {
90
+ return (JSON.parse(fs.readFileSync(candidate, 'utf8'))
91
+ .version ?? '0.0.0');
92
+ }
93
+ }
94
+ }
95
+ catch {
96
+ /* ignore */
97
+ }
98
+ return '0.0.0';
99
+ }
100
+ /** Accept `30d`, `6h`, `2w`, `3mo`, or anything Date can parse. */
101
+ function parseWhen(value) {
102
+ if (!value)
103
+ return undefined;
104
+ const m = /^(\d+)(mo|[smhdwy])$/.exec(value.trim());
105
+ if (m) {
106
+ const n = Number(m[1]);
107
+ const unit = m[2];
108
+ const ms = unit === 's'
109
+ ? 1000
110
+ : unit === 'm'
111
+ ? 60_000
112
+ : unit === 'h'
113
+ ? 3_600_000
114
+ : unit === 'd'
115
+ ? 86_400_000
116
+ : unit === 'w'
117
+ ? 604_800_000
118
+ : unit === 'mo'
119
+ ? 2_592_000_000
120
+ : 31_536_000_000;
121
+ return new Date(Date.now() - n * ms).toISOString();
122
+ }
123
+ const parsed = Date.parse(value);
124
+ if (Number.isNaN(parsed))
125
+ fail(`cannot understand time "${value}"`);
126
+ return new Date(parsed).toISOString();
127
+ }
128
+ function withTier(config, tier) {
129
+ if (!tier)
130
+ return config;
131
+ if (!TIERS.includes(tier))
132
+ fail(`unknown tier "${tier}" (expected ${TIERS.join(', ')})`);
133
+ return { ...config, tier: tier };
134
+ }
135
+ /** Cheap incremental catch-up so a query is never answered from a stale index. */
136
+ function sync(config, quiet) {
137
+ if (!fs.existsSync(config.dbPath)) {
138
+ fail(`no index at ${tildify(config.dbPath)}. Run \`recall index\` first.`);
139
+ }
140
+ const stats = index({ config, onProgress: () => { } });
141
+ if (!quiet && stats.filesIndexed > 0) {
142
+ process.stderr.write(`recall: synced ${stats.filesIndexed} transcript(s) in ${stats.durationMs}ms\n`);
143
+ }
144
+ }
145
+ function cmdIndex(argv) {
146
+ const { values } = parseArgs({
147
+ args: argv,
148
+ options: {
149
+ full: { type: 'boolean', default: false },
150
+ tier: { type: 'string' },
151
+ quiet: { type: 'boolean', default: false },
152
+ json: { type: 'boolean', default: false },
153
+ },
154
+ allowPositionals: false,
155
+ });
156
+ const config = withTier(loadConfig(), values.tier);
157
+ const quiet = Boolean(values.quiet) || Boolean(values.json);
158
+ let lastLine = 0;
159
+ const stats = index({
160
+ config,
161
+ full: Boolean(values.full),
162
+ onProgress: (p) => {
163
+ if (quiet || !process.stderr.isTTY)
164
+ return;
165
+ const now = Date.now();
166
+ if (now - lastLine < 100)
167
+ return;
168
+ lastLine = now;
169
+ process.stderr.write(`\r${p.phase} ${p.done}/${p.total}\u001b[K`);
170
+ },
171
+ });
172
+ if (!quiet && process.stderr.isTTY)
173
+ process.stderr.write('\r\u001b[K');
174
+ if (values.json) {
175
+ process.stdout.write(JSON.stringify(stats, null, 2) + '\n');
176
+ return;
177
+ }
178
+ const seconds = (stats.durationMs / 1000).toFixed(1);
179
+ process.stdout.write([
180
+ `indexed ${stats.filesIndexed} transcript(s) in ${seconds}s${stats.fullRebuild ? ' (full rebuild)' : ''}`,
181
+ ` seen ${stats.filesSeen} · skipped ${stats.filesSkipped} · appended ${stats.filesAppended} · removed ${stats.filesRemoved}`,
182
+ ` ignored ${stats.filesIgnored} · private ${stats.filesPrivate} · lineages rebuilt ${stats.lineagesRebuilt}`,
183
+ ` entries ${stats.entriesInserted} new, ${stats.entriesShared} inherited by forks · chunks ${stats.chunksInserted}`,
184
+ ` index: ${tildify(config.dbPath)}`,
185
+ ].join('\n') + '\n');
186
+ }
187
+ /** Flags that only mean something on the regex path. */
188
+ const REGEX_ONLY_FLAGS = [
189
+ 'ignore-case',
190
+ 'fixed',
191
+ 'max-per-file',
192
+ 'max-matches',
193
+ ];
194
+ /** Flags that only mean something to the full-text ranker. */
195
+ const FTS_ONLY_FLAGS = ['raw', 'no-recency'];
196
+ /** Numeric flags and the smallest value that means anything for each. */
197
+ const NUMERIC_FLAGS = [
198
+ ['max-per-file', 0], // 0 is documented as "no per-file cap"
199
+ ['max-matches', 1],
200
+ ];
201
+ /**
202
+ * Everything about a search that can be judged from the arguments alone.
203
+ *
204
+ * Pure, and exported, so the rules are testable without a process: the whole
205
+ * point of them is to refuse silently-wrong input, and "silently" is exactly
206
+ * what a hand-check misses. `Number('nonsense')` is NaN, and NaN quietly fails
207
+ * every `> 0` guard downstream, so a mistyped cap would REMOVE the bound it was
208
+ * meant to tighten. Those caps are the only thing between a pathological
209
+ * pattern and an unbounded read.
210
+ */
211
+ export function searchFlagError(given, text, pattern) {
212
+ if (pattern === undefined) {
213
+ if (!text)
214
+ return 'nothing to search for. Try `recall search <words>`';
215
+ const stray = REGEX_ONLY_FLAGS.find((f) => given[f] !== undefined);
216
+ if (stray)
217
+ return `--${stray} only applies to --regex`;
218
+ }
219
+ else {
220
+ if (text)
221
+ return `--regex takes the pattern itself, so "${text}" has nowhere to go. Try \`recall search --regex '${pattern}'\``;
222
+ if (!pattern.trim())
223
+ return '--regex needs a pattern';
224
+ const stray = FTS_ONLY_FLAGS.find((f) => given[f] === true);
225
+ if (stray)
226
+ return `--${stray} applies to full-text ranking, and a regex search has no bm25 to rank with`;
227
+ }
228
+ for (const [flag, min] of NUMERIC_FLAGS) {
229
+ const raw = given[flag];
230
+ if (raw === undefined)
231
+ continue;
232
+ const n = Number(raw);
233
+ if (!Number.isInteger(n) || n < min)
234
+ return `--${flag} needs a whole number ${min} or more, not "${String(raw)}"`;
235
+ }
236
+ return null;
237
+ }
238
+ /** One rendered block per hit, or a plain reason there are none. */
239
+ function writeHits(hits, opts, nothing) {
240
+ if (hits.length === 0) {
241
+ process.stdout.write(nothing + '\n');
242
+ return;
243
+ }
244
+ process.stdout.write(hits
245
+ .map((hit) => renderHit(hit, { style: opts.style, showPath: opts.showPath }))
246
+ .join('\n\n') + '\n');
247
+ }
248
+ async function cmdSearch(argv) {
249
+ const { values, positionals } = parseArgs({
250
+ args: argv,
251
+ options: {
252
+ // No defaults on the mode-specific flags: `undefined` is what makes
253
+ // "you passed this to the wrong search" detectable.
254
+ regex: { type: 'string' },
255
+ 'ignore-case': { type: 'boolean', short: 'i' },
256
+ fixed: { type: 'boolean', short: 'F' },
257
+ 'max-per-file': { type: 'string' },
258
+ 'max-matches': { type: 'string' },
259
+ cwd: { type: 'string', multiple: true },
260
+ project: { type: 'string', multiple: true },
261
+ role: { type: 'string', multiple: true },
262
+ tool: { type: 'string', multiple: true },
263
+ kind: { type: 'string', multiple: true },
264
+ since: { type: 'string' },
265
+ until: { type: 'string' },
266
+ limit: { type: 'string', default: '20' },
267
+ threads: { type: 'string', default: '3' },
268
+ private: { type: 'boolean', default: false },
269
+ raw: { type: 'boolean', default: false },
270
+ 'no-recency': { type: 'boolean', default: false },
271
+ path: { type: 'boolean', default: false },
272
+ json: { type: 'boolean', default: false },
273
+ 'no-sync': { type: 'boolean', default: false },
274
+ },
275
+ allowPositionals: true,
276
+ });
277
+ const text = positionals.join(' ').trim();
278
+ const pattern = values.regex;
279
+ // Everything that can be judged from the arguments alone is judged here,
280
+ // before a config is loaded, an index is synced or a file is opened.
281
+ const given = values;
282
+ const problem = searchFlagError(given, text, pattern);
283
+ if (problem)
284
+ fail(problem);
285
+ const maxPerFile = given['max-per-file'] === undefined
286
+ ? DEFAULT_MAX_PER_FILE
287
+ : Number(given['max-per-file']);
288
+ const maxMatches = given['max-matches'] === undefined
289
+ ? DEFAULT_MAX_MATCHES
290
+ : Number(given['max-matches']);
291
+ const config = loadConfig();
292
+ if (!values['no-sync'])
293
+ sync(config, Boolean(values.json));
294
+ const db = openDb(config.dbPath, { readOnly: true });
295
+ const threadsRaw = String(values.threads);
296
+ const common = {
297
+ cwd: values.cwd,
298
+ project: values.project,
299
+ role: values.role,
300
+ tool: values.tool,
301
+ kind: values.kind,
302
+ since: parseWhen(values.since),
303
+ until: parseWhen(values.until),
304
+ includePrivate: Boolean(values.private),
305
+ limit: Number(values.limit),
306
+ threadLimit: threadsRaw === 'all' ? -1 : Number(threadsRaw),
307
+ };
308
+ const style = makeStyle(colorsEnabled());
309
+ const render = { style, showPath: Boolean(values.path) };
310
+ const json = (payload) => {
311
+ process.stdout.write(JSON.stringify(payload, null, 2) + '\n');
312
+ };
313
+ const note = (line) => {
314
+ process.stderr.write(style.dim(line + '\n'));
315
+ };
316
+ try {
317
+ if (pattern !== undefined) {
318
+ const outcome = await regexSearch(db, {
319
+ ...common,
320
+ pattern,
321
+ ignoreCase: Boolean(values['ignore-case']),
322
+ fixed: Boolean(values.fixed),
323
+ maxPerFile,
324
+ maxMatches,
325
+ });
326
+ if (values.json)
327
+ return json(outcome);
328
+ writeHits(outcome.hits, render, `no matches in ${outcome.filesSearched} transcript(s)`);
329
+ if (outcome.truncated)
330
+ note(`(stopped at ${maxMatches} matching entries; narrow the pattern or raise --max-matches)`);
331
+ // The index is caught up before the query, so this means the transcripts
332
+ // moved underneath it: worth saying, since those lines were skipped.
333
+ if (outcome.unresolved > 0)
334
+ note(`(${outcome.unresolved} matching line(s) are not in the index yet; \`recall index\` will pick them up)`);
335
+ return;
336
+ }
337
+ const outcome = search(db, {
338
+ ...common,
339
+ text,
340
+ noRecency: Boolean(values['no-recency']),
341
+ raw: Boolean(values.raw),
342
+ });
343
+ if (values.json)
344
+ return json(outcome);
345
+ if (outcome.quotedFallback)
346
+ note(`(query retried as literal tokens: ${outcome.usedQuery})`);
347
+ writeHits(outcome.hits, render, 'no matches');
348
+ }
349
+ finally {
350
+ db.close();
351
+ }
352
+ }
353
+ function cmdShow(argv) {
354
+ const { values, positionals } = parseArgs({
355
+ args: argv,
356
+ options: {
357
+ from: { type: 'string', default: '0' },
358
+ limit: { type: 'string', default: '40' },
359
+ full: { type: 'boolean', default: false },
360
+ json: { type: 'boolean', default: false },
361
+ },
362
+ allowPositionals: true,
363
+ });
364
+ const ref = positionals[0];
365
+ if (!ref)
366
+ fail('which thread? Pass a file id, a session uuid prefix, a name, or a path');
367
+ const config = loadConfig();
368
+ const db = openDb(config.dbPath, { readOnly: true });
369
+ const thread = resolveThread(db, ref);
370
+ if (!thread)
371
+ fail(`no thread matching "${ref}"`);
372
+ const entries = readThread(db, Number(thread.id), Number(values.from), Number(values.limit));
373
+ if (values.json) {
374
+ process.stdout.write(JSON.stringify({ thread, entries }, null, 2) + '\n');
375
+ db.close();
376
+ return;
377
+ }
378
+ const style = makeStyle(colorsEnabled());
379
+ const header = [
380
+ style.bold(thread.name ?? thread.project ?? String(thread.id)),
381
+ style.dim(tildify(thread.cwd ?? '')),
382
+ style.dim(`${thread.entry_count} entries`),
383
+ style.dim(`last ${relativeTime(thread.last_activity)}`),
384
+ ].join(' · ');
385
+ process.stdout.write(header + '\n' + style.dim(tildify(thread.path)) + '\n\n');
386
+ const indent = (text) => text
387
+ .split('\n')
388
+ .map((l) => ' ' + l)
389
+ .join('\n');
390
+ for (const entry of entries) {
391
+ const marks = [
392
+ style.label(entry.role + (entry.tool ? `:${entry.tool}` : '')),
393
+ ];
394
+ if (entry.shared)
395
+ marks.push(style.dim('(inherited)'));
396
+ process.stdout.write(`${style.dim(String(entry.seq).padStart(4))} ${marks.join(' ')}\n`);
397
+ if (values.full && entry.ownerPath) {
398
+ // Full fidelity means going back to the transcript: the index keeps tool
399
+ // output truncated (or absent), by design, and the byte range is the pointer.
400
+ const raw = readRawEntry(entry.ownerPath, entry.byteOffset, entry.byteLength);
401
+ if (raw !== null) {
402
+ process.stdout.write(indent(JSON.stringify(raw, null, 2)) + '\n');
403
+ continue;
404
+ }
405
+ }
406
+ for (const t of entry.texts) {
407
+ const body = t.text.length > 2000 ? t.text.slice(0, 2000) + ' …' : t.text;
408
+ process.stdout.write(indent(body) + '\n');
409
+ }
410
+ }
411
+ db.close();
412
+ }
413
+ function cmdSql(argv) {
414
+ const { values, positionals } = parseArgs({
415
+ args: argv,
416
+ options: {
417
+ json: { type: 'boolean', default: false },
418
+ limit: { type: 'string', default: '200' },
419
+ },
420
+ allowPositionals: true,
421
+ });
422
+ const sql = positionals.join(' ').trim();
423
+ if (!sql)
424
+ fail('no SQL given');
425
+ const config = loadConfig();
426
+ const db = openDb(config.dbPath, { readOnly: true });
427
+ let rows;
428
+ try {
429
+ rows = db.prepare(sql).all();
430
+ }
431
+ catch (err) {
432
+ db.close();
433
+ fail(err.message);
434
+ }
435
+ const capped = rows.slice(0, Number(values.limit));
436
+ if (values.json)
437
+ process.stdout.write(JSON.stringify(capped, null, 2) + '\n');
438
+ else {
439
+ process.stdout.write(renderTable(capped) + '\n');
440
+ if (rows.length > capped.length) {
441
+ process.stdout.write(`(${rows.length - capped.length} more rows, raise --limit)\n`);
442
+ }
443
+ }
444
+ db.close();
445
+ }
446
+ function cmdStats(argv) {
447
+ const { values } = parseArgs({
448
+ args: argv,
449
+ options: { json: { type: 'boolean', default: false } },
450
+ allowPositionals: false,
451
+ });
452
+ const config = loadConfig();
453
+ const db = openDb(config.dbPath, { readOnly: true });
454
+ const stats = indexStats(db);
455
+ const indexedAt = getMeta(db, 'indexed_at');
456
+ const tier = getMeta(db, 'tier');
457
+ const size = fs.existsSync(config.dbPath)
458
+ ? fs.statSync(config.dbPath).size
459
+ : 0;
460
+ const payload = {
461
+ ...stats,
462
+ tier,
463
+ indexedAt: indexedAt ? new Date(Number(indexedAt)).toISOString() : null,
464
+ dbBytes: size,
465
+ };
466
+ if (values.json) {
467
+ process.stdout.write(JSON.stringify(payload, null, 2) + '\n');
468
+ db.close();
469
+ return;
470
+ }
471
+ const style = makeStyle(colorsEnabled());
472
+ process.stdout.write([
473
+ `${style.bold(String(stats.files))} transcripts · ${stats.lineages} lineages · ${stats.forks} forks`,
474
+ `${stats.entries} entries · ${stats.memberships} memberships · ${stats.chunks} chunks`,
475
+ `${stats.projects} projects · ${stats.privateFiles} private · ${stats.orphans} orphaned`,
476
+ `span ${String(stats.oldest).slice(0, 10)} → ${String(stats.newest).slice(0, 10)}`,
477
+ `tier ${tier} · db ${(size / 1e6).toFixed(1)} MB · updated ${relativeTime(payload.indexedAt)}`,
478
+ style.dim(tildify(config.dbPath)),
479
+ ].join('\n') + '\n');
480
+ db.close();
481
+ }
482
+ function cmdConfig(argv) {
483
+ const { values } = parseArgs({
484
+ args: argv,
485
+ options: {
486
+ init: { type: 'boolean', default: false },
487
+ json: { type: 'boolean', default: false },
488
+ },
489
+ allowPositionals: false,
490
+ });
491
+ const config = loadConfig();
492
+ if (values.init) {
493
+ const written = writeStarterConfig(config);
494
+ process.stdout.write(`config: ${tildify(written)}\n`);
495
+ return;
496
+ }
497
+ if (values.json) {
498
+ process.stdout.write(JSON.stringify(config, null, 2) + '\n');
499
+ return;
500
+ }
501
+ process.stdout.write([
502
+ `config ${tildify(config.configPath)}${config.loaded ? '' : ' (not created yet, using defaults)'}`,
503
+ `index ${tildify(config.dbPath)}`,
504
+ `tier ${config.tier}`,
505
+ `sources ${config.sources.map((s) => `${s.id}:${tildify(s.root)}`).join(', ')}`,
506
+ `ignore ${config.ignore.join(', ') || '(none)'}`,
507
+ `private ${config.private.join(', ') || '(none)'}`,
508
+ ].join('\n') + '\n');
509
+ }
510
+ async function main() {
511
+ const argv = process.argv.slice(2);
512
+ const command = argv[0];
513
+ const rest = argv.slice(1);
514
+ switch (command) {
515
+ case 'index':
516
+ return cmdIndex(rest);
517
+ case 'search':
518
+ case 's':
519
+ return cmdSearch(rest);
520
+ case 'show':
521
+ return cmdShow(rest);
522
+ case 'sql':
523
+ return cmdSql(rest);
524
+ case 'stats':
525
+ return cmdStats(rest);
526
+ case 'config':
527
+ return cmdConfig(rest);
528
+ case '--version':
529
+ case '-v':
530
+ process.stdout.write(version() + '\n');
531
+ return;
532
+ case undefined:
533
+ case 'help':
534
+ case '--help':
535
+ case '-h':
536
+ process.stdout.write(USAGE);
537
+ return;
538
+ default:
539
+ fail(`unknown command "${command}". Try \`recall help\``);
540
+ }
541
+ }
542
+ /** Entry point. Loaded dynamically by `cli.ts`, see the note there. */
543
+ export async function run() {
544
+ try {
545
+ await main();
546
+ }
547
+ catch (err) {
548
+ fail(err.message);
549
+ }
550
+ }
551
+ //# sourceMappingURL=cli-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { silenceSqliteWarning } from './quiet.js';
3
+ /**
4
+ * Launcher, deliberately thin.
5
+ *
6
+ * `node:sqlite` prints an ExperimentalWarning the moment it is LOADED, and ES
7
+ * modules load the whole graph before any module body runs. So a static import
8
+ * of anything that touches sqlite would emit the warning before the filter
9
+ * could be installed, no matter where the call sits. Installing the filter here
10
+ * and pulling the real CLI in dynamically is what keeps two lines of noise off
11
+ * every single invocation.
12
+ */
13
+ silenceSqliteWarning();
14
+ const { run } = await import('./cli-main.js');
15
+ await run();
16
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;GASG;AACH,oBAAoB,EAAE,CAAC;AAEvB,MAAM,EAAC,GAAG,EAAC,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;AAC5C,MAAM,GAAG,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { Tier } from './model.js';
2
+ export interface SourceConfig {
3
+ /** Short label stored on every file row, so multi-source indexes stay legible. */
4
+ id: string;
5
+ /** Only `pi` for now. The adapter seam is here so other agents can be added. */
6
+ kind: 'pi';
7
+ root: string;
8
+ }
9
+ export interface Config {
10
+ sources: SourceConfig[];
11
+ /** cwd globs that are never read, never stored. */
12
+ ignore: string[];
13
+ /** cwd globs that are indexed but hidden from agents unless asked for. */
14
+ private: string[];
15
+ tier: Tier;
16
+ /** Bytes kept per tool result (tier `full` only). */
17
+ toolResultHeadBytes: number;
18
+ /** Bytes kept per tool call argument blob. */
19
+ toolArgsHeadBytes: number;
20
+ configDir: string;
21
+ dataDir: string;
22
+ dbPath: string;
23
+ configPath: string;
24
+ /** True when a config file was actually found on disk. */
25
+ loaded: boolean;
26
+ }
27
+ export declare const DEFAULT_TIER: Tier;
28
+ export declare function defaultConfigDir(env?: NodeJS.ProcessEnv): string;
29
+ export declare function defaultDataDir(env?: NodeJS.ProcessEnv): string;
30
+ export declare function defaultSources(): SourceConfig[];
31
+ /**
32
+ * Load config, filling in defaults. Every path is resolved here so nothing
33
+ * downstream ever has to think about `~` or XDG again.
34
+ */
35
+ export declare function loadConfig(env?: NodeJS.ProcessEnv): Config;
36
+ /** Write a starter config, never clobbering an existing one. */
37
+ export declare function writeStarterConfig(config: Config): string;
38
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAGrC,MAAM,WAAW,YAAY;IAC5B,kFAAkF;IAClF,EAAE,EAAE,MAAM,CAAC;IACX,gFAAgF;IAChF,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,MAAM;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,EAAE,IAAgB,CAAC;AAQ5C,wBAAgB,gBAAgB,CAAC,GAAG,oBAAc,GAAG,MAAM,CAG1D;AAED,wBAAgB,cAAc,CAAC,GAAG,oBAAc,GAAG,MAAM,CAGxD;AAED,wBAAgB,cAAc,IAAI,YAAY,EAAE,CAI/C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,oBAAc,GAAG,MAAM,CA+CpD;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBzD"}