greprag 5.18.0 → 5.19.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 (56) hide show
  1. package/dist/commands/corpus/client.d.ts +58 -0
  2. package/dist/commands/corpus/client.js +182 -0
  3. package/dist/commands/corpus/client.js.map +1 -0
  4. package/dist/commands/corpus/index.d.ts +23 -0
  5. package/dist/commands/corpus/index.js +109 -0
  6. package/dist/commands/corpus/index.js.map +1 -0
  7. package/dist/commands/corpus/manage.d.ts +6 -0
  8. package/dist/commands/corpus/manage.js +49 -0
  9. package/dist/commands/corpus/manage.js.map +1 -0
  10. package/dist/commands/corpus/refresh.d.ts +11 -0
  11. package/dist/commands/corpus/refresh.js +117 -0
  12. package/dist/commands/corpus/refresh.js.map +1 -0
  13. package/dist/commands/corpus/search.d.ts +6 -0
  14. package/dist/commands/corpus/search.js +110 -0
  15. package/dist/commands/corpus/search.js.map +1 -0
  16. package/dist/commands/corpus/section.d.ts +5 -0
  17. package/dist/commands/corpus/section.js +35 -0
  18. package/dist/commands/corpus/section.js.map +1 -0
  19. package/dist/commands/corpus/source.d.ts +15 -0
  20. package/dist/commands/corpus/source.js +119 -0
  21. package/dist/commands/corpus/source.js.map +1 -0
  22. package/dist/commands/corpus/status.d.ts +5 -0
  23. package/dist/commands/corpus/status.js +47 -0
  24. package/dist/commands/corpus/status.js.map +1 -0
  25. package/dist/commands/corpus/upload.d.ts +7 -0
  26. package/dist/commands/corpus/upload.js +101 -0
  27. package/dist/commands/corpus/upload.js.map +1 -0
  28. package/dist/commands/corpus/walk.d.ts +5 -0
  29. package/dist/commands/corpus/walk.js +41 -0
  30. package/dist/commands/corpus/walk.js.map +1 -0
  31. package/dist/commands/session.d.ts +8 -0
  32. package/dist/commands/session.js +132 -0
  33. package/dist/commands/session.js.map +1 -0
  34. package/dist/hook.js +9 -2
  35. package/dist/hook.js.map +1 -1
  36. package/dist/index.js +8 -3
  37. package/dist/index.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/commands/corpus.d.ts +0 -18
  40. package/dist/commands/corpus.js +0 -617
  41. package/dist/commands/corpus.js.map +0 -1
  42. package/dist/commands/fact.d.ts +0 -22
  43. package/dist/commands/fact.js +0 -337
  44. package/dist/commands/fact.js.map +0 -1
  45. package/dist/commands/inbox-watch-supervisor.d.ts +0 -31
  46. package/dist/commands/inbox-watch-supervisor.js +0 -173
  47. package/dist/commands/inbox-watch-supervisor.js.map +0 -1
  48. package/dist/commands/inbox-watch-util.d.ts +0 -5
  49. package/dist/commands/inbox-watch-util.js +0 -13
  50. package/dist/commands/inbox-watch-util.js.map +0 -1
  51. package/dist/commands/odyssey.d.ts +0 -27
  52. package/dist/commands/odyssey.js +0 -394
  53. package/dist/commands/odyssey.js.map +0 -1
  54. package/dist/inbox-notify.d.ts +0 -60
  55. package/dist/inbox-notify.js +0 -229
  56. package/dist/inbox-notify.js.map +0 -1
@@ -1,394 +0,0 @@
1
- "use strict";
2
- // adr: adr/odyssey-rename.md
3
- /** greprag odyssey — episodic project memory (turn / hourly / daily / weekly / ship-event).
4
- *
5
- * Odyssey = the per-project narrative pyramid. Stop hook captures raw turns;
6
- * crons compact at hourly, daily, and weekly tiers; advisor skills pull on
7
- * demand by project + time window. This CLI is the read surface (plus a
8
- * manual compaction trigger for admin use).
9
- *
10
- * Note: the server-side route + shape values stay named `memory` / `turn` /
11
- * `hourly` / `daily` / `weekly` / `ship-event` (internal — surface-only
12
- * rename in v5.8.0). The CLI maps `odyssey` subcommands to /v1/memory/* URLs.
13
- * Mirrors the v5.7.0 lore-rename pattern. See adr/odyssey-rename.md.
14
- *
15
- * Subcommands:
16
- * briefing [--project <name>] [--format markdown|json]
17
- * The SessionStart-shaped briefing — most recent weekly + 7 daily summaries.
18
- * daily [--last N=7] [--project <name>] [--from ISO --to ISO] [--format markdown|json]
19
- * weekly [--last N=2] [--project <name>] [--from ISO --to ISO] [--format markdown|json]
20
- * hourly [--last N=24] [--project <name>] [--from ISO --to ISO] [--format markdown|json]
21
- * turns [--last N=20] [--project <name>] [--from ISO --to ISO] [--format markdown|json]
22
- * ships [--last N=50] [--project <name>] [--from ISO --to ISO] [--format markdown|json]
23
- * compact <hour|day|week> [--now ISO]
24
- * Manual compaction trigger (cron also runs these on schedule).
25
- *
26
- * Project resolution: without --project, uses the current cwd's project
27
- * anchor (readAnchor). With --project <name>, hits /v1/projects to resolve
28
- * name → projectId (case-insensitive). */
29
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
30
- if (k2 === undefined) k2 = k;
31
- var desc = Object.getOwnPropertyDescriptor(m, k);
32
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
33
- desc = { enumerable: true, get: function() { return m[k]; } };
34
- }
35
- Object.defineProperty(o, k2, desc);
36
- }) : (function(o, m, k, k2) {
37
- if (k2 === undefined) k2 = k;
38
- o[k2] = m[k];
39
- }));
40
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
41
- Object.defineProperty(o, "default", { enumerable: true, value: v });
42
- }) : function(o, v) {
43
- o["default"] = v;
44
- });
45
- var __importStar = (this && this.__importStar) || (function () {
46
- var ownKeys = function(o) {
47
- ownKeys = Object.getOwnPropertyNames || function (o) {
48
- var ar = [];
49
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
50
- return ar;
51
- };
52
- return ownKeys(o);
53
- };
54
- return function (mod) {
55
- if (mod && mod.__esModule) return mod;
56
- var result = {};
57
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
58
- __setModuleDefault(result, mod);
59
- return result;
60
- };
61
- })();
62
- Object.defineProperty(exports, "__esModule", { value: true });
63
- exports.runOdyssey = runOdyssey;
64
- const fs = __importStar(require("fs"));
65
- const path = __importStar(require("path"));
66
- const project_anchor_1 = require("../project-anchor");
67
- const API_URL_DEFAULT = 'https://api.greprag.com';
68
- // ---------- Config / env (mirrors lore.ts) --------------------------------
69
- function loadEnvFile(filePath) {
70
- try {
71
- const content = fs.readFileSync(filePath, 'utf-8');
72
- for (const line of content.split('\n')) {
73
- const trimmed = line.trim();
74
- if (!trimmed || trimmed.startsWith('#'))
75
- continue;
76
- const eqIdx = trimmed.indexOf('=');
77
- if (eqIdx < 1)
78
- continue;
79
- const key = trimmed.slice(0, eqIdx).trim();
80
- let value = trimmed.slice(eqIdx + 1).trim();
81
- if ((value.startsWith('"') && value.endsWith('"')) ||
82
- (value.startsWith("'") && value.endsWith("'"))) {
83
- value = value.slice(1, -1);
84
- }
85
- if (!process.env[key])
86
- process.env[key] = value;
87
- }
88
- }
89
- catch { /* file missing — fine */ }
90
- }
91
- function getConfig() {
92
- const homeDir = process.env.HOME || process.env.USERPROFILE || '';
93
- if (homeDir)
94
- loadEnvFile(path.join(homeDir, '.greprag', '.env'));
95
- if (!process.env.GREPRAG_API_KEY)
96
- loadEnvFile(path.join(process.cwd(), '.env'));
97
- return {
98
- apiUrl: process.env.GREPRAG_API_URL || API_URL_DEFAULT,
99
- apiKey: process.env.GREPRAG_API_KEY || '',
100
- };
101
- }
102
- async function apiGet(url, apiKey) {
103
- const res = await fetch(url, { headers: { 'Authorization': `Bearer ${apiKey}` } });
104
- if (!res.ok)
105
- throw new Error(`API ${res.status}: ${await res.text()}`);
106
- return res.json();
107
- }
108
- async function apiPost(url, apiKey, body) {
109
- const res = await fetch(url, {
110
- method: 'POST',
111
- headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
112
- body: JSON.stringify(body),
113
- });
114
- if (!res.ok)
115
- throw new Error(`API ${res.status}: ${await res.text()}`);
116
- return res.json();
117
- }
118
- // ---------- Helpers -------------------------------------------------------
119
- function getFlag(args, flag) {
120
- const idx = args.indexOf(flag);
121
- if (idx === -1 || idx + 1 >= args.length)
122
- return undefined;
123
- return args[idx + 1];
124
- }
125
- function abortNotConfigured() {
126
- console.error('Not configured. Run: greprag init');
127
- process.exit(1);
128
- }
129
- /** Resolve which project an odyssey command operates on. --project <name>
130
- * wins via the tenant's projects registry; otherwise the cwd's anchor
131
- * decides. */
132
- async function resolveProject(args, apiUrl, apiKey) {
133
- const projectArg = getFlag(args, '--project');
134
- if (!projectArg) {
135
- const anchor = (0, project_anchor_1.readAnchor)(process.cwd());
136
- return { projectId: anchor.projectId, projectName: anchor.projectName };
137
- }
138
- // The tenant-wide project registry list is served by /v1/inbox/projects
139
- // (the inbox router owns the project name → id map). /v1/projects on its
140
- // own is reserved for repair endpoints (/orphans, /merge, /discover).
141
- const r = await apiGet(`${apiUrl}/v1/inbox/projects`, apiKey);
142
- const needle = projectArg.trim().toLowerCase();
143
- const match = (r.projects || []).find(p => p.project_name.toLowerCase() === needle);
144
- if (!match) {
145
- throw new Error(`project "${projectArg}" not found under this tenant. ` +
146
- `Register it via 'greprag init' in that directory, then retry.`);
147
- }
148
- return { projectId: match.project_id, projectName: match.project_name };
149
- }
150
- function nowIso() { return new Date().toISOString(); }
151
- function daysAgoIso(days) {
152
- const d = new Date();
153
- d.setUTCDate(d.getUTCDate() - days);
154
- return d.toISOString();
155
- }
156
- function hoursAgoIso(hours) {
157
- const d = new Date();
158
- d.setUTCHours(d.getUTCHours() - hours);
159
- return d.toISOString();
160
- }
161
- function validateFormat(raw) {
162
- const f = (raw || 'markdown').toLowerCase();
163
- if (f !== 'markdown' && f !== 'json') {
164
- console.error('--format must be markdown or json');
165
- process.exit(1);
166
- }
167
- return f;
168
- }
169
- function parsePositiveInt(raw, fallback, flag) {
170
- if (raw === undefined)
171
- return fallback;
172
- const n = parseInt(raw, 10);
173
- if (!Number.isFinite(n) || n <= 0) {
174
- console.error(`${flag} must be a positive integer (got "${raw}")`);
175
- process.exit(1);
176
- }
177
- return n;
178
- }
179
- /** Fetch /v1/memory/by-period and return rows in ASC order. */
180
- async function fetchPeriod(apiUrl, apiKey, projectId, fromIso, toIso, shape, limit) {
181
- const params = new URLSearchParams();
182
- params.set('projectId', projectId);
183
- params.set('from', fromIso);
184
- params.set('to', toIso);
185
- params.set('type', shape);
186
- params.set('limit', String(limit));
187
- const url = `${apiUrl}/v1/memory/by-period?${params.toString()}`;
188
- const res = await apiGet(url, apiKey);
189
- if (!res.ok)
190
- throw new Error(res.error || 'by-period failed');
191
- return res.memories || [];
192
- }
193
- /** Take the most-recent N rows from an ASC-sorted array, return ASC. */
194
- function tailN(rows, n) {
195
- if (rows.length <= n)
196
- return rows;
197
- return rows.slice(rows.length - n);
198
- }
199
- // ---------- Shape renderers -----------------------------------------------
200
- function renderSummaryRow(row) {
201
- const day = row.createdAt ? row.createdAt.slice(0, 10) : '';
202
- const win = row.windowStart && row.windowEnd
203
- ? ` (${row.windowStart.slice(0, 16).replace('T', ' ')} → ${row.windowEnd.slice(0, 16).replace('T', ' ')})`
204
- : '';
205
- const branch = row.branch ? ` [${row.branch}]` : '';
206
- return `### ${day} — ${row.shape}${branch}${win}\n\n${row.content.trim()}`;
207
- }
208
- function renderShipRow(row) {
209
- const day = row.createdAt ? row.createdAt.slice(0, 10) : '';
210
- const branch = row.branch ? ` [${row.branch}]` : '';
211
- const url = row.artifactUrl ? ` ${row.artifactUrl}` : '';
212
- const head = `### ${day} — ${row.artifactType}:${row.artifactId}${branch}${url}`;
213
- return `${head}\n\n${row.content.trim()}`;
214
- }
215
- function renderTurnRow(row) {
216
- const ts = row.createdAt ? row.createdAt.slice(0, 16).replace('T', ' ') : '';
217
- const branch = row.branch ? ` [${row.branch}]` : '';
218
- return `### ${ts}${branch}\n\n${row.content.trim()}`;
219
- }
220
- const SHAPE_DEFAULTS = {
221
- daily: { lastDefault: 7, windowDays: 30, apiLimit: 100, render: renderSummaryRow },
222
- weekly: { lastDefault: 2, windowDays: 90, apiLimit: 100, render: renderSummaryRow },
223
- hourly: { lastDefault: 24, windowDays: 7, apiLimit: 200, render: renderSummaryRow },
224
- turn: { lastDefault: 20, windowDays: 7, apiLimit: 500, render: renderTurnRow },
225
- 'ship-event': { lastDefault: 50, windowDays: 30, apiLimit: 200, render: renderShipRow },
226
- };
227
- // ---------- Generic per-shape query ---------------------------------------
228
- async function queryShape(args, shape) {
229
- const cfg = getConfig();
230
- if (!cfg.apiKey)
231
- abortNotConfigured();
232
- const defaults = SHAPE_DEFAULTS[shape];
233
- const last = parsePositiveInt(getFlag(args, '--last'), defaults.lastDefault, '--last');
234
- const format = validateFormat(getFlag(args, '--format'));
235
- const fromOverride = getFlag(args, '--from');
236
- const toOverride = getFlag(args, '--to');
237
- const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
238
- const fromIso = fromOverride || daysAgoIso(defaults.windowDays);
239
- const toIso = toOverride || nowIso();
240
- const rowsAll = await fetchPeriod(cfg.apiUrl, cfg.apiKey, projectId, fromIso, toIso, shape, defaults.apiLimit);
241
- const rows = tailN(rowsAll, last);
242
- if (format === 'json') {
243
- console.log(JSON.stringify({
244
- project: projectName,
245
- shape, from: fromIso, to: toIso, count: rows.length, rows,
246
- }, null, 2));
247
- return;
248
- }
249
- if (rows.length === 0) {
250
- console.log(`No ${shape} rows in ${projectName} between ${fromIso.slice(0, 10)} and ${toIso.slice(0, 10)}.`);
251
- return;
252
- }
253
- console.log(`## ${projectName} — ${shape} (last ${rows.length})\n`);
254
- for (const row of rows) {
255
- console.log(defaults.render(row));
256
- console.log('');
257
- }
258
- }
259
- // ---------- briefing ------------------------------------------------------
260
- /** SessionStart-shaped briefing: the most recent weekly summary (if any)
261
- * followed by the last N daily summaries (default 7). Same shape advisor
262
- * skills use to catch a session up at the top of a turn. */
263
- async function briefingCmd(args) {
264
- const cfg = getConfig();
265
- if (!cfg.apiKey)
266
- abortNotConfigured();
267
- const format = validateFormat(getFlag(args, '--format'));
268
- const dailyLast = parsePositiveInt(getFlag(args, '--daily-last'), 7, '--daily-last');
269
- const weeklyLast = parsePositiveInt(getFlag(args, '--weekly-last'), 1, '--weekly-last');
270
- const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
271
- const nowI = nowIso();
272
- const [dailyAll, weeklyAll] = await Promise.all([
273
- fetchPeriod(cfg.apiUrl, cfg.apiKey, projectId, daysAgoIso(30), nowI, 'daily', 100),
274
- fetchPeriod(cfg.apiUrl, cfg.apiKey, projectId, daysAgoIso(90), nowI, 'weekly', 100),
275
- ]);
276
- const daily = tailN(dailyAll, dailyLast);
277
- const weekly = tailN(weeklyAll, weeklyLast);
278
- if (format === 'json') {
279
- console.log(JSON.stringify({
280
- project: projectName, weekly, daily,
281
- }, null, 2));
282
- return;
283
- }
284
- if (weekly.length === 0 && daily.length === 0) {
285
- console.log(`No episodic rows yet for ${projectName} — compaction runs hourly. Check back after the first active session.`);
286
- return;
287
- }
288
- console.log(`## ${projectName} — memory briefing\n`);
289
- if (weekly.length > 0) {
290
- console.log('### This week\n');
291
- for (const w of weekly) {
292
- console.log(w.content.trim());
293
- console.log('');
294
- }
295
- }
296
- if (daily.length > 0) {
297
- console.log('### Recent days\n');
298
- // Show newest-first within the recent-days block — matches the
299
- // SessionStart recap shape used by advisor skills.
300
- for (const d of [...daily].reverse()) {
301
- const day = d.createdAt ? d.createdAt.slice(0, 10) : '';
302
- console.log(`**${day}**`);
303
- console.log(d.content.trim());
304
- console.log('');
305
- }
306
- }
307
- }
308
- // ---------- compact -------------------------------------------------------
309
- async function compactCmd(args) {
310
- const cfg = getConfig();
311
- if (!cfg.apiKey)
312
- abortNotConfigured();
313
- const tier = args[0];
314
- if (!tier || (tier !== 'hour' && tier !== 'day' && tier !== 'week')) {
315
- console.error('Usage: greprag odyssey compact <hour|day|week> [--now ISO]');
316
- process.exit(1);
317
- }
318
- const nowOverride = getFlag(args, '--now');
319
- const body = {};
320
- if (nowOverride)
321
- body.now = nowOverride;
322
- const route = tier === 'hour' ? 'compact-hour' :
323
- tier === 'day' ? 'compact-day' : 'compact-week';
324
- const res = await apiPost(`${cfg.apiUrl}/v1/memory/${route}`, cfg.apiKey, body);
325
- console.log(JSON.stringify(res, null, 2));
326
- }
327
- // ---------- Dispatch ------------------------------------------------------
328
- const SUB_HELP = `
329
- greprag odyssey — episodic project memory (per-project narrative pyramid).
330
-
331
- Reads the same rows the SessionStart recap shows: hourly / daily / weekly
332
- summaries, plus raw turns and ship-events. Pulls per-project by default
333
- (uses the current cwd's anchor); --project <name> targets another project
334
- under your tenant.
335
-
336
- Subcommands:
337
- briefing Weekly summary + last 7 daily summaries.
338
- The same shape advisor skills use.
339
- [--daily-last N=7] How many recent daily rows to include.
340
- [--weekly-last N=1] How many recent weekly rows to include.
341
- [--project <name>] Target another project under this tenant.
342
- [--format markdown|json] Default markdown.
343
-
344
- daily [--last N=7] [--project <name>] [--from ISO --to ISO]
345
- weekly [--last N=2] [--project <name>] [--from ISO --to ISO]
346
- hourly [--last N=24] [--project <name>] [--from ISO --to ISO]
347
- turns [--last N=20] [--project <name>] [--from ISO --to ISO]
348
- ships [--last N=50] [--project <name>] [--from ISO --to ISO]
349
- Newest-N for one shape. Default window is
350
- shape-appropriate; --from / --to override.
351
- [--format markdown|json]
352
-
353
- compact <hour|day|week> [--now ISO]
354
- Manual compaction trigger. Cron runs these
355
- on schedule (hourly / 03:00 UTC daily /
356
- 04:00 UTC Sundays); this is for backfill.
357
-
358
- Examples:
359
- greprag odyssey briefing
360
- greprag odyssey daily --last 14 --format json
361
- greprag odyssey weekly --project openwriter
362
- greprag odyssey hourly --last 8
363
- greprag odyssey turns --last 5
364
- greprag odyssey ships --last 20
365
- greprag odyssey compact day --now 2026-05-25T00:00:00Z
366
- `.trim();
367
- async function runOdyssey(args) {
368
- const sub = args[0];
369
- const rest = args.slice(1);
370
- switch (sub) {
371
- case 'briefing': return briefingCmd(rest);
372
- case 'daily': return queryShape(rest, 'daily');
373
- case 'weekly': return queryShape(rest, 'weekly');
374
- case 'hourly': return queryShape(rest, 'hourly');
375
- case 'turns':
376
- case 'turn': return queryShape(rest, 'turn');
377
- case 'ships':
378
- case 'ship':
379
- case 'ship-event':
380
- case 'ship-events': return queryShape(rest, 'ship-event');
381
- case 'compact': return compactCmd(rest);
382
- case undefined:
383
- case 'help':
384
- case '--help':
385
- case '-h':
386
- console.log(SUB_HELP);
387
- return;
388
- default:
389
- console.error(`Unknown subcommand: ${sub}\n`);
390
- console.log(SUB_HELP);
391
- process.exit(1);
392
- }
393
- }
394
- //# sourceMappingURL=odyssey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"odyssey.js","sourceRoot":"","sources":["../../src/commands/odyssey.ts"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- /** UserPromptSubmit inbox delivery — Tier-2 fallback for hosts that do NOT
2
- * arm the `greprag-inbox` plugin monitor (the Claude desktop app, OpenCode,
3
- * Codex, any non-CLI host). On those hosts the LIVE plugin-monitor channel
4
- * never delivers, but SessionStart/UserPromptSubmit hooks fire normally — so
5
- * this hook fetches THIS session's unread inbox at each turn boundary and
6
- * injects new messages as `additionalContext`.
7
- *
8
- * PRIVACY — why this does not reopen the v5.6.1 eavesdrop vector: that
9
- * removal happened because the old query was *project-wide* (no session id),
10
- * so a sibling session saw the unread count of another session's
11
- * session-targeted DM and could read it. This query is **session-scoped**:
12
- * `GET /v1/inbox?session_id=<this-8hex>&project_id=<pid>`. The server SQL
13
- * returns only mail whose `toSessionId` matches THIS session OR is NULL
14
- * (a broadcast) — a sibling's session-targeted DM is never returned. If we
15
- * cannot resolve our own session id we no-op rather than fall back to a
16
- * project-wide query.
17
- *
18
- * DELIVER-ONCE without mutating server read-state: the fetch uses `peek=1`
19
- * (never sets `readAt`) plus a per-session local cache of delivered node IDs
20
- * (`~/.greprag/state.json` → `inboxDelivered`). We deliberately do NOT
21
- * auto-mark-read: a broadcast (`toSessionId` NULL — e.g. a Discord→project
22
- * message) read in one session would starve every sibling session and the
23
- * operator's own `greprag inbox`, because `readAt` is a single field on the
24
- * node, not per-recipient. Client-side dedup gives "deliver once per session"
25
- * without touching the shared read flag.
26
- *
27
- * adr: adr/monitor-resilience.md (2026-05-28 — Tier 2)
28
- */
29
- interface InboxApiMessage {
30
- id: string;
31
- from: {
32
- tenant: string;
33
- handle: string;
34
- project_id: string | null;
35
- session_id: string | null;
36
- };
37
- to_session_id: string | null;
38
- body: string;
39
- message_type: string;
40
- was_unread: boolean;
41
- created_at: string;
42
- }
43
- export interface NotifyOpts {
44
- /** Raw session id from the hook payload; truncated to 8-hex internally. */
45
- sessionId: string | undefined | null;
46
- projectId: string | null;
47
- apiUrl: string;
48
- apiKey: string;
49
- }
50
- /** Build the `additionalContext` body. Exported for tests. `shown` is in
51
- * chronological order; `overflow` is the count of older fresh messages held
52
- * back this turn. */
53
- export declare function renderInboxContext(shown: InboxApiMessage[], short: string, overflow: number): string;
54
- /** Fetch this session's unread inbox (session-scoped, peek) and, for any
55
- * message not already delivered to this session, print a UserPromptSubmit
56
- * `additionalContext` payload to stdout. Silent (no output) when there is
57
- * nothing new, when the session id can't be resolved, or on any error — the
58
- * turn must never be blocked by inbox delivery. */
59
- export declare function runInboxNotify(opts: NotifyOpts): Promise<void>;
60
- export {};