memonaut 0.1.0 → 0.3.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 (47) hide show
  1. package/dist/cli-main.d.ts +12 -1
  2. package/dist/cli-main.d.ts.map +1 -1
  3. package/dist/cli-main.js +185 -25
  4. package/dist/cli-main.js.map +1 -1
  5. package/dist/cli.js +1 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/format.d.ts.map +1 -1
  8. package/dist/format.js +13 -0
  9. package/dist/format.js.map +1 -1
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +5 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/model.d.ts +23 -1
  15. package/dist/model.d.ts.map +1 -1
  16. package/dist/regex.d.ts +75 -0
  17. package/dist/regex.d.ts.map +1 -0
  18. package/dist/regex.js +242 -0
  19. package/dist/regex.js.map +1 -0
  20. package/dist/resources.d.ts +2 -0
  21. package/dist/resources.d.ts.map +1 -0
  22. package/dist/resources.js +25 -0
  23. package/dist/resources.js.map +1 -0
  24. package/dist/ripgrep.d.ts +52 -0
  25. package/dist/ripgrep.d.ts.map +1 -0
  26. package/dist/ripgrep.js +217 -0
  27. package/dist/ripgrep.js.map +1 -0
  28. package/dist/search.d.ts +22 -1
  29. package/dist/search.d.ts.map +1 -1
  30. package/dist/search.js +47 -23
  31. package/dist/search.js.map +1 -1
  32. package/dist/skills.d.ts +34 -0
  33. package/dist/skills.d.ts.map +1 -0
  34. package/dist/skills.js +59 -0
  35. package/dist/skills.js.map +1 -0
  36. package/package.json +4 -3
  37. package/skills/memonaut/SKILL.md +120 -0
  38. package/src/cli-main.ts +230 -30
  39. package/src/cli.ts +1 -1
  40. package/src/format.ts +12 -0
  41. package/src/index.ts +10 -0
  42. package/src/model.ts +23 -1
  43. package/src/regex.ts +378 -0
  44. package/src/resources.ts +26 -0
  45. package/src/ripgrep.ts +263 -0
  46. package/src/search.ts +68 -26
  47. package/src/skills.ts +86 -0
package/dist/search.js CHANGED
@@ -17,6 +17,39 @@ export function quoteQuery(text) {
17
17
  const quoted = tokens.map((t) => '"' + t.replace(/"/g, '""') + '"');
18
18
  return quoted.join(' ');
19
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
+ }
20
53
  function inList(column, values) {
21
54
  if (!values || values.length === 0)
22
55
  return { sql: '', args: [] };
@@ -37,27 +70,7 @@ export function search(db, query, now = Date.now()) {
37
70
  const limit = query.limit ?? 20;
38
71
  const threadLimit = query.threadLimit ?? 3;
39
72
  const files = loadFiles(db);
40
- // Visibility is decided per THREAD, because a lineage can in principle span
41
- // working directories. The lineage set below is only a prefilter.
42
- const cwdMatch = query.cwd && query.cwd.length ? matcher(query.cwd) : null;
43
- const projectMatch = query.project && query.project.length ? new Set(query.project) : null;
44
- const visibleFiles = new Set();
45
- const visibleLineages = new Set();
46
- for (const file of files.values()) {
47
- if (!query.includePrivate && file.private)
48
- continue;
49
- if (cwdMatch && !cwdMatch(file.cwd))
50
- continue;
51
- if (projectMatch && !(file.project && projectMatch.has(file.project)))
52
- continue;
53
- visibleFiles.add(Number(file.id));
54
- if (file.lineage_id !== null)
55
- visibleLineages.add(Number(file.lineage_id));
56
- }
57
- const totalLineages = new Set();
58
- for (const file of files.values())
59
- if (file.lineage_id !== null)
60
- totalLineages.add(Number(file.lineage_id));
73
+ const { files: visibleFiles, lineages: visibleLineages, totalLineages, } = visibleSets(files, query);
61
74
  const clauses = [];
62
75
  const args = [];
63
76
  for (const part of [
@@ -161,8 +174,15 @@ export function search(db, query, now = Date.now()) {
161
174
  quotedFallback,
162
175
  };
163
176
  }
164
- function buildHit(row, kind, score, memberStmt, files, visibleFiles, threadLimit) {
165
- const members = memberStmt.all(row.entry_id);
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);
166
186
  const threads = [];
167
187
  for (const m of members) {
168
188
  const fileId = Number(m.file_id);
@@ -188,6 +208,10 @@ function buildHit(row, kind, score, memberStmt, files, visibleFiles, threadLimit
188
208
  // active first: when a fork family matches on shared history, the thread you
189
209
  // touched last is the one you almost always mean.
190
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);
191
215
  if (threads.length === 0)
192
216
  return null;
193
217
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Installing the agent skill that ships with this package.
3
+ *
4
+ * pi loads the skill itself from `memonaut-pi` (its `pi.skills` entry), so this command exists for
5
+ * every other agent: the skill is the same file, and `~/.agents/skills/<name>` is where agents that
6
+ * are not pi look for it. One directory, no fan-out to twenty agent-specific locations, and the
7
+ * report names every path written.
8
+ */
9
+ export interface Skill {
10
+ name: string;
11
+ description: string;
12
+ from: string;
13
+ }
14
+ export type Scope = 'user' | 'project';
15
+ /** Where skills live, by convention. `project` keeps them beside the code that needs them. */
16
+ export declare function destinationFor(scope: Scope, cwd?: string): string;
17
+ export declare function skillsSource(): string | undefined;
18
+ /** Name and description come from the SKILL.md front matter, so there is one source of truth. */
19
+ export declare function availableSkills(): Skill[];
20
+ export interface Installed {
21
+ name: string;
22
+ to: string;
23
+ replaced: boolean;
24
+ }
25
+ /**
26
+ * Copies rather than symlinks, so an installed skill survives `node_modules` being deleted.
27
+ *
28
+ * The cost is that upgrading the package does not upgrade the installed skill, which is why the
29
+ * report says `replaced` versus `installed`: a skill that is quietly stale is worse than one you
30
+ * know you have to refresh.
31
+ */
32
+ export declare function installSkills(scope: Scope, cwd?: string): Installed[];
33
+ export declare function isInstalled(skill: Skill, scope: Scope, cwd?: string): boolean;
34
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,SAAgB,GAAG,MAAM,CAIxE;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,iGAAiG;AACjG,wBAAgB,eAAe,IAAI,KAAK,EAAE,CAgBzC;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,SAAgB,GAAG,SAAS,EAAE,CAY5E;AAED,wBAAgB,WAAW,CAC1B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,GAAG,SAAgB,GACjB,OAAO,CAET"}
package/dist/skills.js ADDED
@@ -0,0 +1,59 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { resolvePackageResource } from './resources.js';
5
+ /** Where skills live, by convention. `project` keeps them beside the code that needs them. */
6
+ export function destinationFor(scope, cwd = process.cwd()) {
7
+ return scope === 'user'
8
+ ? path.join(os.homedir(), '.agents', 'skills')
9
+ : path.join(cwd, '.agents', 'skills');
10
+ }
11
+ export function skillsSource() {
12
+ return resolvePackageResource('skills/');
13
+ }
14
+ /** Name and description come from the SKILL.md front matter, so there is one source of truth. */
15
+ export function availableSkills() {
16
+ const root = skillsSource();
17
+ if (!root)
18
+ return [];
19
+ const skills = [];
20
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
21
+ if (!entry.isDirectory())
22
+ continue;
23
+ const manifest = path.join(root, entry.name, 'SKILL.md');
24
+ if (!fs.existsSync(manifest))
25
+ continue;
26
+ const text = fs.readFileSync(manifest, 'utf8');
27
+ skills.push({
28
+ name: /^name:\s*(.+)$/m.exec(text)?.[1]?.trim() ?? entry.name,
29
+ description: /^description:\s*(.+)$/m.exec(text)?.[1]?.trim() ?? '',
30
+ from: path.join(root, entry.name),
31
+ });
32
+ }
33
+ return skills.sort((a, b) => a.name.localeCompare(b.name));
34
+ }
35
+ /**
36
+ * Copies rather than symlinks, so an installed skill survives `node_modules` being deleted.
37
+ *
38
+ * The cost is that upgrading the package does not upgrade the installed skill, which is why the
39
+ * report says `replaced` versus `installed`: a skill that is quietly stale is worse than one you
40
+ * know you have to refresh.
41
+ */
42
+ export function installSkills(scope, cwd = process.cwd()) {
43
+ const destination = destinationFor(scope, cwd);
44
+ const installed = [];
45
+ for (const skill of availableSkills()) {
46
+ const to = path.join(destination, skill.name);
47
+ const replaced = fs.existsSync(to);
48
+ if (replaced)
49
+ fs.rmSync(to, { recursive: true, force: true });
50
+ fs.mkdirSync(destination, { recursive: true });
51
+ fs.cpSync(skill.from, to, { recursive: true });
52
+ installed.push({ name: skill.name, to, replaced });
53
+ }
54
+ return installed;
55
+ }
56
+ export function isInstalled(skill, scope, cwd = process.cwd()) {
57
+ return fs.existsSync(path.join(destinationFor(scope, cwd), skill.name));
58
+ }
59
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memonaut",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Index and search AI agent conversation transcripts (pi sessions and friends) from the CLI, from agents, and from your own code",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -39,7 +39,8 @@
39
39
  },
40
40
  "files": [
41
41
  "dist",
42
- "src"
42
+ "src",
43
+ "skills"
43
44
  ],
44
45
  "engines": {
45
46
  "node": ">=22.5.0"
@@ -53,7 +54,7 @@
53
54
  "vitest": "^4.0.18"
54
55
  },
55
56
  "scripts": {
56
- "build": "tsc",
57
+ "build": "rm -rf skills && cp -r ../../skills ./skills && tsc",
57
58
  "dev": "as-soon -w src pnpm build",
58
59
  "cli": "tsx src/cli.ts",
59
60
  "test": "vitest run",
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: memonaut
3
+ description: Search past AI conversation transcripts (previous sessions, across every project) for what was said, decided, tried or rejected. Use when the user refers to an earlier session ("what did we decide about X", "we discussed this before", "that thing we tried last month"), when you need context that predates the current conversation, when you are about to redo analysis that may already exist, or when asked to find or resume an old conversation. Works via the recall_search / recall_thread / recall_sql tools when the memonaut pi package is loaded, or the `memonaut` (aka `recall`) CLI otherwise.
4
+ license: AGPL-3.0-only
5
+ ---
6
+
7
+ # memonaut
8
+
9
+ Past sessions with this user are indexed and searchable. The index covers **all projects**, not just the current one.
10
+
11
+ ## When to reach for it
12
+
13
+ - The user refers to something from before: "what did we decide", "like we did in the other repo", "the bug from last month".
14
+ - You need a decision's *rationale*, which usually lives in an old conversation, not in the code or the docs.
15
+ - You are about to investigate something that feels like it has been investigated before.
16
+ - The user wants to find or resume an old conversation.
17
+
18
+ Do **not** use it as a code search. It indexes conversations. Use `grep` for the codebase.
19
+
20
+ ## The two-step
21
+
22
+ Search returns snippets, not conversations. The normal loop is:
23
+
24
+ 1. `recall_search` with a phrase you expect to have been typed.
25
+ 2. `recall_thread` on the most promising result to read what was actually said around it.
26
+
27
+ Snippets are deliberately short. Do not answer from a snippet alone when the answer matters: read the thread.
28
+
29
+ ## Query syntax
30
+
31
+ The query is an SQLite FTS5 expression:
32
+
33
+ | Form | Meaning |
34
+ |---|---|
35
+ | `steering queue` | both words, anywhere in the message |
36
+ | `"steering queue"` | that exact phrase |
37
+ | `queue OR backlog` | either |
38
+ | `queue NOT redis` | first without the second |
39
+ | `NEAR(fork lineage, 5)` | both within five tokens |
40
+ | `parentSess*` | prefix |
41
+
42
+ Search words the **user or you would have typed**, not words you would use to describe the topic. Transcripts contain the actual vocabulary of the moment: identifiers, error strings, file names. `"ERR_SQLITE_ERROR"` finds things; "database problem" often does not.
43
+
44
+ If a query fails to parse as FTS5 it is retried as quoted literal tokens, so pasting `handleToolCall(x)` is safe.
45
+
46
+ FTS5 tokenises, so it cannot match *inside* an identifier (`ToolCall` does not find `handleToolCall`), and it only sees text the index holds. When you need either, use the exact path below.
47
+
48
+ ## Narrowing
49
+
50
+ Everything is global by default, which is usually right and occasionally noisy.
51
+
52
+ - `project: ["wherever"]` — the last path segment of the working directory.
53
+ - `cwd: ["~/dev/**/wherever"]` — glob over the full path.
54
+ - `since: "2026-07-01"` — bound the time range.
55
+ - `role: ["user"]` — only what the human typed. Very effective for finding a decision or a requirement.
56
+ - `tool: ["bash"]` — messages involving a given tool.
57
+
58
+ Start broad, then narrow. A result count in the dozens means add a filter; zero results usually means your phrase was too specific, so drop a word or try `OR`.
59
+
60
+ ## Forks: several threads can carry the same message
61
+
62
+ Forking a conversation copies its history, so one message can belong to several continuations. When a match falls in shared history, the result says so and lists every thread that inherited it, **most recently active first**, with how many entries each accumulated afterwards.
63
+
64
+ That list is a real choice, not noise. The threads diverged after the matched point, so they may have reached different conclusions. When it matters which one you follow:
65
+
66
+ - The newest thread is the usual default, but say which one you read.
67
+ - If the forks disagree, tell the user there are several continuations rather than picking one silently.
68
+
69
+ ## Aggregates
70
+
71
+ For counting and grouping questions ("which projects did I touch in July", "how many sessions used this tool"), use `recall_sql` instead of trying to phrase it as a search. Tables:
72
+
73
+ ```
74
+ file(id, path, cwd, project, name, parent_id, lineage_id, private, started, last_activity, entry_count)
75
+ entry(id, lineage_id, entry_key, role, tool, ts)
76
+ membership(entry_id, file_id, seq) -- which threads carry an entry
77
+ chunk(entry_id, kind, text) -- indexed text
78
+ chunk_fts -- FTS5 index over chunk.text
79
+ ```
80
+
81
+ The connection is read-only. Always include a `LIMIT`.
82
+
83
+ ## Exact search: the CLI's `--regex`
84
+
85
+ There is **no regex tool**. When full-text search structurally cannot answer, use the shell:
86
+
87
+ ```sh
88
+ recall search --regex 'ERR_[A-Z_]+' --since 30d
89
+ recall search --regex 'handleToolCall(' -F --project wherever # -F: literal, not a regex
90
+ ```
91
+
92
+ It runs ripgrep over the **original transcripts**, so it reaches two things the tools cannot:
93
+
94
+ - text *inside* an identifier, which FTS5 cannot tokenise to;
95
+ - text the index does not hold at all, above all **tool output** (42% of the bytes, not indexed by default) and the tail of long tool-call arguments. A hit that came from such text is labelled `read from the transcript · this ... text is not indexed`. If a user insists something was definitely said and search finds nothing, this is usually why. (A hit labelled `matched the transcript JSON, not the message text` is different: your pattern hit a JSON key or an id, not anything anyone wrote.)
96
+
97
+ It is fork-aware and filtered exactly like a normal search (`--project`, `--role`, `--since`, ...), and it still never reads an ignored or private transcript. It is roughly 5x slower than the indexed query and has **no relevance ranking**: results are ordered by recency, so the first one is the most recent match, not the best one. Search full-text first; reach for `--regex` when you know the exact string.
98
+
99
+ ## Without the pi tools
100
+
101
+ If `recall_search` is not available, the same index is reachable from the shell:
102
+
103
+ ```sh
104
+ recall search '"steering queue"' --project wherever --since 30d
105
+ recall search '"completing one work task"' --threads all
106
+ recall show 2585 --from 120
107
+ recall sql "select project, count(*) n from file group by 1 order by n desc limit 10"
108
+ ```
109
+
110
+ Add `--json` for machine-readable output. If it reports no index, the user needs to run `recall index` once.
111
+
112
+ ## What is not there
113
+
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.
115
+ - **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
+ - **Anything the user chose to ignore.** Ignored directories were never read at all.
117
+
118
+ ## Reporting back
119
+
120
+ Cite what you found by thread number and date ("thread 2585, 11 July"), so the user can open it themselves. When you are relying on an old conversation for a claim, say so: a decision from six weeks ago may since have been reversed, and the transcript cannot tell you that on its own.