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.
- package/LICENSE +661 -0
- package/dist/cli-main.d.ts +14 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +551 -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 +143 -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 +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -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 +121 -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/regex.d.ts +75 -0
- package/dist/regex.d.ts.map +1 -0
- package/dist/regex.js +242 -0
- package/dist/regex.js.map +1 -0
- package/dist/ripgrep.d.ts +52 -0
- package/dist/ripgrep.d.ts.map +1 -0
- package/dist/ripgrep.js +217 -0
- package/dist/ripgrep.js.map +1 -0
- package/dist/search.d.ts +114 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +309 -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 +618 -0
- package/src/cli.ts +17 -0
- package/src/config.ts +130 -0
- package/src/db.ts +213 -0
- package/src/format.ts +185 -0
- package/src/glob.ts +79 -0
- package/src/index.ts +19 -0
- package/src/indexer.ts +534 -0
- package/src/lineage.ts +111 -0
- package/src/model.ts +157 -0
- package/src/pi-source.ts +328 -0
- package/src/quiet.ts +22 -0
- package/src/regex.ts +378 -0
- package/src/ripgrep.ts +263 -0
- package/src/search.ts +504 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/search.js
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { matcher } from './glob.js';
|
|
2
|
+
import { KIND_WEIGHT } from './model.js';
|
|
3
|
+
export function loadFiles(db) {
|
|
4
|
+
const rows = db
|
|
5
|
+
.prepare(`SELECT id, path, source, session_uuid, cwd, project, name, parent_id, lineage_id,
|
|
6
|
+
lineage_depth, orphaned, private, started, last_activity, entry_count
|
|
7
|
+
FROM file`)
|
|
8
|
+
.all();
|
|
9
|
+
const out = new Map();
|
|
10
|
+
for (const row of rows)
|
|
11
|
+
out.set(Number(row.id), row);
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
/** Quote every token, turning a hostile string into a valid FTS5 AND query. */
|
|
15
|
+
export function quoteQuery(text) {
|
|
16
|
+
const tokens = text.match(/[^\s]+/g) ?? [];
|
|
17
|
+
const quoted = tokens.map((t) => '"' + t.replace(/"/g, '""') + '"');
|
|
18
|
+
return quoted.join(' ');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Which transcripts a query is allowed to see.
|
|
22
|
+
*
|
|
23
|
+
* Visibility is decided per THREAD, because a lineage can in principle span
|
|
24
|
+
* working directories; the lineage set is only a prefilter. Both the FTS and
|
|
25
|
+
* the regex path go through here, so `private` and the cwd/project filters
|
|
26
|
+
* cannot drift apart between them.
|
|
27
|
+
*/
|
|
28
|
+
export function visibleSets(files, query) {
|
|
29
|
+
const cwdMatch = query.cwd && query.cwd.length ? matcher(query.cwd) : null;
|
|
30
|
+
const projectMatch = query.project && query.project.length ? new Set(query.project) : null;
|
|
31
|
+
const visibleFiles = new Set();
|
|
32
|
+
const visibleLineages = new Set();
|
|
33
|
+
const totalLineages = new Set();
|
|
34
|
+
for (const file of files.values()) {
|
|
35
|
+
if (file.lineage_id !== null)
|
|
36
|
+
totalLineages.add(Number(file.lineage_id));
|
|
37
|
+
if (!query.includePrivate && file.private)
|
|
38
|
+
continue;
|
|
39
|
+
if (cwdMatch && !cwdMatch(file.cwd))
|
|
40
|
+
continue;
|
|
41
|
+
if (projectMatch && !(file.project && projectMatch.has(file.project)))
|
|
42
|
+
continue;
|
|
43
|
+
visibleFiles.add(Number(file.id));
|
|
44
|
+
if (file.lineage_id !== null)
|
|
45
|
+
visibleLineages.add(Number(file.lineage_id));
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
files: visibleFiles,
|
|
49
|
+
lineages: visibleLineages,
|
|
50
|
+
totalLineages,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function inList(column, values) {
|
|
54
|
+
if (!values || values.length === 0)
|
|
55
|
+
return { sql: '', args: [] };
|
|
56
|
+
const placeholders = values.map(() => '?').join(', ');
|
|
57
|
+
return { sql: ` AND ${column} IN (${placeholders})`, args: values };
|
|
58
|
+
}
|
|
59
|
+
function recencyBoost(ts, now) {
|
|
60
|
+
if (!ts)
|
|
61
|
+
return 1;
|
|
62
|
+
const t = Date.parse(ts);
|
|
63
|
+
if (Number.isNaN(t))
|
|
64
|
+
return 1;
|
|
65
|
+
const ageDays = Math.max(0, (now - t) / 86_400_000);
|
|
66
|
+
// A gentle nudge, not a sort: 1.25x for today, ~1.0x after a year.
|
|
67
|
+
return 1 + 0.25 * Math.exp(-ageDays / 120);
|
|
68
|
+
}
|
|
69
|
+
export function search(db, query, now = Date.now()) {
|
|
70
|
+
const limit = query.limit ?? 20;
|
|
71
|
+
const threadLimit = query.threadLimit ?? 3;
|
|
72
|
+
const files = loadFiles(db);
|
|
73
|
+
const { files: visibleFiles, lineages: visibleLineages, totalLineages, } = visibleSets(files, query);
|
|
74
|
+
const clauses = [];
|
|
75
|
+
const args = [];
|
|
76
|
+
for (const part of [
|
|
77
|
+
inList('e.role', query.role),
|
|
78
|
+
inList('e.tool', query.tool),
|
|
79
|
+
inList('c.kind', query.kind),
|
|
80
|
+
]) {
|
|
81
|
+
if (part.sql) {
|
|
82
|
+
clauses.push(part.sql);
|
|
83
|
+
args.push(...part.args);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (query.since) {
|
|
87
|
+
clauses.push(' AND e.ts >= ?');
|
|
88
|
+
args.push(query.since);
|
|
89
|
+
}
|
|
90
|
+
if (query.until) {
|
|
91
|
+
clauses.push(' AND e.ts <= ?');
|
|
92
|
+
args.push(query.until);
|
|
93
|
+
}
|
|
94
|
+
// Only push the lineage set into SQL when it actually narrows things down;
|
|
95
|
+
// a 3,000-element IN list to exclude nothing is a waste.
|
|
96
|
+
if (visibleLineages.size > 0 &&
|
|
97
|
+
visibleLineages.size < totalLineages.size * 0.5) {
|
|
98
|
+
const ids = [...visibleLineages];
|
|
99
|
+
clauses.push(` AND e.lineage_id IN (${ids.map(() => '?').join(', ')})`);
|
|
100
|
+
args.push(...ids);
|
|
101
|
+
}
|
|
102
|
+
// Over-fetch: grouping by lineage and re-weighting by kind both collapse rows.
|
|
103
|
+
const fetch = Math.min(2000, Math.max(200, limit * 20));
|
|
104
|
+
const sql = `
|
|
105
|
+
SELECT e.id AS entry_id, e.entry_key, e.lineage_id, e.role, e.tool, e.ts,
|
|
106
|
+
c.kind AS kind,
|
|
107
|
+
bm25(chunk_fts) AS bm,
|
|
108
|
+
snippet(chunk_fts, 0, '\u0001', '\u0002', '…', 14) AS snip
|
|
109
|
+
FROM chunk_fts
|
|
110
|
+
JOIN chunk c ON c.id = chunk_fts.rowid
|
|
111
|
+
JOIN entry e ON e.id = c.entry_id
|
|
112
|
+
WHERE chunk_fts MATCH ?${clauses.join('')}
|
|
113
|
+
ORDER BY bm
|
|
114
|
+
LIMIT ?
|
|
115
|
+
`;
|
|
116
|
+
let usedQuery = query.text;
|
|
117
|
+
let quotedFallback = false;
|
|
118
|
+
let rows;
|
|
119
|
+
try {
|
|
120
|
+
rows = db
|
|
121
|
+
.prepare(sql)
|
|
122
|
+
.all(usedQuery, ...args, fetch);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
if (query.raw)
|
|
126
|
+
throw new Error(`invalid FTS5 query: ${err.message}`);
|
|
127
|
+
usedQuery = quoteQuery(query.text);
|
|
128
|
+
quotedFallback = true;
|
|
129
|
+
if (!usedQuery)
|
|
130
|
+
throw new Error('empty query');
|
|
131
|
+
rows = db
|
|
132
|
+
.prepare(sql)
|
|
133
|
+
.all(usedQuery, ...args, fetch);
|
|
134
|
+
}
|
|
135
|
+
const memberStmt = db.prepare('SELECT file_id, seq FROM membership WHERE entry_id = ?');
|
|
136
|
+
const groups = new Map();
|
|
137
|
+
const order = [];
|
|
138
|
+
for (const row of rows) {
|
|
139
|
+
const kind = row.kind;
|
|
140
|
+
const weight = KIND_WEIGHT[kind] ?? 1;
|
|
141
|
+
const score = -Number(row.bm) *
|
|
142
|
+
weight *
|
|
143
|
+
(query.noRecency ? 1 : recencyBoost(row.ts, now));
|
|
144
|
+
const lineageId = Number(row.lineage_id);
|
|
145
|
+
const existing = groups.get(lineageId);
|
|
146
|
+
if (existing) {
|
|
147
|
+
existing.otherHits++;
|
|
148
|
+
if (score > existing.score) {
|
|
149
|
+
// A better hit in the same lineage takes over the group, keeping the
|
|
150
|
+
// count of everything it displaced.
|
|
151
|
+
const otherHits = existing.otherHits;
|
|
152
|
+
const replaced = buildHit(row, kind, score, memberStmt, files, visibleFiles, threadLimit);
|
|
153
|
+
if (replaced) {
|
|
154
|
+
replaced.otherHits = otherHits;
|
|
155
|
+
groups.set(lineageId, replaced);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const hit = buildHit(row, kind, score, memberStmt, files, visibleFiles, threadLimit);
|
|
161
|
+
if (!hit)
|
|
162
|
+
continue;
|
|
163
|
+
groups.set(lineageId, hit);
|
|
164
|
+
order.push(lineageId);
|
|
165
|
+
}
|
|
166
|
+
const hits = order
|
|
167
|
+
.map((id) => groups.get(id))
|
|
168
|
+
.filter((h) => Boolean(h))
|
|
169
|
+
.sort((a, b) => b.score - a.score);
|
|
170
|
+
return {
|
|
171
|
+
hits: hits.slice(0, limit),
|
|
172
|
+
usedQuery,
|
|
173
|
+
scanned: hits.length,
|
|
174
|
+
quotedFallback,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Fan one entry back out to every visible thread that carries it.
|
|
179
|
+
*
|
|
180
|
+
* Shared by the FTS and the regex path, because they must produce identical
|
|
181
|
+
* thread lists: an entry is stored once and `membership` is what turns it back
|
|
182
|
+
* into "the twelve threads that inherited this".
|
|
183
|
+
*/
|
|
184
|
+
export function collectThreads(entryId, memberStmt, files, visibleFiles) {
|
|
185
|
+
const members = memberStmt.all(entryId);
|
|
186
|
+
const threads = [];
|
|
187
|
+
for (const m of members) {
|
|
188
|
+
const fileId = Number(m.file_id);
|
|
189
|
+
if (!visibleFiles.has(fileId))
|
|
190
|
+
continue;
|
|
191
|
+
const file = files.get(fileId);
|
|
192
|
+
if (!file)
|
|
193
|
+
continue;
|
|
194
|
+
threads.push({
|
|
195
|
+
fileId,
|
|
196
|
+
path: file.path,
|
|
197
|
+
name: file.name,
|
|
198
|
+
cwd: file.cwd,
|
|
199
|
+
project: file.project,
|
|
200
|
+
lastActivity: file.last_activity,
|
|
201
|
+
entryCount: Number(file.entry_count),
|
|
202
|
+
seq: Number(m.seq),
|
|
203
|
+
after: Math.max(0, Number(file.entry_count) - Number(m.seq) - 1),
|
|
204
|
+
isRoot: Number(file.lineage_id) === fileId,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// Every visible thread that inherited this entry is a result. Most recently
|
|
208
|
+
// active first: when a fork family matches on shared history, the thread you
|
|
209
|
+
// touched last is the one you almost always mean.
|
|
210
|
+
threads.sort((a, b) => (b.lastActivity ?? '').localeCompare(a.lastActivity ?? ''));
|
|
211
|
+
return threads;
|
|
212
|
+
}
|
|
213
|
+
function buildHit(row, kind, score, memberStmt, files, visibleFiles, threadLimit) {
|
|
214
|
+
const threads = collectThreads(Number(row.entry_id), memberStmt, files, visibleFiles);
|
|
215
|
+
if (threads.length === 0)
|
|
216
|
+
return null;
|
|
217
|
+
return {
|
|
218
|
+
entryId: Number(row.entry_id),
|
|
219
|
+
entryKey: row.entry_key,
|
|
220
|
+
lineageId: Number(row.lineage_id),
|
|
221
|
+
role: row.role,
|
|
222
|
+
tool: row.tool,
|
|
223
|
+
ts: row.ts,
|
|
224
|
+
kind,
|
|
225
|
+
snippet: row.snip,
|
|
226
|
+
score,
|
|
227
|
+
threads: threadLimit < 0 ? threads : threads.slice(0, Math.max(threadLimit, 1)),
|
|
228
|
+
threadTotal: threads.length,
|
|
229
|
+
otherHits: 0,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/** Resolve a user-supplied reference to a thread: file id, uuid prefix, or path. */
|
|
233
|
+
export function resolveThread(db, ref) {
|
|
234
|
+
if (/^\d+$/.test(ref)) {
|
|
235
|
+
const byId = db
|
|
236
|
+
.prepare('SELECT * FROM file WHERE id = ?')
|
|
237
|
+
.get(Number(ref));
|
|
238
|
+
if (byId)
|
|
239
|
+
return byId;
|
|
240
|
+
}
|
|
241
|
+
const byPath = db
|
|
242
|
+
.prepare('SELECT * FROM file WHERE path = ?')
|
|
243
|
+
.get(ref);
|
|
244
|
+
if (byPath)
|
|
245
|
+
return byPath;
|
|
246
|
+
const byUuid = db
|
|
247
|
+
.prepare('SELECT * FROM file WHERE session_uuid LIKE ? ORDER BY last_activity DESC LIMIT 1')
|
|
248
|
+
.get(ref + '%');
|
|
249
|
+
if (byUuid)
|
|
250
|
+
return byUuid;
|
|
251
|
+
const byName = db
|
|
252
|
+
.prepare('SELECT * FROM file WHERE name = ? ORDER BY last_activity DESC LIMIT 1')
|
|
253
|
+
.get(ref);
|
|
254
|
+
return byName ?? null;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Read one thread back in order.
|
|
258
|
+
*
|
|
259
|
+
* `ownerPath` + byte range is the pointer back to the source transcript. The
|
|
260
|
+
* index deliberately stores tool output truncated (or not at all), so anything
|
|
261
|
+
* that needs full fidelity re-reads those bytes instead of trusting the cache.
|
|
262
|
+
*/
|
|
263
|
+
export function readThread(db, fileId, from = 0, limit = 50) {
|
|
264
|
+
const rows = db
|
|
265
|
+
.prepare(`SELECT m.seq AS seq, e.id AS entry_id, e.entry_key, e.role, e.tool, e.ts,
|
|
266
|
+
e.first_file, e.byte_offset, e.byte_len, f.path AS owner_path
|
|
267
|
+
FROM membership m
|
|
268
|
+
JOIN entry e ON e.id = m.entry_id
|
|
269
|
+
LEFT JOIN file f ON f.id = e.first_file
|
|
270
|
+
WHERE m.file_id = ? AND m.seq >= ?
|
|
271
|
+
ORDER BY m.seq LIMIT ?`)
|
|
272
|
+
.all(fileId, from, limit);
|
|
273
|
+
const chunkStmt = db.prepare('SELECT kind, text FROM chunk WHERE entry_id = ? ORDER BY part');
|
|
274
|
+
return rows.map((r) => ({
|
|
275
|
+
seq: Number(r.seq),
|
|
276
|
+
entryId: Number(r.entry_id),
|
|
277
|
+
entryKey: r.entry_key,
|
|
278
|
+
role: r.role,
|
|
279
|
+
tool: r.tool,
|
|
280
|
+
ts: r.ts,
|
|
281
|
+
shared: Number(r.first_file) !== fileId,
|
|
282
|
+
ownerPath: r.owner_path,
|
|
283
|
+
byteOffset: Number(r.byte_offset),
|
|
284
|
+
byteLength: Number(r.byte_len),
|
|
285
|
+
texts: chunkStmt.all(r.entry_id),
|
|
286
|
+
}));
|
|
287
|
+
}
|
|
288
|
+
export function indexStats(db) {
|
|
289
|
+
const one = (sql) => db.prepare(sql).get();
|
|
290
|
+
const counts = one(`SELECT COUNT(*) AS files,
|
|
291
|
+
COUNT(DISTINCT lineage_id) AS lineages,
|
|
292
|
+
SUM(CASE WHEN parent_id IS NOT NULL THEN 1 ELSE 0 END) AS forks,
|
|
293
|
+
SUM(private) AS privateFiles,
|
|
294
|
+
SUM(orphaned) AS orphans,
|
|
295
|
+
COUNT(DISTINCT project) AS projects,
|
|
296
|
+
MIN(started) AS oldest,
|
|
297
|
+
MAX(last_activity) AS newest
|
|
298
|
+
FROM file`);
|
|
299
|
+
const entries = one('SELECT COUNT(*) AS n FROM entry').n;
|
|
300
|
+
const memberships = one('SELECT COUNT(*) AS n FROM membership').n;
|
|
301
|
+
const chunks = one('SELECT COUNT(*) AS n FROM chunk').n;
|
|
302
|
+
return {
|
|
303
|
+
...counts,
|
|
304
|
+
entries: Number(entries),
|
|
305
|
+
memberships: Number(memberships),
|
|
306
|
+
chunks: Number(chunks),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"silence-sqlite-warning.d.ts","sourceRoot":"","sources":["../src/silence-sqlite-warning.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memonaut",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Index and search AI agent conversation transcripts (pi sessions and friends) from the CLI, from agents, and from your own code",
|
|
5
|
+
"license": "AGPL-3.0-only",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/wighawag/memonaut.git",
|
|
9
|
+
"directory": "packages/memonaut"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/wighawag/memonaut/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/wighawag/memonaut#readme",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"search",
|
|
17
|
+
"index",
|
|
18
|
+
"transcripts",
|
|
19
|
+
"conversations",
|
|
20
|
+
"sessions",
|
|
21
|
+
"agent",
|
|
22
|
+
"sqlite",
|
|
23
|
+
"fts5",
|
|
24
|
+
"cli"
|
|
25
|
+
],
|
|
4
26
|
"publishConfig": {
|
|
5
27
|
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"type": "module",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"default": "./dist/index.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"bin": {
|
|
37
|
+
"memonaut": "./dist/cli.js",
|
|
38
|
+
"recall": "./dist/cli.js"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"src"
|
|
43
|
+
],
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=22.5.0"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^25.2.0",
|
|
50
|
+
"as-soon": "^0.1.5",
|
|
51
|
+
"tsx": "^4.21.0",
|
|
52
|
+
"typescript": "^5.3.3",
|
|
53
|
+
"vitest": "^4.0.18"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc",
|
|
57
|
+
"dev": "as-soon -w src pnpm build",
|
|
58
|
+
"cli": "tsx src/cli.ts",
|
|
59
|
+
"test": "vitest run",
|
|
60
|
+
"test:watch": "vitest"
|
|
6
61
|
}
|
|
7
|
-
}
|
|
62
|
+
}
|