@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 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
@@ -84,6 +84,8 @@ flowchart TB
84
84
 
85
85
  ## 快速開始
86
86
 
87
+ > **第一次來?** 完整教學(npm 安裝 → MCP 設定 → 日常使用)在 [`docs/tutorial_zh.md`](docs/tutorial_zh.md)。下方是 contributor / 開發模式路徑。
88
+
87
89
  ### 環境需求
88
90
 
89
91
  - Node.js `>=20.0.0,<23.0.0`
@@ -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
@@ -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;CACpC;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"}
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"}
@@ -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: '0.1.0',
142
- dbPath: '', // TODO: expose from Database
141
+ version: opts.version ?? 'unknown',
142
+ dbPath: opts.dbPath ?? '',
143
143
  sessionCount: db.getMainSessionCount(),
144
144
  memoryCount: db.getMemoryCount(),
145
145
  topicCount: db.getTopicCount(),
@@ -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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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AAkBA,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,CAsC5E;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"}
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"}
@@ -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
- console.log('Verify with: launchctl list | grep ccrecall');
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
@@ -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":"AAAA,sCAAsC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC;;;;;;GAMG;AAEH,MAAM,KAAK,GAAG,sBAAsB,CAAA;AACpC,MAAM,YAAY,GAAG,IAAI,CAAA;AAgBzB;;uDAEuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,YAAiC,EAAE;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAA;IACrD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAA;IAC9D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AACrE,CAAC;AAED,SAAS,iBAAiB;IACxB,0EAA0E;IAC1E,6EAA6E;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAChD,sEAAsE;IACtE,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;AAC3D,CAAC;AAED,oEAAoE;AACpE,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC5B,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,KAAkB,EAAE,OAAqB,EAAE;IACvE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAA;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IAC3D,MAAM,UAAU,GAA4B;QAC1C,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;KAChC,CAAA;IACD,IAAI,IAAI,CAAC,MAAM;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnE,MAAM,MAAM,GAAG,UAAU;SACtB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,SAAS,CAAC,CAAC,CAAC,uBAAuB,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;SACvF,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO;;;;;YAKG,SAAS,CAAC,KAAK,CAAC;;;cAGd,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;cACxB,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;;;;;;;YAO7B,SAAS,CAAC,MAAM,CAAC;;YAEjB,SAAS,CAAC,MAAM,CAAC;;;EAG3B,MAAM;;;;CAIP,CAAA;AACD,CAAC;AAUD;;;;0DAI0D;AAC1D,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACtD,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,sDAAsD,CAAC,CAAA;IAChH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAA;IACrE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IACjE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,0BAA0B,KAAK,GAAG,CAAC,CAAA;IACxG,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE;IAC3D,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,2DAA2D,OAAO,CAAC,QAAQ,0CAA0C,CAAC,CAAA;IACxI,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAEhD,yEAAyE;IACzE,4EAA4E;IAC5E,uCAAuC;IACvC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACpF,OAAM;IACR,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,CAAC;QACH,KAAK,CAAC,UAAU,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,sEAAsE;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAE5E,MAAM,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACzC,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACvD,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAE/C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAuC,CAAC,CAAC,CAAA;QACpG,MAAM,YAAY,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;IAE5D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAA;QACtC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACrD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAyB,EAAE;IAC/D,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,6DAA6D,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAA;IACpG,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAChD,MAAM,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACzC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAA0B,CAAC,CAAC,CAAA;IACzF,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACzB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAA;;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;+BAG+B;AAC/B,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC1F,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;QAC1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACtC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;YAC/C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;gFAEgF;AAChF,SAAS,WAAW,CAAC,IAAY,EAAE,SAAiB;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAClB,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EACpE,CAAC,GAAG,EAAE,EAAE;YACN,GAAG,CAAC,MAAM,EAAE,CAAA;YACZ,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAA;QACjC,CAAC,CACF,CAAA;QACD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QACrC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,EAAE,CAAA;YACb,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAaD;;yEAEyE;AACzE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,IAAY,EACZ,OAKI,EAAE;IAEN,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,eAAe,CAAA;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAA;IAC1G,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAClG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAA;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,GAAG,CAAA;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;IACvC,IAAI,GAAG,GAAkB,IAAI,CAAA;IAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAA;QACzB,IAAI,GAAG,KAAK,IAAI;YAAE,MAAK;QACvB,MAAM,KAAK,CAAC,UAAU,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;AACzB,CAAC;AAED;sEACsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,MAAoB,EAAE,IAAY,EAAE,OAAe;IACrF,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,uBAAuB,MAAM,CAAC,GAAG,sBAAsB,IAAI,GAAG,CAAA;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,sBAAsB,MAAM,CAAC,GAAG,qDAAqD,OAAO,mBAAmB,CAAA;IACxH,CAAC;IACD,OAAO,2DAA2D,OAAO,mBAAmB,CAAA;AAC9F,CAAC"}
@@ -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":"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"}
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
- The ccRecall HTTP service must be running on `127.0.0.1:7749` (or the port set via `CCRECALL_PORT`). Start it with:
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
- pnpm dev # from the ccRecall repo
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 service is not running, hooks log a warning to stderr and exit cleanly — they never block Claude Code.
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 your project's `.claude/settings.json`):
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 /Users/tznthou/Documents/ccRecall/hooks/session-start.mjs"
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 /Users/tznthou/Documents/ccRecall/hooks/session-end.mjs"
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
- Adjust the path to match your ccRecall clone location.
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
- Trigger manually:
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 /Users/tznthou/Documents/ccRecall/hooks/session-end.mjs
90
+ | node "$HOOKS_DIR/session-end.mjs"
66
91
  ```
67
92
 
68
- With ccRecall running, this POSTs to `/session/end`. The response (success or 404) is logged to stderr only on failure.
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.2",
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,<23.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": {