greprag 5.13.0 → 5.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +7 -6
  2. package/dist/commands/checkpoint-helpers.js +4 -1
  3. package/dist/commands/checkpoint-helpers.js.map +1 -1
  4. package/dist/commands/init.d.ts +2 -0
  5. package/dist/commands/init.js +270 -2
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/lore.js +7 -5
  8. package/dist/commands/lore.js.map +1 -1
  9. package/dist/commands/memory.d.ts +31 -0
  10. package/dist/commands/memory.js +514 -0
  11. package/dist/commands/memory.js.map +1 -0
  12. package/dist/commands/project.d.ts +16 -0
  13. package/dist/commands/project.js +430 -0
  14. package/dist/commands/project.js.map +1 -0
  15. package/dist/hook.d.ts +1 -1
  16. package/dist/hook.js +9 -10
  17. package/dist/hook.js.map +1 -1
  18. package/dist/index.js +57 -19
  19. package/dist/index.js.map +1 -1
  20. package/dist/project-anchor.d.ts +1 -1
  21. package/dist/project-anchor.js +1 -1
  22. package/dist/session-id.d.ts +30 -25
  23. package/dist/session-id.js +39 -33
  24. package/dist/session-id.js.map +1 -1
  25. package/package.json +2 -1
  26. package/plugin/.claude-plugin/marketplace.json +13 -0
  27. package/plugin/plugins/greprag-inbox/.claude-plugin/plugin.json +7 -0
  28. package/plugin/plugins/greprag-inbox/monitors/monitors.json +8 -0
  29. package/skill/commander/SKILL.md +2 -2
  30. package/skill/content-advisor/SKILL.md +1 -1
  31. package/skill/greprag/SKILL.md +61 -661
  32. package/skill/greprag/docs/corpus.md +98 -0
  33. package/skill/greprag/docs/discord-handoff.md +47 -0
  34. package/skill/greprag/docs/discover.md +28 -0
  35. package/skill/greprag/docs/doctor.md +22 -0
  36. package/skill/greprag/docs/inbox-watch.md +57 -0
  37. package/skill/greprag/docs/inbox.md +100 -0
  38. package/skill/greprag/docs/lore.md +70 -0
  39. package/skill/greprag/docs/memory-advanced.md +23 -0
  40. package/skill/greprag/docs/per-project-flags.md +14 -0
  41. package/skill/greprag/docs/setup.md +208 -0
@@ -0,0 +1,430 @@
1
+ "use strict";
2
+ /** greprag project — metadata operations on projects (rename, merge, list).
3
+ *
4
+ * Wraps the same tenant-scoped /v1/projects/merge endpoint that doctor uses,
5
+ * but exposed for explicit operator workflows that doctor can't reach:
6
+ * - rename: change a project's display name in one verb (anchor file +
7
+ * ~/.greprag/projects.json + API registry + server-side store metadata).
8
+ * Use when a directory basename auto-inferred a wrong project_name
9
+ * during init.
10
+ * - merge: explicit ID-or-name consolidation. doctor finds orphans only
11
+ * by projectName match against the current anchor; this verb lets the
12
+ * operator point at two projects directly, regardless of name.
13
+ * - list: discover-shaped table of every project under this tenant.
14
+ *
15
+ * Safety posture matches doctor: rename confirms before writing (skip with
16
+ * --yes); merge defaults to dry-run, requires --apply to commit. */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.runProject = runProject;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const os = __importStar(require("os"));
55
+ const readline = __importStar(require("readline"));
56
+ const project_anchor_1 = require("../project-anchor");
57
+ const API_URL_DEFAULT = 'https://api.greprag.com';
58
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
59
+ const NAME_RE = /^[a-z0-9-]{1,64}$/;
60
+ const RESERVED_NAMES = new Set(['me', 'self']);
61
+ const PROJECT_HELP = `greprag project — metadata operations on projects
62
+
63
+ USAGE
64
+ greprag project rename <new-name> [--yes]
65
+ Rename the project at current cwd. Updates: anchor file, ~/.greprag/
66
+ projects.json, API registry, and server-side store metadata. Confirms
67
+ before writing unless --yes.
68
+
69
+ greprag project merge --from <id-or-name> --into <id-or-name>
70
+ [--apply] [--name <override>] [--json]
71
+ Consolidate one project into another. Defaults to dry-run; pass --apply
72
+ to commit. --name sets the target project_name in the same step (useful
73
+ when consolidating into a renamed project). --from/--into accept a
74
+ project_id (UUID) or a project_name (resolved via discover).
75
+
76
+ greprag project list [--json]
77
+ Every project under this tenant with anchor status and row counts.
78
+
79
+ NOTES
80
+ • Memory rows under any source project_id are physically moved to the
81
+ target. One-way, not auto-reversible. Always dry-run first.
82
+ • doctor uses the same merge endpoint internally but only finds orphans
83
+ by projectName match. Use project merge for explicit-ID consolidation
84
+ across names.`;
85
+ async function runProject(args) {
86
+ const sub = args[0];
87
+ if (!sub || sub === 'help' || sub === '--help' || sub === '-h') {
88
+ console.log(PROJECT_HELP);
89
+ return;
90
+ }
91
+ const subArgs = args.slice(1);
92
+ switch (sub) {
93
+ case 'rename': return runRename(subArgs);
94
+ case 'merge': return runMerge(subArgs);
95
+ case 'list': return runList(subArgs);
96
+ default:
97
+ console.error(`Unknown subcommand: ${sub}\n`);
98
+ console.log(PROJECT_HELP);
99
+ process.exit(1);
100
+ }
101
+ }
102
+ // --- rename ----------------------------------------------------------------
103
+ async function runRename(args) {
104
+ const cfg = getConfig();
105
+ if (!cfg.apiKey) {
106
+ console.error('Not configured. Run: greprag init');
107
+ process.exit(1);
108
+ }
109
+ const newName = (args[0] || '').trim().toLowerCase();
110
+ const yes = args.includes('--yes') || args.includes('-y');
111
+ if (!newName || newName.startsWith('-')) {
112
+ console.error('Usage: greprag project rename <new-name> [--yes]');
113
+ process.exit(1);
114
+ }
115
+ validateName(newName);
116
+ const cwd = process.cwd();
117
+ const anchor = (0, project_anchor_1.readAnchor)(cwd);
118
+ if (!anchor.initialized) {
119
+ console.error('No project anchor here. Run `greprag init` first, or cd into a project directory.');
120
+ process.exit(1);
121
+ }
122
+ const oldName = anchor.projectName;
123
+ if (oldName === newName) {
124
+ console.log(`Already named "${newName}". Nothing to do.`);
125
+ return;
126
+ }
127
+ console.log(`Rename: ${oldName} → ${newName}`);
128
+ console.log(` project_id: ${anchor.projectId}`);
129
+ console.log(` source: ${anchor.source}`);
130
+ console.log(` anchor file: ${anchor.anchorPath}`);
131
+ console.log(`Will update:`);
132
+ console.log(` - anchor file: project_name`);
133
+ console.log(` - ~/.greprag/projects.json: registry key`);
134
+ console.log(` - API: register ${anchor.projectId.slice(0, 8)} as "${newName}"`);
135
+ console.log(` - server: store metadata.projectName → "${newName}"`);
136
+ if (!yes) {
137
+ const confirm = (await prompt('\nProceed? (yes/no): ')).trim().toLowerCase();
138
+ if (confirm !== 'yes' && confirm !== 'y') {
139
+ console.log('Cancelled.');
140
+ return;
141
+ }
142
+ }
143
+ // 1. Anchor file
144
+ try {
145
+ const raw = fs.readFileSync(anchor.anchorPath, 'utf-8');
146
+ const data = JSON.parse(raw);
147
+ data.project_name = newName;
148
+ fs.writeFileSync(anchor.anchorPath, JSON.stringify(data, null, 2) + '\n');
149
+ console.log(`✓ Updated ${anchor.anchorPath}`);
150
+ }
151
+ catch (e) {
152
+ console.error(`✗ Failed to update anchor file: ${e.message}`);
153
+ process.exit(1);
154
+ }
155
+ // 2. ~/.greprag/projects.json
156
+ try {
157
+ const registryPath = path.join(os.homedir(), '.greprag', 'projects.json');
158
+ if (fs.existsSync(registryPath)) {
159
+ const reg = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));
160
+ const repoPath = reg[oldName];
161
+ if (repoPath) {
162
+ delete reg[oldName];
163
+ reg[newName] = repoPath;
164
+ }
165
+ else {
166
+ reg[newName] = cwd;
167
+ }
168
+ fs.writeFileSync(registryPath, JSON.stringify(reg, null, 2) + '\n');
169
+ console.log(`✓ Updated ~/.greprag/projects.json`);
170
+ }
171
+ }
172
+ catch (e) {
173
+ console.warn(`! Failed to update local registry (non-fatal): ${e.message}`);
174
+ }
175
+ // 3. API rename (merge endpoint, sources=[], targetName set)
176
+ try {
177
+ const report = await apiPost(`${cfg.apiUrl}/v1/projects/merge`, cfg.apiKey, {
178
+ target_project_id: anchor.projectId,
179
+ source_project_ids: [],
180
+ target_project_name: newName,
181
+ dry_run: false,
182
+ });
183
+ if (!report.ok) {
184
+ console.error(`✗ API rename failed: ${report.error}`);
185
+ process.exit(1);
186
+ }
187
+ const nameUpdated = report.changes?.target_name_updated;
188
+ console.log(`✓ API: registry upserted${nameUpdated ? ', store metadata updated' : ''}`);
189
+ }
190
+ catch (e) {
191
+ console.error(`✗ API call failed: ${e.message}`);
192
+ process.exit(1);
193
+ }
194
+ console.log(`\nRenamed ${oldName} → ${newName}.`);
195
+ }
196
+ // --- merge -----------------------------------------------------------------
197
+ async function runMerge(args) {
198
+ const cfg = getConfig();
199
+ if (!cfg.apiKey) {
200
+ console.error('Not configured. Run: greprag init');
201
+ process.exit(1);
202
+ }
203
+ const fromArg = getFlag(args, '--from');
204
+ const intoArg = getFlag(args, '--into');
205
+ const nameOverride = getFlag(args, '--name');
206
+ const apply = args.includes('--apply');
207
+ const asJson = args.includes('--json');
208
+ if (!fromArg || !intoArg) {
209
+ console.error('Usage: greprag project merge --from <id-or-name> --into <id-or-name> [--apply] [--name <override>] [--json]');
210
+ process.exit(1);
211
+ }
212
+ if (nameOverride)
213
+ validateName(nameOverride);
214
+ const discover = await apiGet(`${cfg.apiUrl}/v1/projects/discover`, cfg.apiKey);
215
+ const fromId = resolveSpec(fromArg, discover.projects);
216
+ const intoId = resolveSpec(intoArg, discover.projects);
217
+ if (fromId === intoId) {
218
+ console.error('--from and --into resolve to the same project_id; nothing to merge.');
219
+ process.exit(1);
220
+ }
221
+ const fromEntry = discover.projects.find(p => p.id === fromId);
222
+ const intoEntry = discover.projects.find(p => p.id === intoId);
223
+ if (!asJson) {
224
+ console.log(`Merge ${fromArg} → ${intoArg}`);
225
+ console.log(` from: ${fromId} (${fromEntry?.name ?? '?'}, ${fromEntry?.anchor ?? '?'})`);
226
+ console.log(` into: ${intoId} (${intoEntry?.name ?? '?'}, ${intoEntry?.anchor ?? '?'})`);
227
+ if (nameOverride)
228
+ console.log(` also rename target to "${nameOverride}"`);
229
+ console.log('');
230
+ }
231
+ const dryReport = await apiPost(`${cfg.apiUrl}/v1/projects/merge`, cfg.apiKey, {
232
+ target_project_id: intoId,
233
+ source_project_ids: [fromId],
234
+ target_project_name: nameOverride,
235
+ dry_run: true,
236
+ });
237
+ if (!dryReport.ok) {
238
+ if (asJson)
239
+ console.log(JSON.stringify(dryReport, null, 2));
240
+ else
241
+ console.error(`Dry-run failed: ${dryReport.error}`);
242
+ process.exit(1);
243
+ }
244
+ if (asJson && !apply) {
245
+ console.log(JSON.stringify(dryReport, null, 2));
246
+ return;
247
+ }
248
+ if (!asJson) {
249
+ console.log('Dry-run report:');
250
+ const c = dryReport.changes;
251
+ console.log(` nodes_moved: ${c.nodes_moved}`);
252
+ console.log(` memory_stores_consolidated: ${c.memory_stores_consolidated}`);
253
+ console.log(` deduplicated_episodics: ${c.deduplicated_episodics}`);
254
+ console.log(` inbox_messages_to: ${c.inbox_messages_to}`);
255
+ console.log(` inbox_messages_from: ${c.inbox_messages_from}`);
256
+ console.log(` projects_registry_deleted: ${c.projects_registry_deleted}`);
257
+ if (c.target_name_updated !== undefined) {
258
+ console.log(` target_name_updated: ${c.target_name_updated}`);
259
+ }
260
+ }
261
+ if (!apply) {
262
+ if (!asJson)
263
+ console.log('\nDry-run only. Pass --apply to commit.');
264
+ return;
265
+ }
266
+ const realReport = await apiPost(`${cfg.apiUrl}/v1/projects/merge`, cfg.apiKey, {
267
+ target_project_id: intoId,
268
+ source_project_ids: [fromId],
269
+ target_project_name: nameOverride,
270
+ dry_run: false,
271
+ });
272
+ if (!realReport.ok) {
273
+ if (asJson)
274
+ console.log(JSON.stringify(realReport, null, 2));
275
+ else
276
+ console.error(`Merge failed: ${realReport.error}`);
277
+ process.exit(1);
278
+ }
279
+ if (asJson) {
280
+ console.log(JSON.stringify(realReport, null, 2));
281
+ }
282
+ else {
283
+ console.log(`\n✓ Applied. ${realReport.changes.nodes_moved} rows moved.`);
284
+ }
285
+ }
286
+ // --- list ------------------------------------------------------------------
287
+ async function runList(args) {
288
+ const cfg = getConfig();
289
+ if (!cfg.apiKey) {
290
+ console.error('Not configured. Run: greprag init');
291
+ process.exit(1);
292
+ }
293
+ const asJson = args.includes('--json');
294
+ const discover = await apiGet(`${cfg.apiUrl}/v1/projects/discover`, cfg.apiKey);
295
+ if (asJson) {
296
+ console.log(JSON.stringify(discover, null, 2));
297
+ return;
298
+ }
299
+ const sorted = [...discover.projects].sort((a, b) => {
300
+ const totalA = Object.values(a.row_counts).reduce((s, n) => s + n, 0);
301
+ const totalB = Object.values(b.row_counts).reduce((s, n) => s + n, 0);
302
+ return totalB - totalA;
303
+ });
304
+ console.log(`${'anchor'.padEnd(12)} ${'name'.padEnd(28)} ${'project_id'.padEnd(38)} rows`);
305
+ for (const p of sorted) {
306
+ const total = Object.values(p.row_counts).reduce((s, n) => s + n, 0);
307
+ console.log(`${(p.anchor || '?').padEnd(12)} ${(p.name ?? '(none)').padEnd(28)} ${p.id} ${total}`);
308
+ }
309
+ }
310
+ // --- helpers ---------------------------------------------------------------
311
+ function resolveSpec(spec, projects) {
312
+ if (UUID_RE.test(spec)) {
313
+ const hit = projects.find(p => p.id === spec.toLowerCase());
314
+ if (!hit) {
315
+ console.error(`No project under this tenant with id "${spec}".`);
316
+ process.exit(1);
317
+ }
318
+ return hit.id;
319
+ }
320
+ const lc = spec.toLowerCase();
321
+ const matches = projects.filter(p => (p.name ?? '').toLowerCase() === lc);
322
+ if (matches.length === 0) {
323
+ console.error(`No project with name "${spec}". Run \`greprag project list\` to see all.`);
324
+ process.exit(1);
325
+ }
326
+ if (matches.length > 1) {
327
+ console.error(`Multiple projects named "${spec}". Pass a project_id (UUID) instead to disambiguate:`);
328
+ for (const m of matches) {
329
+ const total = Object.values(m.row_counts).reduce((s, n) => s + n, 0);
330
+ console.error(` ${m.id} (${m.anchor}, ${total} rows)`);
331
+ }
332
+ process.exit(1);
333
+ }
334
+ return matches[0].id;
335
+ }
336
+ function validateName(name) {
337
+ if (UUID_RE.test(name)) {
338
+ console.error(`project_name cannot look like a UUID: "${name}"`);
339
+ process.exit(1);
340
+ }
341
+ if (RESERVED_NAMES.has(name)) {
342
+ console.error(`"${name}" is a reserved name.`);
343
+ process.exit(1);
344
+ }
345
+ if (!NAME_RE.test(name)) {
346
+ console.error(`Invalid project_name: must be 1-64 chars of [a-z0-9-]. Got: "${name}"`);
347
+ process.exit(1);
348
+ }
349
+ }
350
+ function getFlag(args, flag) {
351
+ const i = args.indexOf(flag);
352
+ if (i < 0 || i === args.length - 1)
353
+ return undefined;
354
+ return args[i + 1];
355
+ }
356
+ function prompt(question) {
357
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
358
+ return new Promise(resolve => {
359
+ rl.question(question, answer => {
360
+ rl.close();
361
+ resolve(answer);
362
+ });
363
+ });
364
+ }
365
+ // --- env / http ------------------------------------------------------------
366
+ function loadEnvFile(filePath) {
367
+ try {
368
+ const content = fs.readFileSync(filePath, 'utf-8');
369
+ for (const line of content.split('\n')) {
370
+ const trimmed = line.trim();
371
+ if (!trimmed || trimmed.startsWith('#'))
372
+ continue;
373
+ const eqIdx = trimmed.indexOf('=');
374
+ if (eqIdx < 1)
375
+ continue;
376
+ const key = trimmed.slice(0, eqIdx).trim();
377
+ let value = trimmed.slice(eqIdx + 1).trim();
378
+ if ((value.startsWith('"') && value.endsWith('"')) ||
379
+ (value.startsWith("'") && value.endsWith("'"))) {
380
+ value = value.slice(1, -1);
381
+ }
382
+ if (!process.env[key])
383
+ process.env[key] = value;
384
+ }
385
+ }
386
+ catch { /* missing — fine */ }
387
+ }
388
+ function ensureEnv() {
389
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
390
+ if (homeDir)
391
+ loadEnvFile(path.join(homeDir, '.greprag', '.env'));
392
+ if (!process.env.GREPRAG_API_KEY)
393
+ loadEnvFile(path.join(process.cwd(), '.env'));
394
+ if (!process.env.GREPRAG_API_KEY && homeDir) {
395
+ // Fallback: read from ~/.claude/settings.json which init writes to.
396
+ try {
397
+ const settings = JSON.parse(fs.readFileSync(path.join(homeDir, '.claude', 'settings.json'), 'utf-8'));
398
+ const envObj = (settings.env || {});
399
+ if (envObj.GREPRAG_API_KEY)
400
+ process.env.GREPRAG_API_KEY = envObj.GREPRAG_API_KEY;
401
+ if (envObj.GREPRAG_API_URL)
402
+ process.env.GREPRAG_API_URL = envObj.GREPRAG_API_URL;
403
+ }
404
+ catch { /* missing — fine */ }
405
+ }
406
+ }
407
+ function getConfig() {
408
+ ensureEnv();
409
+ return {
410
+ apiUrl: process.env.GREPRAG_API_URL || API_URL_DEFAULT,
411
+ apiKey: process.env.GREPRAG_API_KEY || '',
412
+ };
413
+ }
414
+ async function apiGet(url, apiKey) {
415
+ const res = await fetch(url, { headers: { 'Authorization': `Bearer ${apiKey}` } });
416
+ if (!res.ok)
417
+ throw new Error(`API ${res.status}: ${await res.text()}`);
418
+ return res.json();
419
+ }
420
+ async function apiPost(url, apiKey, body) {
421
+ const res = await fetch(url, {
422
+ method: 'POST',
423
+ headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
424
+ body: JSON.stringify(body),
425
+ });
426
+ if (!res.ok)
427
+ return await res.json();
428
+ return res.json();
429
+ }
430
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
package/dist/hook.d.ts CHANGED
@@ -3,6 +3,6 @@
3
3
  *
4
4
  * On Stop, build the per-turn envelope from the transcript and POST to
5
5
  * /v1/memory/turn. No LLM, no enrichment — the API just inserts the row.
6
- * See C:/greprag/docs/odyssey.md.
6
+ * See C:/greprag/docs/memory.md.
7
7
  */
8
8
  export {};
package/dist/hook.js CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * On Stop, build the per-turn envelope from the transcript and POST to
6
6
  * /v1/memory/turn. No LLM, no enrichment — the API just inserts the row.
7
- * See C:/greprag/docs/odyssey.md.
7
+ * See C:/greprag/docs/memory.md.
8
8
  */
9
9
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
10
  if (k2 === undefined) k2 = k;
@@ -983,8 +983,9 @@ async function recap(input) {
983
983
  // Recap is hourlies-only — daily summaries used to render here (one prose
984
984
  // paragraph per daily window) but added ~1500 tokens to every SessionStart
985
985
  // for marginal value. Dailies still exist in the DB; agents who want
986
- // historic context pull on demand via `greprag odyssey briefing`. Pull,
987
- // don't push, is the established Odyssey design.
986
+ // historic context pull on demand via `greprag memory recap` (or
987
+ // `greprag memory search "<query>"` for a specific topic). Pull,
988
+ // don't push, is the established design.
988
989
  const allHourlies = await fetchByType('hourly', hourlyFromIso, 50);
989
990
  // Hourlies in the rolling last 24 hours only — this section is "what
990
991
  // happened in real time recently," not historic context.
@@ -1110,13 +1111,11 @@ async function main() {
1110
1111
  }
1111
1112
  else if (subcommand === 'session-id') {
1112
1113
  // adr: adr/session-id-awareness.md
1113
- // Auto-arm the inbox watcher when greprag is configured so every session
1114
- // is reachable from any other session by default. Cheap (~25MB RAM + one
1115
- // SSE connection per session) and the v0.11 address grammar makes
1116
- // accidental broadcasts a non-issue.
1117
- const cwd = input.cwd || process.cwd();
1118
- const cfg = getConfig(cwd);
1119
- (0, session_id_1.handleSessionIdHook)(input, { armWatcher: cfg.enabled && !!cfg.apiKey });
1114
+ // Emits the agent's own 8-hex session id + reply-to address. Arming the
1115
+ // inbox watcher is no longer this hook's job the greprag-inbox plugin
1116
+ // monitor (installed by `greprag init`) auto-arms it at session start
1117
+ // without depending on the agent acting on a directive.
1118
+ (0, session_id_1.handleSessionIdHook)(input);
1120
1119
  }
1121
1120
  else if (subcommand === 'pre-spawn-check') {
1122
1121
  handlePreSpawnCheck(input);