greprag 0.1.1 → 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/dist/hook.d.ts +5 -5
- package/dist/hook.js +363 -30
- package/dist/hook.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +262 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/hook.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/** GrepRAG Hook — thin HTTP pipe for Claude Code hooks.
|
|
3
3
|
*
|
|
4
|
-
* Subcommands:
|
|
5
|
-
* retrieve — UserPromptSubmit: POST prompt to API, return additionalContext
|
|
6
|
-
* store — Stop: read transcript, POST raw content to API for server-side parsing
|
|
4
|
+
* Subcommands: retrieve, store, compact, signal, summary, recover, farewell, recap
|
|
7
5
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Lifecycle:
|
|
7
|
+
* recap(SessionStart:startup) → retrieve → [agent turn] → store → farewell(SessionEnd)
|
|
8
|
+
* summary(PreCompact) → compact → recover(SessionStart:compact)
|
|
9
|
+
* PostToolUse(ExitPlanMode | AskUserQuestion) → signal */
|
|
10
10
|
export {};
|
package/dist/hook.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
/** GrepRAG Hook — thin HTTP pipe for Claude Code hooks.
|
|
4
4
|
*
|
|
5
|
-
* Subcommands:
|
|
6
|
-
* retrieve — UserPromptSubmit: POST prompt to API, return additionalContext
|
|
7
|
-
* store — Stop: read transcript, POST raw content to API for server-side parsing
|
|
5
|
+
* Subcommands: retrieve, store, compact, signal, summary, recover, farewell, recap
|
|
8
6
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Lifecycle:
|
|
8
|
+
* recap(SessionStart:startup) → retrieve → [agent turn] → store → farewell(SessionEnd)
|
|
9
|
+
* summary(PreCompact) → compact → recover(SessionStart:compact)
|
|
10
|
+
* PostToolUse(ExitPlanMode | AskUserQuestion) → signal */
|
|
11
11
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
12
|
if (k2 === undefined) k2 = k;
|
|
13
13
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -44,8 +44,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
const path = __importStar(require("path"));
|
|
46
46
|
const fs = __importStar(require("fs"));
|
|
47
|
-
|
|
47
|
+
const os = __importStar(require("os"));
|
|
48
48
|
const API_URL_DEFAULT = 'https://api.greprag.com';
|
|
49
|
+
const GREPRAG_DIR = path.join(os.homedir(), '.greprag');
|
|
50
|
+
function ensureDir() {
|
|
51
|
+
if (!fs.existsSync(GREPRAG_DIR))
|
|
52
|
+
fs.mkdirSync(GREPRAG_DIR, { recursive: true });
|
|
53
|
+
}
|
|
49
54
|
function getConfig(cwd) {
|
|
50
55
|
ensureEnv(cwd);
|
|
51
56
|
return {
|
|
@@ -54,7 +59,40 @@ function getConfig(cwd) {
|
|
|
54
59
|
enabled: process.env.MEMORY_HOOK_ENABLED === 'true',
|
|
55
60
|
};
|
|
56
61
|
}
|
|
57
|
-
|
|
62
|
+
function flagPath(name) {
|
|
63
|
+
ensureDir();
|
|
64
|
+
return path.join(GREPRAG_DIR, `${name}.flag`);
|
|
65
|
+
}
|
|
66
|
+
function setFlag(name) {
|
|
67
|
+
fs.writeFileSync(flagPath(name), Date.now().toString());
|
|
68
|
+
}
|
|
69
|
+
function consumeFlag(name) {
|
|
70
|
+
const p = flagPath(name);
|
|
71
|
+
try {
|
|
72
|
+
fs.unlinkSync(p);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function getCachePath() {
|
|
80
|
+
ensureDir();
|
|
81
|
+
return path.join(GREPRAG_DIR, 'pending-prompt.json');
|
|
82
|
+
}
|
|
83
|
+
function cachePrompt(prompt, sessionId, profileId) {
|
|
84
|
+
fs.writeFileSync(getCachePath(), JSON.stringify({ prompt, sessionId, profileId }));
|
|
85
|
+
}
|
|
86
|
+
function readCachedPrompt() {
|
|
87
|
+
try {
|
|
88
|
+
const data = JSON.parse(fs.readFileSync(getCachePath(), 'utf-8'));
|
|
89
|
+
fs.unlinkSync(getCachePath()); // consume once
|
|
90
|
+
return data;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
58
96
|
function loadEnvFile(filePath) {
|
|
59
97
|
try {
|
|
60
98
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
@@ -87,7 +125,6 @@ function ensureEnv(cwd) {
|
|
|
87
125
|
if (!process.env.GREPRAG_API_KEY)
|
|
88
126
|
loadEnvFile(path.join(cwd, '.env'));
|
|
89
127
|
}
|
|
90
|
-
// -- HTTP client -----------------------------------------------------------
|
|
91
128
|
async function apiCall(url, apiKey, body) {
|
|
92
129
|
const res = await fetch(url, {
|
|
93
130
|
method: 'POST',
|
|
@@ -103,52 +140,330 @@ async function apiCall(url, apiKey, body) {
|
|
|
103
140
|
}
|
|
104
141
|
return res.json();
|
|
105
142
|
}
|
|
143
|
+
/** SessionStart:compact — flag that next prompt is system-generated, not user.
|
|
144
|
+
* Also clears the retrieval dedup cache so previously-injected memories
|
|
145
|
+
* can resurface after compaction resets Claude's context. */
|
|
146
|
+
async function compact(input) {
|
|
147
|
+
setFlag('skip-next');
|
|
148
|
+
// Clear dedup cache for this session
|
|
149
|
+
const sessionId = input.session_id;
|
|
150
|
+
if (sessionId) {
|
|
151
|
+
const cwd = input.cwd || process.cwd();
|
|
152
|
+
const cfg = getConfig(cwd);
|
|
153
|
+
if (cfg.enabled && cfg.apiKey) {
|
|
154
|
+
await apiCall(`${cfg.apiUrl}/v1/memory/cache/clear`, cfg.apiKey, { sessionId });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** UserPromptSubmit — retrieve memory, cache prompt for store pairing. */
|
|
106
159
|
async function retrieve(input) {
|
|
107
160
|
const cwd = input.cwd || process.cwd();
|
|
108
161
|
const cfg = getConfig(cwd);
|
|
109
162
|
if (!cfg.enabled || !cfg.apiKey)
|
|
110
163
|
return;
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
164
|
+
const prompt = input.prompt || '';
|
|
165
|
+
const sessionId = input.session_id || '';
|
|
166
|
+
const profileId = path.basename(cwd);
|
|
167
|
+
// After compaction, the first prompt is system-generated — skip caching it
|
|
168
|
+
const skipStore = consumeFlag('skip-next');
|
|
169
|
+
// Cache prompt for the store hook (unless this is a post-compaction prompt)
|
|
170
|
+
if (prompt && !skipStore)
|
|
171
|
+
cachePrompt(prompt, sessionId, profileId);
|
|
172
|
+
// Retrieve memory + count pending messages in parallel
|
|
173
|
+
const [result, countResult] = await Promise.all([
|
|
174
|
+
apiCall(`${cfg.apiUrl}/v1/memory/retrieve`, cfg.apiKey, {
|
|
175
|
+
query: prompt,
|
|
176
|
+
profileId,
|
|
177
|
+
sessionId,
|
|
178
|
+
}),
|
|
179
|
+
apiCall(`${cfg.apiUrl}/v1/memory/messages/count`, cfg.apiKey, {
|
|
180
|
+
profileId,
|
|
181
|
+
sessionId,
|
|
182
|
+
}),
|
|
183
|
+
]);
|
|
184
|
+
let context = '';
|
|
185
|
+
// Prepend message notification if any pending
|
|
186
|
+
const pending = countResult?.ok ? countResult.count ?? 0 : 0;
|
|
187
|
+
if (pending > 0) {
|
|
188
|
+
const s = pending === 1 ? 'message' : 'messages';
|
|
189
|
+
context += `[${pending} pending ${s} — run: greprag inbox]\n`;
|
|
190
|
+
}
|
|
116
191
|
if (result?.ok) {
|
|
117
192
|
const r = result.result;
|
|
118
193
|
if (r?.totalWords > 0 && r?.formattedBlock) {
|
|
119
|
-
|
|
120
|
-
hookSpecificOutput: {
|
|
121
|
-
hookEventName: 'UserPromptSubmit',
|
|
122
|
-
additionalContext: r.formattedBlock,
|
|
123
|
-
},
|
|
124
|
-
}));
|
|
194
|
+
context += r.formattedBlock;
|
|
125
195
|
}
|
|
126
196
|
}
|
|
197
|
+
if (context) {
|
|
198
|
+
process.stdout.write(JSON.stringify({
|
|
199
|
+
hookSpecificOutput: {
|
|
200
|
+
hookEventName: 'UserPromptSubmit',
|
|
201
|
+
additionalContext: context,
|
|
202
|
+
},
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
127
205
|
}
|
|
206
|
+
/** Stop — pair cached prompt with agent response, store the turn. */
|
|
128
207
|
async function store(input) {
|
|
129
|
-
const transcriptPath = input.transcript_path || '';
|
|
130
208
|
const cwd = input.cwd || process.cwd();
|
|
131
209
|
const cfg = getConfig(cwd);
|
|
132
|
-
if (!
|
|
210
|
+
if (!cfg.enabled || !cfg.apiKey)
|
|
211
|
+
return;
|
|
212
|
+
const agentProse = input.last_assistant_message || '';
|
|
213
|
+
if (!agentProse)
|
|
133
214
|
return;
|
|
134
|
-
|
|
215
|
+
// Read the cached prompt from the retrieve hook
|
|
216
|
+
const cached = readCachedPrompt();
|
|
217
|
+
const userMessage = cached?.prompt || '';
|
|
218
|
+
const sessionId = cached?.sessionId || input.session_id || `hook-${Date.now()}`;
|
|
219
|
+
const profileId = cached?.profileId || path.basename(cwd);
|
|
220
|
+
await apiCall(`${cfg.apiUrl}/v1/memory/store`, cfg.apiKey, {
|
|
221
|
+
profileId,
|
|
222
|
+
sessionId,
|
|
223
|
+
userMessage,
|
|
224
|
+
agentProse,
|
|
225
|
+
crystallization: 'turn',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/** Find the most recently modified plan file in ~/.claude/plans/ */
|
|
229
|
+
function readNewestPlanFile() {
|
|
230
|
+
const plansDir = path.join(os.homedir(), '.claude', 'plans');
|
|
135
231
|
try {
|
|
136
|
-
|
|
232
|
+
const files = fs.readdirSync(plansDir)
|
|
233
|
+
.filter(f => f.endsWith('.md'))
|
|
234
|
+
.map(f => {
|
|
235
|
+
const full = path.join(plansDir, f);
|
|
236
|
+
return { path: full, mtime: fs.statSync(full).mtimeMs };
|
|
237
|
+
})
|
|
238
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
239
|
+
if (!files.length)
|
|
240
|
+
return null;
|
|
241
|
+
// Only consider plans modified in the last 60 seconds (freshly written)
|
|
242
|
+
if (Date.now() - files[0].mtime > 60_000)
|
|
243
|
+
return null;
|
|
244
|
+
return fs.readFileSync(files[0].path, 'utf-8');
|
|
137
245
|
}
|
|
138
246
|
catch {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/** Format AskUserQuestion tool data into readable Q&A text. */
|
|
251
|
+
function formatQuestionAnswers(toolInput, toolResponse) {
|
|
252
|
+
const questions = toolInput.questions;
|
|
253
|
+
const answers = toolResponse.answers;
|
|
254
|
+
if (!questions?.length)
|
|
255
|
+
return '';
|
|
256
|
+
const lines = [];
|
|
257
|
+
for (const q of questions) {
|
|
258
|
+
const question = q.question || '';
|
|
259
|
+
const answer = answers?.[question] || '';
|
|
260
|
+
if (question) {
|
|
261
|
+
lines.push(`Q: ${question}`);
|
|
262
|
+
lines.push(`A: ${answer || '(no answer)'}`);
|
|
263
|
+
lines.push('');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return lines.join('\n').trim();
|
|
267
|
+
}
|
|
268
|
+
/** PostToolUse — capture high-signal tool events (plan approvals, user answers). */
|
|
269
|
+
async function signal(input) {
|
|
270
|
+
const cwd = input.cwd || process.cwd();
|
|
271
|
+
const cfg = getConfig(cwd);
|
|
272
|
+
if (!cfg.enabled || !cfg.apiKey)
|
|
139
273
|
return;
|
|
274
|
+
const toolName = input.tool_name || '';
|
|
275
|
+
const sessionId = input.session_id || `hook-${Date.now()}`;
|
|
276
|
+
const profileId = path.basename(cwd);
|
|
277
|
+
let userMessage = '';
|
|
278
|
+
let agentProse = '';
|
|
279
|
+
let crystallization = '';
|
|
280
|
+
if (toolName === 'ExitPlanMode') {
|
|
281
|
+
const planContent = readNewestPlanFile();
|
|
282
|
+
if (!planContent)
|
|
283
|
+
return; // no plan file found
|
|
284
|
+
userMessage = '[Plan Approved]';
|
|
285
|
+
// Cap at ~2000 words to avoid oversized payloads
|
|
286
|
+
const words = planContent.split(/\s+/);
|
|
287
|
+
agentProse = words.length > 2000
|
|
288
|
+
? words.slice(0, 2000).join(' ') + '\n\n[truncated]'
|
|
289
|
+
: planContent;
|
|
290
|
+
crystallization = 'plan';
|
|
291
|
+
}
|
|
292
|
+
else if (toolName === 'AskUserQuestion') {
|
|
293
|
+
const toolInput = input.tool_input || {};
|
|
294
|
+
const toolResponse = input.tool_response || {};
|
|
295
|
+
const formatted = formatQuestionAnswers(toolInput, toolResponse);
|
|
296
|
+
if (!formatted)
|
|
297
|
+
return;
|
|
298
|
+
userMessage = formatted;
|
|
299
|
+
agentProse = '';
|
|
300
|
+
crystallization = 'decision';
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
return; // unknown tool, ignore
|
|
140
304
|
}
|
|
141
305
|
await apiCall(`${cfg.apiUrl}/v1/memory/store`, cfg.apiKey, {
|
|
142
|
-
profileId
|
|
143
|
-
sessionId
|
|
144
|
-
|
|
306
|
+
profileId,
|
|
307
|
+
sessionId,
|
|
308
|
+
userMessage,
|
|
309
|
+
agentProse,
|
|
310
|
+
crystallization,
|
|
145
311
|
});
|
|
146
312
|
}
|
|
147
|
-
|
|
313
|
+
function extractText(content) {
|
|
314
|
+
if (typeof content === 'string')
|
|
315
|
+
return content.trim();
|
|
316
|
+
if (!Array.isArray(content))
|
|
317
|
+
return '';
|
|
318
|
+
return content
|
|
319
|
+
.filter((b) => b?.type === 'text')
|
|
320
|
+
.map((b) => b.text || '')
|
|
321
|
+
.join('\n').trim();
|
|
322
|
+
}
|
|
323
|
+
function parseTranscript(transcriptPath) {
|
|
324
|
+
const userReqs = [];
|
|
325
|
+
const files = new Set();
|
|
326
|
+
const cmds = [];
|
|
327
|
+
const responses = new Map();
|
|
328
|
+
let raw;
|
|
329
|
+
try {
|
|
330
|
+
raw = fs.readFileSync(transcriptPath, 'utf-8');
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
for (const line of raw.split('\n')) {
|
|
336
|
+
if (!line.trim())
|
|
337
|
+
continue;
|
|
338
|
+
let entry;
|
|
339
|
+
try {
|
|
340
|
+
entry = JSON.parse(line);
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
const msg = (entry.message || entry);
|
|
346
|
+
const role = (msg.role || entry.type || '');
|
|
347
|
+
const content = msg.content;
|
|
348
|
+
const reqId = (entry.requestId || '');
|
|
349
|
+
if (role === 'user') {
|
|
350
|
+
const text = extractText(content);
|
|
351
|
+
if (text.length > 5 && !text.startsWith('<system') && !text.startsWith('{'))
|
|
352
|
+
userReqs.push(text.slice(0, 300));
|
|
353
|
+
}
|
|
354
|
+
if (role === 'assistant') {
|
|
355
|
+
const text = extractText(content);
|
|
356
|
+
if (text.length > 20 && reqId && text.length > (responses.get(reqId)?.length || 0))
|
|
357
|
+
responses.set(reqId, text);
|
|
358
|
+
if (Array.isArray(content)) {
|
|
359
|
+
for (const b of content) {
|
|
360
|
+
const block = b;
|
|
361
|
+
if (block?.type !== 'tool_use')
|
|
362
|
+
continue;
|
|
363
|
+
const inp = (block.input || {});
|
|
364
|
+
if (typeof inp !== 'object')
|
|
365
|
+
continue;
|
|
366
|
+
if ((block.name === 'Write' || block.name === 'Edit') && inp.file_path)
|
|
367
|
+
files.add(inp.file_path);
|
|
368
|
+
if (block.name === 'Bash' && inp.command)
|
|
369
|
+
cmds.push(inp.description || inp.command.slice(0, 150));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// Deduplicate user requests, keep last 10
|
|
375
|
+
const seen = new Set();
|
|
376
|
+
const uniqueReqs = userReqs.map(r => r.split('\n')[0].slice(0, 150))
|
|
377
|
+
.filter(r => { if (seen.has(r))
|
|
378
|
+
return false; seen.add(r); return true; }).slice(-10);
|
|
379
|
+
return {
|
|
380
|
+
userReqs: uniqueReqs,
|
|
381
|
+
files: Array.from(files).sort(),
|
|
382
|
+
cmds: cmds.slice(-5),
|
|
383
|
+
responses: Array.from(responses.values()).slice(-3).map(r => {
|
|
384
|
+
const t = r.slice(0, 500);
|
|
385
|
+
const dot = t.lastIndexOf('.');
|
|
386
|
+
return dot > 200 ? t.slice(0, dot + 1) : t;
|
|
387
|
+
}),
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
function getSummaryCachePath() {
|
|
391
|
+
ensureDir();
|
|
392
|
+
return path.join(GREPRAG_DIR, 'latest-summary.txt');
|
|
393
|
+
}
|
|
394
|
+
/** Extract raw session text from transcript — shared by summary + farewell. */
|
|
395
|
+
function extractSessionText(input) {
|
|
396
|
+
const transcriptPath = input.transcript_path || '';
|
|
397
|
+
if (!transcriptPath)
|
|
398
|
+
return null;
|
|
399
|
+
const parsed = parseTranscript(transcriptPath);
|
|
400
|
+
if (!parsed)
|
|
401
|
+
return null;
|
|
402
|
+
const cwd = input.cwd || process.cwd();
|
|
403
|
+
const parts = [];
|
|
404
|
+
if (parsed.userReqs.length)
|
|
405
|
+
parts.push('User requests: ' + parsed.userReqs.join('; '));
|
|
406
|
+
if (parsed.files.length)
|
|
407
|
+
parts.push('Files modified: ' + parsed.files.slice(0, 20).join(', '));
|
|
408
|
+
if (parsed.cmds.length)
|
|
409
|
+
parts.push('Commands: ' + parsed.cmds.join('; '));
|
|
410
|
+
if (parsed.responses.length)
|
|
411
|
+
parts.push('Recent context:\n' + parsed.responses.join('\n'));
|
|
412
|
+
const rawText = parts.join('\n\n');
|
|
413
|
+
if (!rawText.trim())
|
|
414
|
+
return null;
|
|
415
|
+
return { rawText, cwd, project: path.basename(cwd) };
|
|
416
|
+
}
|
|
417
|
+
/** Store session text to API with compaction crystallization. */
|
|
418
|
+
async function storeSessionSummary(input, rawText, cwd, project, label) {
|
|
419
|
+
const cfg = getConfig(cwd);
|
|
420
|
+
if (cfg.enabled && cfg.apiKey) {
|
|
421
|
+
await apiCall(`${cfg.apiUrl}/v1/memory/store`, cfg.apiKey, {
|
|
422
|
+
profileId: project,
|
|
423
|
+
sessionId: input.session_id || `hook-${Date.now()}`,
|
|
424
|
+
userMessage: label,
|
|
425
|
+
agentProse: rawText,
|
|
426
|
+
crystallization: 'compaction',
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
/** PreCompact — extract raw session text, send to API for LLM summarization + storage. */
|
|
431
|
+
async function summary(input) {
|
|
432
|
+
const extracted = extractSessionText(input);
|
|
433
|
+
if (!extracted)
|
|
434
|
+
return;
|
|
435
|
+
fs.writeFileSync(getSummaryCachePath(), extracted.rawText);
|
|
436
|
+
await storeSessionSummary(input, extracted.rawText, extracted.cwd, extracted.project, '[Session Summary]');
|
|
437
|
+
}
|
|
438
|
+
/** SessionEnd — store final session summary and cache for next session's recap. */
|
|
439
|
+
async function farewell(input) {
|
|
440
|
+
const extracted = extractSessionText(input);
|
|
441
|
+
if (!extracted)
|
|
442
|
+
return;
|
|
443
|
+
fs.writeFileSync(getSummaryCachePath(), extracted.rawText);
|
|
444
|
+
// Only store to API if content is substantial (skip tiny post-compaction tails)
|
|
445
|
+
if (extracted.rawText.split(/\s+/).length < 30)
|
|
446
|
+
return;
|
|
447
|
+
await storeSessionSummary(input, extracted.rawText, extracted.cwd, extracted.project, '[Session End]');
|
|
448
|
+
}
|
|
449
|
+
function injectCachedSummary(header, footer) {
|
|
450
|
+
try {
|
|
451
|
+
const cached = fs.readFileSync(getSummaryCachePath(), 'utf-8');
|
|
452
|
+
if (cached?.trim()) {
|
|
453
|
+
process.stdout.write(header + '\n' + cached + '\n' + footer + '\n');
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
catch { /* no cached summary */ }
|
|
457
|
+
}
|
|
458
|
+
/** SessionStart:startup — inject last session's summary for continuity. */
|
|
459
|
+
const recap = () => injectCachedSummary('--- LAST SESSION (auto-generated) ---', '--- END LAST SESSION ---');
|
|
460
|
+
/** SessionStart:compact recovery — inject cached session summary into context. */
|
|
461
|
+
const recover = () => injectCachedSummary('--- SESSION RECOVERY (auto-generated) ---', '--- END SESSION RECOVERY ---');
|
|
462
|
+
const SUBCOMMANDS = ['retrieve', 'store', 'compact', 'signal', 'summary', 'recover', 'farewell', 'recap'];
|
|
148
463
|
async function main() {
|
|
149
464
|
const subcommand = process.argv[2];
|
|
150
|
-
if (!subcommand || !
|
|
151
|
-
process.stderr.write(
|
|
465
|
+
if (!subcommand || !SUBCOMMANDS.includes(subcommand)) {
|
|
466
|
+
process.stderr.write(`Usage: greprag-hook <${SUBCOMMANDS.join('|')}>\n`);
|
|
152
467
|
process.exit(1);
|
|
153
468
|
}
|
|
154
469
|
let input = {};
|
|
@@ -164,9 +479,27 @@ async function main() {
|
|
|
164
479
|
catch {
|
|
165
480
|
process.exit(0);
|
|
166
481
|
}
|
|
167
|
-
if (subcommand === '
|
|
482
|
+
if (subcommand === 'compact') {
|
|
483
|
+
await compact(input);
|
|
484
|
+
}
|
|
485
|
+
else if (subcommand === 'retrieve') {
|
|
168
486
|
await retrieve(input);
|
|
169
487
|
}
|
|
488
|
+
else if (subcommand === 'signal') {
|
|
489
|
+
await signal(input);
|
|
490
|
+
}
|
|
491
|
+
else if (subcommand === 'summary') {
|
|
492
|
+
await summary(input);
|
|
493
|
+
}
|
|
494
|
+
else if (subcommand === 'farewell') {
|
|
495
|
+
await farewell(input);
|
|
496
|
+
}
|
|
497
|
+
else if (subcommand === 'recover') {
|
|
498
|
+
recover();
|
|
499
|
+
}
|
|
500
|
+
else if (subcommand === 'recap') {
|
|
501
|
+
recap();
|
|
502
|
+
}
|
|
170
503
|
else {
|
|
171
504
|
await store(input);
|
|
172
505
|
}
|
package/dist/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";;AACA;;;;;;;4DAO4D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE5D,2CAA6B;AAC7B,uCAAyB;AACzB,uCAAyB;AAEzB,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAClD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAExD,SAAS,SAAS;IAChB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,SAAS,CAAC,GAAG,CAAC,CAAC;IACf,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe;QACtD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;QACzC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,SAAS,EAAE,CAAC;IACZ,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,SAAS,EAAE,CAAC;IACZ,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,SAAiB,EAAE,SAAiB;IACvE,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,eAAe;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC;gBAAE,SAAS;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAClE,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,GAAW,EAAE,MAAc,EAAE,IAA6B;IAE1D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAsC,CAAC;AACxD,CAAC;AAcD;;8DAE8D;AAC9D,KAAK,UAAU,OAAO,CAAC,KAAgB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAC;IAErB,qCAAqC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,QAAQ,CAAC,KAAgB;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO;IAExC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAErC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAE3C,4EAA4E;IAC5E,IAAI,MAAM,IAAI,CAAC,SAAS;QAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEpE,uDAAuD;IACvD,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE;YACtD,KAAK,EAAE,MAAM;YACb,SAAS;YACT,SAAS;SACV,CAAC;QACF,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE;YAC5D,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,8CAA8C;IAC9C,MAAM,OAAO,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC,CAAE,WAAuC,CAAC,KAAe,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACjD,OAAO,IAAI,IAAI,OAAO,YAAY,CAAC,0BAA0B,CAAC;IAChE,CAAC;IAED,IAAI,MAAM,EAAE,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,MAAM,CAAC,MAAiC,CAAC;QACnD,IAAK,CAAC,EAAE,UAAqB,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,CAAC,cAAwB,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,kBAAkB,EAAE;gBAClB,aAAa,EAAE,kBAAkB;gBACjC,iBAAiB,EAAE,OAAO;aAC3B;SACF,CAAC,CAAC,CAAC;IACN,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,KAAK,CAAC,KAAgB;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO;IAExC,MAAM,UAAU,GAAG,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,gDAAgD;IAChD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE1D,MAAM,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;QACzD,SAAS;QACT,SAAS;QACT,WAAW;QACX,UAAU;QACV,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC/B,wEAAwE;QACxE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM;YAAE,OAAO,IAAI,CAAC;QACtD,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,SAAS,qBAAqB,CAC5B,SAAkC,EAClC,YAAqC;IAErC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAuD,CAAC;IACpF,MAAM,OAAO,GAAG,YAAY,CAAC,OAA6C,CAAC;IAC3E,IAAI,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAkB,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,oFAAoF;AACpF,KAAK,UAAU,MAAM,CAAC,KAAgB;IACpC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO;IAExC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,eAAe,GAAW,EAAE,CAAC;IAEjC,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,qBAAqB;QAC/C,WAAW,GAAG,iBAAiB,CAAC;QAChC,iDAAiD;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;YAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAiB;YACpD,CAAC,CAAC,WAAW,CAAC;QAChB,eAAe,GAAG,MAAM,CAAC;IAC3B,CAAC;SAAM,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,WAAW,GAAG,SAAS,CAAC;QACxB,UAAU,GAAG,EAAE,CAAC;QAChB,eAAe,GAAG,UAAU,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,uBAAuB;IACjC,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;QACzD,SAAS;QACT,SAAS;QACT,WAAW;QACX,UAAU;QACV,eAAe;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;SAC1D,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAE,CAAC,CAAC,IAAe,IAAI,EAAE,CAAC;SAC7D,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,cAAsB;IAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QAAC,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAE9E,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,KAA8B,CAAC;QACnC,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QACrD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAA4B,CAAC;QAChE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAW,CAAC;QAEhD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACzE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;gBAChF,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,KAAK,GAAG,CAA4B,CAAC;oBAC3C,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU;wBAAE,SAAS;oBACzC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAA2B,CAAC;oBAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ;wBAAE,SAAS;oBACtC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS;wBACpE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO;wBACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,0CAA0C;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACjE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;QAC/B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,SAAS,EAAE,CAAC;IACZ,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,SAAS,kBAAkB,CAAC,KAAgB;IAC1C,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;IACnD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,iEAAiE;AACjE,KAAK,UAAU,mBAAmB,CAChC,KAAgB,EAAE,OAAe,EAAE,GAAW,EAAE,OAAe,EAAE,KAAa;IAE9E,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;YACzD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,KAAK,CAAC,UAAU,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;YACnD,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,OAAO;YACnB,eAAe,EAAE,YAAY;SAC9B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F,KAAK,UAAU,OAAO,CAAC,KAAgB;IACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAC7G,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,QAAQ,CAAC,KAAgB;IACtC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3D,gFAAgF;IAChF,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO;IACvD,MAAM,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,MAAc;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;AACrC,CAAC;AAED,2EAA2E;AAC3E,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,uCAAuC,EAAE,0BAA0B,CAAC,CAAC;AAC7G,kFAAkF;AAClF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,2CAA2C,EAAE,8BAA8B,CAAC,CAAC;AAEvH,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAE1G,KAAK,UAAU,IAAI;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,GAAc,EAAE,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;SAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;SAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;SAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,KAAK,EAAE,CAAC;IACV,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;AAC3C,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/** GrepRAG CLI — agent memory for Claude Code.
|
|
3
3
|
* Usage: greprag <command>
|
|
4
|
-
* init
|
|
4
|
+
* init — configure Claude Code for GrepRAG memory
|
|
5
|
+
* inbox — view pending messages
|
|
6
|
+
* send — send a message to another agent
|
|
7
|
+
* dismiss — dismiss a message (keeps as memory)
|
|
8
|
+
* profiles — list known agent profiles */
|
|
5
9
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -2,23 +2,262 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
/** GrepRAG CLI — agent memory for Claude Code.
|
|
4
4
|
* Usage: greprag <command>
|
|
5
|
-
* init
|
|
5
|
+
* init — configure Claude Code for GrepRAG memory
|
|
6
|
+
* inbox — view pending messages
|
|
7
|
+
* send — send a message to another agent
|
|
8
|
+
* dismiss — dismiss a message (keeps as memory)
|
|
9
|
+
* profiles — list known agent profiles */
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
6
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
7
46
|
const init_1 = require("./commands/init");
|
|
47
|
+
// -- Config / env (shared with hook.ts) ------------------------------------
|
|
48
|
+
const API_URL_DEFAULT = 'https://api.greprag.com';
|
|
49
|
+
function loadEnvFile(filePath) {
|
|
50
|
+
try {
|
|
51
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
52
|
+
for (const line of content.split('\n')) {
|
|
53
|
+
const trimmed = line.trim();
|
|
54
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
55
|
+
continue;
|
|
56
|
+
const eqIdx = trimmed.indexOf('=');
|
|
57
|
+
if (eqIdx < 1)
|
|
58
|
+
continue;
|
|
59
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
60
|
+
let value = trimmed.slice(eqIdx + 1).trim();
|
|
61
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
62
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
63
|
+
value = value.slice(1, -1);
|
|
64
|
+
}
|
|
65
|
+
if (!process.env[key]) {
|
|
66
|
+
process.env[key] = value;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// File doesn't exist — fine
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function ensureEnv() {
|
|
75
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
76
|
+
if (homeDir)
|
|
77
|
+
loadEnvFile(path.join(homeDir, '.greprag', '.env'));
|
|
78
|
+
if (!process.env.GREPRAG_API_KEY)
|
|
79
|
+
loadEnvFile(path.join(process.cwd(), '.env'));
|
|
80
|
+
}
|
|
81
|
+
function getConfig() {
|
|
82
|
+
ensureEnv();
|
|
83
|
+
return {
|
|
84
|
+
apiUrl: process.env.GREPRAG_API_URL || API_URL_DEFAULT,
|
|
85
|
+
apiKey: process.env.GREPRAG_API_KEY || '',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// -- HTTP client -----------------------------------------------------------
|
|
89
|
+
async function apiCall(url, apiKey, body) {
|
|
90
|
+
const res = await fetch(url, {
|
|
91
|
+
method: 'POST',
|
|
92
|
+
headers: {
|
|
93
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
94
|
+
'Content-Type': 'application/json',
|
|
95
|
+
},
|
|
96
|
+
body: JSON.stringify(body),
|
|
97
|
+
});
|
|
98
|
+
if (!res.ok) {
|
|
99
|
+
const text = await res.text();
|
|
100
|
+
throw new Error(`API ${res.status}: ${text}`);
|
|
101
|
+
}
|
|
102
|
+
return res.json();
|
|
103
|
+
}
|
|
104
|
+
async function apiGet(url, apiKey) {
|
|
105
|
+
const res = await fetch(url, {
|
|
106
|
+
headers: { 'Authorization': `Bearer ${apiKey}` },
|
|
107
|
+
});
|
|
108
|
+
if (!res.ok) {
|
|
109
|
+
const text = await res.text();
|
|
110
|
+
throw new Error(`API ${res.status}: ${text}`);
|
|
111
|
+
}
|
|
112
|
+
return res.json();
|
|
113
|
+
}
|
|
114
|
+
// -- Commands --------------------------------------------------------------
|
|
115
|
+
async function expand(args) {
|
|
116
|
+
const cfg = getConfig();
|
|
117
|
+
if (!cfg.apiKey) {
|
|
118
|
+
console.error('Not configured. Run: greprag init');
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
const chunkId = getFlag(args, '--chunk') || args[0];
|
|
122
|
+
if (!chunkId) {
|
|
123
|
+
console.error('Usage: greprag expand --chunk <id>');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const result = await apiGet(`${cfg.apiUrl}/v1/memory/expand/${chunkId}`, cfg.apiKey);
|
|
127
|
+
const chunk = result.chunk;
|
|
128
|
+
const siblings = result.siblings;
|
|
129
|
+
const adjacent = result.adjacent;
|
|
130
|
+
const linked = result.linked;
|
|
131
|
+
console.log(`Chunk ${chunk.id.slice(0, 8)} (${chunk.source}, ${chunk.wordCount}w, ${new Date(chunk.createdAt).toLocaleDateString()}):`);
|
|
132
|
+
console.log(` ${chunk.content}\n`);
|
|
133
|
+
if (siblings.length > 0) {
|
|
134
|
+
console.log(`Siblings (${siblings.length}):`);
|
|
135
|
+
for (const s of siblings)
|
|
136
|
+
console.log(` [${s.id.slice(0, 8)}] ${s.content.slice(0, 120)}...`);
|
|
137
|
+
console.log('');
|
|
138
|
+
}
|
|
139
|
+
if (adjacent.length > 0) {
|
|
140
|
+
console.log(`Adjacent turns (${adjacent.length}):`);
|
|
141
|
+
for (const a of adjacent)
|
|
142
|
+
console.log(` [turn ${a.turnIndex}] ${a.content.slice(0, 120)}...`);
|
|
143
|
+
console.log('');
|
|
144
|
+
}
|
|
145
|
+
if (linked.length > 0) {
|
|
146
|
+
console.log(`Linked chunks (${linked.length}):`);
|
|
147
|
+
for (const l of linked)
|
|
148
|
+
console.log(` [${l.id.slice(0, 8)}] ${l.content.slice(0, 120)}...`);
|
|
149
|
+
}
|
|
150
|
+
if (siblings.length === 0 && adjacent.length === 0 && linked.length === 0) {
|
|
151
|
+
console.log('No related chunks found.');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function inbox(args) {
|
|
155
|
+
const cfg = getConfig();
|
|
156
|
+
if (!cfg.apiKey) {
|
|
157
|
+
console.error('Not configured. Run: greprag init');
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const profileId = getFlag(args, '--profile') || path.basename(process.cwd());
|
|
161
|
+
const sessionId = getFlag(args, '--session');
|
|
162
|
+
const result = await apiCall(`${cfg.apiUrl}/v1/memory/messages/inbox`, cfg.apiKey, {
|
|
163
|
+
profileId,
|
|
164
|
+
...(sessionId && { sessionId }),
|
|
165
|
+
});
|
|
166
|
+
const messages = result.messages;
|
|
167
|
+
if (!messages || messages.length === 0) {
|
|
168
|
+
console.log('No pending messages.');
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
console.log(`${messages.length} pending message(s):\n`);
|
|
172
|
+
for (const msg of messages) {
|
|
173
|
+
const date = new Date(msg.createdAt).toLocaleDateString();
|
|
174
|
+
console.log(`[${msg.senderProfile}] ${date} (${msg.id.slice(0, 8)})`);
|
|
175
|
+
console.log(` ${msg.content}\n`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function send(args) {
|
|
179
|
+
const cfg = getConfig();
|
|
180
|
+
if (!cfg.apiKey) {
|
|
181
|
+
console.error('Not configured. Run: greprag init');
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
const toProfile = getFlag(args, '--to');
|
|
185
|
+
if (!toProfile) {
|
|
186
|
+
console.error('Missing --to <profile>');
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
// Message is the positional arg after "send"
|
|
190
|
+
const message = args.find((a, i) => i > 0 && !a.startsWith('--') && args[i - 1] !== '--to');
|
|
191
|
+
if (!message) {
|
|
192
|
+
console.error('Usage: greprag send "message" --to <profile>');
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
const fromProfile = getFlag(args, '--from') || path.basename(process.cwd());
|
|
196
|
+
const result = await apiCall(`${cfg.apiUrl}/v1/memory/messages/send`, cfg.apiKey, {
|
|
197
|
+
fromProfile,
|
|
198
|
+
toProfile,
|
|
199
|
+
content: message,
|
|
200
|
+
});
|
|
201
|
+
console.log(`Sent to ${toProfile} (${result.chunkId.slice(0, 8)})`);
|
|
202
|
+
}
|
|
203
|
+
async function dismiss(args) {
|
|
204
|
+
const cfg = getConfig();
|
|
205
|
+
if (!cfg.apiKey) {
|
|
206
|
+
console.error('Not configured. Run: greprag init');
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
const chunkId = getFlag(args, '--chunk');
|
|
210
|
+
if (!chunkId) {
|
|
211
|
+
console.error('Missing --chunk <id>');
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
await apiCall(`${cfg.apiUrl}/v1/memory/messages/dismiss/${chunkId}`, cfg.apiKey, {});
|
|
215
|
+
console.log(`Dismissed ${chunkId.slice(0, 8)}`);
|
|
216
|
+
}
|
|
217
|
+
async function profiles(_args) {
|
|
218
|
+
const cfg = getConfig();
|
|
219
|
+
if (!cfg.apiKey) {
|
|
220
|
+
console.error('Not configured. Run: greprag init');
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
const result = await apiCall(`${cfg.apiUrl}/v1/memory/profiles`, cfg.apiKey, {});
|
|
224
|
+
const profs = result.profiles;
|
|
225
|
+
if (!profs || profs.length === 0) {
|
|
226
|
+
console.log('No profiles found.');
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
console.log(`${profs.length} profile(s):\n`);
|
|
230
|
+
for (const p of profs) {
|
|
231
|
+
const lastSeen = new Date(p.lastSeen).toLocaleDateString();
|
|
232
|
+
console.log(` ${p.profileId} (${p.agentType}) — last seen ${lastSeen}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// -- Main ------------------------------------------------------------------
|
|
8
236
|
const HELP = `
|
|
9
237
|
greprag — agent memory for Claude Code
|
|
10
238
|
|
|
11
239
|
Commands:
|
|
12
|
-
init [--api-key <key>]
|
|
13
|
-
|
|
240
|
+
init [--api-key <key>] Configure hooks + API key
|
|
241
|
+
inbox [--profile <id>] View pending messages
|
|
242
|
+
send "msg" --to <profile> Send a message to another agent
|
|
243
|
+
dismiss --chunk <id> Dismiss a message (keeps as memory)
|
|
244
|
+
expand --chunk <id> Expand a memory cluster (siblings, adjacent, linked)
|
|
245
|
+
profiles List known agent profiles
|
|
246
|
+
help Show this message
|
|
14
247
|
|
|
15
248
|
Options:
|
|
16
|
-
--api-key <key>
|
|
17
|
-
--tenant-id <id>
|
|
249
|
+
--api-key <key> Use an existing API key (skip provisioning)
|
|
250
|
+
--tenant-id <id> Tenant ID for key provisioning
|
|
251
|
+
--profile <id> Profile ID (defaults to cwd basename)
|
|
252
|
+
--session <id> Session ID (for inbox snooze)
|
|
18
253
|
|
|
19
254
|
Examples:
|
|
20
255
|
greprag init
|
|
21
|
-
greprag
|
|
256
|
+
greprag inbox
|
|
257
|
+
greprag send "Deploy the auth flow" --to discord
|
|
258
|
+
greprag dismiss --chunk abc123
|
|
259
|
+
greprag expand --chunk a2603156
|
|
260
|
+
greprag profiles
|
|
22
261
|
`.trim();
|
|
23
262
|
async function main() {
|
|
24
263
|
const args = process.argv.slice(2);
|
|
@@ -27,15 +266,24 @@ async function main() {
|
|
|
27
266
|
console.log(HELP);
|
|
28
267
|
return;
|
|
29
268
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
269
|
+
const subArgs = args.slice(1);
|
|
270
|
+
switch (command) {
|
|
271
|
+
case 'init': {
|
|
272
|
+
const apiKey = getFlag(args, '--api-key');
|
|
273
|
+
const tenantId = getFlag(args, '--tenant-id');
|
|
274
|
+
await (0, init_1.runInit)({ apiKey, tenantId });
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
case 'inbox': return inbox(subArgs);
|
|
278
|
+
case 'send': return send(subArgs);
|
|
279
|
+
case 'dismiss': return dismiss(subArgs);
|
|
280
|
+
case 'expand': return expand(subArgs);
|
|
281
|
+
case 'profiles': return profiles(subArgs);
|
|
282
|
+
default:
|
|
283
|
+
console.error(`Unknown command: ${command}\n`);
|
|
284
|
+
console.log(HELP);
|
|
285
|
+
process.exit(1);
|
|
35
286
|
}
|
|
36
|
-
console.error(`Unknown command: ${command}\n`);
|
|
37
|
-
console.log(HELP);
|
|
38
|
-
process.exit(1);
|
|
39
287
|
}
|
|
40
288
|
function getFlag(args, flag) {
|
|
41
289
|
const idx = args.indexOf(flag);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|