memonaut 0.0.0 → 0.1.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/LICENSE +661 -0
- package/dist/cli-main.d.ts +3 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +428 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +86 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +37 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +184 -0
- package/dist/db.js.map +1 -0
- package/dist/format.d.ts +22 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +130 -0
- package/dist/format.js.map +1 -0
- package/dist/glob.d.ts +17 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +77 -0
- package/dist/glob.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +50 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +404 -0
- package/dist/indexer.js.map +1 -0
- package/dist/lineage.d.ts +31 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +94 -0
- package/dist/lineage.js.map +1 -0
- package/dist/model.d.ts +99 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +41 -0
- package/dist/model.js.map +1 -0
- package/dist/pi-source.d.ts +47 -0
- package/dist/pi-source.d.ts.map +1 -0
- package/dist/pi-source.js +309 -0
- package/dist/pi-source.js.map +1 -0
- package/dist/quiet.d.ts +7 -0
- package/dist/quiet.d.ts.map +1 -0
- package/dist/quiet.js +19 -0
- package/dist/quiet.js.map +1 -0
- package/dist/search.d.ts +93 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +285 -0
- package/dist/search.js.map +1 -0
- package/dist/silence-sqlite-warning.d.ts +2 -0
- package/dist/silence-sqlite-warning.d.ts.map +1 -0
- package/dist/silence-sqlite-warning.js +9 -0
- package/dist/silence-sqlite-warning.js.map +1 -0
- package/package.json +57 -2
- package/src/cli-main.ts +475 -0
- package/src/cli.ts +17 -0
- package/src/config.ts +130 -0
- package/src/db.ts +213 -0
- package/src/format.ts +173 -0
- package/src/glob.ts +79 -0
- package/src/index.ts +10 -0
- package/src/indexer.ts +534 -0
- package/src/lineage.ts +111 -0
- package/src/model.ts +135 -0
- package/src/pi-source.ts +328 -0
- package/src/quiet.ts +22 -0
- package/src/search.ts +462 -0
package/dist/cli-main.js
ADDED
|
@@ -0,0 +1,428 @@
|
|
|
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 { indexStats, readThread, resolveThread, search } from './search.js';
|
|
12
|
+
const USAGE = `memonaut — search your agent conversation transcripts
|
|
13
|
+
|
|
14
|
+
USAGE
|
|
15
|
+
recall <command> [options]
|
|
16
|
+
|
|
17
|
+
COMMANDS
|
|
18
|
+
index Bring the index up to date (incremental by default)
|
|
19
|
+
search <query...> Search transcripts, grouped by fork lineage
|
|
20
|
+
show <ref> Print a thread (file id, session uuid prefix, name or path)
|
|
21
|
+
sql <query> Run a read-only SQL query against the index
|
|
22
|
+
stats Summarise what is indexed
|
|
23
|
+
config Show config paths, or write a starter config
|
|
24
|
+
|
|
25
|
+
SEARCH OPTIONS
|
|
26
|
+
--cwd <glob> Filter by working directory (repeatable, globs, ~ ok)
|
|
27
|
+
--project <name> Filter by project (last segment of the cwd, repeatable)
|
|
28
|
+
--role <role> user | assistant | toolResult | bashExecution | ... (repeatable)
|
|
29
|
+
--tool <name> Filter by tool name (repeatable)
|
|
30
|
+
--kind <kind> user | assistant | thinking | toolCall | toolResult | bash | summary | name
|
|
31
|
+
--since <when> 30d, 6h, 2w, or an ISO date
|
|
32
|
+
--until <when> Same forms as --since
|
|
33
|
+
--limit <n> Result groups (default 20)
|
|
34
|
+
--threads <n|all> Threads shown per group (default 3)
|
|
35
|
+
--private Include transcripts matched by the config's private globs
|
|
36
|
+
--raw Pass the query to FTS5 verbatim (no quoting fallback)
|
|
37
|
+
--no-recency Rank on bm25 x kind weight only
|
|
38
|
+
--path Show full transcript paths
|
|
39
|
+
--json Machine-readable output
|
|
40
|
+
--no-sync Skip the incremental catch-up before querying
|
|
41
|
+
|
|
42
|
+
INDEX OPTIONS
|
|
43
|
+
--full Rebuild from scratch
|
|
44
|
+
--tier <t> slim | default | full (overrides config for this run)
|
|
45
|
+
--quiet No progress output
|
|
46
|
+
|
|
47
|
+
QUERY SYNTAX
|
|
48
|
+
The query is an FTS5 MATCH expression: bare words are ANDed, "quoted phrases"
|
|
49
|
+
match in order, OR / NOT / NEAR(a b, 5) work, and trailing * is a prefix.
|
|
50
|
+
If that fails to parse, the query is retried as quoted literal tokens.
|
|
51
|
+
|
|
52
|
+
EXAMPLES
|
|
53
|
+
recall search steering queue --project wherever --since 30d
|
|
54
|
+
recall search '"fork point" OR parentSession' --threads all
|
|
55
|
+
recall search --tool bash --kind bash 'fuser -k'
|
|
56
|
+
recall sql "select project, count(*) n from file group by 1 order by n desc limit 10"
|
|
57
|
+
`;
|
|
58
|
+
function fail(message) {
|
|
59
|
+
process.stderr.write(`recall: ${message}\n`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
function version() {
|
|
63
|
+
try {
|
|
64
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
65
|
+
for (const candidate of [
|
|
66
|
+
path.join(here, '../package.json'),
|
|
67
|
+
path.join(here, '../../package.json'),
|
|
68
|
+
]) {
|
|
69
|
+
if (fs.existsSync(candidate)) {
|
|
70
|
+
return (JSON.parse(fs.readFileSync(candidate, 'utf8'))
|
|
71
|
+
.version ?? '0.0.0');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
/* ignore */
|
|
77
|
+
}
|
|
78
|
+
return '0.0.0';
|
|
79
|
+
}
|
|
80
|
+
/** Accept `30d`, `6h`, `2w`, `3mo`, or anything Date can parse. */
|
|
81
|
+
function parseWhen(value) {
|
|
82
|
+
if (!value)
|
|
83
|
+
return undefined;
|
|
84
|
+
const m = /^(\d+)(mo|[smhdwy])$/.exec(value.trim());
|
|
85
|
+
if (m) {
|
|
86
|
+
const n = Number(m[1]);
|
|
87
|
+
const unit = m[2];
|
|
88
|
+
const ms = unit === 's'
|
|
89
|
+
? 1000
|
|
90
|
+
: unit === 'm'
|
|
91
|
+
? 60_000
|
|
92
|
+
: unit === 'h'
|
|
93
|
+
? 3_600_000
|
|
94
|
+
: unit === 'd'
|
|
95
|
+
? 86_400_000
|
|
96
|
+
: unit === 'w'
|
|
97
|
+
? 604_800_000
|
|
98
|
+
: unit === 'mo'
|
|
99
|
+
? 2_592_000_000
|
|
100
|
+
: 31_536_000_000;
|
|
101
|
+
return new Date(Date.now() - n * ms).toISOString();
|
|
102
|
+
}
|
|
103
|
+
const parsed = Date.parse(value);
|
|
104
|
+
if (Number.isNaN(parsed))
|
|
105
|
+
fail(`cannot understand time "${value}"`);
|
|
106
|
+
return new Date(parsed).toISOString();
|
|
107
|
+
}
|
|
108
|
+
function withTier(config, tier) {
|
|
109
|
+
if (!tier)
|
|
110
|
+
return config;
|
|
111
|
+
if (!TIERS.includes(tier))
|
|
112
|
+
fail(`unknown tier "${tier}" (expected ${TIERS.join(', ')})`);
|
|
113
|
+
return { ...config, tier: tier };
|
|
114
|
+
}
|
|
115
|
+
/** Cheap incremental catch-up so a query is never answered from a stale index. */
|
|
116
|
+
function sync(config, quiet) {
|
|
117
|
+
if (!fs.existsSync(config.dbPath)) {
|
|
118
|
+
fail(`no index at ${tildify(config.dbPath)}. Run \`recall index\` first.`);
|
|
119
|
+
}
|
|
120
|
+
const stats = index({ config, onProgress: () => { } });
|
|
121
|
+
if (!quiet && stats.filesIndexed > 0) {
|
|
122
|
+
process.stderr.write(`recall: synced ${stats.filesIndexed} transcript(s) in ${stats.durationMs}ms\n`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function cmdIndex(argv) {
|
|
126
|
+
const { values } = parseArgs({
|
|
127
|
+
args: argv,
|
|
128
|
+
options: {
|
|
129
|
+
full: { type: 'boolean', default: false },
|
|
130
|
+
tier: { type: 'string' },
|
|
131
|
+
quiet: { type: 'boolean', default: false },
|
|
132
|
+
json: { type: 'boolean', default: false },
|
|
133
|
+
},
|
|
134
|
+
allowPositionals: false,
|
|
135
|
+
});
|
|
136
|
+
const config = withTier(loadConfig(), values.tier);
|
|
137
|
+
const quiet = Boolean(values.quiet) || Boolean(values.json);
|
|
138
|
+
let lastLine = 0;
|
|
139
|
+
const stats = index({
|
|
140
|
+
config,
|
|
141
|
+
full: Boolean(values.full),
|
|
142
|
+
onProgress: (p) => {
|
|
143
|
+
if (quiet || !process.stderr.isTTY)
|
|
144
|
+
return;
|
|
145
|
+
const now = Date.now();
|
|
146
|
+
if (now - lastLine < 100)
|
|
147
|
+
return;
|
|
148
|
+
lastLine = now;
|
|
149
|
+
process.stderr.write(`\r${p.phase} ${p.done}/${p.total}\u001b[K`);
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
if (!quiet && process.stderr.isTTY)
|
|
153
|
+
process.stderr.write('\r\u001b[K');
|
|
154
|
+
if (values.json) {
|
|
155
|
+
process.stdout.write(JSON.stringify(stats, null, 2) + '\n');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const seconds = (stats.durationMs / 1000).toFixed(1);
|
|
159
|
+
process.stdout.write([
|
|
160
|
+
`indexed ${stats.filesIndexed} transcript(s) in ${seconds}s${stats.fullRebuild ? ' (full rebuild)' : ''}`,
|
|
161
|
+
` seen ${stats.filesSeen} · skipped ${stats.filesSkipped} · appended ${stats.filesAppended} · removed ${stats.filesRemoved}`,
|
|
162
|
+
` ignored ${stats.filesIgnored} · private ${stats.filesPrivate} · lineages rebuilt ${stats.lineagesRebuilt}`,
|
|
163
|
+
` entries ${stats.entriesInserted} new, ${stats.entriesShared} inherited by forks · chunks ${stats.chunksInserted}`,
|
|
164
|
+
` index: ${tildify(config.dbPath)}`,
|
|
165
|
+
].join('\n') + '\n');
|
|
166
|
+
}
|
|
167
|
+
function cmdSearch(argv) {
|
|
168
|
+
const { values, positionals } = parseArgs({
|
|
169
|
+
args: argv,
|
|
170
|
+
options: {
|
|
171
|
+
cwd: { type: 'string', multiple: true },
|
|
172
|
+
project: { type: 'string', multiple: true },
|
|
173
|
+
role: { type: 'string', multiple: true },
|
|
174
|
+
tool: { type: 'string', multiple: true },
|
|
175
|
+
kind: { type: 'string', multiple: true },
|
|
176
|
+
since: { type: 'string' },
|
|
177
|
+
until: { type: 'string' },
|
|
178
|
+
limit: { type: 'string', default: '20' },
|
|
179
|
+
threads: { type: 'string', default: '3' },
|
|
180
|
+
private: { type: 'boolean', default: false },
|
|
181
|
+
raw: { type: 'boolean', default: false },
|
|
182
|
+
'no-recency': { type: 'boolean', default: false },
|
|
183
|
+
path: { type: 'boolean', default: false },
|
|
184
|
+
json: { type: 'boolean', default: false },
|
|
185
|
+
'no-sync': { type: 'boolean', default: false },
|
|
186
|
+
},
|
|
187
|
+
allowPositionals: true,
|
|
188
|
+
});
|
|
189
|
+
const text = positionals.join(' ').trim();
|
|
190
|
+
if (!text)
|
|
191
|
+
fail('nothing to search for. Try `recall search <words>`');
|
|
192
|
+
const config = loadConfig();
|
|
193
|
+
if (!values['no-sync'])
|
|
194
|
+
sync(config, Boolean(values.json));
|
|
195
|
+
const db = openDb(config.dbPath, { readOnly: true });
|
|
196
|
+
const threadsRaw = String(values.threads);
|
|
197
|
+
const outcome = search(db, {
|
|
198
|
+
text,
|
|
199
|
+
cwd: values.cwd,
|
|
200
|
+
project: values.project,
|
|
201
|
+
role: values.role,
|
|
202
|
+
tool: values.tool,
|
|
203
|
+
kind: values.kind,
|
|
204
|
+
since: parseWhen(values.since),
|
|
205
|
+
until: parseWhen(values.until),
|
|
206
|
+
includePrivate: Boolean(values.private),
|
|
207
|
+
limit: Number(values.limit),
|
|
208
|
+
threadLimit: threadsRaw === 'all' ? -1 : Number(threadsRaw),
|
|
209
|
+
noRecency: Boolean(values['no-recency']),
|
|
210
|
+
raw: Boolean(values.raw),
|
|
211
|
+
});
|
|
212
|
+
if (values.json) {
|
|
213
|
+
process.stdout.write(JSON.stringify(outcome, null, 2) + '\n');
|
|
214
|
+
db.close();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const style = makeStyle(colorsEnabled());
|
|
218
|
+
if (outcome.hits.length === 0) {
|
|
219
|
+
process.stdout.write('no matches\n');
|
|
220
|
+
db.close();
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (outcome.quotedFallback) {
|
|
224
|
+
process.stderr.write(style.dim(`(query retried as literal tokens: ${outcome.usedQuery})\n`));
|
|
225
|
+
}
|
|
226
|
+
const rendered = outcome.hits.map((hit) => renderHit(hit, { style, showPath: Boolean(values.path) }));
|
|
227
|
+
process.stdout.write(rendered.join('\n\n') + '\n');
|
|
228
|
+
db.close();
|
|
229
|
+
}
|
|
230
|
+
function cmdShow(argv) {
|
|
231
|
+
const { values, positionals } = parseArgs({
|
|
232
|
+
args: argv,
|
|
233
|
+
options: {
|
|
234
|
+
from: { type: 'string', default: '0' },
|
|
235
|
+
limit: { type: 'string', default: '40' },
|
|
236
|
+
full: { type: 'boolean', default: false },
|
|
237
|
+
json: { type: 'boolean', default: false },
|
|
238
|
+
},
|
|
239
|
+
allowPositionals: true,
|
|
240
|
+
});
|
|
241
|
+
const ref = positionals[0];
|
|
242
|
+
if (!ref)
|
|
243
|
+
fail('which thread? Pass a file id, a session uuid prefix, a name, or a path');
|
|
244
|
+
const config = loadConfig();
|
|
245
|
+
const db = openDb(config.dbPath, { readOnly: true });
|
|
246
|
+
const thread = resolveThread(db, ref);
|
|
247
|
+
if (!thread)
|
|
248
|
+
fail(`no thread matching "${ref}"`);
|
|
249
|
+
const entries = readThread(db, Number(thread.id), Number(values.from), Number(values.limit));
|
|
250
|
+
if (values.json) {
|
|
251
|
+
process.stdout.write(JSON.stringify({ thread, entries }, null, 2) + '\n');
|
|
252
|
+
db.close();
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const style = makeStyle(colorsEnabled());
|
|
256
|
+
const header = [
|
|
257
|
+
style.bold(thread.name ?? thread.project ?? String(thread.id)),
|
|
258
|
+
style.dim(tildify(thread.cwd ?? '')),
|
|
259
|
+
style.dim(`${thread.entry_count} entries`),
|
|
260
|
+
style.dim(`last ${relativeTime(thread.last_activity)}`),
|
|
261
|
+
].join(' · ');
|
|
262
|
+
process.stdout.write(header + '\n' + style.dim(tildify(thread.path)) + '\n\n');
|
|
263
|
+
const indent = (text) => text
|
|
264
|
+
.split('\n')
|
|
265
|
+
.map((l) => ' ' + l)
|
|
266
|
+
.join('\n');
|
|
267
|
+
for (const entry of entries) {
|
|
268
|
+
const marks = [
|
|
269
|
+
style.label(entry.role + (entry.tool ? `:${entry.tool}` : '')),
|
|
270
|
+
];
|
|
271
|
+
if (entry.shared)
|
|
272
|
+
marks.push(style.dim('(inherited)'));
|
|
273
|
+
process.stdout.write(`${style.dim(String(entry.seq).padStart(4))} ${marks.join(' ')}\n`);
|
|
274
|
+
if (values.full && entry.ownerPath) {
|
|
275
|
+
// Full fidelity means going back to the transcript: the index keeps tool
|
|
276
|
+
// output truncated (or absent), by design, and the byte range is the pointer.
|
|
277
|
+
const raw = readRawEntry(entry.ownerPath, entry.byteOffset, entry.byteLength);
|
|
278
|
+
if (raw !== null) {
|
|
279
|
+
process.stdout.write(indent(JSON.stringify(raw, null, 2)) + '\n');
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
for (const t of entry.texts) {
|
|
284
|
+
const body = t.text.length > 2000 ? t.text.slice(0, 2000) + ' …' : t.text;
|
|
285
|
+
process.stdout.write(indent(body) + '\n');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
db.close();
|
|
289
|
+
}
|
|
290
|
+
function cmdSql(argv) {
|
|
291
|
+
const { values, positionals } = parseArgs({
|
|
292
|
+
args: argv,
|
|
293
|
+
options: {
|
|
294
|
+
json: { type: 'boolean', default: false },
|
|
295
|
+
limit: { type: 'string', default: '200' },
|
|
296
|
+
},
|
|
297
|
+
allowPositionals: true,
|
|
298
|
+
});
|
|
299
|
+
const sql = positionals.join(' ').trim();
|
|
300
|
+
if (!sql)
|
|
301
|
+
fail('no SQL given');
|
|
302
|
+
const config = loadConfig();
|
|
303
|
+
const db = openDb(config.dbPath, { readOnly: true });
|
|
304
|
+
let rows;
|
|
305
|
+
try {
|
|
306
|
+
rows = db.prepare(sql).all();
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
db.close();
|
|
310
|
+
fail(err.message);
|
|
311
|
+
}
|
|
312
|
+
const capped = rows.slice(0, Number(values.limit));
|
|
313
|
+
if (values.json)
|
|
314
|
+
process.stdout.write(JSON.stringify(capped, null, 2) + '\n');
|
|
315
|
+
else {
|
|
316
|
+
process.stdout.write(renderTable(capped) + '\n');
|
|
317
|
+
if (rows.length > capped.length) {
|
|
318
|
+
process.stdout.write(`(${rows.length - capped.length} more rows, raise --limit)\n`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
db.close();
|
|
322
|
+
}
|
|
323
|
+
function cmdStats(argv) {
|
|
324
|
+
const { values } = parseArgs({
|
|
325
|
+
args: argv,
|
|
326
|
+
options: { json: { type: 'boolean', default: false } },
|
|
327
|
+
allowPositionals: false,
|
|
328
|
+
});
|
|
329
|
+
const config = loadConfig();
|
|
330
|
+
const db = openDb(config.dbPath, { readOnly: true });
|
|
331
|
+
const stats = indexStats(db);
|
|
332
|
+
const indexedAt = getMeta(db, 'indexed_at');
|
|
333
|
+
const tier = getMeta(db, 'tier');
|
|
334
|
+
const size = fs.existsSync(config.dbPath)
|
|
335
|
+
? fs.statSync(config.dbPath).size
|
|
336
|
+
: 0;
|
|
337
|
+
const payload = {
|
|
338
|
+
...stats,
|
|
339
|
+
tier,
|
|
340
|
+
indexedAt: indexedAt ? new Date(Number(indexedAt)).toISOString() : null,
|
|
341
|
+
dbBytes: size,
|
|
342
|
+
};
|
|
343
|
+
if (values.json) {
|
|
344
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + '\n');
|
|
345
|
+
db.close();
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
const style = makeStyle(colorsEnabled());
|
|
349
|
+
process.stdout.write([
|
|
350
|
+
`${style.bold(String(stats.files))} transcripts · ${stats.lineages} lineages · ${stats.forks} forks`,
|
|
351
|
+
`${stats.entries} entries · ${stats.memberships} memberships · ${stats.chunks} chunks`,
|
|
352
|
+
`${stats.projects} projects · ${stats.privateFiles} private · ${stats.orphans} orphaned`,
|
|
353
|
+
`span ${String(stats.oldest).slice(0, 10)} → ${String(stats.newest).slice(0, 10)}`,
|
|
354
|
+
`tier ${tier} · db ${(size / 1e6).toFixed(1)} MB · updated ${relativeTime(payload.indexedAt)}`,
|
|
355
|
+
style.dim(tildify(config.dbPath)),
|
|
356
|
+
].join('\n') + '\n');
|
|
357
|
+
db.close();
|
|
358
|
+
}
|
|
359
|
+
function cmdConfig(argv) {
|
|
360
|
+
const { values } = parseArgs({
|
|
361
|
+
args: argv,
|
|
362
|
+
options: {
|
|
363
|
+
init: { type: 'boolean', default: false },
|
|
364
|
+
json: { type: 'boolean', default: false },
|
|
365
|
+
},
|
|
366
|
+
allowPositionals: false,
|
|
367
|
+
});
|
|
368
|
+
const config = loadConfig();
|
|
369
|
+
if (values.init) {
|
|
370
|
+
const written = writeStarterConfig(config);
|
|
371
|
+
process.stdout.write(`config: ${tildify(written)}\n`);
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
if (values.json) {
|
|
375
|
+
process.stdout.write(JSON.stringify(config, null, 2) + '\n');
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
process.stdout.write([
|
|
379
|
+
`config ${tildify(config.configPath)}${config.loaded ? '' : ' (not created yet, using defaults)'}`,
|
|
380
|
+
`index ${tildify(config.dbPath)}`,
|
|
381
|
+
`tier ${config.tier}`,
|
|
382
|
+
`sources ${config.sources.map((s) => `${s.id}:${tildify(s.root)}`).join(', ')}`,
|
|
383
|
+
`ignore ${config.ignore.join(', ') || '(none)'}`,
|
|
384
|
+
`private ${config.private.join(', ') || '(none)'}`,
|
|
385
|
+
].join('\n') + '\n');
|
|
386
|
+
}
|
|
387
|
+
function main() {
|
|
388
|
+
const argv = process.argv.slice(2);
|
|
389
|
+
const command = argv[0];
|
|
390
|
+
const rest = argv.slice(1);
|
|
391
|
+
switch (command) {
|
|
392
|
+
case 'index':
|
|
393
|
+
return cmdIndex(rest);
|
|
394
|
+
case 'search':
|
|
395
|
+
case 's':
|
|
396
|
+
return cmdSearch(rest);
|
|
397
|
+
case 'show':
|
|
398
|
+
return cmdShow(rest);
|
|
399
|
+
case 'sql':
|
|
400
|
+
return cmdSql(rest);
|
|
401
|
+
case 'stats':
|
|
402
|
+
return cmdStats(rest);
|
|
403
|
+
case 'config':
|
|
404
|
+
return cmdConfig(rest);
|
|
405
|
+
case '--version':
|
|
406
|
+
case '-v':
|
|
407
|
+
process.stdout.write(version() + '\n');
|
|
408
|
+
return;
|
|
409
|
+
case undefined:
|
|
410
|
+
case 'help':
|
|
411
|
+
case '--help':
|
|
412
|
+
case '-h':
|
|
413
|
+
process.stdout.write(USAGE);
|
|
414
|
+
return;
|
|
415
|
+
default:
|
|
416
|
+
fail(`unknown command "${command}". Try \`recall help\``);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
/** Entry point. Loaded dynamically by `cli.ts`, see the note there. */
|
|
420
|
+
export function run() {
|
|
421
|
+
try {
|
|
422
|
+
main();
|
|
423
|
+
}
|
|
424
|
+
catch (err) {
|
|
425
|
+
fail(err.message);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
//# 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 @@
|
|
|
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
|
+
run();
|
|
16
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -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,GAAG,EAAE,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { expandTilde } from './glob.js';
|
|
5
|
+
import { TIERS } from './model.js';
|
|
6
|
+
export const DEFAULT_TIER = 'default';
|
|
7
|
+
function xdg(envVar, fallback) {
|
|
8
|
+
const v = process.env[envVar];
|
|
9
|
+
if (v && v.trim())
|
|
10
|
+
return v;
|
|
11
|
+
return path.join(os.homedir(), fallback);
|
|
12
|
+
}
|
|
13
|
+
export function defaultConfigDir(env = process.env) {
|
|
14
|
+
if (env.MEMONAUT_CONFIG_DIR)
|
|
15
|
+
return env.MEMONAUT_CONFIG_DIR;
|
|
16
|
+
return path.join(xdg('XDG_CONFIG_HOME', '.config'), 'memonaut');
|
|
17
|
+
}
|
|
18
|
+
export function defaultDataDir(env = process.env) {
|
|
19
|
+
if (env.MEMONAUT_DATA_DIR)
|
|
20
|
+
return env.MEMONAUT_DATA_DIR;
|
|
21
|
+
return path.join(xdg('XDG_DATA_HOME', '.local/share'), 'memonaut');
|
|
22
|
+
}
|
|
23
|
+
export function defaultSources() {
|
|
24
|
+
return [
|
|
25
|
+
{ id: 'pi', kind: 'pi', root: path.join(os.homedir(), '.pi/agent/sessions') },
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load config, filling in defaults. Every path is resolved here so nothing
|
|
30
|
+
* downstream ever has to think about `~` or XDG again.
|
|
31
|
+
*/
|
|
32
|
+
export function loadConfig(env = process.env) {
|
|
33
|
+
const configDir = defaultConfigDir(env);
|
|
34
|
+
const dataDir = defaultDataDir(env);
|
|
35
|
+
const configPath = path.join(configDir, 'config.json');
|
|
36
|
+
let raw = {};
|
|
37
|
+
let loaded = false;
|
|
38
|
+
if (fs.existsSync(configPath)) {
|
|
39
|
+
try {
|
|
40
|
+
raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
41
|
+
loaded = true;
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
throw new Error(`config at ${configPath} is not valid JSON: ${err.message}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const sources = Array.isArray(raw.sources) && raw.sources.length
|
|
48
|
+
? raw.sources
|
|
49
|
+
: defaultSources();
|
|
50
|
+
const tier = typeof raw.tier === 'string' && TIERS.includes(raw.tier)
|
|
51
|
+
? raw.tier
|
|
52
|
+
: DEFAULT_TIER;
|
|
53
|
+
return {
|
|
54
|
+
sources: sources.map((s) => ({
|
|
55
|
+
...s,
|
|
56
|
+
root: path.resolve(expandTilde(s.root)),
|
|
57
|
+
})),
|
|
58
|
+
ignore: raw.ignore ?? [],
|
|
59
|
+
private: raw.private ?? [],
|
|
60
|
+
tier,
|
|
61
|
+
toolResultHeadBytes: raw.toolResultHeadBytes ?? 4096,
|
|
62
|
+
toolArgsHeadBytes: raw.toolArgsHeadBytes ?? 2048,
|
|
63
|
+
configDir,
|
|
64
|
+
dataDir,
|
|
65
|
+
dbPath: env.MEMONAUT_DB ?? path.join(dataDir, 'index.db'),
|
|
66
|
+
configPath,
|
|
67
|
+
loaded,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** Write a starter config, never clobbering an existing one. */
|
|
71
|
+
export function writeStarterConfig(config) {
|
|
72
|
+
fs.mkdirSync(config.configDir, { recursive: true });
|
|
73
|
+
if (fs.existsSync(config.configPath))
|
|
74
|
+
return config.configPath;
|
|
75
|
+
const starter = {
|
|
76
|
+
sources: defaultSources(),
|
|
77
|
+
ignore: ['/tmp/**'],
|
|
78
|
+
private: [],
|
|
79
|
+
tier: DEFAULT_TIER,
|
|
80
|
+
toolResultHeadBytes: 4096,
|
|
81
|
+
toolArgsHeadBytes: 2048,
|
|
82
|
+
};
|
|
83
|
+
fs.writeFileSync(config.configPath, JSON.stringify(starter, null, '\t') + '\n', { mode: 0o600 });
|
|
84
|
+
return config.configPath;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
/**
|
|
3
|
+
* Bump when the schema or the extraction rules change. The index is a derived
|
|
4
|
+
* cache over files that are still on disk, and a full rebuild costs well under
|
|
5
|
+
* a minute, so a version mismatch simply throws the DB away rather than
|
|
6
|
+
* carrying migration code forever.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SCHEMA_VERSION = 1;
|
|
9
|
+
export type DB = DatabaseSync;
|
|
10
|
+
export interface OpenOptions {
|
|
11
|
+
readOnly?: boolean;
|
|
12
|
+
/** Throw instead of rebuilding when the schema version differs. */
|
|
13
|
+
noRebuild?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function getMeta(db: DB, key: string): string | undefined;
|
|
16
|
+
export declare function setMeta(db: DB, key: string, value: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Open the index, creating it if needed.
|
|
19
|
+
*
|
|
20
|
+
* The DB file is created 0600: it concentrates every secret that ever passed
|
|
21
|
+
* through a transcript, so it must never be world-readable.
|
|
22
|
+
*/
|
|
23
|
+
export declare function openDb(dbPath: string, opts?: OpenOptions): DB;
|
|
24
|
+
export declare function dropAll(db: DB): void;
|
|
25
|
+
/**
|
|
26
|
+
* Drop all content for a whole lineage.
|
|
27
|
+
*
|
|
28
|
+
* Re-ingestion is a LINEAGE-level operation, never a file-level one: a forked
|
|
29
|
+
* file's membership rows point at entries owned by its parent, so re-reading
|
|
30
|
+
* one file in isolation would leave dangling references. Lineages are tiny
|
|
31
|
+
* (the vast majority are a single file; the largest measured is twelve), so
|
|
32
|
+
* this costs nothing and removes a whole class of bug.
|
|
33
|
+
*/
|
|
34
|
+
export declare function clearLineage(db: DB, lineageId: number): void;
|
|
35
|
+
/** Remove a file that is no longer on disk, and anything only it owned. */
|
|
36
|
+
export declare function deleteFile(db: DB, fileId: number): void;
|
|
37
|
+
//# sourceMappingURL=db.d.ts.map
|
package/dist/db.d.ts.map
ADDED
|
@@ -0,0 +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;AA6F9B,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;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,CAqCjE;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"}
|