chat-recall 0.7.19 → 0.7.21

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 (40) hide show
  1. package/README.md +38 -11
  2. package/dist/board-hooks.d.ts +37 -27
  3. package/dist/board-hooks.d.ts.map +1 -1
  4. package/dist/board-hooks.js +50 -80
  5. package/dist/board-hooks.js.map +1 -1
  6. package/dist/cli.js +19101 -10520
  7. package/dist/cli.js.map +1 -1
  8. package/dist/install-hooks.d.ts +95 -0
  9. package/dist/install-hooks.d.ts.map +1 -0
  10. package/dist/install-hooks.js +352 -0
  11. package/dist/install-hooks.js.map +1 -0
  12. package/dist/install-skills.d.ts.map +1 -1
  13. package/dist/install-skills.js +2 -0
  14. package/dist/install-skills.js.map +1 -1
  15. package/dist/intent-drain.d.ts +7 -1
  16. package/dist/intent-drain.d.ts.map +1 -1
  17. package/dist/intent-drain.js +19 -3
  18. package/dist/intent-drain.js.map +1 -1
  19. package/dist/mcp-relay.js +1 -1
  20. package/dist/mcp.js +17734 -8459
  21. package/dist/mcp.js.map +1 -1
  22. package/dist/message-hook-core.d.ts +67 -0
  23. package/dist/message-hook-core.d.ts.map +1 -0
  24. package/dist/message-hook-core.js +77 -0
  25. package/dist/message-hook-core.js.map +1 -0
  26. package/dist/message-hook.d.ts +2 -0
  27. package/dist/message-hook.d.ts.map +1 -0
  28. package/dist/message-hook.js +423 -0
  29. package/dist/message-hook.js.map +1 -0
  30. package/dist/scan-worker.js +927 -192
  31. package/dist/service-installer.d.ts.map +1 -1
  32. package/dist/service-installer.js +7 -0
  33. package/dist/service-installer.js.map +1 -1
  34. package/dist/sync-client.d.ts.map +1 -1
  35. package/dist/sync-client.js +9 -3
  36. package/dist/sync-client.js.map +1 -1
  37. package/dist/watch.js +13708 -5196
  38. package/package.json +1 -1
  39. package/skills/chat-recall/SKILL.md +6 -1
  40. package/skills/chat-recall-sessions/SKILL.md +155 -0
@@ -0,0 +1,95 @@
1
+ /** Which hooks to install. Every one is on unless the user turned it off. */
2
+ export interface HookSelection {
3
+ save: boolean;
4
+ resume: boolean;
5
+ escalate: boolean;
6
+ wakeup: boolean;
7
+ guard: boolean;
8
+ taskBoard: boolean;
9
+ messages: boolean;
10
+ }
11
+ export declare const ALL_HOOKS: HookSelection;
12
+ /** The shell scripts, by the selection key that installs each one. */
13
+ declare const SCRIPTS: {
14
+ readonly save: "chat_recall_save_hook.sh";
15
+ readonly resume: "chat_recall_resume_hook.sh";
16
+ readonly escalate: "chat_recall_escalate_hook.sh";
17
+ readonly wakeup: "chat_recall_wakeup_hook.sh";
18
+ readonly guard: "chat_recall_guard_hook.sh";
19
+ };
20
+ type ScriptKey = keyof typeof SCRIPTS;
21
+ /** Every event an entry of ours can sit on. Uninstall and reinstall walk all of them. */
22
+ export declare const HOOK_EVENTS: string[];
23
+ type Entry = {
24
+ matcher: string;
25
+ hooks: Array<Record<string, unknown>>;
26
+ };
27
+ type Config = {
28
+ hooks?: Record<string, unknown[]>;
29
+ [k: string]: unknown;
30
+ };
31
+ /** True for every hook entry chat-recall writes, in any version. */
32
+ export declare function isOurEntry(entry: unknown): boolean;
33
+ /**
34
+ * Every Claude profile's `settings.json`, deduped by real path.
35
+ *
36
+ * `CLAUDE_CONFIG_DIR=~/.claude-work` makes that directory the whole config root
37
+ * for a session, so each profile needs its own registration. Only profiles that
38
+ * are real installs (they have `projects/`) are returned.
39
+ */
40
+ export declare function claudeSettingsFiles(): string[];
41
+ /** The `[event, entry]` pairs for a selection. */
42
+ export declare function hookEntries(sel: HookSelection, paths: {
43
+ scripts: Partial<Record<ScriptKey, string>>;
44
+ execPath: string;
45
+ cliEntry: string;
46
+ messageHookEntry: string;
47
+ }): Array<[string, Entry]>;
48
+ /** Replace our entries in one parsed settings object; entries of other tools stay. */
49
+ export declare function mergeOurEntries(config: Config, entries: Array<[string, Entry]>): void;
50
+ /** Remove our entries from one parsed config; returns how many. */
51
+ export declare function removeOurEntries(config: Config): number;
52
+ export interface InstallReport {
53
+ /** settings.json files written. */
54
+ written: string[];
55
+ /** settings.json files left alone because they do not parse. */
56
+ skipped: string[];
57
+ /** Old entries removed from hooks.json files. */
58
+ migrated: number;
59
+ /** Shell hooks left out because this platform cannot run them. */
60
+ shellSkipped: boolean;
61
+ scriptsDir: string;
62
+ selection: HookSelection;
63
+ guardTargets: Array<{
64
+ label: string;
65
+ configPath: string;
66
+ note?: string;
67
+ }>;
68
+ }
69
+ /**
70
+ * Install the selected hooks in every profile. Idempotent: a second run
71
+ * replaces our entries and adds no duplicate.
72
+ *
73
+ * On Windows the five shell hooks are left out: Claude Code runs a hook
74
+ * command through cmd.exe, which cannot run a `.sh`. The board and message
75
+ * hooks are node plus a bundle path, and install everywhere.
76
+ */
77
+ export declare function installHooks(distDir: string, sel?: HookSelection): Promise<InstallReport>;
78
+ export interface UninstallReport {
79
+ removed: number;
80
+ files: string[];
81
+ guardRemoved: Array<{
82
+ label: string;
83
+ configPath: string;
84
+ }>;
85
+ }
86
+ /** Remove every chat-recall hook, and record the choice so the MCP server does not put them back. */
87
+ export declare function uninstallHooks(): Promise<UninstallReport>;
88
+ /**
89
+ * Install the hooks when this version has not installed them, or when a
90
+ * profile is missing them. The MCP server calls this at every start.
91
+ * Returns null when nothing was needed, or when the user uninstalled them.
92
+ */
93
+ export declare function ensureHooks(distDir: string): Promise<InstallReport | null>;
94
+ export {};
95
+ //# sourceMappingURL=install-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../src/install-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Install the chat-recall hooks into every Claude profile, and the decision
3
+ * guard into the other AI tools.
4
+ *
5
+ * Claude Code reads hooks from `settings.json`. This module wrote them to
6
+ * `<profile>/hooks.json`, which Claude Code does not read outside a plugin, so
7
+ * no hook it registered ever ran: the save hook creates
8
+ * `~/.claude/chat-recall-memory` on every Stop, and that directory did not
9
+ * exist on a machine where the Stop hook had been registered for months.
10
+ * Registration is in `settings.json` now, and our entries are removed from
11
+ * `hooks.json`.
12
+ *
13
+ * Three callers: `init` (every user runs it), `install-hooks` (the explicit
14
+ * command and its opt-outs), and the MCP server at start, which repairs a
15
+ * profile that is missing hooks. The last one is what reaches a user who added
16
+ * only the MCP server, from a marketplace button or a hand-written config.
17
+ * `install-hooks --uninstall` records the choice, and the MCP server then
18
+ * leaves the hooks out.
19
+ */
20
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
21
+ import { dirname, join } from 'node:path';
22
+ import { getHooksDir } from '@chat-recall/engine/core/paths.js';
23
+ import { claudeBackend } from '@chat-recall/engine/core/backends/claude.js';
24
+ import { claudeHomeDirs } from '@chat-recall/engine/core/tool-paths.js';
25
+ import { boardHookEntries, isBoardHookEntry, messageHookEntries, isMessageHookEntry, isMessageWaiterEntry, resolveCliEntry, resolveMessageHookEntry, } from './board-hooks.js';
26
+ import { cliVersion } from './http.js';
27
+ export const ALL_HOOKS = {
28
+ save: true, resume: true, escalate: true, wakeup: true, guard: true, taskBoard: true, messages: true,
29
+ };
30
+ /** The shell scripts, by the selection key that installs each one. */
31
+ const SCRIPTS = {
32
+ save: 'chat_recall_save_hook.sh',
33
+ resume: 'chat_recall_resume_hook.sh',
34
+ escalate: 'chat_recall_escalate_hook.sh',
35
+ wakeup: 'chat_recall_wakeup_hook.sh',
36
+ guard: 'chat_recall_guard_hook.sh',
37
+ };
38
+ /** Every event an entry of ours can sit on. Uninstall and reinstall walk all of them. */
39
+ export const HOOK_EVENTS = ['Stop', 'PreCompact', 'UserPromptSubmit', 'SessionEnd', 'SessionStart', 'PreToolUse', 'PostToolUse'];
40
+ /** True for every hook entry chat-recall writes, in any version. */
41
+ export function isOurEntry(entry) {
42
+ const cmd = entry?.hooks?.[0]?.command;
43
+ if (typeof cmd !== 'string')
44
+ return false;
45
+ return Object.values(SCRIPTS).some((s) => cmd.includes(s)) || isBoardHookEntry(entry) || isMessageHookEntry(entry);
46
+ }
47
+ /**
48
+ * Every Claude profile's `settings.json`, deduped by real path.
49
+ *
50
+ * `CLAUDE_CONFIG_DIR=~/.claude-work` makes that directory the whole config root
51
+ * for a session, so each profile needs its own registration. Only profiles that
52
+ * are real installs (they have `projects/`) are returned.
53
+ */
54
+ export function claudeSettingsFiles() {
55
+ const out = [];
56
+ const seen = new Set();
57
+ for (const home of claudeHomeDirs()) {
58
+ if (!existsSync(join(home, 'projects')))
59
+ continue;
60
+ // Keyed by the file, so profiles that share one settings.json through a
61
+ // symlink are written once.
62
+ const file = join(home, 'settings.json');
63
+ let key;
64
+ try {
65
+ key = realpathSync(file);
66
+ }
67
+ catch {
68
+ key = file;
69
+ }
70
+ if (seen.has(key))
71
+ continue;
72
+ seen.add(key);
73
+ out.push(file);
74
+ }
75
+ if (out.length === 0)
76
+ out.push(claudeBackend.settingsFile());
77
+ return out;
78
+ }
79
+ /** Find a bundled hook script: the package's hooks/ in a release, the repo's in a checkout. */
80
+ function findScript(distDir, name) {
81
+ return [
82
+ join(distDir, '..', 'hooks', name),
83
+ join(distDir, '..', '..', 'hooks', name),
84
+ join(distDir, '..', '..', '..', 'hooks', name),
85
+ ].find((p) => existsSync(p));
86
+ }
87
+ /** The `[event, entry]` pairs for a selection. */
88
+ export function hookEntries(sel, paths) {
89
+ const cmd = (command, extra = {}) => [{ type: 'command', command, ...extra }];
90
+ const q = (p) => `"${p}"`;
91
+ const out = [];
92
+ const s = paths.scripts;
93
+ if (sel.save && s.save) {
94
+ out.push(['Stop', { matcher: '', hooks: cmd(q(s.save)) }]);
95
+ out.push(['PreCompact', { matcher: '', hooks: cmd(`${q(s.save)} --precompact`) }]);
96
+ }
97
+ if (sel.resume && s.resume)
98
+ out.push(['UserPromptSubmit', { matcher: '', hooks: cmd(q(s.resume)) }]);
99
+ // The escalation detaches its own background work, so session end is never delayed.
100
+ if (sel.escalate && s.escalate)
101
+ out.push(['SessionEnd', { matcher: '', hooks: cmd(q(s.escalate)) }]);
102
+ // `startup|clear` only: a resumed session already carries its context.
103
+ if (sel.wakeup && s.wakeup)
104
+ out.push(['SessionStart', { matcher: 'startup|clear', hooks: cmd(q(s.wakeup)) }]);
105
+ // Only the tools that can introduce a dependency; matching everything would
106
+ // start a process on every Read for a check that can never fire.
107
+ if (sel.guard && s.guard)
108
+ out.push(['PreToolUse', { matcher: 'Bash|Edit|Write|MultiEdit|NotebookEdit', hooks: cmd(q(s.guard)) }]);
109
+ if (sel.taskBoard)
110
+ out.push(...boardHookEntries(paths.execPath, paths.cliEntry));
111
+ if (sel.messages)
112
+ out.push(...messageHookEntries(paths.execPath, paths.messageHookEntry));
113
+ return out;
114
+ }
115
+ /** Replace our entries in one parsed settings object; entries of other tools stay. */
116
+ export function mergeOurEntries(config, entries) {
117
+ if (!config.hooks || typeof config.hooks !== 'object')
118
+ config.hooks = {};
119
+ const hooks = config.hooks;
120
+ for (const event of HOOK_EVENTS) {
121
+ const kept = (Array.isArray(hooks[event]) ? hooks[event] : []).filter((h) => !isOurEntry(h));
122
+ for (const [ev, entry] of entries)
123
+ if (ev === event)
124
+ kept.push(entry);
125
+ if (kept.length)
126
+ hooks[event] = kept;
127
+ else
128
+ delete hooks[event];
129
+ }
130
+ if (!Object.keys(hooks).length)
131
+ delete config.hooks;
132
+ }
133
+ /** Remove our entries from one parsed config; returns how many. */
134
+ export function removeOurEntries(config) {
135
+ if (!config.hooks || typeof config.hooks !== 'object')
136
+ return 0;
137
+ let removed = 0;
138
+ for (const event of Object.keys(config.hooks)) {
139
+ const current = Array.isArray(config.hooks[event]) ? config.hooks[event] : [];
140
+ const kept = current.filter((h) => !isOurEntry(h));
141
+ removed += current.length - kept.length;
142
+ if (kept.length)
143
+ config.hooks[event] = kept;
144
+ else
145
+ delete config.hooks[event];
146
+ }
147
+ if (!Object.keys(config.hooks).length)
148
+ delete config.hooks;
149
+ return removed;
150
+ }
151
+ /** Read a JSON config. Absent → {}; unparseable → null, and the caller leaves the file alone. */
152
+ function readJson(file) {
153
+ if (!existsSync(file))
154
+ return {};
155
+ try {
156
+ const v = JSON.parse(readFileSync(file, 'utf-8'));
157
+ return v && typeof v === 'object' && !Array.isArray(v) ? v : null;
158
+ }
159
+ catch {
160
+ return null;
161
+ }
162
+ }
163
+ /**
164
+ * Write through a temp file and a rename. Claude Code watches settings.json
165
+ * and reloads it while a session runs, so it must never read a half-written file.
166
+ * The rename goes to the symlink's target: renaming onto the link itself would
167
+ * replace a shared settings.json with a copy that stops being shared.
168
+ */
169
+ function writeJsonAtomic(file, value) {
170
+ let target = file;
171
+ try {
172
+ target = realpathSync(file);
173
+ }
174
+ catch { /* a new file */ }
175
+ mkdirSync(dirname(target), { recursive: true });
176
+ const tmp = `${target}.chat-recall-${process.pid}.tmp`;
177
+ writeFileSync(tmp, JSON.stringify(value, null, 2) + '\n');
178
+ renameSync(tmp, target);
179
+ }
180
+ function statePath() { return join(getHooksDir(), 'install.json'); }
181
+ function readState() {
182
+ try {
183
+ return JSON.parse(readFileSync(statePath(), 'utf-8'));
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ }
189
+ /**
190
+ * Install the selected hooks in every profile. Idempotent: a second run
191
+ * replaces our entries and adds no duplicate.
192
+ *
193
+ * On Windows the five shell hooks are left out: Claude Code runs a hook
194
+ * command through cmd.exe, which cannot run a `.sh`. The board and message
195
+ * hooks are node plus a bundle path, and install everywhere.
196
+ */
197
+ export async function installHooks(distDir, sel = ALL_HOOKS) {
198
+ const shellSkipped = process.platform === 'win32';
199
+ const scriptsDir = getHooksDir();
200
+ const scripts = {};
201
+ if (!shellSkipped) {
202
+ for (const key of Object.keys(SCRIPTS)) {
203
+ if (!sel[key])
204
+ continue;
205
+ const source = findScript(distDir, SCRIPTS[key]);
206
+ if (!source)
207
+ continue;
208
+ const target = join(scriptsDir, SCRIPTS[key]);
209
+ copyFileSync(source, target);
210
+ chmodSync(target, 0o755);
211
+ scripts[key] = target;
212
+ }
213
+ }
214
+ const entries = hookEntries(sel, {
215
+ scripts, execPath: process.execPath,
216
+ cliEntry: resolveCliEntry(distDir), messageHookEntry: resolveMessageHookEntry(distDir),
217
+ });
218
+ const report = { written: [], skipped: [], migrated: 0, shellSkipped, scriptsDir, selection: sel, guardTargets: [] };
219
+ for (const settingsFile of claudeSettingsFiles()) {
220
+ const config = readJson(settingsFile);
221
+ if (!config) {
222
+ report.skipped.push(settingsFile);
223
+ continue;
224
+ }
225
+ mergeOurEntries(config, entries);
226
+ writeJsonAtomic(settingsFile, config);
227
+ report.written.push(settingsFile);
228
+ report.migrated += migrateHooksJson(join(dirname(settingsFile), 'hooks.json'));
229
+ }
230
+ if (sel.guard && scripts.guard)
231
+ report.guardTargets = await addGuardToOtherTools(scriptsDir, scripts.guard);
232
+ writeJsonAtomic(statePath(), { version: cliVersion(), selection: sel });
233
+ return report;
234
+ }
235
+ /** Remove our entries from a profile's hooks.json, where earlier versions put them. */
236
+ function migrateHooksJson(file) {
237
+ if (!existsSync(file))
238
+ return 0;
239
+ const config = readJson(file);
240
+ if (!config)
241
+ return 0;
242
+ const removed = removeOurEntries(config);
243
+ if (removed === 0)
244
+ return 0;
245
+ // A hooks.json that held only our entries is removed, not left as `{}`.
246
+ if (!Object.keys(config).length)
247
+ unlinkSync(file);
248
+ else
249
+ writeJsonAtomic(file, config);
250
+ return removed;
251
+ }
252
+ /** Remove every chat-recall hook, and record the choice so the MCP server does not put them back. */
253
+ export async function uninstallHooks() {
254
+ const report = { removed: 0, files: [], guardRemoved: [] };
255
+ for (const settingsFile of claudeSettingsFiles()) {
256
+ for (const file of [settingsFile, join(dirname(settingsFile), 'hooks.json')]) {
257
+ if (!existsSync(file))
258
+ continue;
259
+ const config = readJson(file);
260
+ if (!config)
261
+ continue;
262
+ const removed = removeOurEntries(config);
263
+ if (!removed)
264
+ continue;
265
+ writeJsonAtomic(file, config);
266
+ report.removed += removed;
267
+ report.files.push(file);
268
+ }
269
+ }
270
+ report.guardRemoved = await removeGuardFromOtherTools();
271
+ writeJsonAtomic(statePath(), { version: cliVersion(), selection: ALL_HOOKS, uninstalled: true });
272
+ return report;
273
+ }
274
+ /** The selection a profile is missing, judged by the message hook on SessionStart and PostToolUse. */
275
+ function profileMissingHooks(settingsFile, sel) {
276
+ const config = readJson(settingsFile);
277
+ if (!config)
278
+ return false; // unparseable: not ours to repair
279
+ const has = (event, test) => (Array.isArray(config.hooks?.[event]) ? config.hooks[event] : []).some(test);
280
+ if (sel.messages && !(has('Stop', isMessageWaiterEntry) && has('SessionStart', isMessageHookEntry)))
281
+ return true;
282
+ if (sel.taskBoard && !has('UserPromptSubmit', isBoardHookEntry))
283
+ return true;
284
+ if (process.platform !== 'win32' && sel.save && !has('Stop', (e) => isOurEntry(e) && !isMessageHookEntry(e)))
285
+ return true;
286
+ return false;
287
+ }
288
+ /**
289
+ * Install the hooks when this version has not installed them, or when a
290
+ * profile is missing them. The MCP server calls this at every start.
291
+ * Returns null when nothing was needed, or when the user uninstalled them.
292
+ */
293
+ export async function ensureHooks(distDir) {
294
+ const state = readState();
295
+ if (state?.uninstalled)
296
+ return null;
297
+ const sel = { ...ALL_HOOKS, ...(state?.selection ?? {}) };
298
+ const stale = !state || state.version !== cliVersion();
299
+ if (!stale && !claudeSettingsFiles().some((f) => profileMissingHooks(f, sel)))
300
+ return null;
301
+ return installHooks(distDir, sel);
302
+ }
303
+ // ── The decision guard in the AI tools that are not Claude Code ──────────────
304
+ //
305
+ // `chat-recall guard` speaks all five harnesses; each of the other four keeps
306
+ // its pre-execution hook in its own file, in its own shape. A tool whose home
307
+ // directory is absent is skipped, so installing never leaves config behind for
308
+ // a tool nobody has.
309
+ async function addGuardToOtherTools(scriptsDir, guardScript) {
310
+ const reg = await import('@chat-recall/engine/core/guard-registration.js');
311
+ const out = [];
312
+ for (const target of reg.guardTargets()) {
313
+ if (!existsSync(target.homeDir))
314
+ continue;
315
+ const wrapper = join(scriptsDir, reg.guardWrapperName(target.tool));
316
+ writeFileSync(wrapper, reg.guardWrapperSource(target.tool, guardScript));
317
+ chmodSync(wrapper, 0o755);
318
+ mkdirSync(dirname(target.configPath), { recursive: true });
319
+ if (target.tool === 'opencode') {
320
+ writeFileSync(target.configPath, reg.opencodePluginSource(wrapper));
321
+ }
322
+ else {
323
+ const merged = reg.registerGuard(target.tool, readJson(target.configPath) ?? {}, reg.guardCommand(wrapper));
324
+ writeJsonAtomic(target.configPath, merged);
325
+ }
326
+ out.push({ label: target.label, configPath: target.configPath, note: target.note });
327
+ }
328
+ return out;
329
+ }
330
+ async function removeGuardFromOtherTools() {
331
+ const reg = await import('@chat-recall/engine/core/guard-registration.js');
332
+ const out = [];
333
+ for (const target of reg.guardTargets()) {
334
+ if (!existsSync(target.configPath))
335
+ continue;
336
+ if (target.tool === 'opencode') {
337
+ // Only ours: install writes this marker on the first line.
338
+ if (!readFileSync(target.configPath, 'utf-8').includes('chat-recall install-hooks'))
339
+ continue;
340
+ unlinkSync(target.configPath);
341
+ }
342
+ else {
343
+ const r = reg.unregisterGuard(target.tool, readJson(target.configPath) ?? {});
344
+ if (r.removed === 0)
345
+ continue;
346
+ writeJsonAtomic(target.configPath, r.config);
347
+ }
348
+ out.push({ label: target.label, configPath: target.configPath });
349
+ }
350
+ return out;
351
+ }
352
+ //# sourceMappingURL=install-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../src/install-hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"AAkCA,sFAAsF;AACtF,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA0DD,qFAAqF;AACrF,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAO5C;AAED,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;CAAE;AA+C5F,mDAAmD;AACnD,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAc5C;AAOD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnI;AAED;0FAC0F;AAC1F,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,aAAa,CAyBnF;AAED,MAAM,WAAW,eAAe;IAAG,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAAE;AAExG,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,eAAe,CAkBjD;AAED;;4EAE4E;AAC5E,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,IAAI,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAcjI"}
1
+ {"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"AAmCA,sFAAsF;AACtF,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA0DD,qFAAqF;AACrF,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAO5C;AAED,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;CAAE;AA+C5F,mDAAmD;AACnD,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAe5C;AAOD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnI;AAED;0FAC0F;AAC1F,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,aAAa,CAyBnF;AAED,MAAM,WAAW,eAAe;IAAG,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAAE;AAExG,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,eAAe,CAkBjD;AAED;;4EAE4E;AAC5E,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,IAAI,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAcjI"}
@@ -22,6 +22,7 @@ import { opencodeBackend } from '@chat-recall/engine/core/backends/opencode.js';
22
22
  import { codexBackend } from '@chat-recall/engine/core/backends/codex.js';
23
23
  import { agyBackend } from '@chat-recall/engine/core/backends/agy.js';
24
24
  import { cursorBackend } from '@chat-recall/engine/core/backends/cursor.js';
25
+ import { piBackend } from '@chat-recall/engine/core/backends/pi.js';
25
26
  import { cursorHomeDir } from '@chat-recall/engine/core/tool-paths.js';
26
27
  // NOTE: Antigravity installs into its OWN dir, ~/.gemini/antigravity-cli/skills.
27
28
  // This file used to install to the shared ~/.gemini/skills instead, disagreeing
@@ -165,6 +166,7 @@ export function skillTargets() {
165
166
  // Cursor DOES have its own dir (~/.cursor/skills). `skills-cursor` next to
166
167
  // it is Cursor's bundled set — read-only, never an install target.
167
168
  { id: 'cursor', label: 'Cursor', dir: join(cursorHomeDir(), 'skills'), available: cursorBackend.isAvailable() },
169
+ { id: 'pi', label: 'Pi', dir: piBackend.skillsDir(), available: piBackend.isAvailable() },
168
170
  ];
169
171
  }
170
172
  /** True if a dir is a chat-recall-managed skill (safe to overwrite/remove). */
@@ -1 +1 @@
1
- {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  */
12
12
  export interface PendingIntent {
13
13
  id: string;
14
- kind: 'copy' | 'sync_all' | 'pull' | 'code_apply' | 'recheck_session';
14
+ kind: 'copy' | 'sync_all' | 'pull' | 'remove' | 'code_apply' | 'recheck_session';
15
15
  artifact_type: string | null;
16
16
  name: string | null;
17
17
  from_tool: string | null;
@@ -48,6 +48,12 @@ export interface DrainResult {
48
48
  done: number;
49
49
  errored: number;
50
50
  }
51
+ export declare function runIntent(intent: PendingIntent, ctx: {
52
+ base: string;
53
+ }): Promise<{
54
+ status: 'done' | 'error';
55
+ result: string;
56
+ }>;
51
57
  /**
52
58
  * Poll every logged-in server once, execute pending intents locally, ack each.
53
59
  * Best-effort: network failures are swallowed (the intent stays pending and is
@@ -1 +1 @@
1
- {"version":3,"file":"intent-drain.d.ts","sourceRoot":"","sources":["../src/intent-drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwBH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAAC;IACtE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAe5F;AAED;;8BAE8B;AAC9B,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqC3G;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAsHD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA8D7F"}
1
+ {"version":3,"file":"intent-drain.d.ts","sourceRoot":"","sources":["../src/intent-drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4BH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,iBAAiB,CAAC;IACjF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAeD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAe5F;AAED;;8BAE8B;AAC9B,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqC3G;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA0DD,wBAAsB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAuDnI;AAgBD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA+D7F"}
@@ -16,14 +16,17 @@ import { loadAllCredentials, syncIncremental } from './sync-client.js';
16
16
  // Concrete module, NOT the engine barrel: the barrel statically re-exports
17
17
  // MemoryIndex -> @lancedb/lancedb, and a static barrel import hoists that
18
18
  // native dep to boot-time in the published bundle (breaks fresh installs).
19
- import { executeSyncAll, executeCopy, } from '@chat-recall/engine/core/toolkit-sync.js';
19
+ import { executeSyncAll, executeCopy, removeArtifactFromTool, } from '@chat-recall/engine/core/toolkit-sync.js';
20
20
  import { instructionsFilename, instructionsPath, } from '@chat-recall/engine/core/artifact-codec.js';
21
21
  import { claudeBackend } from '@chat-recall/engine/core/backends/claude.js';
22
22
  import { codexBackend } from '@chat-recall/engine/core/backends/codex.js';
23
23
  import { cursorBackend } from '@chat-recall/engine/core/backends/cursor.js';
24
24
  import { opencodeBackend } from '@chat-recall/engine/core/backends/opencode.js';
25
25
  import { agyBackend } from '@chat-recall/engine/core/backends/agy.js';
26
+ import { piBackend } from '@chat-recall/engine/core/backends/pi.js';
26
27
  import { pushProjectTaskStatuses } from './project-tasks.js';
28
+ /** Artifact types a remove intent can name. Matches the server's list in sync-intents.ts. */
29
+ const REMOVABLE_INTENT_TYPES = ['skill', 'mcp', 'command', 'agent'];
27
30
  /** Every instruction filename a project may carry, in precedence order. */
28
31
  const INSTRUCTION_FILENAMES = ['CLAUDE.md', 'AGENTS.md', 'GEMINI.md'];
29
32
  /** The tools and the instruction file each one reads. */
@@ -33,6 +36,7 @@ const INSTRUCTION_TOOLS = [
33
36
  { id: 'cursor', isAvailable: () => cursorBackend.isAvailable() },
34
37
  { id: 'opencode', isAvailable: () => opencodeBackend.isAvailable() },
35
38
  { id: 'agy', isAvailable: () => agyBackend.isAvailable() },
39
+ { id: 'pi', isAvailable: () => piBackend.isAvailable() },
36
40
  ];
37
41
  /**
38
42
  * Every instruction file a recommendation rule should reach.
@@ -186,7 +190,7 @@ async function runPull(base, opts) {
186
190
  }),
187
191
  };
188
192
  }
189
- async function runIntent(intent, ctx) {
193
+ export async function runIntent(intent, ctx) {
190
194
  try {
191
195
  if (intent.kind === 'recheck_session') {
192
196
  // The server has a thin/absent copy of this session and is asking us to
@@ -220,6 +224,17 @@ async function runIntent(intent, ctx) {
220
224
  const status = report.failed.length > 0 ? 'error' : 'done';
221
225
  return { status, result: JSON.stringify({ copied: report.copied.length, skipped: report.skipped.length, failed: report.failed }) };
222
226
  }
227
+ if (intent.kind === 'remove') {
228
+ // The server queues a removal only for the device that holds the config,
229
+ // so this machine is the one that edits it.
230
+ if (!REMOVABLE_INTENT_TYPES.includes(intent.artifact_type ?? '') || !intent.name || !intent.to_tool) {
231
+ return { status: 'error', result: JSON.stringify({ error: 'remove intent missing fields' }) };
232
+ }
233
+ const r = await removeArtifactFromTool(intent.artifact_type, intent.name, intent.to_tool);
234
+ // 404 means the artifact is already absent, so the requested state holds.
235
+ const status = r.ok || r.status === 404 ? 'done' : 'error';
236
+ return { status, result: JSON.stringify(r) };
237
+ }
223
238
  // copy
224
239
  if (!intent.artifact_type || !intent.name || !intent.from_tool || !intent.to_tool) {
225
240
  return { status: 'error', result: JSON.stringify({ error: 'copy intent missing fields' }) };
@@ -288,7 +303,8 @@ export async function drainSyncIntents(opts = {}) {
288
303
  const label = intent.kind === 'sync_all' ? 'sync_all'
289
304
  : intent.kind === 'pull' ? `pull ${intent.artifact_type || 'all'}${intent.name ? ` "${intent.name}"` : ''}`
290
305
  : intent.kind === 'recheck_session' ? `recheck ${intent.name}`
291
- : `${intent.artifact_type} "${intent.name}" ${intent.from_tool}→${intent.to_tool}`;
306
+ : intent.kind === 'remove' ? `remove ${intent.artifact_type} "${intent.name}" from ${intent.to_tool}`
307
+ : `${intent.artifact_type} "${intent.name}" ${intent.from_tool}→${intent.to_tool}`;
292
308
  console.error(`[sync-intent] ${label}: ${status}`);
293
309
  }
294
310
  try {