code-session-memory 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -16
- package/dist/src/cli-sessions.d.ts +16 -0
- package/dist/src/cli-sessions.d.ts.map +1 -0
- package/dist/src/cli-sessions.js +482 -0
- package/dist/src/cli-sessions.js.map +1 -0
- package/dist/src/cli.d.ts +5 -3
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +70 -9
- package/dist/src/cli.js.map +1 -1
- package/dist/src/database.d.ts +31 -0
- package/dist/src/database.d.ts.map +1 -1
- package/dist/src/database.js +63 -0
- package/dist/src/database.js.map +1 -1
- package/dist/src/session-to-md.d.ts.map +1 -1
- package/dist/src/session-to-md.js +36 -0
- package/dist/src/session-to-md.js.map +1 -1
- package/dist/src/transcript-to-messages.d.ts.map +1 -1
- package/dist/src/transcript-to-messages.js +42 -8
- package/dist/src/transcript-to-messages.js.map +1 -1
- package/dist/src/types.d.ts +13 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* sessions sub-commands for code-session-memory CLI
|
|
5
|
+
*
|
|
6
|
+
* sessions [list] Browse sessions (interactive TUI)
|
|
7
|
+
* sessions list --filter Browse with filter step first
|
|
8
|
+
* sessions print [id] Print all chunks of a session to stdout
|
|
9
|
+
* sessions print --filter Pick session interactively with filter, then print
|
|
10
|
+
* sessions delete [id] Delete a session from the DB
|
|
11
|
+
* sessions delete --filter Pick session interactively with filter, then delete
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.cmdSessionsList = cmdSessionsList;
|
|
48
|
+
exports.cmdSessionsPrint = cmdSessionsPrint;
|
|
49
|
+
exports.cmdSessionsDelete = cmdSessionsDelete;
|
|
50
|
+
exports.cmdSessions = cmdSessions;
|
|
51
|
+
const clack = __importStar(require("@clack/prompts"));
|
|
52
|
+
const database_1 = require("./database");
|
|
53
|
+
const database_2 = require("./database");
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Formatting helpers
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
function bold(s) { return `\x1b[1m${s}\x1b[0m`; }
|
|
58
|
+
function green(s) { return `\x1b[32m${s}\x1b[0m`; }
|
|
59
|
+
function red(s) { return `\x1b[31m${s}\x1b[0m`; }
|
|
60
|
+
function dim(s) { return `\x1b[2m${s}\x1b[0m`; }
|
|
61
|
+
function cyan(s) { return `\x1b[36m${s}\x1b[0m`; }
|
|
62
|
+
function yellow(s) { return `\x1b[33m${s}\x1b[0m`; }
|
|
63
|
+
function fmtDate(unixMs) {
|
|
64
|
+
if (!unixMs)
|
|
65
|
+
return dim("unknown date");
|
|
66
|
+
return new Date(unixMs).toISOString().slice(0, 10);
|
|
67
|
+
}
|
|
68
|
+
function fmtSource(source) {
|
|
69
|
+
return source === "opencode" ? cyan("opencode") : yellow("claude-code");
|
|
70
|
+
}
|
|
71
|
+
function fmtTitle(title) {
|
|
72
|
+
return title || dim("(untitled)");
|
|
73
|
+
}
|
|
74
|
+
function fmtProject(project) {
|
|
75
|
+
if (!project)
|
|
76
|
+
return dim("—");
|
|
77
|
+
const parts = project.replace(/\\/g, "/").split("/").filter(Boolean);
|
|
78
|
+
return parts.length > 2 ? dim("…/" + parts.slice(-2).join("/")) : dim(project);
|
|
79
|
+
}
|
|
80
|
+
function hr(char = "─", width = 72) {
|
|
81
|
+
return char.repeat(width);
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// DB helpers (open/close around each command)
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
function withDb(fn) {
|
|
87
|
+
const dbPath = (0, database_1.resolveDbPath)();
|
|
88
|
+
const db = (0, database_1.openDatabase)({ dbPath });
|
|
89
|
+
try {
|
|
90
|
+
return fn(db);
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
db.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Label builder for the session picker
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
function sessionLabel(s) {
|
|
100
|
+
const date = fmtDate(s.updated_at);
|
|
101
|
+
const chunks = `${s.chunk_count} chunk${s.chunk_count !== 1 ? "s" : ""}`;
|
|
102
|
+
const title = fmtTitle(s.session_title).padEnd(40);
|
|
103
|
+
return `${title} ${date} ${chunks}`;
|
|
104
|
+
}
|
|
105
|
+
function sessionHint(s) {
|
|
106
|
+
return `${fmtSource(s.source)} ${fmtProject(s.project)}`;
|
|
107
|
+
}
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
// Filter step (shown when --filter flag is present)
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
async function runFilterStep() {
|
|
112
|
+
clack.intro(bold("Filter sessions"));
|
|
113
|
+
const sourceAnswer = await clack.select({
|
|
114
|
+
message: "Source",
|
|
115
|
+
options: [
|
|
116
|
+
{ value: "all", label: "All tools" },
|
|
117
|
+
{ value: "opencode", label: "OpenCode" },
|
|
118
|
+
{ value: "claude-code", label: "Claude Code" },
|
|
119
|
+
],
|
|
120
|
+
initialValue: "all",
|
|
121
|
+
});
|
|
122
|
+
if (clack.isCancel(sourceAnswer)) {
|
|
123
|
+
clack.cancel("Cancelled.");
|
|
124
|
+
process.exit(0);
|
|
125
|
+
}
|
|
126
|
+
const dateAnswer = await clack.select({
|
|
127
|
+
message: "Date range",
|
|
128
|
+
options: [
|
|
129
|
+
{ value: "all", label: "All time" },
|
|
130
|
+
{ value: "7d", label: "Last 7 days" },
|
|
131
|
+
{ value: "30d", label: "Last 30 days" },
|
|
132
|
+
{ value: "90d", label: "Last 90 days" },
|
|
133
|
+
{ value: "recent", label: "Last N days", hint: "enter a number" },
|
|
134
|
+
{ value: "older", label: "Older than N days", hint: "enter a number" },
|
|
135
|
+
],
|
|
136
|
+
initialValue: "all",
|
|
137
|
+
});
|
|
138
|
+
if (clack.isCancel(dateAnswer)) {
|
|
139
|
+
clack.cancel("Cancelled.");
|
|
140
|
+
process.exit(0);
|
|
141
|
+
}
|
|
142
|
+
const filter = {};
|
|
143
|
+
if (sourceAnswer !== "all") {
|
|
144
|
+
filter.source = sourceAnswer;
|
|
145
|
+
}
|
|
146
|
+
const nowMs = Date.now();
|
|
147
|
+
const DAY_MS = 86400 * 1000;
|
|
148
|
+
if (dateAnswer === "7d") {
|
|
149
|
+
filter.fromDate = nowMs - 7 * DAY_MS;
|
|
150
|
+
}
|
|
151
|
+
else if (dateAnswer === "30d") {
|
|
152
|
+
filter.fromDate = nowMs - 30 * DAY_MS;
|
|
153
|
+
}
|
|
154
|
+
else if (dateAnswer === "90d") {
|
|
155
|
+
filter.fromDate = nowMs - 90 * DAY_MS;
|
|
156
|
+
}
|
|
157
|
+
else if (dateAnswer === "recent") {
|
|
158
|
+
const nAnswer = await clack.text({
|
|
159
|
+
message: "Show sessions from the last how many days?",
|
|
160
|
+
placeholder: "14",
|
|
161
|
+
validate(v) {
|
|
162
|
+
if (!v || isNaN(Number(v)) || Number(v) <= 0)
|
|
163
|
+
return "Please enter a positive number.";
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
if (clack.isCancel(nAnswer)) {
|
|
167
|
+
clack.cancel("Cancelled.");
|
|
168
|
+
process.exit(0);
|
|
169
|
+
}
|
|
170
|
+
filter.fromDate = nowMs - Number(nAnswer) * DAY_MS;
|
|
171
|
+
}
|
|
172
|
+
else if (dateAnswer === "older") {
|
|
173
|
+
const nAnswer = await clack.text({
|
|
174
|
+
message: "Show sessions older than how many days?",
|
|
175
|
+
placeholder: "30",
|
|
176
|
+
validate(v) {
|
|
177
|
+
if (!v || isNaN(Number(v)) || Number(v) <= 0)
|
|
178
|
+
return "Please enter a positive number.";
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
if (clack.isCancel(nAnswer)) {
|
|
182
|
+
clack.cancel("Cancelled.");
|
|
183
|
+
process.exit(0);
|
|
184
|
+
}
|
|
185
|
+
filter.toDate = nowMs - Number(nAnswer) * DAY_MS;
|
|
186
|
+
}
|
|
187
|
+
return filter;
|
|
188
|
+
}
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// Shared session picker
|
|
191
|
+
// Returns the chosen SessionRow, or null if the user cancelled / exited.
|
|
192
|
+
// When withFilter is true, runs the filter step first.
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
async function pickSession(withFilter) {
|
|
195
|
+
let filter = {};
|
|
196
|
+
if (withFilter) {
|
|
197
|
+
filter = await runFilterStep();
|
|
198
|
+
console.log();
|
|
199
|
+
}
|
|
200
|
+
const sessions = withDb((db) => (0, database_2.listSessions)(db, filter));
|
|
201
|
+
if (sessions.length === 0) {
|
|
202
|
+
clack.log.warn("No sessions match the current filter.");
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
const chosen = await clack.select({
|
|
206
|
+
message: `${sessions.length} session${sessions.length !== 1 ? "s" : ""}${withFilter ? dim(" (filtered)") : ""} — pick one`,
|
|
207
|
+
options: [
|
|
208
|
+
...sessions.map((s) => ({
|
|
209
|
+
value: s.session_id,
|
|
210
|
+
label: sessionLabel(s),
|
|
211
|
+
hint: sessionHint(s),
|
|
212
|
+
})),
|
|
213
|
+
{ value: "__cancel__", label: dim("Cancel") },
|
|
214
|
+
],
|
|
215
|
+
maxItems: 12,
|
|
216
|
+
});
|
|
217
|
+
if (clack.isCancel(chosen) || chosen === "__cancel__")
|
|
218
|
+
return null;
|
|
219
|
+
return sessions.find((s) => s.session_id === chosen) ?? null;
|
|
220
|
+
}
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// Action loop for a selected session (used by sessions list)
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
async function sessionActionLoop(session) {
|
|
225
|
+
while (true) {
|
|
226
|
+
clack.log.message([
|
|
227
|
+
`${bold(fmtTitle(session.session_title))}`,
|
|
228
|
+
`${fmtSource(session.source)} ${fmtDate(session.updated_at)} ${session.chunk_count} chunks`,
|
|
229
|
+
`Project: ${session.project || dim("—")}`,
|
|
230
|
+
`ID: ${dim(session.session_id)}`,
|
|
231
|
+
].join("\n"), { symbol: "○" });
|
|
232
|
+
const action = await clack.select({
|
|
233
|
+
message: "What would you like to do?",
|
|
234
|
+
options: [
|
|
235
|
+
{ value: "print", label: "Print session", hint: "output all chunks to stdout" },
|
|
236
|
+
{ value: "delete", label: "Delete session", hint: "remove from DB" },
|
|
237
|
+
{ value: "back", label: "Back to list" },
|
|
238
|
+
],
|
|
239
|
+
});
|
|
240
|
+
if (clack.isCancel(action) || action === "back")
|
|
241
|
+
return "back";
|
|
242
|
+
if (action === "print") {
|
|
243
|
+
clack.outro(dim("Printing session…"));
|
|
244
|
+
printSession(session.session_id);
|
|
245
|
+
return "exit";
|
|
246
|
+
}
|
|
247
|
+
if (action === "delete") {
|
|
248
|
+
const confirmed = await clack.confirm({
|
|
249
|
+
message: `Delete "${fmtTitle(session.session_title)}" (${session.chunk_count} chunks)?`,
|
|
250
|
+
initialValue: false,
|
|
251
|
+
});
|
|
252
|
+
if (clack.isCancel(confirmed) || !confirmed) {
|
|
253
|
+
clack.log.info("Deletion cancelled.");
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
const deleted = withDb((db) => (0, database_2.deleteSession)(db, session.session_id));
|
|
257
|
+
clack.log.success(`Deleted ${deleted} chunks.`);
|
|
258
|
+
clack.log.warn("Note: if this session's source files still exist, it will be re-indexed on the next agent turn.");
|
|
259
|
+
return "back";
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// ---------------------------------------------------------------------------
|
|
264
|
+
// sessions list
|
|
265
|
+
// ---------------------------------------------------------------------------
|
|
266
|
+
async function cmdSessionsList(args) {
|
|
267
|
+
const withFilter = args.includes("--filter");
|
|
268
|
+
if (!withFilter) {
|
|
269
|
+
clack.intro(bold("Sessions"));
|
|
270
|
+
}
|
|
271
|
+
// Main browse loop — re-shown after back/delete so the user can keep browsing
|
|
272
|
+
let filter = {};
|
|
273
|
+
let filterResolved = false;
|
|
274
|
+
while (true) {
|
|
275
|
+
// Run filter step once (first iteration only, if --filter was passed)
|
|
276
|
+
if (withFilter && !filterResolved) {
|
|
277
|
+
filter = await runFilterStep();
|
|
278
|
+
filterResolved = true;
|
|
279
|
+
console.log();
|
|
280
|
+
}
|
|
281
|
+
const sessions = withDb((db) => (0, database_2.listSessions)(db, filter));
|
|
282
|
+
if (sessions.length === 0) {
|
|
283
|
+
clack.log.warn("No sessions match the current filter.");
|
|
284
|
+
clack.outro("Done.");
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const chosen = await clack.select({
|
|
288
|
+
message: `${sessions.length} session${sessions.length !== 1 ? "s" : ""} ${withFilter ? dim("(filtered)") : ""}`,
|
|
289
|
+
options: [
|
|
290
|
+
...sessions.map((s) => ({
|
|
291
|
+
value: s.session_id,
|
|
292
|
+
label: sessionLabel(s),
|
|
293
|
+
hint: sessionHint(s),
|
|
294
|
+
})),
|
|
295
|
+
{ value: "__exit__", label: dim("Exit") },
|
|
296
|
+
],
|
|
297
|
+
maxItems: 12,
|
|
298
|
+
});
|
|
299
|
+
if (clack.isCancel(chosen) || chosen === "__exit__") {
|
|
300
|
+
clack.outro("Done.");
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const session = sessions.find((s) => s.session_id === chosen);
|
|
304
|
+
const result = await sessionActionLoop(session);
|
|
305
|
+
if (result === "exit")
|
|
306
|
+
return;
|
|
307
|
+
// result === "back" → loop again, refresh session list
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
// sessions print [id]
|
|
312
|
+
// ---------------------------------------------------------------------------
|
|
313
|
+
async function cmdSessionsPrint(sessionId, args = []) {
|
|
314
|
+
const withFilter = args.includes("--filter");
|
|
315
|
+
if (!sessionId) {
|
|
316
|
+
// No ID given — launch interactive picker
|
|
317
|
+
clack.intro(bold("Print session"));
|
|
318
|
+
const session = await pickSession(withFilter);
|
|
319
|
+
if (!session) {
|
|
320
|
+
clack.outro("Cancelled.");
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
clack.outro(dim("Printing session…"));
|
|
324
|
+
printSession(session.session_id);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
printSession(sessionId);
|
|
328
|
+
}
|
|
329
|
+
function printSession(sessionId) {
|
|
330
|
+
const { session, chunks } = withDb((db) => {
|
|
331
|
+
const rows = (0, database_2.listSessions)(db, {});
|
|
332
|
+
const session = rows.find((s) => s.session_id === sessionId);
|
|
333
|
+
const chunks = (0, database_2.getSessionChunksOrdered)(db, sessionId);
|
|
334
|
+
return { session, chunks };
|
|
335
|
+
});
|
|
336
|
+
if (!session && chunks.length === 0) {
|
|
337
|
+
console.error(`No session found with ID: ${sessionId}`);
|
|
338
|
+
process.exit(1);
|
|
339
|
+
}
|
|
340
|
+
const useTty = process.stdout.isTTY;
|
|
341
|
+
const b = (s) => useTty ? bold(s) : s;
|
|
342
|
+
const d = (s) => useTty ? dim(s) : s;
|
|
343
|
+
const c = (s) => useTty ? cyan(s) : s;
|
|
344
|
+
const y = (s) => useTty ? yellow(s) : s;
|
|
345
|
+
const title = session?.session_title || "(untitled)";
|
|
346
|
+
const source = session?.source || "unknown";
|
|
347
|
+
const date = session ? fmtDate(session.updated_at) : "unknown";
|
|
348
|
+
const project = session?.project || "—";
|
|
349
|
+
console.log(hr());
|
|
350
|
+
console.log(`${b("Session:")} ${title}`);
|
|
351
|
+
console.log(`${b("Source:")} ${source === "opencode" ? c(source) : y(source)} ${d(date)}`);
|
|
352
|
+
console.log(`${b("Project:")} ${project}`);
|
|
353
|
+
console.log(`${b("ID:")} ${d(sessionId)}`);
|
|
354
|
+
console.log(`${b("Chunks:")} ${chunks.length}`);
|
|
355
|
+
console.log(hr());
|
|
356
|
+
const total = chunks.length;
|
|
357
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
358
|
+
const chunk = chunks[i];
|
|
359
|
+
console.log();
|
|
360
|
+
console.log(b(`## Chunk ${i + 1}/${total}`) + ` ${d("—")} Section: ${chunk.section || d("(none)")}`);
|
|
361
|
+
console.log();
|
|
362
|
+
console.log(chunk.content);
|
|
363
|
+
}
|
|
364
|
+
console.log();
|
|
365
|
+
console.log(hr());
|
|
366
|
+
}
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
// sessions delete [id]
|
|
369
|
+
// ---------------------------------------------------------------------------
|
|
370
|
+
async function cmdSessionsDelete(sessionId, args = []) {
|
|
371
|
+
const withFilter = args.includes("--filter");
|
|
372
|
+
clack.intro(bold("Delete session"));
|
|
373
|
+
let session = null;
|
|
374
|
+
if (!sessionId) {
|
|
375
|
+
// No ID given — launch interactive picker
|
|
376
|
+
session = await pickSession(withFilter);
|
|
377
|
+
if (!session) {
|
|
378
|
+
clack.outro("Cancelled.");
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
session = withDb((db) => {
|
|
384
|
+
const rows = (0, database_2.listSessions)(db, {});
|
|
385
|
+
return rows.find((s) => s.session_id === sessionId) ?? null;
|
|
386
|
+
});
|
|
387
|
+
if (!session) {
|
|
388
|
+
console.error(`No session found with ID: ${sessionId}`);
|
|
389
|
+
process.exit(1);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
clack.log.message([
|
|
393
|
+
`${bold(fmtTitle(session.session_title))}`,
|
|
394
|
+
`${fmtSource(session.source)} ${fmtDate(session.updated_at)} ${session.chunk_count} chunks`,
|
|
395
|
+
`Project: ${session.project || dim("—")}`,
|
|
396
|
+
`ID: ${dim(session.session_id)}`,
|
|
397
|
+
].join("\n"), { symbol: "○" });
|
|
398
|
+
const confirmed = await clack.confirm({
|
|
399
|
+
message: `Delete this session (${session.chunk_count} chunks)?`,
|
|
400
|
+
initialValue: false,
|
|
401
|
+
});
|
|
402
|
+
if (clack.isCancel(confirmed) || !confirmed) {
|
|
403
|
+
clack.cancel("Deletion cancelled — database was not modified.");
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
const deleted = withDb((db) => (0, database_2.deleteSession)(db, session.session_id));
|
|
407
|
+
clack.log.success(`Deleted ${deleted} chunks.`);
|
|
408
|
+
clack.log.warn("Note: if this session's source files still exist, it will be re-indexed on the next agent turn.");
|
|
409
|
+
clack.outro("Done.");
|
|
410
|
+
}
|
|
411
|
+
// ---------------------------------------------------------------------------
|
|
412
|
+
// Help
|
|
413
|
+
// ---------------------------------------------------------------------------
|
|
414
|
+
function sessionsHelp() {
|
|
415
|
+
const b = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
416
|
+
console.log(`
|
|
417
|
+
${b("sessions")} — Browse, inspect, and delete indexed sessions
|
|
418
|
+
|
|
419
|
+
${b("Usage:")}
|
|
420
|
+
npx code-session-memory sessions Browse sessions interactively
|
|
421
|
+
npx code-session-memory sessions --filter Apply source/date filters before browsing
|
|
422
|
+
npx code-session-memory sessions list Same as above (explicit sub-command)
|
|
423
|
+
npx code-session-memory sessions list --filter Same with filter step
|
|
424
|
+
|
|
425
|
+
npx code-session-memory sessions print Pick a session interactively, then print
|
|
426
|
+
npx code-session-memory sessions print --filter Pick with filter, then print
|
|
427
|
+
npx code-session-memory sessions print <id> Print all chunks of a session directly
|
|
428
|
+
|
|
429
|
+
npx code-session-memory sessions delete Pick a session interactively, then delete
|
|
430
|
+
npx code-session-memory sessions delete --filter Pick with filter, then delete
|
|
431
|
+
npx code-session-memory sessions delete <id> Delete a session directly
|
|
432
|
+
|
|
433
|
+
${b("Filter options")} (with --filter):
|
|
434
|
+
Source: All tools / OpenCode / Claude Code
|
|
435
|
+
Date range: Last 7 / 30 / 90 days, last N days (custom), older than N days (custom)
|
|
436
|
+
|
|
437
|
+
${b("Notes:")}
|
|
438
|
+
- Deleting a session only removes it from the DB. If the source files still
|
|
439
|
+
exist, the session will be re-indexed on the next agent turn.
|
|
440
|
+
- "sessions print" output is pipe-friendly (no ANSI when stdout is not a TTY).
|
|
441
|
+
`);
|
|
442
|
+
}
|
|
443
|
+
// ---------------------------------------------------------------------------
|
|
444
|
+
// Entry point: dispatch sessions sub-commands
|
|
445
|
+
// ---------------------------------------------------------------------------
|
|
446
|
+
async function cmdSessions(argv) {
|
|
447
|
+
const sub = argv[0] ?? "list";
|
|
448
|
+
// Help flag anywhere in argv
|
|
449
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
450
|
+
sessionsHelp();
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
switch (sub) {
|
|
454
|
+
case "list":
|
|
455
|
+
await cmdSessionsList(argv.slice(1));
|
|
456
|
+
break;
|
|
457
|
+
case "print": {
|
|
458
|
+
// argv[1] is either an ID or a flag (--filter) or absent
|
|
459
|
+
const maybeId = argv[1] && !argv[1].startsWith("-") ? argv[1] : undefined;
|
|
460
|
+
const restArgs = maybeId ? argv.slice(2) : argv.slice(1);
|
|
461
|
+
await cmdSessionsPrint(maybeId, restArgs);
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
case "delete": {
|
|
465
|
+
const maybeId = argv[1] && !argv[1].startsWith("-") ? argv[1] : undefined;
|
|
466
|
+
const restArgs = maybeId ? argv.slice(2) : argv.slice(1);
|
|
467
|
+
await cmdSessionsDelete(maybeId, restArgs);
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
default:
|
|
471
|
+
// Treat unknown first arg as implicit "list" (e.g. `sessions --filter`)
|
|
472
|
+
if (sub.startsWith("-")) {
|
|
473
|
+
await cmdSessionsList(argv);
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
console.error(`Unknown sessions sub-command: ${sub}`);
|
|
477
|
+
console.error('Run "npx code-session-memory sessions --help" for usage.');
|
|
478
|
+
process.exit(1);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=cli-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-sessions.js","sourceRoot":"","sources":["../../src/cli-sessions.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* code-session-memory CLI
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
6
|
-
* npx code-session-memory install
|
|
7
|
-
* npx code-session-memory status
|
|
8
|
-
* npx code-session-memory uninstall
|
|
6
|
+
* npx code-session-memory install — install for OpenCode + Claude Code
|
|
7
|
+
* npx code-session-memory status — show installation status
|
|
8
|
+
* npx code-session-memory uninstall — remove all installed components
|
|
9
|
+
* npx code-session-memory reset-db — wipe the database (with confirmation)
|
|
10
|
+
* npx code-session-memory sessions — browse / print / delete sessions
|
|
9
11
|
*/
|
|
10
12
|
export {};
|
|
11
13
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/src/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
|
package/dist/src/cli.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
* code-session-memory CLI
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* npx code-session-memory install
|
|
8
|
-
* npx code-session-memory status
|
|
9
|
-
* npx code-session-memory uninstall
|
|
7
|
+
* npx code-session-memory install — install for OpenCode + Claude Code
|
|
8
|
+
* npx code-session-memory status — show installation status
|
|
9
|
+
* npx code-session-memory uninstall — remove all installed components
|
|
10
|
+
* npx code-session-memory reset-db — wipe the database (with confirmation)
|
|
11
|
+
* npx code-session-memory sessions — browse / print / delete sessions
|
|
10
12
|
*/
|
|
11
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -16,6 +18,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
16
18
|
const path_1 = __importDefault(require("path"));
|
|
17
19
|
const os_1 = __importDefault(require("os"));
|
|
18
20
|
const database_1 = require("./database");
|
|
21
|
+
const cli_sessions_1 = require("./cli-sessions");
|
|
19
22
|
// ---------------------------------------------------------------------------
|
|
20
23
|
// Paths — OpenCode
|
|
21
24
|
// ---------------------------------------------------------------------------
|
|
@@ -186,13 +189,13 @@ function installClaudeHook(indexerCliClaudePath) {
|
|
|
186
189
|
else {
|
|
187
190
|
hooks.Stop = [];
|
|
188
191
|
}
|
|
189
|
-
// Add our hook
|
|
192
|
+
// Add our hook (synchronous — must NOT be async so the JSONL is fully
|
|
193
|
+
// written by Claude Code before we read it)
|
|
190
194
|
hooks.Stop.push({
|
|
191
195
|
hooks: [
|
|
192
196
|
{
|
|
193
197
|
type: "command",
|
|
194
198
|
command: `node ${indexerCliClaudePath}`,
|
|
195
|
-
async: true,
|
|
196
199
|
},
|
|
197
200
|
],
|
|
198
201
|
});
|
|
@@ -552,15 +555,64 @@ function uninstall() {
|
|
|
552
555
|
${dim(`To delete it: rm "${(0, database_1.resolveDbPath)()}"`)}
|
|
553
556
|
`);
|
|
554
557
|
}
|
|
558
|
+
function resetDb() {
|
|
559
|
+
console.log(bold("\ncode-session-memory reset-db\n"));
|
|
560
|
+
const dbPath = (0, database_1.resolveDbPath)();
|
|
561
|
+
if (!fs_1.default.existsSync(dbPath)) {
|
|
562
|
+
console.log(` ${dim("Database not found:")} ${dbPath}`);
|
|
563
|
+
console.log(` Nothing to reset.\n`);
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
// Show current stats before asking
|
|
567
|
+
try {
|
|
568
|
+
const db = (0, database_1.openDatabase)({ dbPath });
|
|
569
|
+
const chunks = db.prepare("SELECT COUNT(*) as n FROM vec_items").get().n;
|
|
570
|
+
const sessions = db.prepare("SELECT COUNT(*) as n FROM sessions_meta").get().n;
|
|
571
|
+
db.close();
|
|
572
|
+
console.log(` Database: ${dim(dbPath)}`);
|
|
573
|
+
console.log(` Indexed chunks: ${chunks}`);
|
|
574
|
+
console.log(` Sessions tracked: ${sessions}\n`);
|
|
575
|
+
}
|
|
576
|
+
catch {
|
|
577
|
+
console.log(` Database: ${dim(dbPath)}\n`);
|
|
578
|
+
}
|
|
579
|
+
// Prompt for confirmation
|
|
580
|
+
process.stdout.write(` ${red("This will permanently delete all indexed data.")} Confirm? [y/N] `);
|
|
581
|
+
const response = (() => {
|
|
582
|
+
try {
|
|
583
|
+
// Read a single line synchronously from stdin
|
|
584
|
+
const buf = Buffer.alloc(64);
|
|
585
|
+
const n = fs_1.default.readSync(0, buf, 0, buf.length, null);
|
|
586
|
+
return buf.slice(0, n).toString("utf8").trim().toLowerCase();
|
|
587
|
+
}
|
|
588
|
+
catch {
|
|
589
|
+
return "";
|
|
590
|
+
}
|
|
591
|
+
})();
|
|
592
|
+
if (response !== "y" && response !== "yes") {
|
|
593
|
+
console.log(`\n ${dim("Aborted — database was not modified.")}\n`);
|
|
594
|
+
return;
|
|
595
|
+
}
|
|
596
|
+
fs_1.default.unlinkSync(dbPath);
|
|
597
|
+
// Re-initialise an empty DB
|
|
598
|
+
const db = (0, database_1.openDatabase)({ dbPath });
|
|
599
|
+
db.close();
|
|
600
|
+
console.log(`\n ${green("Done.")} Database reset — all indexed data removed.\n`);
|
|
601
|
+
}
|
|
555
602
|
function help() {
|
|
556
603
|
console.log(`
|
|
557
604
|
${bold("code-session-memory")} — Shared vector memory for OpenCode and Claude Code sessions
|
|
558
605
|
|
|
559
606
|
${bold("Usage:")}
|
|
560
|
-
npx code-session-memory install
|
|
561
|
-
npx code-session-memory status
|
|
562
|
-
npx code-session-memory uninstall
|
|
563
|
-
npx code-session-memory
|
|
607
|
+
npx code-session-memory install Install all components (OpenCode + Claude Code)
|
|
608
|
+
npx code-session-memory status Show installation status and DB stats
|
|
609
|
+
npx code-session-memory uninstall Remove all installed components (keeps DB)
|
|
610
|
+
npx code-session-memory reset-db Delete all indexed data (keeps installation)
|
|
611
|
+
npx code-session-memory sessions Browse sessions interactively
|
|
612
|
+
npx code-session-memory sessions --filter Browse with source/date filter step
|
|
613
|
+
npx code-session-memory sessions print <id> Print all chunks of a session to stdout
|
|
614
|
+
npx code-session-memory sessions delete <id> Delete a session from the DB
|
|
615
|
+
npx code-session-memory help Show this help
|
|
564
616
|
|
|
565
617
|
${bold("Environment variables:")}
|
|
566
618
|
OPENAI_API_KEY Required for embedding generation
|
|
@@ -583,6 +635,15 @@ switch (cmd) {
|
|
|
583
635
|
case "uninstall":
|
|
584
636
|
uninstall();
|
|
585
637
|
break;
|
|
638
|
+
case "reset-db":
|
|
639
|
+
resetDb();
|
|
640
|
+
break;
|
|
641
|
+
case "sessions":
|
|
642
|
+
(0, cli_sessions_1.cmdSessions)(process.argv.slice(3)).catch((err) => {
|
|
643
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
644
|
+
process.exit(1);
|
|
645
|
+
});
|
|
646
|
+
break;
|
|
586
647
|
case "help":
|
|
587
648
|
case "--help":
|
|
588
649
|
case "-h":
|