@tznthou/ccrecall 0.1.2 → 0.1.3
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/README.md +2 -0
- package/README_ZH.md +2 -0
- package/dist/api/routes.d.ts +8 -0
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +2 -2
- package/dist/api/routes.js.map +1 -1
- package/dist/cli/daemon.d.ts +21 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +73 -1
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/hooks-installer.d.ts +116 -0
- package/dist/cli/hooks-installer.d.ts.map +1 -0
- package/dist/cli/hooks-installer.js +312 -0
- package/dist/cli/hooks-installer.js.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -1
- package/hooks/README.md +61 -12
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -84,6 +84,8 @@ flowchart TB
|
|
|
84
84
|
|
|
85
85
|
## Quick Start
|
|
86
86
|
|
|
87
|
+
> **First time here?** The full walkthrough (install via npm → MCP setup → everyday usage) lives in [`docs/tutorial.md`](docs/tutorial.md). The section below is the contributor / dev-mode path.
|
|
88
|
+
|
|
87
89
|
### Prerequisites
|
|
88
90
|
|
|
89
91
|
- Node.js `>=20.0.0,<23.0.0`
|
package/README_ZH.md
CHANGED
package/dist/api/routes.d.ts
CHANGED
|
@@ -8,6 +8,14 @@ export interface RequestHandlerOptions {
|
|
|
8
8
|
/** Called when /session/end sees a missing session — typically `() => runIndexer(db)`
|
|
9
9
|
* — so a fresh-session hook can harvest after a forced reindex retry. */
|
|
10
10
|
rescueReindex?: () => Promise<void>;
|
|
11
|
+
/** Reported in /health; closure-captured so daemons installed from different
|
|
12
|
+
* package versions don't lie about which one is actually running. Defaults
|
|
13
|
+
* to 'unknown' only because tests use createServer(db) without options. */
|
|
14
|
+
version?: string;
|
|
15
|
+
/** SQLite path reported in /health so operators can confirm the daemon is
|
|
16
|
+
* writing where they expect. Empty string falls back to the current TODO
|
|
17
|
+
* behaviour, which matches pre-0.1.3 clients that ignored the field. */
|
|
18
|
+
dbPath?: string;
|
|
11
19
|
}
|
|
12
20
|
export declare function createRequestHandler(db: Database, opts?: RequestHandlerOptions): (req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
|
|
13
21
|
//# sourceMappingURL=routes.d.ts.map
|
package/dist/api/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAIhE,OAAO,KAAK,EACY,UAAU,EAAE,WAAW,EAAE,aAAa,EAE7D,MAAM,kBAAkB,CAAA;AA8DzB,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAGlE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAI9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAc/E;AAgED,MAAM,WAAW,qBAAqB;IACpC;8EAC0E;IAC1E,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAIhE,OAAO,KAAK,EACY,UAAU,EAAE,WAAW,EAAE,aAAa,EAE7D,MAAM,kBAAkB,CAAA;AA8DzB,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAGlE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAI9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAc/E;AAgED,MAAM,WAAW,qBAAqB;IACpC;8EAC0E;IAC1E,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC;;gFAE4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;6EAEyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,qBAA0B,IAI9B,KAAK,IAAI,CAAC,eAAe,EACzB,KAAK,IAAI,CAAC,cAAc,KACvB,OAAO,CAAC,IAAI,CAAC,CAgTjB"}
|
package/dist/api/routes.js
CHANGED
|
@@ -138,8 +138,8 @@ export function createRequestHandler(db, opts = {}) {
|
|
|
138
138
|
if (req.method === 'GET' && path === '/health') {
|
|
139
139
|
const result = {
|
|
140
140
|
status: 'ok',
|
|
141
|
-
version:
|
|
142
|
-
dbPath: '',
|
|
141
|
+
version: opts.version ?? 'unknown',
|
|
142
|
+
dbPath: opts.dbPath ?? '',
|
|
143
143
|
sessionCount: db.getMainSessionCount(),
|
|
144
144
|
memoryCount: db.getMemoryCount(),
|
|
145
145
|
topicCount: db.getTopicCount(),
|
package/dist/api/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/daemon.d.ts
CHANGED
|
@@ -32,4 +32,25 @@ export interface UninstallOptions {
|
|
|
32
32
|
overrides?: DaemonPathOverrides;
|
|
33
33
|
}
|
|
34
34
|
export declare function uninstallDaemon(opts?: UninstallOptions): Promise<void>;
|
|
35
|
+
export interface VerifyOverrides {
|
|
36
|
+
getPid?: (label: string) => Promise<number | null>;
|
|
37
|
+
probeHealth?: (port: number) => Promise<boolean>;
|
|
38
|
+
sleep?: (ms: number) => Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export interface VerifyResult {
|
|
41
|
+
pid: number | null;
|
|
42
|
+
healthy: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** Poll launchctl for the daemon PID with a short deadline, then best-effort
|
|
45
|
+
* /health probe. Exposed for testing so cli-daemon.test.ts can stub the two
|
|
46
|
+
* side-effectful calls and exercise the three-state reporting logic. */
|
|
47
|
+
export declare function verifyDaemonStarted(label: string, port: number, opts?: {
|
|
48
|
+
maxWaitMs?: number;
|
|
49
|
+
pollIntervalMs?: number;
|
|
50
|
+
healthTimeoutMs?: number;
|
|
51
|
+
overrides?: VerifyOverrides;
|
|
52
|
+
}): Promise<VerifyResult>;
|
|
53
|
+
/** Format the three possible verify outcomes into a one-line status string.
|
|
54
|
+
* Pure function — unit-tested independently from the poll timing. */
|
|
55
|
+
export declare function formatVerifyMessage(result: VerifyResult, port: number, logsDir: string): string;
|
|
35
56
|
//# sourceMappingURL=daemon.d.ts.map
|
package/dist/cli/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;uDAEuD;AACvD,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,mBAAwB,GAAG,WAAW,CAQnF;AAqBD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAuCjF;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;gFAC4E;IAC5E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,mBAAmB,CAAA;CAChC;AAsBD,wBAAsB,aAAa,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,mBAAmB,CAAA;CAChC;AAED,wBAAsB,eAAe,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhF;AAmDD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;yEAEyE;AACzE,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,eAAe,CAAA;CACvB,GACL,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAED;sEACsE;AACtE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ/F"}
|
package/dist/cli/daemon.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
+
import http from 'node:http';
|
|
4
5
|
import { spawn } from 'node:child_process';
|
|
5
6
|
import { mkdir, writeFile, rm, realpath, lstat, readFile } from 'node:fs/promises';
|
|
6
7
|
import { fileURLToPath } from 'node:url';
|
|
@@ -134,7 +135,11 @@ export async function installDaemon(opts = {}) {
|
|
|
134
135
|
}
|
|
135
136
|
console.log(`ccRecall LaunchAgent installed: ${paths.plistPath}`);
|
|
136
137
|
console.log(`Logs: ${paths.logsDir}/ccrecall.{out,err}.log`);
|
|
137
|
-
|
|
138
|
+
if (!opts.skipLaunchctl) {
|
|
139
|
+
const port = opts.port ?? DEFAULT_PORT;
|
|
140
|
+
const result = await verifyDaemonStarted(LABEL, port);
|
|
141
|
+
console.log(formatVerifyMessage(result, port, paths.logsDir));
|
|
142
|
+
}
|
|
138
143
|
}
|
|
139
144
|
export async function uninstallDaemon(opts = {}) {
|
|
140
145
|
if (process.platform !== 'darwin') {
|
|
@@ -160,4 +165,71 @@ function runLaunchctl(args) {
|
|
|
160
165
|
});
|
|
161
166
|
});
|
|
162
167
|
}
|
|
168
|
+
/** Read the PID from `launchctl list <label>` output. Returns null when the
|
|
169
|
+
* label is unknown (no prior load) or loaded without a PID (crash-loop window).
|
|
170
|
+
* Distinguishing those two cases isn't useful for our messaging — both mean
|
|
171
|
+
* "not running right now." */
|
|
172
|
+
function launchctlGetPid(label) {
|
|
173
|
+
return new Promise((resolve) => {
|
|
174
|
+
const child = spawn('launchctl', ['list', label], { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
175
|
+
let stdout = '';
|
|
176
|
+
child.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
|
|
177
|
+
child.on('error', () => resolve(null));
|
|
178
|
+
child.on('exit', (code) => {
|
|
179
|
+
if (code !== 0)
|
|
180
|
+
return resolve(null);
|
|
181
|
+
const match = stdout.match(/"PID"\s*=\s*(\d+)/);
|
|
182
|
+
resolve(match ? parseInt(match[1], 10) : null);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/** Single-shot /health probe. Resolves to true only on a 2xx from the daemon.
|
|
187
|
+
* All failure modes (ECONNREFUSED, timeout, non-2xx) collapse to false so the
|
|
188
|
+
* caller doesn't need to distinguish them — the verify message is the same. */
|
|
189
|
+
function probeHealth(port, timeoutMs) {
|
|
190
|
+
return new Promise((resolve) => {
|
|
191
|
+
const req = http.get({ hostname: '127.0.0.1', port, path: '/health', timeout: timeoutMs }, (res) => {
|
|
192
|
+
res.resume();
|
|
193
|
+
resolve(res.statusCode === 200);
|
|
194
|
+
});
|
|
195
|
+
req.on('error', () => resolve(false));
|
|
196
|
+
req.on('timeout', () => {
|
|
197
|
+
req.destroy();
|
|
198
|
+
resolve(false);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/** Poll launchctl for the daemon PID with a short deadline, then best-effort
|
|
203
|
+
* /health probe. Exposed for testing so cli-daemon.test.ts can stub the two
|
|
204
|
+
* side-effectful calls and exercise the three-state reporting logic. */
|
|
205
|
+
export async function verifyDaemonStarted(label, port, opts = {}) {
|
|
206
|
+
const getPid = opts.overrides?.getPid ?? launchctlGetPid;
|
|
207
|
+
const probe = opts.overrides?.probeHealth ?? ((p) => probeHealth(p, opts.healthTimeoutMs ?? 1000));
|
|
208
|
+
const sleep = opts.overrides?.sleep ?? ((ms) => new Promise(r => setTimeout(r, ms)));
|
|
209
|
+
const maxWaitMs = opts.maxWaitMs ?? 5000;
|
|
210
|
+
const intervalMs = opts.pollIntervalMs ?? 500;
|
|
211
|
+
const deadline = Date.now() + maxWaitMs;
|
|
212
|
+
let pid = null;
|
|
213
|
+
while (Date.now() < deadline) {
|
|
214
|
+
pid = await getPid(label);
|
|
215
|
+
if (pid !== null)
|
|
216
|
+
break;
|
|
217
|
+
await sleep(intervalMs);
|
|
218
|
+
}
|
|
219
|
+
if (pid === null)
|
|
220
|
+
return { pid: null, healthy: false };
|
|
221
|
+
const healthy = await probe(port);
|
|
222
|
+
return { pid, healthy };
|
|
223
|
+
}
|
|
224
|
+
/** Format the three possible verify outcomes into a one-line status string.
|
|
225
|
+
* Pure function — unit-tested independently from the poll timing. */
|
|
226
|
+
export function formatVerifyMessage(result, port, logsDir) {
|
|
227
|
+
if (result.pid !== null && result.healthy) {
|
|
228
|
+
return `Daemon started (PID ${result.pid}, http://127.0.0.1:${port})`;
|
|
229
|
+
}
|
|
230
|
+
if (result.pid !== null) {
|
|
231
|
+
return `Daemon loaded (PID ${result.pid}). Initial indexing may take a few minutes — tail ${logsDir}/ccrecall.out.log`;
|
|
232
|
+
}
|
|
233
|
+
return `Daemon install completed but no PID reported yet. Check ${logsDir}/ccrecall.err.log`;
|
|
234
|
+
}
|
|
163
235
|
//# sourceMappingURL=daemon.js.map
|
package/dist/cli/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code hooks installer for ccRecall.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the install-daemon / uninstall-daemon pattern: a single CLI
|
|
5
|
+
* subcommand writes SessionStart + SessionEnd entries into the user's
|
|
6
|
+
* `~/.claude/settings.json` instead of making them hand-edit JSON.
|
|
7
|
+
*
|
|
8
|
+
* Design decisions (see .claude/pi-plans/fix-dogfood-issues-0-1-3.md):
|
|
9
|
+
* - HOOKS_DIR resolution uses `import.meta.url` only, so npm/pnpm/yarn/npx
|
|
10
|
+
* global installs all work without asking the package manager for a path.
|
|
11
|
+
* - Merge is idempotent: re-running install is a no-op; stale entries whose
|
|
12
|
+
* basename matches ours (but path changed, e.g. after nvm switch) get
|
|
13
|
+
* rewritten in place rather than appended.
|
|
14
|
+
* - Uninstall is strict: removes only entries whose command exactly matches
|
|
15
|
+
* the current HOOKS_DIR. Anything else (user-modified commands, stale paths
|
|
16
|
+
* from other reasons) is left alone to avoid surprise deletions.
|
|
17
|
+
* - Atomic write: read+parse → backup → temp file → rename. An mtime recheck
|
|
18
|
+
* right before rename catches concurrent edits.
|
|
19
|
+
*/
|
|
20
|
+
declare const HOOK_FILENAMES: {
|
|
21
|
+
readonly SessionStart: "session-start.mjs";
|
|
22
|
+
readonly SessionEnd: "session-end.mjs";
|
|
23
|
+
};
|
|
24
|
+
type HookEvent = keyof typeof HOOK_FILENAMES;
|
|
25
|
+
export interface HookCommand {
|
|
26
|
+
type: 'command';
|
|
27
|
+
command: string;
|
|
28
|
+
}
|
|
29
|
+
export interface HookBlock {
|
|
30
|
+
hooks: HookCommand[];
|
|
31
|
+
}
|
|
32
|
+
export interface ClaudeSettings {
|
|
33
|
+
hooks?: Partial<Record<HookEvent, HookBlock[]>> & Record<string, HookBlock[] | undefined>;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface HookPaths {
|
|
37
|
+
sessionStart: string;
|
|
38
|
+
sessionEnd: string;
|
|
39
|
+
hooksDir: string;
|
|
40
|
+
}
|
|
41
|
+
export interface HookPathOverrides {
|
|
42
|
+
hooksDir?: string;
|
|
43
|
+
nodeBin?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Resolve absolute paths for the two hook scripts. Uses `import.meta.url` as
|
|
46
|
+
* the ground truth — the CLI and the bundled hooks ship together in the same
|
|
47
|
+
* package tree, so computing the hooks dir relative to the compiled CLI file
|
|
48
|
+
* works the same across npm global, pnpm global, yarn global, npx, and
|
|
49
|
+
* running `node dist/index.js` out of a cloned repo. */
|
|
50
|
+
export declare function resolveHookPaths(overrides?: HookPathOverrides): HookPaths;
|
|
51
|
+
/** Build the command string we write into settings.json. Uses process.execPath
|
|
52
|
+
* rather than bare `node` so Claude Code's hook runner can't pick up a
|
|
53
|
+
* different node via PATH — same reasoning as daemon.ts using `nodeBin`. */
|
|
54
|
+
export declare function buildHookCommand(scriptPath: string, nodeBin?: string): string;
|
|
55
|
+
export declare function buildHookEntry(scriptPath: string, nodeBin?: string): HookCommand;
|
|
56
|
+
export declare function resolveSettingsPath(home?: string): string;
|
|
57
|
+
export interface ReadSettingsResult {
|
|
58
|
+
raw: string | null;
|
|
59
|
+
settings: ClaudeSettings;
|
|
60
|
+
mtimeMs: number | null;
|
|
61
|
+
indent: string;
|
|
62
|
+
followedSymlink: boolean;
|
|
63
|
+
}
|
|
64
|
+
/** Read settings.json without touching the filesystem if it's missing. Throws
|
|
65
|
+
* on invalid JSON (never silently overwrites a broken-but-present config) and
|
|
66
|
+
* validates the shape of known hook event keys — a string where we expect an
|
|
67
|
+
* array means merging would corrupt the user's config. */
|
|
68
|
+
export declare function readSettings(settingsPath: string): ReadSettingsResult;
|
|
69
|
+
/** Detect the indent string from the first nested line of an existing JSON
|
|
70
|
+
* file. Falls back to two spaces for empty or flat files. */
|
|
71
|
+
export declare function detectIndent(raw: string): string;
|
|
72
|
+
export interface MergeResult {
|
|
73
|
+
settings: ClaudeSettings;
|
|
74
|
+
changed: boolean;
|
|
75
|
+
actions: Array<{
|
|
76
|
+
event: HookEvent;
|
|
77
|
+
action: 'added' | 'rewritten' | 'unchanged';
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/** Apply our SessionStart + SessionEnd entries to the settings object.
|
|
81
|
+
* - exact command match anywhere under the event → unchanged
|
|
82
|
+
* - any entry whose command path basename is our script → rewrite in place
|
|
83
|
+
* - otherwise → append a new HookBlock with just our entry
|
|
84
|
+
* User-authored entries under the same event are preserved; we never touch
|
|
85
|
+
* a HookBlock that doesn't have our basename. */
|
|
86
|
+
export declare function mergeHooks(settings: ClaudeSettings, paths: HookPaths, nodeBin?: string): MergeResult;
|
|
87
|
+
export interface UninstallResult {
|
|
88
|
+
settings: ClaudeSettings;
|
|
89
|
+
changed: boolean;
|
|
90
|
+
removed: Array<{
|
|
91
|
+
event: HookEvent;
|
|
92
|
+
command: string;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
/** Strict inverse of mergeHooks: removes only entries whose command matches
|
|
96
|
+
* the current build. Stale entries from a previous install with a different
|
|
97
|
+
* HOOKS_DIR are NOT auto-cleaned — they look like user config from outside,
|
|
98
|
+
* and we'd rather err on the side of leaving them than nuking something we
|
|
99
|
+
* can't prove is ours. */
|
|
100
|
+
export declare function removeHooks(settings: ClaudeSettings, paths: HookPaths, nodeBin?: string): UninstallResult;
|
|
101
|
+
export interface InstallHooksOptions {
|
|
102
|
+
home?: string;
|
|
103
|
+
overrides?: HookPathOverrides;
|
|
104
|
+
nodeBin?: string;
|
|
105
|
+
dryRun?: boolean;
|
|
106
|
+
}
|
|
107
|
+
export declare function installHooks(opts?: InstallHooksOptions): Promise<void>;
|
|
108
|
+
export interface UninstallHooksOptions {
|
|
109
|
+
home?: string;
|
|
110
|
+
overrides?: HookPathOverrides;
|
|
111
|
+
nodeBin?: string;
|
|
112
|
+
dryRun?: boolean;
|
|
113
|
+
}
|
|
114
|
+
export declare function uninstallHooks(opts?: UninstallHooksOptions): Promise<void>;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=hooks-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-installer.d.ts","sourceRoot":"","sources":["../../src/cli/hooks-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { readFileSync, writeFileSync, copyFileSync, lstatSync, realpathSync, statSync, renameSync, existsSync } from 'node:fs';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
/**
|
|
7
|
+
* Claude Code hooks installer for ccRecall.
|
|
8
|
+
*
|
|
9
|
+
* Mirrors the install-daemon / uninstall-daemon pattern: a single CLI
|
|
10
|
+
* subcommand writes SessionStart + SessionEnd entries into the user's
|
|
11
|
+
* `~/.claude/settings.json` instead of making them hand-edit JSON.
|
|
12
|
+
*
|
|
13
|
+
* Design decisions (see .claude/pi-plans/fix-dogfood-issues-0-1-3.md):
|
|
14
|
+
* - HOOKS_DIR resolution uses `import.meta.url` only, so npm/pnpm/yarn/npx
|
|
15
|
+
* global installs all work without asking the package manager for a path.
|
|
16
|
+
* - Merge is idempotent: re-running install is a no-op; stale entries whose
|
|
17
|
+
* basename matches ours (but path changed, e.g. after nvm switch) get
|
|
18
|
+
* rewritten in place rather than appended.
|
|
19
|
+
* - Uninstall is strict: removes only entries whose command exactly matches
|
|
20
|
+
* the current HOOKS_DIR. Anything else (user-modified commands, stale paths
|
|
21
|
+
* from other reasons) is left alone to avoid surprise deletions.
|
|
22
|
+
* - Atomic write: read+parse → backup → temp file → rename. An mtime recheck
|
|
23
|
+
* right before rename catches concurrent edits.
|
|
24
|
+
*/
|
|
25
|
+
const HOOK_FILENAMES = {
|
|
26
|
+
SessionStart: 'session-start.mjs',
|
|
27
|
+
SessionEnd: 'session-end.mjs',
|
|
28
|
+
};
|
|
29
|
+
const HOOK_EVENTS = ['SessionStart', 'SessionEnd'];
|
|
30
|
+
/** Resolve absolute paths for the two hook scripts. Uses `import.meta.url` as
|
|
31
|
+
* the ground truth — the CLI and the bundled hooks ship together in the same
|
|
32
|
+
* package tree, so computing the hooks dir relative to the compiled CLI file
|
|
33
|
+
* works the same across npm global, pnpm global, yarn global, npx, and
|
|
34
|
+
* running `node dist/index.js` out of a cloned repo. */
|
|
35
|
+
export function resolveHookPaths(overrides = {}) {
|
|
36
|
+
const hooksDir = overrides.hooksDir ?? defaultHooksDir();
|
|
37
|
+
return {
|
|
38
|
+
hooksDir,
|
|
39
|
+
sessionStart: path.join(hooksDir, HOOK_FILENAMES.SessionStart),
|
|
40
|
+
sessionEnd: path.join(hooksDir, HOOK_FILENAMES.SessionEnd),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function defaultHooksDir() {
|
|
44
|
+
// When compiled: dist/cli/hooks-installer.js → ../../hooks
|
|
45
|
+
// When run via tsx from source: src/cli/hooks-installer.ts → ../../hooks
|
|
46
|
+
// Both layouts put the hooks dir at the same relative position, which is
|
|
47
|
+
// why the URL-relative form is safe across dev and published installs.
|
|
48
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
49
|
+
return path.resolve(here, '..', '..', 'hooks');
|
|
50
|
+
}
|
|
51
|
+
/** Build the command string we write into settings.json. Uses process.execPath
|
|
52
|
+
* rather than bare `node` so Claude Code's hook runner can't pick up a
|
|
53
|
+
* different node via PATH — same reasoning as daemon.ts using `nodeBin`. */
|
|
54
|
+
export function buildHookCommand(scriptPath, nodeBin = process.execPath) {
|
|
55
|
+
return `${nodeBin} ${scriptPath}`;
|
|
56
|
+
}
|
|
57
|
+
export function buildHookEntry(scriptPath, nodeBin) {
|
|
58
|
+
return { type: 'command', command: buildHookCommand(scriptPath, nodeBin) };
|
|
59
|
+
}
|
|
60
|
+
export function resolveSettingsPath(home = os.homedir()) {
|
|
61
|
+
return path.join(home, '.claude', 'settings.json');
|
|
62
|
+
}
|
|
63
|
+
/** Read settings.json without touching the filesystem if it's missing. Throws
|
|
64
|
+
* on invalid JSON (never silently overwrites a broken-but-present config) and
|
|
65
|
+
* validates the shape of known hook event keys — a string where we expect an
|
|
66
|
+
* array means merging would corrupt the user's config. */
|
|
67
|
+
export function readSettings(settingsPath) {
|
|
68
|
+
let followedSymlink = false;
|
|
69
|
+
if (existsSync(settingsPath)) {
|
|
70
|
+
const lst = lstatSync(settingsPath);
|
|
71
|
+
if (lst.isSymbolicLink()) {
|
|
72
|
+
followedSymlink = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
let raw = null;
|
|
76
|
+
let mtimeMs = null;
|
|
77
|
+
if (existsSync(settingsPath)) {
|
|
78
|
+
raw = readFileSync(settingsPath, 'utf8');
|
|
79
|
+
mtimeMs = statSync(settingsPath).mtimeMs;
|
|
80
|
+
}
|
|
81
|
+
if (raw === null) {
|
|
82
|
+
return {
|
|
83
|
+
raw: null,
|
|
84
|
+
settings: {},
|
|
85
|
+
mtimeMs: null,
|
|
86
|
+
indent: ' ',
|
|
87
|
+
followedSymlink: false,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
let parsed;
|
|
91
|
+
try {
|
|
92
|
+
parsed = JSON.parse(raw);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
throw new Error(`~/.claude/settings.json is not valid JSON — refusing to overwrite. Fix it first (original error: ${err.message})`, { cause: err });
|
|
96
|
+
}
|
|
97
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
98
|
+
throw new Error('~/.claude/settings.json must be a JSON object at the top level');
|
|
99
|
+
}
|
|
100
|
+
const settings = parsed;
|
|
101
|
+
if (settings.hooks !== undefined) {
|
|
102
|
+
if (typeof settings.hooks !== 'object' || Array.isArray(settings.hooks) || settings.hooks === null) {
|
|
103
|
+
throw new Error('settings.json "hooks" must be an object keyed by event name');
|
|
104
|
+
}
|
|
105
|
+
for (const event of HOOK_EVENTS) {
|
|
106
|
+
const blocks = settings.hooks[event];
|
|
107
|
+
if (blocks !== undefined && !Array.isArray(blocks)) {
|
|
108
|
+
throw new Error(`settings.json hooks.${event} must be an array (got ${typeof blocks})`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
raw,
|
|
114
|
+
settings,
|
|
115
|
+
mtimeMs,
|
|
116
|
+
indent: detectIndent(raw),
|
|
117
|
+
followedSymlink,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** Detect the indent string from the first nested line of an existing JSON
|
|
121
|
+
* file. Falls back to two spaces for empty or flat files. */
|
|
122
|
+
export function detectIndent(raw) {
|
|
123
|
+
const match = raw.match(/^(\s+)"/m);
|
|
124
|
+
if (match && match[1].length > 0)
|
|
125
|
+
return match[1];
|
|
126
|
+
return ' ';
|
|
127
|
+
}
|
|
128
|
+
/** Apply our SessionStart + SessionEnd entries to the settings object.
|
|
129
|
+
* - exact command match anywhere under the event → unchanged
|
|
130
|
+
* - any entry whose command path basename is our script → rewrite in place
|
|
131
|
+
* - otherwise → append a new HookBlock with just our entry
|
|
132
|
+
* User-authored entries under the same event are preserved; we never touch
|
|
133
|
+
* a HookBlock that doesn't have our basename. */
|
|
134
|
+
export function mergeHooks(settings, paths, nodeBin) {
|
|
135
|
+
const next = { ...settings, hooks: { ...(settings.hooks ?? {}) } };
|
|
136
|
+
const actions = [];
|
|
137
|
+
let changed = false;
|
|
138
|
+
for (const event of HOOK_EVENTS) {
|
|
139
|
+
const scriptPath = event === 'SessionStart' ? paths.sessionStart : paths.sessionEnd;
|
|
140
|
+
const expectedCommand = buildHookCommand(scriptPath, nodeBin);
|
|
141
|
+
const filename = HOOK_FILENAMES[event];
|
|
142
|
+
const existingBlocks = (next.hooks[event] ?? []).map((b) => ({ hooks: [...b.hooks] }));
|
|
143
|
+
let eventAction = null;
|
|
144
|
+
for (const block of existingBlocks) {
|
|
145
|
+
for (let i = 0; i < block.hooks.length; i++) {
|
|
146
|
+
const entry = block.hooks[i];
|
|
147
|
+
if (!entry || entry.type !== 'command' || typeof entry.command !== 'string')
|
|
148
|
+
continue;
|
|
149
|
+
if (entry.command === expectedCommand) {
|
|
150
|
+
eventAction = 'unchanged';
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
if (commandPointsAtScript(entry.command, filename)) {
|
|
154
|
+
block.hooks[i] = { type: 'command', command: expectedCommand };
|
|
155
|
+
eventAction = 'rewritten';
|
|
156
|
+
changed = true;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (eventAction)
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
if (!eventAction) {
|
|
164
|
+
existingBlocks.push({ hooks: [{ type: 'command', command: expectedCommand }] });
|
|
165
|
+
eventAction = 'added';
|
|
166
|
+
changed = true;
|
|
167
|
+
}
|
|
168
|
+
next.hooks[event] = existingBlocks;
|
|
169
|
+
actions.push({ event, action: eventAction });
|
|
170
|
+
}
|
|
171
|
+
return { settings: next, changed, actions };
|
|
172
|
+
}
|
|
173
|
+
/** Returns true if the command string invokes a script whose basename is the
|
|
174
|
+
* hook file we manage. Matches regardless of the node binary path or any
|
|
175
|
+
* shell quoting — we're identifying "this belongs to ccRecall" heuristically
|
|
176
|
+
* because the settings schema has no metadata slot. */
|
|
177
|
+
function commandPointsAtScript(command, filename) {
|
|
178
|
+
// Match either `.../session-start.mjs` at end, or `.../session-start.mjs ` followed by args.
|
|
179
|
+
// We intentionally do NOT match commands that merely mention the filename as
|
|
180
|
+
// a literal argument string — the filename must look like a script path.
|
|
181
|
+
const re = new RegExp(`(?:^|[\\s/\\\\])${escapeRegex(filename)}(?:$|\\s)`);
|
|
182
|
+
return re.test(command);
|
|
183
|
+
}
|
|
184
|
+
function escapeRegex(s) {
|
|
185
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
186
|
+
}
|
|
187
|
+
/** Strict inverse of mergeHooks: removes only entries whose command matches
|
|
188
|
+
* the current build. Stale entries from a previous install with a different
|
|
189
|
+
* HOOKS_DIR are NOT auto-cleaned — they look like user config from outside,
|
|
190
|
+
* and we'd rather err on the side of leaving them than nuking something we
|
|
191
|
+
* can't prove is ours. */
|
|
192
|
+
export function removeHooks(settings, paths, nodeBin) {
|
|
193
|
+
const next = { ...settings, hooks: { ...(settings.hooks ?? {}) } };
|
|
194
|
+
const removed = [];
|
|
195
|
+
let changed = false;
|
|
196
|
+
for (const event of HOOK_EVENTS) {
|
|
197
|
+
const scriptPath = event === 'SessionStart' ? paths.sessionStart : paths.sessionEnd;
|
|
198
|
+
const expectedCommand = buildHookCommand(scriptPath, nodeBin);
|
|
199
|
+
const blocks = next.hooks[event];
|
|
200
|
+
if (!blocks)
|
|
201
|
+
continue;
|
|
202
|
+
const nextBlocks = [];
|
|
203
|
+
for (const block of blocks) {
|
|
204
|
+
const remainingHooks = block.hooks.filter((entry) => {
|
|
205
|
+
if (entry?.type === 'command' && entry.command === expectedCommand) {
|
|
206
|
+
removed.push({ event, command: entry.command });
|
|
207
|
+
changed = true;
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
return true;
|
|
211
|
+
});
|
|
212
|
+
if (remainingHooks.length > 0) {
|
|
213
|
+
nextBlocks.push({ hooks: remainingHooks });
|
|
214
|
+
}
|
|
215
|
+
else if (remainingHooks.length !== block.hooks.length) {
|
|
216
|
+
// emptied by removal — drop it
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
nextBlocks.push(block);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (nextBlocks.length > 0) {
|
|
223
|
+
next.hooks[event] = nextBlocks;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
delete next.hooks[event];
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Collapse empty hooks container so we don't leave "hooks": {} lying around
|
|
230
|
+
if (next.hooks && Object.keys(next.hooks).length === 0) {
|
|
231
|
+
delete next.hooks;
|
|
232
|
+
}
|
|
233
|
+
return { settings: next, changed, removed };
|
|
234
|
+
}
|
|
235
|
+
export async function installHooks(opts = {}) {
|
|
236
|
+
const paths = resolveHookPaths(opts.overrides);
|
|
237
|
+
const settingsPath = resolveSettingsPath(opts.home);
|
|
238
|
+
const read = readSettings(settingsPath);
|
|
239
|
+
if (read.followedSymlink) {
|
|
240
|
+
console.warn(`[install-hooks] note: ${settingsPath} is a symlink — following it`);
|
|
241
|
+
}
|
|
242
|
+
const merge = mergeHooks(read.settings, paths, opts.nodeBin);
|
|
243
|
+
if (opts.dryRun) {
|
|
244
|
+
const preview = serialize(merge.settings, read.indent);
|
|
245
|
+
process.stdout.write(preview);
|
|
246
|
+
if (!preview.endsWith('\n'))
|
|
247
|
+
process.stdout.write('\n');
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (!merge.changed) {
|
|
251
|
+
console.log('ccRecall hooks already installed — no changes');
|
|
252
|
+
for (const a of merge.actions)
|
|
253
|
+
console.log(` ${a.event}: ${a.action}`);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
writeSettingsAtomically(settingsPath, merge.settings, read);
|
|
257
|
+
console.log(`Hooks written to ${settingsPath}`);
|
|
258
|
+
for (const a of merge.actions)
|
|
259
|
+
console.log(` ${a.event}: ${a.action}`);
|
|
260
|
+
console.log('Restart any running Claude Code sessions to pick up the change.');
|
|
261
|
+
}
|
|
262
|
+
export async function uninstallHooks(opts = {}) {
|
|
263
|
+
const paths = resolveHookPaths(opts.overrides);
|
|
264
|
+
const settingsPath = resolveSettingsPath(opts.home);
|
|
265
|
+
if (!existsSync(settingsPath)) {
|
|
266
|
+
console.log(`${settingsPath} does not exist — nothing to uninstall`);
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const read = readSettings(settingsPath);
|
|
270
|
+
const removal = removeHooks(read.settings, paths, opts.nodeBin);
|
|
271
|
+
if (opts.dryRun) {
|
|
272
|
+
const preview = serialize(removal.settings, read.indent);
|
|
273
|
+
process.stdout.write(preview);
|
|
274
|
+
if (!preview.endsWith('\n'))
|
|
275
|
+
process.stdout.write('\n');
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
if (!removal.changed) {
|
|
279
|
+
console.log('No matching ccRecall hook entries found — nothing to remove');
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
writeSettingsAtomically(settingsPath, removal.settings, read);
|
|
283
|
+
console.log(`Removed ${removal.removed.length} ccRecall hook entr${removal.removed.length === 1 ? 'y' : 'ies'} from ${settingsPath}`);
|
|
284
|
+
console.log('Restart any running Claude Code sessions to pick up the change.');
|
|
285
|
+
}
|
|
286
|
+
function serialize(settings, indent) {
|
|
287
|
+
return JSON.stringify(settings, null, indent);
|
|
288
|
+
}
|
|
289
|
+
/** Safe overwrite: copy the original to .bak-<ts>, write a sibling temp file,
|
|
290
|
+
* recheck mtime to catch concurrent edits, then rename over the original.
|
|
291
|
+
* Rename on the same filesystem is atomic, so readers only ever see the old
|
|
292
|
+
* or new file — never a truncated one. */
|
|
293
|
+
function writeSettingsAtomically(settingsPath, settings, read) {
|
|
294
|
+
const content = serialize(settings, read.indent) + '\n';
|
|
295
|
+
const realPath = read.followedSymlink ? realpathSync(settingsPath) : settingsPath;
|
|
296
|
+
if (read.raw !== null) {
|
|
297
|
+
const bak = `${realPath}.bak-${Date.now()}`;
|
|
298
|
+
copyFileSync(realPath, bak);
|
|
299
|
+
}
|
|
300
|
+
const tmp = `${realPath}.tmp-${process.pid}-${Date.now()}`;
|
|
301
|
+
writeFileSync(tmp, content, 'utf8');
|
|
302
|
+
if (read.mtimeMs !== null) {
|
|
303
|
+
// Concurrent-edit guard: compare mtime right before rename. An atomic file
|
|
304
|
+
// was swapped under us if these don't match — bail out rather than clobber.
|
|
305
|
+
const current = statSync(realPath).mtimeMs;
|
|
306
|
+
if (current !== read.mtimeMs) {
|
|
307
|
+
throw new Error(`~/.claude/settings.json was modified between read and write — retry install-hooks. (${read.mtimeMs} → ${current})`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
renameSync(tmp, realPath);
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=hooks-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-installer.js","sourceRoot":"","sources":["../../src/cli/hooks-installer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
5
7
|
import { createServer } from './api/server.js';
|
|
6
8
|
import { Database } from './core/database.js';
|
|
7
9
|
import { runIndexer } from './core/indexer.js';
|
|
@@ -9,6 +11,23 @@ import { MemoryService } from './core/memory-service.js';
|
|
|
9
11
|
import { MaintenanceCoordinator } from './core/maintenance-coordinator.js';
|
|
10
12
|
import { JsonlWatcher } from './core/watcher.js';
|
|
11
13
|
import { installDaemon, uninstallDaemon } from './cli/daemon.js';
|
|
14
|
+
import { installHooks, uninstallHooks } from './cli/hooks-installer.js';
|
|
15
|
+
/** Read the package.json version shipped next to this bundle. Works across
|
|
16
|
+
* layouts: src/index.ts (tsx) → ../package.json, dist/index.js → ../package.json,
|
|
17
|
+
* node_modules/@tznthou/ccrecall/dist/index.js → ../package.json. If the file
|
|
18
|
+
* is missing or unreadable (shouldn't happen in a published install), fall
|
|
19
|
+
* back to 'unknown' rather than crashing the daemon. */
|
|
20
|
+
function readPackageVersion() {
|
|
21
|
+
try {
|
|
22
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
const pkgPath = path.resolve(here, '..', 'package.json');
|
|
24
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
25
|
+
return typeof pkg.version === 'string' ? pkg.version : 'unknown';
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return 'unknown';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
12
31
|
const subcommand = process.argv[2];
|
|
13
32
|
if (subcommand === 'install-daemon' || subcommand === 'uninstall-daemon') {
|
|
14
33
|
const dryRun = process.argv.includes('--dry-run');
|
|
@@ -32,6 +51,16 @@ if (subcommand === 'install-daemon' || subcommand === 'uninstall-daemon') {
|
|
|
32
51
|
process.exit(1);
|
|
33
52
|
});
|
|
34
53
|
}
|
|
54
|
+
else if (subcommand === 'install-hooks' || subcommand === 'uninstall-hooks') {
|
|
55
|
+
const dryRun = process.argv.includes('--dry-run');
|
|
56
|
+
const action = subcommand === 'install-hooks'
|
|
57
|
+
? () => installHooks({ dryRun })
|
|
58
|
+
: () => uninstallHooks({ dryRun });
|
|
59
|
+
action().then(() => process.exit(0)).catch((err) => {
|
|
60
|
+
console.error(`[ccmem ${subcommand}] ${err.message}`);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
35
64
|
else if (subcommand === '--help' || subcommand === '-h' || subcommand === 'help') {
|
|
36
65
|
printHelp();
|
|
37
66
|
process.exit(0);
|
|
@@ -51,6 +80,9 @@ Usage:
|
|
|
51
80
|
ccmem install-daemon Install macOS LaunchAgent for auto-start
|
|
52
81
|
ccmem install-daemon --dry-run Print plist without installing
|
|
53
82
|
ccmem uninstall-daemon Remove LaunchAgent and stop auto-start
|
|
83
|
+
ccmem install-hooks Register SessionStart/SessionEnd hooks in ~/.claude/settings.json
|
|
84
|
+
ccmem install-hooks --dry-run Print merged settings.json without writing
|
|
85
|
+
ccmem uninstall-hooks Remove ccRecall hook entries from ~/.claude/settings.json
|
|
54
86
|
|
|
55
87
|
Environment:
|
|
56
88
|
CCRECALL_PORT HTTP port (default: 7749)
|
|
@@ -99,6 +131,8 @@ async function startDaemon() {
|
|
|
99
131
|
// flight guard when a scheduled scan is already inflight.
|
|
100
132
|
const server = createServer(db, {
|
|
101
133
|
rescueReindex: () => runIndexer(db),
|
|
134
|
+
version: readPackageVersion(),
|
|
135
|
+
dbPath: DB_PATH,
|
|
102
136
|
});
|
|
103
137
|
server.listen(PORT, '127.0.0.1', () => {
|
|
104
138
|
console.log(`ccRecall listening on http://127.0.0.1:${PORT}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,sCAAsC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/hooks/README.md
CHANGED
|
@@ -2,15 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Hook scripts that let Claude Code's lifecycle events trigger ccRecall actions.
|
|
4
4
|
|
|
5
|
+
> **TL;DR — skip the manual JSON.** Run `ccmem install-hooks` and you're done. The command auto-detects `HOOKS_DIR`, merges into `~/.claude/settings.json` without touching your other hooks, and backs up the original. The rest of this README is for people who want to edit the JSON themselves or troubleshoot a specific issue.
|
|
6
|
+
|
|
5
7
|
## Prerequisites
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
1. ccRecall installed globally — `npm install -g @tznthou/ccrecall` (or `pnpm add -g`, `yarn global add`).
|
|
10
|
+
2. ccRecall daemon running on `127.0.0.1:7749` (or your `CCRECALL_PORT`):
|
|
8
11
|
|
|
9
|
-
```bash
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
```bash
|
|
13
|
+
ccmem install-daemon # macOS — auto-start at login
|
|
14
|
+
# or
|
|
15
|
+
ccmem # foreground, any OS
|
|
16
|
+
```
|
|
12
17
|
|
|
13
|
-
If the
|
|
18
|
+
If the daemon is not running, hooks log a warning to stderr and exit cleanly — they never block Claude Code.
|
|
14
19
|
|
|
15
20
|
## Available Hooks
|
|
16
21
|
|
|
@@ -19,9 +24,29 @@ If the service is not running, hooks log a warning to stderr and exit cleanly
|
|
|
19
24
|
| `session-start.mjs` | `SessionStart` | GET `/memory/query` with the project name, write matching memories to stdout (Claude prepends them to context) |
|
|
20
25
|
| `session-end.mjs` | `SessionEnd` | POST `/session/end` to harvest the just-ended session into a memory |
|
|
21
26
|
|
|
27
|
+
## Finding the Hook Scripts
|
|
28
|
+
|
|
29
|
+
When installed from npm, the hook files live under your global `node_modules`. Look up the absolute path once — you'll paste it into `settings.json` in the next step.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# npm
|
|
33
|
+
HOOKS_DIR="$(npm root -g)/@tznthou/ccrecall/hooks"
|
|
34
|
+
|
|
35
|
+
# pnpm
|
|
36
|
+
HOOKS_DIR="$(pnpm root -g)/@tznthou/ccrecall/hooks"
|
|
37
|
+
|
|
38
|
+
# yarn v1
|
|
39
|
+
HOOKS_DIR="$(yarn global dir)/node_modules/@tznthou/ccrecall/hooks"
|
|
40
|
+
|
|
41
|
+
echo "$HOOKS_DIR"
|
|
42
|
+
# Example: /usr/local/lib/node_modules/@tznthou/ccrecall/hooks
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> Developing from a cloned repo? Skip the lookup and point directly at `<repo>/hooks/`.
|
|
46
|
+
|
|
22
47
|
## Installation
|
|
23
48
|
|
|
24
|
-
Add to `~/.claude/settings.json` (or
|
|
49
|
+
Add to `~/.claude/settings.json` (or a project-scoped `.claude/settings.json`). Replace `{HOOKS_DIR}` with the path you printed above:
|
|
25
50
|
|
|
26
51
|
```json
|
|
27
52
|
{
|
|
@@ -31,7 +56,7 @@ Add to `~/.claude/settings.json` (or your project's `.claude/settings.json`):
|
|
|
31
56
|
"hooks": [
|
|
32
57
|
{
|
|
33
58
|
"type": "command",
|
|
34
|
-
"command": "node /
|
|
59
|
+
"command": "node {HOOKS_DIR}/session-start.mjs"
|
|
35
60
|
}
|
|
36
61
|
]
|
|
37
62
|
}
|
|
@@ -41,7 +66,7 @@ Add to `~/.claude/settings.json` (or your project's `.claude/settings.json`):
|
|
|
41
66
|
"hooks": [
|
|
42
67
|
{
|
|
43
68
|
"type": "command",
|
|
44
|
-
"command": "node /
|
|
69
|
+
"command": "node {HOOKS_DIR}/session-end.mjs"
|
|
45
70
|
}
|
|
46
71
|
]
|
|
47
72
|
}
|
|
@@ -50,7 +75,7 @@ Add to `~/.claude/settings.json` (or your project's `.claude/settings.json`):
|
|
|
50
75
|
}
|
|
51
76
|
```
|
|
52
77
|
|
|
53
|
-
|
|
78
|
+
Restart any running Claude Code sessions — settings changes don't hot-reload.
|
|
54
79
|
|
|
55
80
|
## Environment Variables
|
|
56
81
|
|
|
@@ -58,14 +83,38 @@ Adjust the path to match your ccRecall clone location.
|
|
|
58
83
|
|
|
59
84
|
## Verifying the Hook
|
|
60
85
|
|
|
61
|
-
|
|
86
|
+
Manually trigger `session-end.mjs` from your terminal:
|
|
62
87
|
|
|
63
88
|
```bash
|
|
64
89
|
echo '{"session_id":"test-session","hook_event_name":"SessionEnd","reason":"other"}' \
|
|
65
|
-
| node /
|
|
90
|
+
| node "$HOOKS_DIR/session-end.mjs"
|
|
66
91
|
```
|
|
67
92
|
|
|
68
|
-
With
|
|
93
|
+
With the daemon running, this POSTs to `/session/end`. Success is silent; failures go to stderr.
|
|
94
|
+
|
|
95
|
+
Live-tail the daemon log to watch real hook invocations land:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
tail -f ~/Library/Logs/ccrecall/ccrecall.out.log # macOS LaunchAgent
|
|
99
|
+
# or watch the terminal running `ccmem` in foreground
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Troubleshooting
|
|
103
|
+
|
|
104
|
+
**Q: Hooks seem to never trigger.**
|
|
105
|
+
|
|
106
|
+
1. Validate `settings.json` — `jq . ~/.claude/settings.json` (any parse error silently disables hooks).
|
|
107
|
+
2. Start a fresh Claude Code session — hook config doesn't apply to running sessions.
|
|
108
|
+
3. Confirm the daemon is up — `curl http://127.0.0.1:7749/health`.
|
|
109
|
+
4. Run the "Verifying" command above — this isolates whether the issue is the hook script, the daemon, or Claude Code's hook wiring.
|
|
110
|
+
|
|
111
|
+
**Q: `npm root -g` points somewhere unexpected.**
|
|
112
|
+
|
|
113
|
+
`nvm` / `fnm` / `volta` use per-version prefixes. After switching Node versions, `npm root -g` moves — the `$HOOKS_DIR` in `settings.json` needs to be re-computed and updated.
|
|
114
|
+
|
|
115
|
+
**Q: Hook logs an error but settings look right.**
|
|
116
|
+
|
|
117
|
+
Check the daemon side: `~/Library/Logs/ccrecall/ccrecall.err.log` (macOS) or the foreground terminal. Common culprits: port conflict (see `docs/launchd.md`), DB permission, or a corrupted `~/.ccrecall/ccrecall.db`.
|
|
69
118
|
|
|
70
119
|
## Design Notes
|
|
71
120
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tznthou/ccrecall",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "AI memory service for Claude Code — on-demand context injection with metacognition",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"LICENSE"
|
|
17
17
|
],
|
|
18
18
|
"engines": {
|
|
19
|
-
"node": ">=20.0.0
|
|
19
|
+
"node": ">=20.0.0 <23.0.0"
|
|
20
20
|
},
|
|
21
21
|
"keywords": [
|
|
22
22
|
"claude-code",
|
|
@@ -24,6 +24,14 @@
|
|
|
24
24
|
"context-management",
|
|
25
25
|
"metacognition"
|
|
26
26
|
],
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/tznthou/ccRecall.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/tznthou/ccRecall#readme",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/tznthou/ccRecall/issues"
|
|
34
|
+
},
|
|
27
35
|
"author": "tznthou",
|
|
28
36
|
"license": "Apache-2.0",
|
|
29
37
|
"dependencies": {
|