greprag 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ /** greprag doctor — diagnose and repair a project's memory identity.
2
+ *
3
+ * Finds orphan project_ids that belong to the same logical project, detects
4
+ * drift between file-based and git-derived UUIDs, and offers the user one of
5
+ * three repair actions (consolidate, migrate-to-git, dry-run) via the
6
+ * tenant-scoped /v1/projects/merge endpoint.
7
+ *
8
+ * No raw DB access — everything flows through the public API so a user can
9
+ * repair their own state with just an API key. */
10
+ interface DoctorOptions {
11
+ yes?: boolean;
12
+ inspect?: boolean;
13
+ }
14
+ export declare function runDoctor(opts: DoctorOptions): Promise<void>;
15
+ export {};
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ /** greprag doctor — diagnose and repair a project's memory identity.
3
+ *
4
+ * Finds orphan project_ids that belong to the same logical project, detects
5
+ * drift between file-based and git-derived UUIDs, and offers the user one of
6
+ * three repair actions (consolidate, migrate-to-git, dry-run) via the
7
+ * tenant-scoped /v1/projects/merge endpoint.
8
+ *
9
+ * No raw DB access — everything flows through the public API so a user can
10
+ * repair their own state with just an API key. */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.runDoctor = runDoctor;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const readline = __importStar(require("readline"));
49
+ const project_anchor_1 = require("../project-anchor");
50
+ const API_URL_DEFAULT = 'https://api.greprag.com';
51
+ async function runDoctor(opts) {
52
+ const cfg = getConfig();
53
+ if (!cfg.apiKey) {
54
+ console.error('Not configured. Run: greprag init');
55
+ process.exit(1);
56
+ }
57
+ const cwd = process.cwd();
58
+ const anchor = (0, project_anchor_1.readAnchor)(cwd);
59
+ const gitId = (0, project_anchor_1.computeGitDerivedProjectId)(cwd);
60
+ // --- Diagnosis ---------------------------------------------------------
61
+ console.log('\n[greprag doctor]\n');
62
+ console.log(`Project: ${anchor.projectName}`);
63
+ console.log(`Current ID: ${anchor.projectId}`);
64
+ console.log(`Identity source: ${describeSource(anchor.source, anchor.anchorPath)}`);
65
+ if (gitId) {
66
+ if (gitId === anchor.projectId) {
67
+ console.log(`Git-derived ID: ${gitId} (matches current)`);
68
+ }
69
+ else {
70
+ console.log(`Git-derived ID: ${gitId} (DIFFERS from current — drift)`);
71
+ }
72
+ }
73
+ else {
74
+ console.log(`Git-derived ID: (none — no git repo or no commits yet)`);
75
+ }
76
+ // Query orphans for this profile name.
77
+ const orphansUrl = `${cfg.apiUrl}/v1/projects/orphans?profile=${encodeURIComponent(anchor.projectName)}`;
78
+ const orphansResp = await apiGet(orphansUrl, cfg.apiKey);
79
+ // Filter out the current project_id — that's the active bucket, not an orphan.
80
+ const orphans = orphansResp.candidates.filter(c => c.project_id !== anchor.projectId);
81
+ console.log('');
82
+ if (orphans.length === 0 && gitId === anchor.projectId) {
83
+ console.log('All clean. No orphans, no drift. Nothing to repair.\n');
84
+ return;
85
+ }
86
+ if (orphans.length > 0) {
87
+ console.log(`Orphan project IDs under profile "${anchor.projectName}":`);
88
+ orphans.forEach((o, i) => {
89
+ const types = Object.entries(o.by_type).map(([k, v]) => `${v} ${k}`).join(', ');
90
+ const range = o.oldest && o.newest
91
+ ? `${o.oldest.slice(0, 10)} → ${o.newest.slice(0, 10)}`
92
+ : '(no memory rows)';
93
+ console.log(` [${i + 1}] ${o.project_id} ${o.total} rows (${types || 'registry only'})`);
94
+ console.log(` range: ${range}${o.registered ? ' · registered' : ''}`);
95
+ });
96
+ console.log('');
97
+ }
98
+ else {
99
+ console.log('No orphan project IDs found under this profile.');
100
+ console.log('');
101
+ }
102
+ if (opts.inspect) {
103
+ console.log('Inspect-only mode — no changes made.\n');
104
+ return;
105
+ }
106
+ // --- Repair options ---------------------------------------------------
107
+ const driftPresent = gitId !== null && gitId !== anchor.projectId;
108
+ const haveOrphans = orphans.length > 0;
109
+ const orphanIds = orphans.map(o => o.project_id);
110
+ const actions = [];
111
+ if (driftPresent && gitId) {
112
+ // Migrate to git-derived UUID: everything → git UUID, strip file's project_id.
113
+ const migrationSources = [anchor.projectId, ...orphanIds];
114
+ actions.push({
115
+ key: 'm',
116
+ label: `Migrate to git-derived UUID (${gitId})\n — moves current + orphans onto the git UUID\n — strips project_id from .claude/project.json (settings stay)`,
117
+ target: gitId,
118
+ sources: migrationSources,
119
+ stripFileProjectId: true,
120
+ recommended: true,
121
+ });
122
+ }
123
+ if (haveOrphans) {
124
+ // Consolidate orphans into the current UUID.
125
+ actions.push({
126
+ key: 'c',
127
+ label: `Consolidate orphans into current UUID (${anchor.projectId})\n — moves orphans onto the current UUID\n — keeps the current identity source unchanged`,
128
+ target: anchor.projectId,
129
+ sources: orphanIds,
130
+ stripFileProjectId: false,
131
+ recommended: !driftPresent,
132
+ });
133
+ }
134
+ if (actions.length === 0) {
135
+ console.log('Nothing to repair. (Drift detection saw current = git UUID, no orphans.)\n');
136
+ return;
137
+ }
138
+ // Always offer dry-run and no-op for the most-recommended action.
139
+ console.log('Actions:');
140
+ for (const a of actions) {
141
+ const tag = a.recommended ? ' (recommended)' : '';
142
+ console.log(` [${a.key}] ${a.label}${tag}`);
143
+ }
144
+ console.log(` [d] Dry-run the recommended action above (no writes)`);
145
+ console.log(` [n] No action (exit)\n`);
146
+ let choice;
147
+ if (opts.yes) {
148
+ const rec = actions.find(a => a.recommended) || actions[0];
149
+ choice = rec.key;
150
+ console.log(`--yes given; picking recommended action: [${rec.key}]\n`);
151
+ }
152
+ else {
153
+ choice = (await prompt('Choice: ')).trim().toLowerCase();
154
+ }
155
+ let dryRun = false;
156
+ let picked = null;
157
+ if (choice === 'd') {
158
+ picked = actions.find(a => a.recommended) || actions[0];
159
+ dryRun = true;
160
+ }
161
+ else {
162
+ picked = actions.find(a => a.key === choice) || null;
163
+ }
164
+ if (!picked) {
165
+ console.log('No action selected.\n');
166
+ return;
167
+ }
168
+ // --- Execute ----------------------------------------------------------
169
+ console.log(`\n${dryRun ? 'Dry-running' : 'Executing'}: merge into ${picked.target}`);
170
+ console.log(`Sources (${picked.sources.length}):`);
171
+ picked.sources.forEach(s => console.log(` - ${s}`));
172
+ if (!dryRun && !opts.yes) {
173
+ const confirm = (await prompt('\nProceed? (yes/no): ')).trim().toLowerCase();
174
+ if (confirm !== 'yes' && confirm !== 'y') {
175
+ console.log('Cancelled.\n');
176
+ return;
177
+ }
178
+ }
179
+ const report = await apiPost(`${cfg.apiUrl}/v1/projects/merge`, cfg.apiKey, {
180
+ target_project_id: picked.target,
181
+ source_project_ids: picked.sources,
182
+ target_project_name: anchor.projectName,
183
+ dry_run: dryRun,
184
+ });
185
+ if (!report.ok) {
186
+ console.error(`\nMerge failed: ${report.error}\n`);
187
+ process.exit(1);
188
+ }
189
+ console.log(`\n${dryRun ? 'Would change' : 'Changed'}:`);
190
+ console.log(` memories: ${report.changes.memories}`);
191
+ console.log(` memory_claims: ${report.changes.memory_claims}`);
192
+ console.log(` inbox_messages (to): ${report.changes.inbox_messages_to}`);
193
+ console.log(` inbox_messages (from): ${report.changes.inbox_messages_from}`);
194
+ console.log(` projects registry rows: ${report.changes.projects_registry_deleted} deleted`);
195
+ if (!dryRun && picked.stripFileProjectId) {
196
+ const stripped = stripFileProjectId(anchor.anchorPath);
197
+ if (stripped) {
198
+ console.log(`\nStripped project_id from ${anchor.anchorPath}`);
199
+ console.log('Identity now flows through git-derived UUID — file holds settings only.');
200
+ }
201
+ }
202
+ console.log(`\n${dryRun ? 'Dry-run complete. No changes were written.' : 'Repair complete.'}\n`);
203
+ }
204
+ // -- Helpers ----------------------------------------------------------------
205
+ function describeSource(source, anchorPath) {
206
+ switch (source) {
207
+ case 'file': return `.claude/project.json (explicit project_id)`;
208
+ case 'git': return `git root commit SHA (derived, no file needed)`;
209
+ case 'global': return `~/.claude/project.json (global anchor — Cowork-style)`;
210
+ case 'hash': return `path hash (no git, no anchor file — UNSTABLE)`;
211
+ default: return source;
212
+ }
213
+ }
214
+ /** Rewrite the anchor file to drop `project_id` and `project_name`, keeping
215
+ * per-project settings. Returns true on write, false if the file is absent or
216
+ * already settings-only. */
217
+ function stripFileProjectId(anchorPath) {
218
+ if (!fs.existsSync(anchorPath))
219
+ return false;
220
+ let raw;
221
+ try {
222
+ raw = JSON.parse(fs.readFileSync(anchorPath, 'utf-8'));
223
+ }
224
+ catch {
225
+ return false;
226
+ }
227
+ if (!('project_id' in raw))
228
+ return false;
229
+ delete raw.project_id;
230
+ fs.writeFileSync(anchorPath, JSON.stringify(raw, null, 2) + '\n');
231
+ return true;
232
+ }
233
+ function prompt(question) {
234
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
235
+ return new Promise(resolve => {
236
+ rl.question(question, answer => {
237
+ rl.close();
238
+ resolve(answer);
239
+ });
240
+ });
241
+ }
242
+ // -- HTTP / env -------------------------------------------------------------
243
+ function loadEnvFile(filePath) {
244
+ try {
245
+ const content = fs.readFileSync(filePath, 'utf-8');
246
+ for (const line of content.split('\n')) {
247
+ const trimmed = line.trim();
248
+ if (!trimmed || trimmed.startsWith('#'))
249
+ continue;
250
+ const eqIdx = trimmed.indexOf('=');
251
+ if (eqIdx < 1)
252
+ continue;
253
+ const key = trimmed.slice(0, eqIdx).trim();
254
+ let value = trimmed.slice(eqIdx + 1).trim();
255
+ if ((value.startsWith('"') && value.endsWith('"')) ||
256
+ (value.startsWith("'") && value.endsWith("'"))) {
257
+ value = value.slice(1, -1);
258
+ }
259
+ if (!process.env[key])
260
+ process.env[key] = value;
261
+ }
262
+ }
263
+ catch { /* missing — fine */ }
264
+ }
265
+ function ensureEnv() {
266
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
267
+ if (homeDir)
268
+ loadEnvFile(path.join(homeDir, '.env'));
269
+ if (!process.env.GREPRAG_API_KEY)
270
+ loadEnvFile(path.join(process.cwd(), '.env'));
271
+ }
272
+ function getConfig() {
273
+ ensureEnv();
274
+ return {
275
+ apiUrl: process.env.GREPRAG_API_URL || API_URL_DEFAULT,
276
+ apiKey: process.env.GREPRAG_API_KEY || '',
277
+ };
278
+ }
279
+ async function apiGet(url, apiKey) {
280
+ const res = await fetch(url, { headers: { 'Authorization': `Bearer ${apiKey}` } });
281
+ if (!res.ok)
282
+ throw new Error(`API ${res.status}: ${await res.text()}`);
283
+ return res.json();
284
+ }
285
+ async function apiPost(url, apiKey, body) {
286
+ const res = await fetch(url, {
287
+ method: 'POST',
288
+ headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
289
+ body: JSON.stringify(body),
290
+ });
291
+ if (!res.ok) {
292
+ // Pass through error JSON for the caller to surface.
293
+ return await res.json();
294
+ }
295
+ return res.json();
296
+ }
297
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,7 @@ const fs = __importStar(require("fs"));
43
43
  const path = __importStar(require("path"));
44
44
  const os = __importStar(require("os"));
45
45
  const readline = __importStar(require("readline"));
46
+ const child_process_1 = require("child_process");
46
47
  const project_anchor_1 = require("../project-anchor");
47
48
  const API_URL = 'https://api.greprag.com';
48
49
  async function runInit(opts) {
@@ -86,10 +87,23 @@ async function runInit(opts) {
86
87
  const settings = readSettings(settingsPath);
87
88
  const changes = applySettings(settings, apiKey);
88
89
  writeSettings(settingsPath, settings);
89
- // Step 4: Project anchor UUID-per-repo, committed to .claude/project.json.
90
- // Stable across renames, remote URL changes, fresh clones, forks.
90
+ // Step 4: Project anchor. Behavior depends on cascade source:
91
+ // - source='git' → settings-only file written; identity is git-derived.
92
+ // No gitignore patch needed (file isn't load-bearing).
93
+ // - source='file' → file holds a random project_id (non-git directories).
94
+ // Patch the gitignore so the file survives fresh clones.
95
+ // - source='global' / unchanged → idempotent return, no action.
91
96
  const anchor = (0, project_anchor_1.ensureAnchor)(process.cwd());
92
- changes.push(`Project anchor: ${anchor.projectName} (${anchor.projectId.slice(0, 8)})`);
97
+ if (anchor.source === 'git') {
98
+ changes.push(`Project anchor: ${anchor.projectName} (${anchor.projectId.slice(0, 8)}) — derived from git history`);
99
+ }
100
+ else {
101
+ changes.push(`Project anchor: ${anchor.projectName} (${anchor.projectId.slice(0, 8)}) — stored in .claude/project.json`);
102
+ // Only patch gitignore when the file is load-bearing for identity.
103
+ const gitignoreResult = ensureAnchorTrackable(process.cwd());
104
+ if (gitignoreResult)
105
+ changes.push(gitignoreResult);
106
+ }
93
107
  // Step 5: Global anchor — catches Cowork + any session without a repo anchor.
94
108
  const globalAnchor = (0, project_anchor_1.ensureGlobalAnchor)();
95
109
  changes.push(`Global anchor: ${globalAnchor.projectName} (${globalAnchor.projectId.slice(0, 8)})`);
@@ -275,6 +289,74 @@ function patchGlobalClaudeMd() {
275
289
  fs.writeFileSync(claudeMdPath, src.trimEnd() + '\n\n' + INBOX_SECTION_NEW + '\n', 'utf-8');
276
290
  return true;
277
291
  }
292
+ // -- Anchor trackability ----------------------------------------------------
293
+ /** When a repo gitignores `.claude/`, the anchor file we just wrote won't
294
+ * survive a fresh clone or worktree switch — the deterministic-hash fallback
295
+ * will silently take over, splitting the project_id and breaking inbox
296
+ * addressing. Detect that case at init time and patch the gitignore so the
297
+ * anchor is durably tracked.
298
+ *
299
+ * Common patterns we handle: `.claude/`, `.claude`, `/.claude/`, `/.claude`.
300
+ * Each is rewritten to its `*`-contents form so a `!.claude/project.json`
301
+ * re-include works (git won't descend into an excluded directory, so the
302
+ * trailing-slash directory pattern must become a contents-only pattern).
303
+ *
304
+ * Returns a one-line summary of what was done, or null if no action needed
305
+ * (not a git repo, file already tracked, or pattern unrecognized — in which
306
+ * case we print a manual-fix hint instead). */
307
+ function ensureAnchorTrackable(projectRoot) {
308
+ // Not in a git repo? Nothing to do — the anchor is local-only by definition.
309
+ try {
310
+ (0, child_process_1.execSync)('git rev-parse --git-dir', { cwd: projectRoot, stdio: 'pipe' });
311
+ }
312
+ catch {
313
+ return null;
314
+ }
315
+ // Is the anchor file ignored? `git check-ignore` exits 0 when ignored,
316
+ // 1 when not ignored. Either non-zero exit means "no work to do."
317
+ let checkOutput;
318
+ try {
319
+ checkOutput = (0, child_process_1.execSync)('git check-ignore -v .claude/project.json', {
320
+ cwd: projectRoot,
321
+ encoding: 'utf-8',
322
+ stdio: ['pipe', 'pipe', 'pipe'],
323
+ });
324
+ }
325
+ catch {
326
+ return null; // not ignored — anchor is already trackable
327
+ }
328
+ // Output: `<gitignore-relative-path>:<line>:<pattern>\t<file-path>`
329
+ const m = checkOutput.match(/^(.+?):(\d+):(.+?)\t/);
330
+ if (!m)
331
+ return null;
332
+ const [, gitignoreRel, lineNumStr, pattern] = m;
333
+ const gitignorePath = path.isAbsolute(gitignoreRel)
334
+ ? gitignoreRel
335
+ : path.join(projectRoot, gitignoreRel);
336
+ const lineNum = parseInt(lineNumStr, 10);
337
+ const content = fs.readFileSync(gitignorePath, 'utf-8');
338
+ const lines = content.split('\n');
339
+ if (lineNum < 1 || lineNum > lines.length)
340
+ return null;
341
+ const trimmed = pattern.trim();
342
+ const dirPatterns = new Set([
343
+ '.claude/', '.claude', '/.claude/', '/.claude',
344
+ ]);
345
+ if (dirPatterns.has(trimmed)) {
346
+ // Preserve leading slash if present in the original pattern.
347
+ const anchored = trimmed.startsWith('/');
348
+ const prefix = anchored ? '/' : '';
349
+ // Replace the single directory-ignore line with the contents-ignore form
350
+ // plus the re-include for project.json. Git evaluates patterns in order
351
+ // and re-includes override later, so the order matters: `*` first, then `!`.
352
+ lines.splice(lineNum - 1, 1, `${prefix}.claude/*`, `!${prefix}.claude/project.json`);
353
+ fs.writeFileSync(gitignorePath, lines.join('\n'));
354
+ return `Patched ${gitignoreRel}: \`${trimmed}\` → \`${prefix}.claude/*\` + \`!${prefix}.claude/project.json\` (anchor now trackable)`;
355
+ }
356
+ // Unrecognized pattern — don't risk breaking the user's other intent. Tell
357
+ // them what to do manually.
358
+ return `WARNING: .claude/project.json is ignored by \`${pattern}\` in ${gitignoreRel}. The anchor won't survive a fresh clone. Add \`!.claude/project.json\` after that line manually, or run \`git add -f .claude/project.json\` to force-track it once.`;
359
+ }
278
360
  // -- Input ------------------------------------------------------------------
279
361
  function prompt(question) {
280
362
  const rl = readline.createInterface({
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAAA;;;;6DAI6D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkB7D,0BA+FC;AA/GD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,mDAAqC;AACrC,iDAAyC;AACzC,sDAAqE;AAErE,MAAM,OAAO,GAAG,yBAAyB,CAAC;AASnC,KAAK,UAAU,OAAO,CAAC,IAAiB;IAC7C,uEAAuE;IACvE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAE5E,sBAAsB;IACtB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,MAAM,MAAM,CAAC,4DAA4D,CAAC,CAAC;QACxF,CAAC;QAED,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,QAAQ,MAAM,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAO,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvD,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAO,CAAC,CAAC;IACjD,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEtC,8DAA8D;IAC9D,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,kEAAkE;IAClE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,8BAA8B,CAAC,CAAC;IACrH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,oCAAoC,CAAC,CAAC;QACzH,mEAAmE;QACnE,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,IAAI,eAAe;YAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,8EAA8E;IAC9E,MAAM,YAAY,GAAG,IAAA,mCAAkB,GAAE,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,WAAW,KAAK,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnG,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,8EAA8E;IAC9E,MAAM,eAAe,GAAG,mBAAmB,EAAE,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC;IAErI,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;AAClF,CAAC;AAED;;;sFAGsF;AACtF,KAAK,UAAU,aAAa,CAAC,IAAa;IACxC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,IAAA,mCAAkB,EAAC,IAAI,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;AAC1F,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,oBAAoB,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IAEzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAe,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAgB,EAAE,CAAC;AACrD,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,WAAW,CAAC,MAAc;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,SAAS,EAAE;YAC3C,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE;SACjD,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;QACzD,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACrD,CAAC;AAmBD,SAAS,YAAY,CAAC,YAAoB;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,YAAoB,EAAE,QAAwB;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,QAAwB,EAAE,MAAc;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,WAAW;IACX,IAAI,CAAC,QAAQ,CAAC,GAAG;QAAE,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEpC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAE7C,QAAQ;IACR,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IAEzC,6EAA6E;IAC7E,yCAAyC;IACzC,MAAM,SAAS,GAAe;QAC5B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC3E,CAAC;IAEF,iEAAiE;IACjE,MAAM,SAAS,GAAe;QAC5B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAC5E,CAAC;IAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY;YAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;QACnE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;YAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QACnD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAED,2EAA2E;IAC3E,iFAAiF;IACjF,gFAAgF;IAChF,MAAM,UAAU,GAAe;QAC7B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC5E,CAAC;IAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB;YAAE,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3E,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,WAAqC,EAAE,UAAkB;IAC/E,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,4EAA4E;IAC5E,8EAA8E;IAC9E,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5B,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,gBAAgB,UAAU,EAAE,CAAC;eAC5C,GAAG,CAAC,QAAQ,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,MAAM,iBAAiB,GACvB;;qUAEqU,CAAC;AAEtU;2FAC2F;AAC3F,SAAS,mBAAmB;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEnD,8DAA8D;IAC9D,IAAI,GAAG,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3E,uFAAuF;IACvF,MAAM,SAAS,GAAG,oEAAoE,CAAC;IACvF,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,iBAAiB,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;;;gDAagD;AAChD,SAAS,qBAAqB,CAAC,WAAmB;IAChD,6EAA6E;IAC7E,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uEAAuE;IACvE,kEAAkE;IAClE,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,IAAA,wBAAQ,EAAC,0CAA0C,EAAE;YACjE,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QACjD,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU;KAC/C,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,yEAAyE;QACzE,wEAAwE;QACxE,6EAA6E;QAC7E,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,EACzB,GAAG,MAAM,WAAW,EACpB,IAAI,MAAM,sBAAsB,CACjC,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,OAAO,WAAW,YAAY,OAAO,OAAO,UAAU,MAAM,oBAAoB,MAAM,+CAA+C,CAAC;IACxI,CAAC;IAED,2EAA2E;IAC3E,4BAA4B;IAC5B,OAAO,iDAAiD,OAAO,SAAS,YAAY,sKAAsK,CAAC;AAC7P,CAAC;AAED,8EAA8E;AAE9E,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/hook.js CHANGED
@@ -802,6 +802,36 @@ async function recap(input) {
802
802
  const anchor = (0, project_anchor_1.readAnchor)(cwd);
803
803
  if (!anchor.projectId)
804
804
  return;
805
+ // Setup warning — surfaced at session start when the project's identity is
806
+ // either unstable (path-hash fallback) OR drifting (file UUID differs from
807
+ // what git would derive, indicating an old random UUID minted before git
808
+ // was in play). Both cases point the user at the doctor command.
809
+ let setupWarning = null;
810
+ if (anchor.source === 'hash') {
811
+ // No git, no anchor file, no global anchor. The path-hash UUID is stable
812
+ // for this directory but will diverge if the directory ever moves.
813
+ setupWarning =
814
+ `[GrepRAG memory: this project ("${anchor.projectName}") has no stable identity — `
815
+ + `conversation turns are being captured under an ID derived from the directory path, `
816
+ + `which can drift if the directory moves or is cloned elsewhere. `
817
+ + `For permanent stability, run \`git init && git commit\` in the project root `
818
+ + `(memory then derives its ID from your git history automatically). `
819
+ + `If you notice memory missing later, run \`greprag doctor\` to find and merge orphan IDs.]`;
820
+ }
821
+ else if (anchor.source === 'file') {
822
+ // File-based identity (legacy). Check whether git would derive a different
823
+ // UUID — if so, the file holds a stale random UUID from before git setup.
824
+ const gitId = (0, project_anchor_1.computeGitDerivedProjectId)(cwd);
825
+ if (gitId && gitId !== anchor.projectId) {
826
+ setupWarning =
827
+ `[GrepRAG memory: identity drift detected for "${anchor.projectName}" — `
828
+ + `your project's stored ID (${anchor.projectId.slice(0, 8)}) differs from the ID `
829
+ + `that would be derived from your git history (${gitId.slice(0, 8)}). `
830
+ + `This usually means the stored ID was created before git was set up; `
831
+ + `older sessions may have written history under a different UUID. `
832
+ + `Run \`greprag doctor\` to inspect and merge.]`;
833
+ }
834
+ }
805
835
  // Inbox unread count — fires regardless of recap policy (session start is
806
836
  // the right moment to surface mail, even if the user opted out of memory
807
837
  // recap for this project). Respects inbox_notify=off only.
@@ -812,12 +842,21 @@ async function recap(input) {
812
842
  unreadHeader = `[${count} unread in inbox — /greprag to read & send]`;
813
843
  }
814
844
  }
845
+ const preamble = () => {
846
+ const lines = [];
847
+ if (setupWarning)
848
+ lines.push(setupWarning);
849
+ if (unreadHeader)
850
+ lines.push(unreadHeader);
851
+ return lines.length ? lines.join('\n') + '\n' : '';
852
+ };
815
853
  // Per-project opt-out — agent flips session_start_recap=false to suppress
816
854
  // the episodic injection for a specific project without disabling the
817
- // hook globally. Inbox header still fires above when applicable.
855
+ // hook globally. Setup warning + inbox header still fire above.
818
856
  if (!anchor.sessionStartRecap) {
819
- if (unreadHeader)
820
- process.stdout.write(unreadHeader + '\n');
857
+ const out = preamble();
858
+ if (out)
859
+ process.stdout.write(out);
821
860
  return;
822
861
  }
823
862
  const now = new Date();
@@ -864,14 +903,19 @@ async function recap(input) {
864
903
  const recentHourlies = allHourlies
865
904
  .filter(h => h.windowEnd && new Date(h.windowEnd).getTime() >= hourlyCutoffMs)
866
905
  .slice(-HOURLY_CAP);
867
- // Silent no-op when there's truly nothing to say — unless an inbox header
868
- // is pending, in which case we still surface that.
906
+ // Silent no-op when there's truly nothing to say — unless a setup warning
907
+ // or inbox header is pending, in which case we still surface those.
869
908
  if (dailies.length === 0 && recentHourlies.length === 0) {
870
- if (unreadHeader)
871
- process.stdout.write(unreadHeader + '\n');
909
+ const out = preamble();
910
+ if (out)
911
+ process.stdout.write(out);
872
912
  return;
873
913
  }
874
914
  const parts = [];
915
+ if (setupWarning) {
916
+ parts.push(setupWarning);
917
+ parts.push('');
918
+ }
875
919
  if (unreadHeader) {
876
920
  parts.push(unreadHeader);
877
921
  parts.push('');