@patravishek/memex 0.2.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.
package/dist/cli.js ADDED
@@ -0,0 +1,475 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const ora_1 = __importDefault(require("ora"));
43
+ const path = __importStar(require("path"));
44
+ const fs = __importStar(require("fs"));
45
+ const session_logger_js_1 = require("./core/session-logger.js");
46
+ const pty_wrapper_js_1 = require("./core/pty-wrapper.js");
47
+ const compressor_js_1 = require("./memory/compressor.js");
48
+ const store_js_1 = require("./memory/store.js");
49
+ const db_js_1 = require("./storage/db.js");
50
+ const queries_js_1 = require("./storage/queries.js");
51
+ const program = new commander_1.Command();
52
+ program
53
+ .name("memex")
54
+ .description("Persistent memory for any AI terminal agent")
55
+ .version("0.2.0")
56
+ .addHelpText("afterAll", "\n npm: @patravishek/memex | https://github.com/patravishek/memex")
57
+ .hook("preAction", (thisCommand) => {
58
+ const aiCommands = ["start", "resume", "compress"];
59
+ if (!aiCommands.includes(thisCommand.args[0]))
60
+ return;
61
+ const hasKey = process.env.ANTHROPIC_API_KEY ||
62
+ process.env.OPENAI_API_KEY ||
63
+ process.env.LITELLM_API_KEY;
64
+ if (!hasKey) {
65
+ console.error(chalk_1.default.red("\n No AI provider configured.\n"));
66
+ console.error(chalk_1.default.dim(" Add one of the following to your ~/.zshrc (or ~/.bashrc):\n"));
67
+ console.error(chalk_1.default.dim(" export ANTHROPIC_API_KEY=sk-ant-..."));
68
+ console.error(chalk_1.default.dim(" export OPENAI_API_KEY=sk-..."));
69
+ console.error(chalk_1.default.dim(" export LITELLM_API_KEY=... LITELLM_BASE_URL=https://your-proxy.com\n"));
70
+ console.error(chalk_1.default.dim(" Then reload your shell: source ~/.zshrc\n"));
71
+ process.exit(1);
72
+ }
73
+ });
74
+ // ─── memex start [command] ────────────────────────────────────────────────────
75
+ program
76
+ .command("start")
77
+ .description("Start an agent session with memory tracking")
78
+ .argument("[command]", "Agent command to run", "claude")
79
+ .option("-p, --project <path>", "Project directory", process.cwd())
80
+ .option("--args <args>", "Extra args to pass to the agent command", "")
81
+ .action(async (command, options) => {
82
+ const projectPath = path.resolve(options.project);
83
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
84
+ console.log(chalk_1.default.bold.magenta("\n memex — session started\n"));
85
+ console.log(chalk_1.default.dim(` Project: ${projectPath}`));
86
+ console.log(chalk_1.default.dim(` Agent: ${command}\n`));
87
+ if ((0, store_js_1.memoryExists)(projectPath)) {
88
+ const memory = (0, store_js_1.loadMemory)(projectPath);
89
+ console.log(chalk_1.default.dim(` Memory loaded — last updated ${new Date(memory.lastUpdated).toLocaleString()}`));
90
+ console.log(chalk_1.default.dim(` Focus: ${memory.currentFocus || "not set"}\n`));
91
+ }
92
+ else {
93
+ (0, store_js_1.initMemory)(projectPath);
94
+ console.log(chalk_1.default.dim(" No memory found — initialized fresh.\n"));
95
+ }
96
+ const db = (0, db_js_1.getDb)(memexDir);
97
+ const sessionId = (0, queries_js_1.createSession)(db, projectPath, command);
98
+ const logger = new session_logger_js_1.SessionLogger(memexDir);
99
+ const args = options.args ? options.args.split(" ").filter(Boolean) : [];
100
+ try {
101
+ const result = await (0, pty_wrapper_js_1.wrapProcess)(logger, {
102
+ command,
103
+ args,
104
+ cwd: projectPath,
105
+ });
106
+ await runCompression(result.transcript, projectPath, result.logPath, logger.getConversationTurns(), sessionId);
107
+ }
108
+ catch (err) {
109
+ const errMsg = err.message;
110
+ const transcript = logger.getTranscript();
111
+ if (transcript && logger.getEntryCount() > 3) {
112
+ await runCompression(transcript, projectPath, logger.getLogPath(), logger.getConversationTurns(), sessionId);
113
+ }
114
+ else {
115
+ console.error(chalk_1.default.red(`\n Session ended: ${errMsg}`));
116
+ }
117
+ }
118
+ });
119
+ // ─── memex resume [command] ───────────────────────────────────────────────────
120
+ program
121
+ .command("resume")
122
+ .description("Resume an agent session with full context restored")
123
+ .argument("[command]", "Agent command to run", "claude")
124
+ .option("-p, --project <path>", "Project directory", process.cwd())
125
+ .option("--args <args>", "Extra args to pass to the agent command", "")
126
+ .action(async (command, options) => {
127
+ const projectPath = path.resolve(options.project);
128
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
129
+ const memory = (0, store_js_1.loadMemory)(projectPath);
130
+ console.log(chalk_1.default.bold.magenta("\n memex — resuming session\n"));
131
+ if (!memory) {
132
+ console.log(chalk_1.default.yellow(" No memory found for this project. Starting fresh session instead.\n"));
133
+ (0, store_js_1.initMemory)(projectPath);
134
+ }
135
+ else {
136
+ console.log(chalk_1.default.bold(" Restoring context:\n"));
137
+ console.log(chalk_1.default.dim((0, store_js_1.formatMemoryForPrompt)(memory)
138
+ .split("\n")
139
+ .map((l) => ` ${l}`)
140
+ .join("\n")));
141
+ console.log();
142
+ }
143
+ const claudeMdPath = path.join(projectPath, "CLAUDE.md");
144
+ const resumeFilePath = path.join(memexDir, "RESUME.md");
145
+ let injectedViaClauldeMd = false;
146
+ let originalClaudeMd = null;
147
+ if (memory) {
148
+ (0, compressor_js_1.writeResumeFile)(memory, resumeFilePath);
149
+ if (command === "claude") {
150
+ originalClaudeMd = fs.existsSync(claudeMdPath)
151
+ ? fs.readFileSync(claudeMdPath, "utf-8")
152
+ : null;
153
+ const memexSection = [
154
+ "<!-- MEMEX_CONTEXT_START -->",
155
+ fs.readFileSync(resumeFilePath, "utf-8"),
156
+ "<!-- MEMEX_CONTEXT_END -->",
157
+ "",
158
+ ].join("\n");
159
+ const existing = originalClaudeMd ? `\n\n${originalClaudeMd}` : "";
160
+ fs.writeFileSync(claudeMdPath, memexSection + existing, "utf-8");
161
+ injectedViaClauldeMd = true;
162
+ console.log(chalk_1.default.dim(` Context injected → ${claudeMdPath}`));
163
+ console.log(chalk_1.default.dim(" Claude reads this on startup — it will acknowledge the context when it starts\n"));
164
+ }
165
+ else {
166
+ console.log(chalk_1.default.dim(` Context written to: ${resumeFilePath}\n`));
167
+ }
168
+ }
169
+ const db = (0, db_js_1.getDb)(memexDir);
170
+ const sessionId = (0, queries_js_1.createSession)(db, projectPath, command);
171
+ const logger = new session_logger_js_1.SessionLogger(memexDir);
172
+ const args = options.args ? options.args.split(" ").filter(Boolean) : [];
173
+ try {
174
+ const result = await (0, pty_wrapper_js_1.wrapProcess)(logger, {
175
+ command,
176
+ args,
177
+ cwd: projectPath,
178
+ injectOnReady: !injectedViaClauldeMd && memory
179
+ ? `Please read the file ${resumeFilePath} to restore context from our previous sessions, then ask how to continue.`
180
+ : undefined,
181
+ injectDelayMs: 3000,
182
+ });
183
+ await runCompression(result.transcript, projectPath, result.logPath, logger.getConversationTurns(), sessionId);
184
+ }
185
+ catch (err) {
186
+ const transcript = logger.getTranscript();
187
+ if (transcript && logger.getEntryCount() > 3) {
188
+ await runCompression(transcript, projectPath, logger.getLogPath(), logger.getConversationTurns(), sessionId);
189
+ }
190
+ }
191
+ finally {
192
+ if (injectedViaClauldeMd) {
193
+ if (originalClaudeMd === null) {
194
+ fs.rmSync(claudeMdPath, { force: true });
195
+ }
196
+ else {
197
+ fs.writeFileSync(claudeMdPath, originalClaudeMd, "utf-8");
198
+ }
199
+ }
200
+ if (fs.existsSync(resumeFilePath))
201
+ fs.unlinkSync(resumeFilePath);
202
+ }
203
+ });
204
+ // ─── memex status ─────────────────────────────────────────────────────────────
205
+ program
206
+ .command("status")
207
+ .description("Show current memory for this project")
208
+ .option("-p, --project <path>", "Project directory", process.cwd())
209
+ .action((options) => {
210
+ const projectPath = path.resolve(options.project);
211
+ const memory = (0, store_js_1.loadMemory)(projectPath);
212
+ if (!memory) {
213
+ console.log(chalk_1.default.yellow("\n No memory found. Run `memex start` to begin tracking.\n"));
214
+ return;
215
+ }
216
+ console.log(chalk_1.default.bold.magenta("\n memex — project memory\n"));
217
+ console.log((0, store_js_1.formatMemoryForPrompt)(memory)
218
+ .split("\n")
219
+ .map((l) => ` ${l}`)
220
+ .join("\n"));
221
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
222
+ const db = (0, db_js_1.getDb)(memexDir);
223
+ const sessions = (0, queries_js_1.listSessions)(db, projectPath, 1000);
224
+ console.log(chalk_1.default.dim(`\n Sessions recorded: ${sessions.length}`));
225
+ console.log(chalk_1.default.dim(` Database: ${path.join(memexDir, "memex.db")}\n`));
226
+ });
227
+ // ─── memex history ────────────────────────────────────────────────────────────
228
+ program
229
+ .command("history")
230
+ .description("List past sessions for this project")
231
+ .option("-p, --project <path>", "Project directory", process.cwd())
232
+ .option("-n, --limit <n>", "Number of sessions to show", "20")
233
+ .option("--all", "Show sessions across all projects", false)
234
+ .action((options) => {
235
+ const projectPath = path.resolve(options.project);
236
+ const memexDir = (0, store_js_1.getMemexDir)(options.all ? process.cwd() : projectPath);
237
+ const db = (0, db_js_1.getDb)(memexDir);
238
+ const limit = parseInt(options.limit, 10);
239
+ const sessions = options.all
240
+ ? (0, queries_js_1.listSessions)(db, undefined, limit)
241
+ : (0, queries_js_1.listSessions)(db, projectPath, limit);
242
+ if (sessions.length === 0) {
243
+ console.log(chalk_1.default.yellow("\n No sessions recorded yet. Run `memex start` to begin.\n"));
244
+ return;
245
+ }
246
+ console.log(chalk_1.default.bold.magenta("\n memex — session history\n"));
247
+ for (const s of sessions) {
248
+ const date = new Date(s.started_at).toLocaleString();
249
+ const duration = s.ended_at
250
+ ? formatDuration(new Date(s.ended_at).getTime() - new Date(s.started_at).getTime())
251
+ : "ongoing";
252
+ const status = s.ended_at ? chalk_1.default.dim(duration) : chalk_1.default.yellow("ongoing");
253
+ const summary = s.summary
254
+ ? chalk_1.default.white(truncate(s.summary, 80))
255
+ : chalk_1.default.dim("no summary");
256
+ console.log(` ${chalk_1.default.cyan(`#${s.id}`)} ${chalk_1.default.dim(date)} [${chalk_1.default.magenta(s.agent)}] ${status}`);
257
+ console.log(` ${summary}`);
258
+ if (options.all) {
259
+ console.log(chalk_1.default.dim(` ${s.project_path}`));
260
+ }
261
+ console.log();
262
+ }
263
+ console.log(chalk_1.default.dim(` Use \`memex show <id>\` to view a session in full.\n`));
264
+ });
265
+ // ─── memex show <id> ──────────────────────────────────────────────────────────
266
+ program
267
+ .command("show <id>")
268
+ .description("Show full details of a past session")
269
+ .option("-p, --project <path>", "Project directory", process.cwd())
270
+ .action((id, options) => {
271
+ const projectPath = path.resolve(options.project);
272
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
273
+ const db = (0, db_js_1.getDb)(memexDir);
274
+ const session = (0, queries_js_1.getSession)(db, parseInt(id, 10));
275
+ if (!session) {
276
+ console.log(chalk_1.default.red(`\n Session #${id} not found.\n`));
277
+ process.exit(1);
278
+ }
279
+ console.log(chalk_1.default.bold.magenta(`\n memex — session #${session.id}\n`));
280
+ console.log(chalk_1.default.dim(` Project: ${session.project_path}`));
281
+ console.log(chalk_1.default.dim(` Agent: ${session.agent}`));
282
+ console.log(chalk_1.default.dim(` Started: ${new Date(session.started_at).toLocaleString()}`));
283
+ if (session.ended_at) {
284
+ console.log(chalk_1.default.dim(` Ended: ${new Date(session.ended_at).toLocaleString()}`));
285
+ const ms = new Date(session.ended_at).getTime() -
286
+ new Date(session.started_at).getTime();
287
+ console.log(chalk_1.default.dim(` Duration: ${formatDuration(ms)}`));
288
+ }
289
+ if (session.log_file) {
290
+ console.log(chalk_1.default.dim(` Log file: ${session.log_file}`));
291
+ }
292
+ if (session.summary) {
293
+ console.log(chalk_1.default.bold("\n Summary:"));
294
+ console.log(` ${session.summary}`);
295
+ }
296
+ if (session.turns.length > 0) {
297
+ console.log(chalk_1.default.bold(`\n Conversation (${session.turns.length} turns):\n`));
298
+ for (const turn of session.turns) {
299
+ const label = turn.role === "user"
300
+ ? chalk_1.default.green(" You")
301
+ : chalk_1.default.blue(" Agent");
302
+ const time = chalk_1.default.dim(new Date(turn.ts).toLocaleTimeString());
303
+ console.log(`${label} ${time}`);
304
+ console.log(chalk_1.default.white(turn.content
305
+ .split("\n")
306
+ .map((l) => ` ${l}`)
307
+ .join("\n")));
308
+ console.log();
309
+ }
310
+ }
311
+ else {
312
+ console.log(chalk_1.default.dim("\n No conversation turns recorded for this session.\n"));
313
+ }
314
+ });
315
+ // ─── memex search <query> ─────────────────────────────────────────────────────
316
+ program
317
+ .command("search <query>")
318
+ .description("Full-text search across session summaries")
319
+ .option("-p, --project <path>", "Project directory", process.cwd())
320
+ .option("--all", "Search across all projects", false)
321
+ .action((query, options) => {
322
+ const projectPath = path.resolve(options.project);
323
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
324
+ const db = (0, db_js_1.getDb)(memexDir);
325
+ const results = options.all
326
+ ? (0, queries_js_1.searchSessions)(db, query)
327
+ : (0, queries_js_1.searchSessions)(db, query, projectPath);
328
+ if (results.length === 0) {
329
+ console.log(chalk_1.default.yellow(`\n No sessions match "${query}".\n`));
330
+ return;
331
+ }
332
+ console.log(chalk_1.default.bold.magenta(`\n memex — search: "${query}"\n`));
333
+ for (const r of results) {
334
+ const date = new Date(r.started_at).toLocaleString();
335
+ console.log(` ${chalk_1.default.cyan(`#${r.id}`)} ${chalk_1.default.dim(date)} [${chalk_1.default.magenta(r.agent)}]`);
336
+ if (options.all) {
337
+ console.log(chalk_1.default.dim(` ${r.project_path}`));
338
+ }
339
+ console.log(` ${chalk_1.default.white(r.snippet)}`);
340
+ console.log();
341
+ }
342
+ console.log(chalk_1.default.dim(` ${results.length} result(s). Use \`memex show <id>\` for details.\n`));
343
+ });
344
+ // ─── memex forget ─────────────────────────────────────────────────────────────
345
+ program
346
+ .command("forget")
347
+ .description("Clear all memory for this project")
348
+ .option("-p, --project <path>", "Project directory", process.cwd())
349
+ .option("--keep-sessions", "Keep session history, only clear memory fields", false)
350
+ .action((options) => {
351
+ const projectPath = path.resolve(options.project);
352
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
353
+ if (!(0, store_js_1.memoryExists)(projectPath)) {
354
+ console.log(chalk_1.default.yellow("\n No memory to clear.\n"));
355
+ return;
356
+ }
357
+ (0, store_js_1.clearMemory)(projectPath, options.keepSessions);
358
+ if (!options.keepSessions) {
359
+ const sessionsDir = path.join(memexDir, "sessions");
360
+ if (fs.existsSync(sessionsDir)) {
361
+ fs.rmSync(sessionsDir, { recursive: true });
362
+ }
363
+ }
364
+ console.log(chalk_1.default.green(options.keepSessions
365
+ ? "\n Memory fields cleared (session history preserved).\n"
366
+ : "\n Memory cleared.\n"));
367
+ });
368
+ // ─── memex compress ───────────────────────────────────────────────────────────
369
+ program
370
+ .command("compress")
371
+ .description("Manually re-compress the latest session into memory")
372
+ .option("-p, --project <path>", "Project directory", process.cwd())
373
+ .action(async (options) => {
374
+ const projectPath = path.resolve(options.project);
375
+ const sessionsDir = path.join((0, store_js_1.getMemexDir)(projectPath), "sessions");
376
+ if (!fs.existsSync(sessionsDir)) {
377
+ console.log(chalk_1.default.yellow("\n No sessions found to compress.\n"));
378
+ return;
379
+ }
380
+ const files = fs
381
+ .readdirSync(sessionsDir)
382
+ .filter((f) => f.endsWith(".jsonl"))
383
+ .sort();
384
+ if (files.length === 0) {
385
+ console.log(chalk_1.default.yellow("\n No session logs found.\n"));
386
+ return;
387
+ }
388
+ const latest = path.join(sessionsDir, files[files.length - 1]);
389
+ const lines = fs.readFileSync(latest, "utf-8").trim().split("\n");
390
+ const transcript = lines
391
+ .map((l) => {
392
+ try {
393
+ const e = JSON.parse(l);
394
+ return `[${e.source.toUpperCase()}]: ${e.text}`;
395
+ }
396
+ catch {
397
+ return null;
398
+ }
399
+ })
400
+ .filter(Boolean)
401
+ .join("\n");
402
+ await runCompression(transcript, projectPath, latest);
403
+ });
404
+ // ─── memex prune ─────────────────────────────────────────────────────────────
405
+ program
406
+ .command("prune")
407
+ .description("Delete session records older than N days")
408
+ .argument("[days]", "Retention period in days", "30")
409
+ .option("-p, --project <path>", "Project directory", process.cwd())
410
+ .action((days, options) => {
411
+ const projectPath = path.resolve(options.project);
412
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
413
+ const db = (0, db_js_1.getDb)(memexDir);
414
+ const keepDays = parseInt(days, 10);
415
+ const removed = (0, queries_js_1.pruneOldSessions)(db, projectPath, keepDays);
416
+ if (removed === 0) {
417
+ console.log(chalk_1.default.dim(`\n No sessions older than ${keepDays} days to remove.\n`));
418
+ }
419
+ else {
420
+ console.log(chalk_1.default.green(`\n Removed ${removed} session(s) older than ${keepDays} days.\n`));
421
+ }
422
+ });
423
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
424
+ async function runCompression(transcript, projectPath, logPath, conversationTurns = [], sessionId) {
425
+ if (!transcript || transcript.trim().length < 50) {
426
+ console.log(chalk_1.default.dim("\n Session too short to compress.\n"));
427
+ return;
428
+ }
429
+ const spinner = (0, ora_1.default)(" Compressing session into memory...").start();
430
+ try {
431
+ const updated = await (0, compressor_js_1.compressSession)(transcript, projectPath, logPath);
432
+ const MAX_TURNS = 30;
433
+ const turns = conversationTurns.slice(-MAX_TURNS);
434
+ updated.lastConversation = turns;
435
+ (0, store_js_1.saveMemory)(projectPath, updated);
436
+ // Persist the session record + turns in SQLite
437
+ if (sessionId !== undefined) {
438
+ const memexDir = (0, store_js_1.getMemexDir)(projectPath);
439
+ const db = (0, db_js_1.getDb)(memexDir);
440
+ const sessionSummary = updated.recentSessions.at(-1)?.summary ?? "";
441
+ (0, queries_js_1.finalizeSession)(db, sessionId, sessionSummary, logPath, turns);
442
+ }
443
+ spinner.succeed(chalk_1.default.green(" Memory updated") +
444
+ chalk_1.default.dim(` — focus: ${updated.currentFocus || "not set"}`));
445
+ console.log(chalk_1.default.dim(` Pending tasks: ${updated.pendingTasks.length}`) +
446
+ chalk_1.default.dim(`, gotchas: ${updated.gotchas.length}`) +
447
+ chalk_1.default.dim(`, conversation turns saved: ${turns.length}\n`));
448
+ }
449
+ catch (err) {
450
+ const reason = err.message;
451
+ spinner.fail(chalk_1.default.red(" Compression failed — raw session log preserved"));
452
+ console.error(chalk_1.default.yellow(`\n Reason: ${reason}`));
453
+ if (reason.includes("API key")) {
454
+ console.error(chalk_1.default.dim(" Fix: add your key to ~/.zshrc and run: source ~/.zshrc\n"));
455
+ }
456
+ else {
457
+ console.error(chalk_1.default.dim(` Raw log saved to: ${logPath}\n`));
458
+ }
459
+ }
460
+ }
461
+ function formatDuration(ms) {
462
+ const s = Math.floor(ms / 1000);
463
+ if (s < 60)
464
+ return `${s}s`;
465
+ const m = Math.floor(s / 60);
466
+ if (m < 60)
467
+ return `${m}m ${s % 60}s`;
468
+ const h = Math.floor(m / 60);
469
+ return `${h}h ${m % 60}m`;
470
+ }
471
+ function truncate(str, maxLen) {
472
+ return str.length > maxLen ? str.slice(0, maxLen - 1) + "…" : str;
473
+ }
474
+ program.parse();
475
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { SessionLogger } from "./session-logger.js";
2
+ export interface WrapOptions {
3
+ command: string;
4
+ args?: string[];
5
+ cwd?: string;
6
+ injectOnReady?: string;
7
+ injectDelayMs?: number;
8
+ }
9
+ export interface WrapResult {
10
+ exitCode: number;
11
+ transcript: string;
12
+ logPath: string;
13
+ }
14
+ export declare function wrapProcess(logger: SessionLogger, options: WrapOptions): Promise<WrapResult>;