@tyroneross/bookmark 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/.claude-plugin/marketplace.json +15 -0
  2. package/.claude-plugin/plugin.json +13 -0
  3. package/CLAUDE.md +69 -0
  4. package/LICENSE +21 -0
  5. package/README.md +178 -0
  6. package/agents/snapshot-analyst.md +41 -0
  7. package/commands/activate.md +20 -0
  8. package/commands/list.md +15 -0
  9. package/commands/restore.md +30 -0
  10. package/commands/snapshot.md +26 -0
  11. package/commands/status.md +19 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +437 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/config.d.ts +5 -0
  17. package/dist/config.d.ts.map +1 -0
  18. package/dist/config.js +86 -0
  19. package/dist/config.js.map +1 -0
  20. package/dist/index.d.ts +13 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +13 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/restore/index.d.ts +13 -0
  25. package/dist/restore/index.d.ts.map +1 -0
  26. package/dist/restore/index.js +94 -0
  27. package/dist/restore/index.js.map +1 -0
  28. package/dist/setup/auto-setup.d.ts +16 -0
  29. package/dist/setup/auto-setup.d.ts.map +1 -0
  30. package/dist/setup/auto-setup.js +192 -0
  31. package/dist/setup/auto-setup.js.map +1 -0
  32. package/dist/setup/configure-hooks.d.ts +10 -0
  33. package/dist/setup/configure-hooks.d.ts.map +1 -0
  34. package/dist/setup/configure-hooks.js +97 -0
  35. package/dist/setup/configure-hooks.js.map +1 -0
  36. package/dist/snapshot/capture.d.ts +21 -0
  37. package/dist/snapshot/capture.d.ts.map +1 -0
  38. package/dist/snapshot/capture.js +134 -0
  39. package/dist/snapshot/capture.js.map +1 -0
  40. package/dist/snapshot/compress.d.ts +8 -0
  41. package/dist/snapshot/compress.d.ts.map +1 -0
  42. package/dist/snapshot/compress.js +93 -0
  43. package/dist/snapshot/compress.js.map +1 -0
  44. package/dist/snapshot/storage.d.ts +13 -0
  45. package/dist/snapshot/storage.d.ts.map +1 -0
  46. package/dist/snapshot/storage.js +151 -0
  47. package/dist/snapshot/storage.js.map +1 -0
  48. package/dist/threshold/adaptive.d.ts +23 -0
  49. package/dist/threshold/adaptive.d.ts.map +1 -0
  50. package/dist/threshold/adaptive.js +29 -0
  51. package/dist/threshold/adaptive.js.map +1 -0
  52. package/dist/threshold/state.d.ts +8 -0
  53. package/dist/threshold/state.d.ts.map +1 -0
  54. package/dist/threshold/state.js +83 -0
  55. package/dist/threshold/state.js.map +1 -0
  56. package/dist/threshold/time-based.d.ts +13 -0
  57. package/dist/threshold/time-based.d.ts.map +1 -0
  58. package/dist/threshold/time-based.js +24 -0
  59. package/dist/threshold/time-based.js.map +1 -0
  60. package/dist/transcript/estimator.d.ts +20 -0
  61. package/dist/transcript/estimator.d.ts.map +1 -0
  62. package/dist/transcript/estimator.js +95 -0
  63. package/dist/transcript/estimator.js.map +1 -0
  64. package/dist/transcript/extractor.d.ts +7 -0
  65. package/dist/transcript/extractor.d.ts.map +1 -0
  66. package/dist/transcript/extractor.js +237 -0
  67. package/dist/transcript/extractor.js.map +1 -0
  68. package/dist/transcript/parser.d.ts +16 -0
  69. package/dist/transcript/parser.d.ts.map +1 -0
  70. package/dist/transcript/parser.js +120 -0
  71. package/dist/transcript/parser.js.map +1 -0
  72. package/dist/types.d.ts +156 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +3 -0
  75. package/dist/types.js.map +1 -0
  76. package/hooks/hooks.json +54 -0
  77. package/package.json +77 -0
  78. package/scripts/install-plugin.sh +38 -0
  79. package/skills/context-continuity/SKILL.md +49 -0
@@ -0,0 +1,437 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { existsSync, readdirSync, statSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { homedir } from 'node:os';
6
+ import { createInterface } from 'node:readline';
7
+ import { captureSnapshot } from '../snapshot/capture.js';
8
+ import { loadSnapshot, listSnapshots, readLatestMd, getSnapshotCount } from '../snapshot/storage.js';
9
+ import { compressToMarkdown } from '../snapshot/compress.js';
10
+ import { restoreContext } from '../restore/index.js';
11
+ import { loadState, saveState } from '../threshold/state.js';
12
+ import { checkTimeInterval } from '../threshold/time-based.js';
13
+ import { shouldSnapshotByThreshold } from '../threshold/adaptive.js';
14
+ import { quickEstimate } from '../transcript/estimator.js';
15
+ import { loadConfig, getStoragePath, writeConfig } from '../config.js';
16
+ import { ensureProjectBootstrapped, setupProject } from '../setup/auto-setup.js';
17
+ const program = new Command();
18
+ program
19
+ .name('bookmark')
20
+ .description('Context snapshots for Claude Code — session continuity across compactions and terminals')
21
+ .version('0.1.0');
22
+ // ─── Hook Commands (invoked by hooks, not users) ───
23
+ program
24
+ .command('snapshot')
25
+ .description('Capture a context snapshot')
26
+ .option('--trigger <type>', 'Trigger type: pre_compact|time_interval|manual|session_end', 'manual')
27
+ .option('--smart', 'Use Claude Haiku for enhanced extraction')
28
+ .option('--transcript <path>', 'Path to transcript JSONL')
29
+ .option('--session-id <id>', 'Session ID')
30
+ .option('--cwd <path>', 'Working directory')
31
+ .action(async (opts) => {
32
+ try {
33
+ const hookInput = await readHookInput();
34
+ const cwd = opts.cwd ?? hookInput?.cwd ?? process.cwd();
35
+ ensureProjectBootstrapped(cwd);
36
+ let transcriptPath = opts.transcript ?? hookInput?.transcript_path;
37
+ const sessionId = opts.sessionId ?? hookInput?.session_id;
38
+ if (!transcriptPath) {
39
+ // Try to discover transcript from ~/.claude/projects/
40
+ transcriptPath = discoverTranscriptPath(cwd);
41
+ if (!transcriptPath) {
42
+ console.error('No transcript found. This command is typically called by hooks.');
43
+ process.exit(1);
44
+ }
45
+ }
46
+ const snapshot = await captureSnapshot({
47
+ trigger: opts.trigger,
48
+ transcriptPath,
49
+ cwd,
50
+ sessionId,
51
+ smart: opts.smart,
52
+ });
53
+ console.log(`Snapshot captured: ${snapshot.snapshot_id}`);
54
+ console.log(` Trigger: ${snapshot.trigger}`);
55
+ console.log(` Decisions: ${snapshot.decisions.length}`);
56
+ console.log(` Files changed: ${snapshot.files_changed.length}`);
57
+ console.log(` Open items: ${snapshot.open_items.length}`);
58
+ console.log(` Context remaining: ${Math.round(snapshot.context_remaining_pct * 100)}%`);
59
+ }
60
+ catch (err) {
61
+ console.error('Snapshot failed:', err.message);
62
+ process.exit(1);
63
+ }
64
+ });
65
+ program
66
+ .command('restore')
67
+ .description('Generate restoration context (for SessionStart hook)')
68
+ .option('--session-source <source>', 'Source: startup|resume|compact|clear')
69
+ .option('--format <format>', 'Output: system_message|json|markdown', 'system_message')
70
+ .option('--cwd <path>', 'Working directory')
71
+ .action(async (opts) => {
72
+ try {
73
+ const hookInput = await readHookInput();
74
+ const cwd = opts.cwd ?? hookInput?.cwd ?? process.cwd();
75
+ ensureProjectBootstrapped(cwd);
76
+ const source = opts.sessionSource ?? hookInput?.source ?? 'startup';
77
+ const result = restoreContext({
78
+ source,
79
+ sessionId: hookInput?.session_id,
80
+ cwd,
81
+ format: opts.format,
82
+ });
83
+ // Output plain text for SessionStart hook — Claude sees stdout directly
84
+ if (result.systemMessage) {
85
+ console.log(result.systemMessage);
86
+ }
87
+ }
88
+ catch {
89
+ // Silent failure — don't break session start
90
+ }
91
+ });
92
+ program
93
+ .command('check')
94
+ .description('Check time/threshold intervals (for UserPromptSubmit hook)')
95
+ .option('--transcript <path>', 'Path to transcript JSONL')
96
+ .option('--cwd <path>', 'Working directory')
97
+ .action(async (opts) => {
98
+ try {
99
+ const hookInput = await readHookInput();
100
+ const cwd = opts.cwd ?? hookInput?.cwd ?? process.cwd();
101
+ ensureProjectBootstrapped(cwd);
102
+ const transcriptPath = opts.transcript ?? hookInput?.transcript_path;
103
+ const config = loadConfig(cwd);
104
+ const storagePath = getStoragePath(cwd, config);
105
+ const state = loadState(storagePath);
106
+ let shouldCapture = false;
107
+ let reason = '';
108
+ // Check time interval
109
+ const timeCheck = checkTimeInterval(state);
110
+ if (timeCheck.shouldSnapshot) {
111
+ shouldCapture = true;
112
+ reason = timeCheck.reason ?? 'time interval';
113
+ }
114
+ // Check adaptive threshold
115
+ if (!shouldCapture && transcriptPath) {
116
+ const { remainingPct } = quickEstimate(transcriptPath, config.contextLimitTokens, config.charsPerToken);
117
+ if (shouldSnapshotByThreshold(remainingPct, state.compaction_count, config)) {
118
+ shouldCapture = true;
119
+ reason = `context at ${Math.round(remainingPct * 100)}% remaining (threshold: ${Math.round(state.current_threshold * 100)}%)`;
120
+ }
121
+ }
122
+ if (shouldCapture && transcriptPath) {
123
+ const snapshot = await captureSnapshot({
124
+ trigger: 'time_interval',
125
+ transcriptPath,
126
+ cwd,
127
+ sessionId: hookInput?.session_id,
128
+ });
129
+ if (config.verboseLogging) {
130
+ console.error(`bookmark: auto-snapshot ${snapshot.snapshot_id} (${reason})`);
131
+ }
132
+ }
133
+ // Update event time regardless
134
+ saveState(storagePath, { ...state, last_event_time: Date.now() });
135
+ }
136
+ catch {
137
+ // Silent — never break user prompt flow
138
+ }
139
+ });
140
+ // ─── User-Facing Commands ───
141
+ program
142
+ .command('status')
143
+ .description('Show snapshot inventory and stats')
144
+ .option('--cwd <path>', 'Working directory')
145
+ .action((opts) => {
146
+ const cwd = opts.cwd ?? process.cwd();
147
+ const config = loadConfig(cwd);
148
+ const storagePath = getStoragePath(cwd, config);
149
+ const state = loadState(storagePath);
150
+ const count = getSnapshotCount(storagePath);
151
+ const entries = listSnapshots(storagePath, 5);
152
+ console.log('');
153
+ console.log('Bookmark Status');
154
+ console.log('═══════════════');
155
+ console.log(` Snapshots: ${count}`);
156
+ console.log(` Compaction cycles: ${state.compaction_count}`);
157
+ console.log(` Current threshold: ${Math.round(state.current_threshold * 100)}% remaining`);
158
+ console.log(` Snapshot interval: ${state.snapshot_interval_minutes} minutes`);
159
+ if (state.last_snapshot_time > 0) {
160
+ const ago = Math.round((Date.now() - state.last_snapshot_time) / 60_000);
161
+ console.log(` Last snapshot: ${ago} minutes ago`);
162
+ }
163
+ else {
164
+ console.log(` Last snapshot: never`);
165
+ }
166
+ if (entries.length > 0) {
167
+ console.log('');
168
+ console.log('Recent Snapshots:');
169
+ for (const entry of entries) {
170
+ const date = new Date(entry.timestamp).toLocaleString();
171
+ const pct = Math.round(entry.context_remaining_pct * 100);
172
+ console.log(` ${entry.id} ${entry.trigger.padEnd(14)} ${pct}% ctx ${date}`);
173
+ }
174
+ }
175
+ console.log('');
176
+ });
177
+ program
178
+ .command('list')
179
+ .description('List available snapshots')
180
+ .option('--limit <n>', 'Max snapshots to show', '10')
181
+ .option('--cwd <path>', 'Working directory')
182
+ .action((opts) => {
183
+ const cwd = opts.cwd ?? process.cwd();
184
+ const config = loadConfig(cwd);
185
+ const storagePath = getStoragePath(cwd, config);
186
+ const entries = listSnapshots(storagePath, parseInt(opts.limit, 10));
187
+ if (entries.length === 0) {
188
+ console.log('No snapshots found. Run `/bookmark:snapshot` to create one.');
189
+ return;
190
+ }
191
+ console.log('');
192
+ console.log('ID Trigger Ctx% Decisions Files Open Items Time');
193
+ console.log('──────────────────── ─────────────── ───── ───────── ───── ────────── ────────────────────');
194
+ for (const entry of entries) {
195
+ const date = new Date(entry.timestamp).toLocaleString();
196
+ const pct = `${Math.round(entry.context_remaining_pct * 100)}%`.padStart(4);
197
+ console.log(`${entry.id} ${entry.trigger.padEnd(15)} ${pct} ${String(entry.decisions_count).padStart(9)} ${String(entry.files_changed_count).padStart(5)} ${String(entry.open_items_count).padStart(10)} ${date}`);
198
+ }
199
+ console.log('');
200
+ });
201
+ program
202
+ .command('show [snapshot_id]')
203
+ .description('Show full snapshot detail')
204
+ .option('--latest', 'Show the most recent snapshot')
205
+ .option('--cwd <path>', 'Working directory')
206
+ .action((snapshotId, opts) => {
207
+ const cwd = opts.cwd ?? process.cwd();
208
+ const config = loadConfig(cwd);
209
+ const storagePath = getStoragePath(cwd, config);
210
+ if (opts.latest || !snapshotId) {
211
+ const md = readLatestMd(storagePath);
212
+ if (md) {
213
+ console.log(md);
214
+ }
215
+ else {
216
+ console.log('No snapshots found.');
217
+ }
218
+ return;
219
+ }
220
+ const snapshot = loadSnapshot(storagePath, snapshotId);
221
+ if (!snapshot) {
222
+ console.log(`Snapshot not found: ${snapshotId}`);
223
+ return;
224
+ }
225
+ console.log(compressToMarkdown(snapshot));
226
+ });
227
+ program
228
+ .command('config')
229
+ .description('Show or set configuration')
230
+ .option('--interval <minutes>', 'Set time-based interval')
231
+ .option('--smart-default', 'Enable LLM-enhanced extraction by default')
232
+ .option('--no-smart-default', 'Disable LLM-enhanced extraction')
233
+ .option('--cwd <path>', 'Working directory')
234
+ .action((opts) => {
235
+ const cwd = opts.cwd ?? process.cwd();
236
+ const config = loadConfig(cwd);
237
+ const storagePath = getStoragePath(cwd, config);
238
+ if (opts.interval) {
239
+ const state = loadState(storagePath);
240
+ state.snapshot_interval_minutes = parseInt(opts.interval, 10);
241
+ saveState(storagePath, state);
242
+ console.log(`Snapshot interval set to ${opts.interval} minutes`);
243
+ return;
244
+ }
245
+ console.log('');
246
+ console.log('Bookmark Configuration');
247
+ console.log('══════════════════════');
248
+ console.log(` Storage path: ${config.storagePath}`);
249
+ console.log(` Interval: ${config.intervalMinutes} minutes`);
250
+ console.log(` Thresholds: ${config.thresholds.map(t => `${Math.round(t * 100)}%`).join(', ')}`);
251
+ console.log(` Context limit: ${config.contextLimitTokens.toLocaleString()} tokens`);
252
+ console.log(` Smart default: ${config.smartDefault}`);
253
+ console.log(` Max snapshots: ${config.maxActiveSnapshots}`);
254
+ console.log(` Archive after: ${config.archiveAfterDays} days`);
255
+ console.log('');
256
+ console.log('Environment overrides:');
257
+ console.log(' BOOKMARK_INTERVAL, BOOKMARK_THRESHOLD, BOOKMARK_STORAGE_PATH');
258
+ console.log(' BOOKMARK_CONTEXT_LIMIT, BOOKMARK_SMART, ANTHROPIC_API_KEY');
259
+ console.log('');
260
+ });
261
+ program
262
+ .command('init')
263
+ .description('Initialize bookmark in current project (alias for setup --defaults)')
264
+ .option('--cwd <path>', 'Working directory')
265
+ .action((opts) => {
266
+ const cwd = opts.cwd ?? process.cwd();
267
+ runSetup(cwd, true);
268
+ });
269
+ program
270
+ .command('setup')
271
+ .description('Interactive setup — configure interval, smart mode, hooks')
272
+ .option('--defaults', 'Use defaults without prompting')
273
+ .option('--cwd <path>', 'Working directory')
274
+ .action(async (opts) => {
275
+ const cwd = opts.cwd ?? process.cwd();
276
+ const useDefaults = opts.defaults || !process.stdin.isTTY;
277
+ await runSetup(cwd, useDefaults);
278
+ });
279
+ program
280
+ .command('uninstall')
281
+ .description('Remove bookmark from project')
282
+ .option('--remove-data', 'Also remove snapshot data')
283
+ .option('--cwd <path>', 'Working directory')
284
+ .action((opts) => {
285
+ console.log('To uninstall bookmark:');
286
+ console.log(' 1. Remove the plugin: claude plugin remove bookmark');
287
+ console.log(' 2. npm uninstall -g @tyroneross/bookmark');
288
+ if (opts.removeData) {
289
+ const cwd = opts.cwd ?? process.cwd();
290
+ const config = loadConfig(cwd);
291
+ console.log(` 3. rm -rf ${join(cwd, config.storagePath)}`);
292
+ }
293
+ });
294
+ // ─── Helpers ───
295
+ const GREEN = '\x1b[32m';
296
+ const CYAN = '\x1b[36m';
297
+ const DIM = '\x1b[2m';
298
+ const BOLD = '\x1b[1m';
299
+ const RESET = '\x1b[0m';
300
+ /**
301
+ * Discover the most recent transcript file for the given working directory.
302
+ * Claude Code stores transcripts in ~/.claude/projects/<encoded-path>/*.jsonl
303
+ */
304
+ function discoverTranscriptPath(cwd) {
305
+ const claudeProjectsDir = join(homedir(), '.claude', 'projects');
306
+ if (!existsSync(claudeProjectsDir))
307
+ return null;
308
+ try {
309
+ const projectDirs = readdirSync(claudeProjectsDir);
310
+ // Claude Code encodes paths by replacing / with -
311
+ // e.g., /Users/tyroneross/myproject → -Users-tyroneross-myproject
312
+ const encodedCwd = cwd.replace(/\//g, '-');
313
+ const matchingDir = projectDirs.find(d => d === encodedCwd || d.includes(encodedCwd) || encodedCwd.includes(d));
314
+ if (!matchingDir)
315
+ return null;
316
+ const transcriptDir = join(claudeProjectsDir, matchingDir);
317
+ const stat = statSync(transcriptDir);
318
+ if (!stat.isDirectory())
319
+ return null;
320
+ // Find the most recent .jsonl file by modification time
321
+ const files = readdirSync(transcriptDir)
322
+ .filter(f => f.endsWith('.jsonl'))
323
+ .map(f => ({
324
+ name: f,
325
+ mtime: statSync(join(transcriptDir, f)).mtimeMs,
326
+ }))
327
+ .sort((a, b) => b.mtime - a.mtime);
328
+ return files[0] ? join(transcriptDir, files[0].name) : null;
329
+ }
330
+ catch {
331
+ return null;
332
+ }
333
+ }
334
+ /**
335
+ * Ask a question on the terminal and return the answer.
336
+ */
337
+ function askQuestion(question) {
338
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
339
+ return new Promise((resolve) => {
340
+ rl.question(question, (answer) => {
341
+ rl.close();
342
+ resolve(answer.trim());
343
+ });
344
+ });
345
+ }
346
+ /**
347
+ * Interactive (or default) setup for bookmark in a project.
348
+ */
349
+ async function runSetup(cwd, useDefaults) {
350
+ let intervalMinutes = 20;
351
+ let smartDefault = false;
352
+ console.log('');
353
+ console.log(`${BOLD}Bookmark — Context Snapshot Setup${RESET}`);
354
+ console.log('═════════════════════════════════');
355
+ console.log('');
356
+ if (!useDefaults) {
357
+ // Prompt for interval
358
+ console.log('Snapshot interval?');
359
+ console.log(' 1) 10 minutes (frequent)');
360
+ console.log(' 2) 15 minutes');
361
+ console.log(` 3) 20 minutes ${DIM}(recommended)${RESET}`);
362
+ console.log(' 4) 30 minutes (conservative)');
363
+ console.log('');
364
+ const intervalAnswer = await askQuestion(`${DIM}> ${RESET}`);
365
+ const intervalMap = { '1': 10, '2': 15, '3': 20, '4': 30 };
366
+ intervalMinutes = intervalMap[intervalAnswer] ?? 20;
367
+ console.log('');
368
+ // Prompt for smart mode
369
+ const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
370
+ console.log('Smart mode (uses Claude Haiku for better extraction, ~$0.001/snapshot)?');
371
+ if (hasApiKey) {
372
+ console.log(` ${GREEN}ANTHROPIC_API_KEY detected.${RESET}`);
373
+ }
374
+ else {
375
+ console.log(` ${DIM}No ANTHROPIC_API_KEY found — smart mode requires it.${RESET}`);
376
+ }
377
+ console.log(' 1) Enable smart mode');
378
+ console.log(` 2) Pattern-matching only ${DIM}(recommended)${RESET}`);
379
+ console.log('');
380
+ const smartAnswer = await askQuestion(`${DIM}> ${RESET}`);
381
+ smartDefault = smartAnswer === '1';
382
+ console.log('');
383
+ }
384
+ // Run core setup (dirs, hooks, gitignore, CLAUDE.md)
385
+ const steps = setupProject(cwd);
386
+ // Write user preferences
387
+ writeConfig(cwd, { intervalMinutes, smartDefault });
388
+ steps.push('Saved config to .claude/bookmarks/config.json');
389
+ // Initialize state with user preferences
390
+ const sp = getStoragePath(cwd);
391
+ const state = loadState(sp);
392
+ state.snapshot_interval_minutes = intervalMinutes;
393
+ saveState(sp, state);
394
+ // Print summary
395
+ console.log('Setup complete:');
396
+ for (const step of steps) {
397
+ console.log(` ${GREEN}+${RESET} ${step}`);
398
+ }
399
+ console.log('');
400
+ console.log('Defaults:');
401
+ console.log(` Interval: ${intervalMinutes} minutes`);
402
+ console.log(` Thresholds: 20% → 30% → 40% → 50% (adaptive)`);
403
+ console.log(` Smart mode: ${smartDefault ? 'on' : 'off'}`);
404
+ console.log('');
405
+ console.log(`${GREEN}Ready.${RESET} Start a Claude Code session — snapshots will be captured automatically.`);
406
+ console.log('');
407
+ }
408
+ /**
409
+ * Read hook input from stdin (JSON piped by Claude Code hooks).
410
+ */
411
+ async function readHookInput() {
412
+ // Check if stdin has data (non-TTY means piped)
413
+ if (process.stdin.isTTY)
414
+ return null;
415
+ return new Promise((resolve) => {
416
+ let data = '';
417
+ const timeout = setTimeout(() => resolve(null), 1000);
418
+ process.stdin.setEncoding('utf-8');
419
+ process.stdin.on('data', (chunk) => { data += chunk; });
420
+ process.stdin.on('end', () => {
421
+ clearTimeout(timeout);
422
+ try {
423
+ resolve(JSON.parse(data));
424
+ }
425
+ catch {
426
+ resolve(null);
427
+ }
428
+ });
429
+ process.stdin.on('error', () => {
430
+ clearTimeout(timeout);
431
+ resolve(null);
432
+ });
433
+ process.stdin.resume();
434
+ });
435
+ }
436
+ program.parse();
437
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { BookmarkConfig, SetupPreferences } from './types.js';
2
+ export declare function loadConfig(cwd?: string): BookmarkConfig;
3
+ export declare function getStoragePath(cwd: string, config?: BookmarkConfig): string;
4
+ export declare function writeConfig(cwd: string, prefs: SetupPreferences): void;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAsBnE,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,CAsCvD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAG3E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAuBtE"}
package/dist/config.js ADDED
@@ -0,0 +1,86 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const DEFAULTS = {
4
+ storagePath: '.claude/bookmarks',
5
+ thresholds: [0.20, 0.30, 0.40, 0.50, 0.60],
6
+ maxThreshold: 0.60,
7
+ intervalMinutes: 20,
8
+ contextLimitTokens: 200_000,
9
+ charsPerToken: 4,
10
+ maxDecisions: 15,
11
+ maxOpenItems: 10,
12
+ maxFilesTracked: 20,
13
+ maxErrorsTracked: 10,
14
+ summaryTokenBudget: 1000,
15
+ maxActiveSnapshots: 50,
16
+ archiveAfterDays: 30,
17
+ snapshotOnSessionEnd: true,
18
+ restoreOnSessionStart: true,
19
+ smartDefault: false,
20
+ verboseLogging: false,
21
+ };
22
+ export function loadConfig(cwd) {
23
+ const config = { ...DEFAULTS };
24
+ // Project-level config
25
+ if (cwd) {
26
+ const projectConfigPath = join(cwd, '.claude', 'bookmarks', 'config.json');
27
+ if (existsSync(projectConfigPath)) {
28
+ try {
29
+ const projectConfig = JSON.parse(readFileSync(projectConfigPath, 'utf-8'));
30
+ Object.assign(config, projectConfig);
31
+ }
32
+ catch {
33
+ // Ignore malformed config
34
+ }
35
+ }
36
+ }
37
+ // Environment variable overrides
38
+ if (process.env.BOOKMARK_INTERVAL) {
39
+ config.intervalMinutes = parseInt(process.env.BOOKMARK_INTERVAL, 10) || config.intervalMinutes;
40
+ }
41
+ if (process.env.BOOKMARK_THRESHOLD) {
42
+ const vals = process.env.BOOKMARK_THRESHOLD.split(',').map(Number).filter(n => !isNaN(n));
43
+ if (vals.length > 0)
44
+ config.thresholds = vals;
45
+ }
46
+ if (process.env.BOOKMARK_STORAGE_PATH) {
47
+ config.storagePath = process.env.BOOKMARK_STORAGE_PATH;
48
+ }
49
+ if (process.env.BOOKMARK_CONTEXT_LIMIT) {
50
+ config.contextLimitTokens = parseInt(process.env.BOOKMARK_CONTEXT_LIMIT, 10) || config.contextLimitTokens;
51
+ }
52
+ if (process.env.BOOKMARK_SMART === 'true') {
53
+ config.smartDefault = true;
54
+ }
55
+ if (process.env.BOOKMARK_VERBOSE === 'true') {
56
+ config.verboseLogging = true;
57
+ }
58
+ return config;
59
+ }
60
+ export function getStoragePath(cwd, config) {
61
+ const cfg = config ?? loadConfig(cwd);
62
+ return join(cwd, cfg.storagePath);
63
+ }
64
+ export function writeConfig(cwd, prefs) {
65
+ const configDir = join(cwd, '.claude', 'bookmarks');
66
+ if (!existsSync(configDir)) {
67
+ mkdirSync(configDir, { recursive: true });
68
+ }
69
+ const configPath = join(configDir, 'config.json');
70
+ let existing = {};
71
+ if (existsSync(configPath)) {
72
+ try {
73
+ existing = JSON.parse(readFileSync(configPath, 'utf-8'));
74
+ }
75
+ catch {
76
+ // Overwrite malformed config
77
+ }
78
+ }
79
+ const merged = {
80
+ ...existing,
81
+ intervalMinutes: prefs.intervalMinutes,
82
+ smartDefault: prefs.smartDefault,
83
+ };
84
+ writeFileSync(configPath, JSON.stringify(merged, null, 2), 'utf-8');
85
+ }
86
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type { Snapshot, SnapshotTrigger, Decision, OpenItem, FileActivity, FileOperation, ErrorEntry, SnapshotIndex, SnapshotEntry, IndexStats, BookmarkState, SessionEntry, TokenEstimate, ExtractionResult, HookInput, HookOutput, BookmarkConfig, } from './types.js';
2
+ export { loadConfig, getStoragePath } from './config.js';
3
+ export { captureSnapshot } from './snapshot/capture.js';
4
+ export { compressToMarkdown } from './snapshot/compress.js';
5
+ export { storeSnapshot, loadSnapshot, loadLatestSnapshot, listSnapshots, readLatestMd, writeLatestMd, getSnapshotCount, ensureStorageDirs, } from './snapshot/storage.js';
6
+ export { restoreContext } from './restore/index.js';
7
+ export { parseTranscript } from './transcript/parser.js';
8
+ export { estimateFromTranscript, quickEstimate } from './transcript/estimator.js';
9
+ export { extractFromEntries } from './transcript/extractor.js';
10
+ export { loadState, saveState } from './threshold/state.js';
11
+ export { getThreshold, shouldSnapshotByThreshold } from './threshold/adaptive.js';
12
+ export { checkTimeInterval } from './threshold/time-based.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ // Public API exports for @tyroneross/bookmark
2
+ export { loadConfig, getStoragePath } from './config.js';
3
+ export { captureSnapshot } from './snapshot/capture.js';
4
+ export { compressToMarkdown } from './snapshot/compress.js';
5
+ export { storeSnapshot, loadSnapshot, loadLatestSnapshot, listSnapshots, readLatestMd, writeLatestMd, getSnapshotCount, ensureStorageDirs, } from './snapshot/storage.js';
6
+ export { restoreContext } from './restore/index.js';
7
+ export { parseTranscript } from './transcript/parser.js';
8
+ export { estimateFromTranscript, quickEstimate } from './transcript/estimator.js';
9
+ export { extractFromEntries } from './transcript/extractor.js';
10
+ export { loadState, saveState } from './threshold/state.js';
11
+ export { getThreshold, shouldSnapshotByThreshold } from './threshold/adaptive.js';
12
+ export { checkTimeInterval } from './threshold/time-based.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAsB9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { HookOutput } from '../types.js';
2
+ export interface RestoreOptions {
3
+ source?: 'startup' | 'resume' | 'compact' | 'clear';
4
+ sessionId?: string;
5
+ cwd: string;
6
+ format?: 'system_message' | 'json' | 'markdown';
7
+ }
8
+ /**
9
+ * Generate restoration context for a SessionStart hook.
10
+ * Returns a HookOutput with systemMessage containing the LATEST.md content.
11
+ */
12
+ export declare function restoreContext(options: RestoreOptions): HookOutput;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/restore/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;CACjD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAoDlE"}