codetree-claude 1.0.1 → 1.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/LICENSE +21 -0
- package/dist/hook/post-compact.d.ts +18 -0
- package/dist/hook/post-compact.d.ts.map +1 -0
- package/dist/hook/post-compact.js +192 -0
- package/dist/hook/post-compact.js.map +1 -0
- package/dist/hook/post-tool-use.d.ts +11 -0
- package/dist/hook/post-tool-use.d.ts.map +1 -0
- package/dist/hook/post-tool-use.js +85 -0
- package/dist/hook/post-tool-use.js.map +1 -0
- package/dist/hook/pre-compact.d.ts +18 -0
- package/dist/hook/pre-compact.d.ts.map +1 -0
- package/dist/hook/pre-compact.js +190 -0
- package/dist/hook/pre-compact.js.map +1 -0
- package/dist/hook/session-start.d.ts +14 -0
- package/dist/hook/session-start.d.ts.map +1 -0
- package/dist/hook/session-start.js +136 -0
- package/dist/hook/session-start.js.map +1 -0
- package/dist/server/ipc.d.ts +11 -0
- package/dist/server/ipc.d.ts.map +1 -1
- package/dist/server/ipc.js +233 -0
- package/dist/server/ipc.js.map +1 -1
- package/dist/server/mcp-server.js +3 -1
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/tools/codetree-memory.d.ts +121 -0
- package/dist/server/tools/codetree-memory.d.ts.map +1 -0
- package/dist/server/tools/codetree-memory.js +129 -0
- package/dist/server/tools/codetree-memory.js.map +1 -0
- package/dist/setup/install.d.ts +1 -1
- package/dist/setup/install.d.ts.map +1 -1
- package/dist/setup/install.js +76 -3
- package/dist/setup/install.js.map +1 -1
- package/dist/storage/database.d.ts +59 -0
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +381 -0
- package/dist/storage/database.js.map +1 -1
- package/dist/storage/disk-manager.d.ts +26 -0
- package/dist/storage/disk-manager.d.ts.map +1 -0
- package/dist/storage/disk-manager.js +100 -0
- package/dist/storage/disk-manager.js.map +1 -0
- package/package.json +1 -1
package/dist/storage/database.js
CHANGED
|
@@ -48,6 +48,81 @@ CREATE TABLE IF NOT EXISTS meta (
|
|
|
48
48
|
key TEXT PRIMARY KEY,
|
|
49
49
|
value TEXT NOT NULL
|
|
50
50
|
);
|
|
51
|
+
|
|
52
|
+
-- Session memory: captures what Claude learned across sessions
|
|
53
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
54
|
+
id TEXT PRIMARY KEY,
|
|
55
|
+
started_at INTEGER NOT NULL,
|
|
56
|
+
ended_at INTEGER,
|
|
57
|
+
last_accessed INTEGER NOT NULL,
|
|
58
|
+
summary TEXT,
|
|
59
|
+
files_read TEXT, -- JSON array of file paths read
|
|
60
|
+
files_modified TEXT, -- JSON array of file paths written/edited
|
|
61
|
+
symbols_searched TEXT, -- JSON array of symbols searched
|
|
62
|
+
decisions TEXT, -- JSON: key decisions/conclusions made
|
|
63
|
+
task_description TEXT -- What the user asked Claude to do
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_accessed ON sessions(last_accessed);
|
|
67
|
+
|
|
68
|
+
-- Session file reads: detailed log of what Claude read and when
|
|
69
|
+
CREATE TABLE IF NOT EXISTS session_reads (
|
|
70
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
71
|
+
session_id TEXT NOT NULL,
|
|
72
|
+
file_path TEXT NOT NULL,
|
|
73
|
+
read_at INTEGER NOT NULL,
|
|
74
|
+
line_start INTEGER,
|
|
75
|
+
line_end INTEGER,
|
|
76
|
+
tool_name TEXT, -- Read, Grep, Glob, codetree_read, etc.
|
|
77
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_session_reads_session ON session_reads(session_id);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_session_reads_file ON session_reads(file_path);
|
|
82
|
+
|
|
83
|
+
-- Session insights: compressed knowledge from each session
|
|
84
|
+
CREATE TABLE IF NOT EXISTS session_insights (
|
|
85
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
86
|
+
session_id TEXT NOT NULL,
|
|
87
|
+
category TEXT NOT NULL, -- 'architecture', 'bug', 'pattern', 'decision', 'dependency'
|
|
88
|
+
content TEXT NOT NULL, -- The actual insight
|
|
89
|
+
file_paths TEXT, -- JSON array of related files
|
|
90
|
+
created_at INTEGER NOT NULL,
|
|
91
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_insights_category ON session_insights(category);
|
|
95
|
+
|
|
96
|
+
-- Compaction snapshots: saved before context compaction
|
|
97
|
+
CREATE TABLE IF NOT EXISTS compaction_snapshots (
|
|
98
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
99
|
+
session_id TEXT NOT NULL,
|
|
100
|
+
created_at INTEGER NOT NULL,
|
|
101
|
+
|
|
102
|
+
-- What Claude was working on
|
|
103
|
+
task_summary TEXT, -- "Fixing auth bug in role resolution"
|
|
104
|
+
|
|
105
|
+
-- Compressed knowledge
|
|
106
|
+
architecture_notes TEXT, -- JSON: key architecture discoveries
|
|
107
|
+
file_summaries TEXT, -- JSON: {path: "summary of what was learned"} for each file read
|
|
108
|
+
decisions TEXT, -- JSON: decisions made during the session
|
|
109
|
+
open_questions TEXT, -- JSON: things Claude was still investigating
|
|
110
|
+
|
|
111
|
+
-- What was read/modified
|
|
112
|
+
files_read TEXT, -- JSON: ordered list of files read with line ranges
|
|
113
|
+
files_modified TEXT, -- JSON: files that were edited
|
|
114
|
+
symbols_discovered TEXT, -- JSON: key symbols/functions found relevant
|
|
115
|
+
grep_patterns TEXT, -- JSON: what was searched for
|
|
116
|
+
|
|
117
|
+
-- Conversation context
|
|
118
|
+
user_requests TEXT, -- JSON: what the user asked for
|
|
119
|
+
current_plan TEXT, -- What Claude was about to do next
|
|
120
|
+
|
|
121
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
CREATE INDEX IF NOT EXISTS idx_compaction_session ON compaction_snapshots(session_id);
|
|
125
|
+
CREATE INDEX IF NOT EXISTS idx_compaction_time ON compaction_snapshots(created_at);
|
|
51
126
|
`;
|
|
52
127
|
export class Database {
|
|
53
128
|
config;
|
|
@@ -330,6 +405,312 @@ export class Database {
|
|
|
330
405
|
stmt.free();
|
|
331
406
|
return results;
|
|
332
407
|
}
|
|
408
|
+
// ─── Session Memory Operations ──────────────────────────────
|
|
409
|
+
createSession(sessionId, taskDescription) {
|
|
410
|
+
if (!this.db)
|
|
411
|
+
throw new Error("Database not initialized");
|
|
412
|
+
const now = Date.now();
|
|
413
|
+
const stmt = this.db.prepare(`INSERT OR REPLACE INTO sessions (id, started_at, last_accessed, task_description, files_read, files_modified, symbols_searched, decisions)
|
|
414
|
+
VALUES (?, ?, ?, ?, '[]', '[]', '[]', '{}')`);
|
|
415
|
+
stmt.run([sessionId, now, now, taskDescription || null]);
|
|
416
|
+
stmt.free();
|
|
417
|
+
this.markDirty();
|
|
418
|
+
}
|
|
419
|
+
updateSessionAccess(sessionId) {
|
|
420
|
+
if (!this.db)
|
|
421
|
+
throw new Error("Database not initialized");
|
|
422
|
+
this.db.run("UPDATE sessions SET last_accessed = ? WHERE id = ?", [Date.now(), sessionId]);
|
|
423
|
+
this.markDirty();
|
|
424
|
+
}
|
|
425
|
+
endSession(sessionId, summary) {
|
|
426
|
+
if (!this.db)
|
|
427
|
+
throw new Error("Database not initialized");
|
|
428
|
+
this.db.run("UPDATE sessions SET ended_at = ?, last_accessed = ?, summary = ? WHERE id = ?", [Date.now(), Date.now(), summary || null, sessionId]);
|
|
429
|
+
this.markDirty();
|
|
430
|
+
}
|
|
431
|
+
logSessionRead(sessionId, filePath, toolName, lineStart, lineEnd) {
|
|
432
|
+
if (!this.db)
|
|
433
|
+
throw new Error("Database not initialized");
|
|
434
|
+
const stmt = this.db.prepare(`INSERT INTO session_reads (session_id, file_path, read_at, line_start, line_end, tool_name)
|
|
435
|
+
VALUES (?, ?, ?, ?, ?, ?)`);
|
|
436
|
+
stmt.run([sessionId, filePath, Date.now(), lineStart || null, lineEnd || null, toolName]);
|
|
437
|
+
stmt.free();
|
|
438
|
+
// Also update the session's files_read JSON array
|
|
439
|
+
const session = this.getSession(sessionId);
|
|
440
|
+
if (session) {
|
|
441
|
+
try {
|
|
442
|
+
const filesRead = JSON.parse(session.files_read || "[]");
|
|
443
|
+
if (!filesRead.includes(filePath)) {
|
|
444
|
+
filesRead.push(filePath);
|
|
445
|
+
this.db.run("UPDATE sessions SET files_read = ? WHERE id = ?", [JSON.stringify(filesRead), sessionId]);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch { }
|
|
449
|
+
}
|
|
450
|
+
this.markDirty();
|
|
451
|
+
}
|
|
452
|
+
logSessionModified(sessionId, filePath) {
|
|
453
|
+
if (!this.db)
|
|
454
|
+
throw new Error("Database not initialized");
|
|
455
|
+
const session = this.getSession(sessionId);
|
|
456
|
+
if (session) {
|
|
457
|
+
try {
|
|
458
|
+
const filesModified = JSON.parse(session.files_modified || "[]");
|
|
459
|
+
if (!filesModified.includes(filePath)) {
|
|
460
|
+
filesModified.push(filePath);
|
|
461
|
+
this.db.run("UPDATE sessions SET files_modified = ? WHERE id = ?", [JSON.stringify(filesModified), sessionId]);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
catch { }
|
|
465
|
+
}
|
|
466
|
+
this.markDirty();
|
|
467
|
+
}
|
|
468
|
+
logSessionSearch(sessionId, symbol) {
|
|
469
|
+
if (!this.db)
|
|
470
|
+
throw new Error("Database not initialized");
|
|
471
|
+
const session = this.getSession(sessionId);
|
|
472
|
+
if (session) {
|
|
473
|
+
try {
|
|
474
|
+
const symbols = JSON.parse(session.symbols_searched || "[]");
|
|
475
|
+
if (!symbols.includes(symbol)) {
|
|
476
|
+
symbols.push(symbol);
|
|
477
|
+
this.db.run("UPDATE sessions SET symbols_searched = ? WHERE id = ?", [JSON.stringify(symbols), sessionId]);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
catch { }
|
|
481
|
+
}
|
|
482
|
+
this.markDirty();
|
|
483
|
+
}
|
|
484
|
+
addSessionInsight(sessionId, category, content, filePaths) {
|
|
485
|
+
if (!this.db)
|
|
486
|
+
throw new Error("Database not initialized");
|
|
487
|
+
const stmt = this.db.prepare(`INSERT INTO session_insights (session_id, category, content, file_paths, created_at)
|
|
488
|
+
VALUES (?, ?, ?, ?, ?)`);
|
|
489
|
+
stmt.run([sessionId, category, content, filePaths ? JSON.stringify(filePaths) : null, Date.now()]);
|
|
490
|
+
stmt.free();
|
|
491
|
+
this.markDirty();
|
|
492
|
+
}
|
|
493
|
+
getSession(sessionId) {
|
|
494
|
+
if (!this.db)
|
|
495
|
+
throw new Error("Database not initialized");
|
|
496
|
+
const stmt = this.db.prepare("SELECT * FROM sessions WHERE id = ?");
|
|
497
|
+
stmt.bind([sessionId]);
|
|
498
|
+
if (stmt.step()) {
|
|
499
|
+
const row = stmt.getAsObject();
|
|
500
|
+
stmt.free();
|
|
501
|
+
return row;
|
|
502
|
+
}
|
|
503
|
+
stmt.free();
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
getRecentSessions(limit = 10) {
|
|
507
|
+
if (!this.db)
|
|
508
|
+
throw new Error("Database not initialized");
|
|
509
|
+
const stmt = this.db.prepare("SELECT * FROM sessions ORDER BY last_accessed DESC LIMIT ?");
|
|
510
|
+
stmt.bind([limit]);
|
|
511
|
+
const results = [];
|
|
512
|
+
while (stmt.step()) {
|
|
513
|
+
results.push(stmt.getAsObject());
|
|
514
|
+
}
|
|
515
|
+
stmt.free();
|
|
516
|
+
return results;
|
|
517
|
+
}
|
|
518
|
+
getSessionReads(sessionId) {
|
|
519
|
+
if (!this.db)
|
|
520
|
+
throw new Error("Database not initialized");
|
|
521
|
+
const stmt = this.db.prepare("SELECT DISTINCT file_path, MIN(read_at) as first_read, MAX(read_at) as last_read, COUNT(*) as read_count FROM session_reads WHERE session_id = ? GROUP BY file_path ORDER BY read_count DESC");
|
|
522
|
+
stmt.bind([sessionId]);
|
|
523
|
+
const results = [];
|
|
524
|
+
while (stmt.step()) {
|
|
525
|
+
results.push(stmt.getAsObject());
|
|
526
|
+
}
|
|
527
|
+
stmt.free();
|
|
528
|
+
return results;
|
|
529
|
+
}
|
|
530
|
+
getSessionInsights(sessionId) {
|
|
531
|
+
if (!this.db)
|
|
532
|
+
throw new Error("Database not initialized");
|
|
533
|
+
const stmt = this.db.prepare("SELECT * FROM session_insights WHERE session_id = ? ORDER BY created_at");
|
|
534
|
+
stmt.bind([sessionId]);
|
|
535
|
+
const results = [];
|
|
536
|
+
while (stmt.step()) {
|
|
537
|
+
results.push(stmt.getAsObject());
|
|
538
|
+
}
|
|
539
|
+
stmt.free();
|
|
540
|
+
return results;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Get all insights across recent sessions — this is what gets injected into new sessions.
|
|
544
|
+
*/
|
|
545
|
+
getAllRecentInsights(maxAgeDays = 5) {
|
|
546
|
+
if (!this.db)
|
|
547
|
+
throw new Error("Database not initialized");
|
|
548
|
+
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
549
|
+
const stmt = this.db.prepare(`SELECT si.*, s.task_description, s.started_at as session_started
|
|
550
|
+
FROM session_insights si
|
|
551
|
+
JOIN sessions s ON si.session_id = s.id
|
|
552
|
+
WHERE s.last_accessed > ?
|
|
553
|
+
ORDER BY si.created_at DESC
|
|
554
|
+
LIMIT 100`);
|
|
555
|
+
stmt.bind([cutoff]);
|
|
556
|
+
const results = [];
|
|
557
|
+
while (stmt.step()) {
|
|
558
|
+
results.push(stmt.getAsObject());
|
|
559
|
+
}
|
|
560
|
+
stmt.free();
|
|
561
|
+
return results;
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Get frequently read files across all recent sessions.
|
|
565
|
+
* These are the "hot" files Claude keeps re-reading.
|
|
566
|
+
*/
|
|
567
|
+
getHotFiles(maxAgeDays = 5, limit = 30) {
|
|
568
|
+
if (!this.db)
|
|
569
|
+
throw new Error("Database not initialized");
|
|
570
|
+
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
571
|
+
const results = this.db.exec(`
|
|
572
|
+
SELECT sr.file_path,
|
|
573
|
+
COUNT(*) as total_reads,
|
|
574
|
+
COUNT(DISTINCT sr.session_id) as sessions
|
|
575
|
+
FROM session_reads sr
|
|
576
|
+
JOIN sessions s ON sr.session_id = s.id
|
|
577
|
+
WHERE s.last_accessed > ${cutoff}
|
|
578
|
+
GROUP BY sr.file_path
|
|
579
|
+
ORDER BY sessions DESC, total_reads DESC
|
|
580
|
+
LIMIT ${limit}
|
|
581
|
+
`);
|
|
582
|
+
if (results.length === 0)
|
|
583
|
+
return [];
|
|
584
|
+
return results[0].values.map((row) => ({
|
|
585
|
+
file_path: row[0],
|
|
586
|
+
total_reads: row[1],
|
|
587
|
+
sessions: row[2],
|
|
588
|
+
}));
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Get files that changed since a given timestamp.
|
|
592
|
+
*/
|
|
593
|
+
getChangedFilesSince(timestamp) {
|
|
594
|
+
if (!this.db)
|
|
595
|
+
throw new Error("Database not initialized");
|
|
596
|
+
const stmt = this.db.prepare("SELECT * FROM files WHERE mtime_ms > ? ORDER BY mtime_ms DESC");
|
|
597
|
+
stmt.bind([timestamp]);
|
|
598
|
+
const results = [];
|
|
599
|
+
while (stmt.step()) {
|
|
600
|
+
results.push(stmt.getAsObject());
|
|
601
|
+
}
|
|
602
|
+
stmt.free();
|
|
603
|
+
return results;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Delete sessions older than maxAgeDays.
|
|
607
|
+
*/
|
|
608
|
+
expireOldSessions(maxAgeDays = 5) {
|
|
609
|
+
if (!this.db)
|
|
610
|
+
throw new Error("Database not initialized");
|
|
611
|
+
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
612
|
+
this.db.run("DELETE FROM session_reads WHERE session_id IN (SELECT id FROM sessions WHERE last_accessed < ?)", [cutoff]);
|
|
613
|
+
this.db.run("DELETE FROM session_insights WHERE session_id IN (SELECT id FROM sessions WHERE last_accessed < ?)", [cutoff]);
|
|
614
|
+
this.db.run("DELETE FROM sessions WHERE last_accessed < ?", [cutoff]);
|
|
615
|
+
const result = this.db.exec("SELECT changes()");
|
|
616
|
+
this.markDirty();
|
|
617
|
+
return result.length > 0 ? result[0].values[0][0] : 0;
|
|
618
|
+
}
|
|
619
|
+
// ─── Compaction Snapshot Operations ─────────────────────────
|
|
620
|
+
saveCompactionSnapshot(snapshot) {
|
|
621
|
+
if (!this.db)
|
|
622
|
+
throw new Error("Database not initialized");
|
|
623
|
+
const stmt = this.db.prepare(`INSERT INTO compaction_snapshots
|
|
624
|
+
(session_id, created_at, task_summary, architecture_notes, file_summaries,
|
|
625
|
+
decisions, open_questions, files_read, files_modified, symbols_discovered,
|
|
626
|
+
grep_patterns, user_requests, current_plan)
|
|
627
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
628
|
+
stmt.run([
|
|
629
|
+
snapshot.sessionId,
|
|
630
|
+
Date.now(),
|
|
631
|
+
snapshot.taskSummary || null,
|
|
632
|
+
JSON.stringify(snapshot.architectureNotes || []),
|
|
633
|
+
JSON.stringify(snapshot.fileSummaries || {}),
|
|
634
|
+
JSON.stringify(snapshot.decisions || []),
|
|
635
|
+
JSON.stringify(snapshot.openQuestions || []),
|
|
636
|
+
JSON.stringify(snapshot.filesRead || []),
|
|
637
|
+
JSON.stringify(snapshot.filesModified || []),
|
|
638
|
+
JSON.stringify(snapshot.symbolsDiscovered || []),
|
|
639
|
+
JSON.stringify(snapshot.grepPatterns || []),
|
|
640
|
+
JSON.stringify(snapshot.userRequests || []),
|
|
641
|
+
snapshot.currentPlan || null,
|
|
642
|
+
]);
|
|
643
|
+
stmt.free();
|
|
644
|
+
this.markDirty();
|
|
645
|
+
this.persistToDisk(); // Persist immediately — compaction is critical
|
|
646
|
+
// Return the snapshot ID
|
|
647
|
+
const result = this.db.exec("SELECT last_insert_rowid()");
|
|
648
|
+
return result.length > 0 ? result[0].values[0][0] : 0;
|
|
649
|
+
}
|
|
650
|
+
getLatestCompactionSnapshot(sessionId) {
|
|
651
|
+
if (!this.db)
|
|
652
|
+
throw new Error("Database not initialized");
|
|
653
|
+
const stmt = this.db.prepare("SELECT * FROM compaction_snapshots WHERE session_id = ? ORDER BY created_at DESC LIMIT 1");
|
|
654
|
+
stmt.bind([sessionId]);
|
|
655
|
+
if (stmt.step()) {
|
|
656
|
+
const row = stmt.getAsObject();
|
|
657
|
+
stmt.free();
|
|
658
|
+
return row;
|
|
659
|
+
}
|
|
660
|
+
stmt.free();
|
|
661
|
+
return null;
|
|
662
|
+
}
|
|
663
|
+
getAllCompactionSnapshots(sessionId) {
|
|
664
|
+
if (!this.db)
|
|
665
|
+
throw new Error("Database not initialized");
|
|
666
|
+
const stmt = this.db.prepare("SELECT * FROM compaction_snapshots WHERE session_id = ? ORDER BY created_at DESC");
|
|
667
|
+
stmt.bind([sessionId]);
|
|
668
|
+
const results = [];
|
|
669
|
+
while (stmt.step()) {
|
|
670
|
+
results.push(stmt.getAsObject());
|
|
671
|
+
}
|
|
672
|
+
stmt.free();
|
|
673
|
+
return results;
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* Build a compaction snapshot from session activity data.
|
|
677
|
+
* Pulls everything we know from session_reads, session_insights, and file index.
|
|
678
|
+
*/
|
|
679
|
+
buildSnapshotFromSession(sessionId) {
|
|
680
|
+
if (!this.db)
|
|
681
|
+
throw new Error("Database not initialized");
|
|
682
|
+
// Get all files read in this session, ordered by frequency
|
|
683
|
+
const reads = this.getSessionReads(sessionId);
|
|
684
|
+
// Get session metadata
|
|
685
|
+
const session = this.getSession(sessionId);
|
|
686
|
+
const filesModified = session ? JSON.parse(session.files_modified || "[]") : [];
|
|
687
|
+
const symbolsSearched = session ? JSON.parse(session.symbols_searched || "[]") : [];
|
|
688
|
+
// Build file summaries from index (symbols per file)
|
|
689
|
+
const fileSummaries = {};
|
|
690
|
+
for (const read of reads.slice(0, 40)) { // Top 40 most-read files
|
|
691
|
+
const filePath = read.file_path;
|
|
692
|
+
const symbols = this.getSymbolsForFile(filePath);
|
|
693
|
+
const fileRecord = this.getFile(filePath);
|
|
694
|
+
if (symbols.length > 0) {
|
|
695
|
+
const exported = symbols.filter((s) => s.exported);
|
|
696
|
+
const summary = exported.map((s) => `${s.kind} ${s.name}${s.signature ? `: ${s.signature.slice(0, 80)}` : ""}`).join("; ");
|
|
697
|
+
fileSummaries[filePath] = `${fileRecord?.language || "unknown"}, ${fileRecord?.line_count || "?"} lines. Exports: ${summary || "none"}`;
|
|
698
|
+
}
|
|
699
|
+
else if (fileRecord) {
|
|
700
|
+
fileSummaries[filePath] = `${fileRecord.language || "unknown"}, ${fileRecord.line_count} lines`;
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
return {
|
|
704
|
+
filesRead: reads.map((r) => ({
|
|
705
|
+
path: r.file_path,
|
|
706
|
+
readCount: r.read_count,
|
|
707
|
+
})),
|
|
708
|
+
filesModified,
|
|
709
|
+
symbolsDiscovered: symbolsSearched,
|
|
710
|
+
grepPatterns: symbolsSearched, // reuse — greps are logged as symbol searches
|
|
711
|
+
fileSummaries,
|
|
712
|
+
};
|
|
713
|
+
}
|
|
333
714
|
// ─── Lifecycle ─────────────────────────────────────────────────
|
|
334
715
|
close() {
|
|
335
716
|
if (this.saveTimer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Database } from "./database.js";
|
|
2
|
+
import type { CodeTreeConfig } from "../config.js";
|
|
3
|
+
export interface DiskStats {
|
|
4
|
+
totalBytes: number;
|
|
5
|
+
freeBytes: number;
|
|
6
|
+
freePercent: number;
|
|
7
|
+
cacheBytes: number;
|
|
8
|
+
cacheMB: number;
|
|
9
|
+
maxAllowedCacheMB: number;
|
|
10
|
+
warning: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare class DiskManager {
|
|
13
|
+
private db;
|
|
14
|
+
private config;
|
|
15
|
+
private timer;
|
|
16
|
+
private _lastStats;
|
|
17
|
+
constructor(config: CodeTreeConfig, db: Database);
|
|
18
|
+
start(): void;
|
|
19
|
+
stop(): void;
|
|
20
|
+
refresh(): void;
|
|
21
|
+
getStats(): DiskStats;
|
|
22
|
+
private computeStats;
|
|
23
|
+
private getCacheSize;
|
|
24
|
+
getDynamicMaxCacheMB(): number;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=disk-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disk-manager.d.ts","sourceRoot":"","sources":["../../src/storage/disk-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAA0B;gBAEhC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ;IAKhD,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAOZ,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,SAAS;IAKrB,OAAO,CAAC,YAAY;IAoDpB,OAAO,CAAC,YAAY;IAWpB,oBAAoB,IAAI,MAAM;CAG/B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { statfsSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
const MIN_FREE_PERCENT = 5;
|
|
4
|
+
const MAX_CACHE_PERCENT = 20;
|
|
5
|
+
const CHECK_INTERVAL_MS = 60_000;
|
|
6
|
+
export class DiskManager {
|
|
7
|
+
db;
|
|
8
|
+
config;
|
|
9
|
+
timer = null;
|
|
10
|
+
_lastStats = null;
|
|
11
|
+
constructor(config, db) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.db = db;
|
|
14
|
+
}
|
|
15
|
+
start() {
|
|
16
|
+
if (this.timer)
|
|
17
|
+
return;
|
|
18
|
+
this.refresh();
|
|
19
|
+
this.timer = setInterval(() => this.refresh(), CHECK_INTERVAL_MS);
|
|
20
|
+
}
|
|
21
|
+
stop() {
|
|
22
|
+
if (this.timer) {
|
|
23
|
+
clearInterval(this.timer);
|
|
24
|
+
this.timer = null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
refresh() {
|
|
28
|
+
this._lastStats = this.computeStats();
|
|
29
|
+
}
|
|
30
|
+
getStats() {
|
|
31
|
+
if (!this._lastStats)
|
|
32
|
+
this.refresh();
|
|
33
|
+
return this._lastStats;
|
|
34
|
+
}
|
|
35
|
+
computeStats() {
|
|
36
|
+
const dbPath = this.config.cache.dbPath;
|
|
37
|
+
let totalBytes = 0;
|
|
38
|
+
let freeBytes = 0;
|
|
39
|
+
try {
|
|
40
|
+
const stats = statfsSync(dirname(dbPath));
|
|
41
|
+
totalBytes = stats.bsize * stats.blocks;
|
|
42
|
+
freeBytes = stats.bsize * stats.bavail;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return {
|
|
46
|
+
totalBytes: 0,
|
|
47
|
+
freeBytes: 0,
|
|
48
|
+
freePercent: 100,
|
|
49
|
+
cacheBytes: 0,
|
|
50
|
+
cacheMB: 0,
|
|
51
|
+
maxAllowedCacheMB: this.config.cache.contentCacheMaxMB,
|
|
52
|
+
warning: null,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const freePercent = totalBytes > 0 ? (freeBytes / totalBytes) * 100 : 100;
|
|
56
|
+
const cacheBytes = this.getCacheSize();
|
|
57
|
+
const cacheMB = Math.round(cacheBytes / (1024 * 1024));
|
|
58
|
+
// Dynamic max: 20% of free space, but respect config limit
|
|
59
|
+
const availableForCache = Math.max(0, freeBytes - totalBytes * (MIN_FREE_PERCENT / 100));
|
|
60
|
+
const dynamicMaxBytes = availableForCache * (MAX_CACHE_PERCENT / 100);
|
|
61
|
+
const configMaxBytes = this.config.cache.contentCacheMaxMB * 1024 * 1024;
|
|
62
|
+
const maxAllowedCacheMB = Math.max(32, Math.floor(Math.min(dynamicMaxBytes, configMaxBytes) / (1024 * 1024)));
|
|
63
|
+
// Warning logic — never auto-delete, just warn
|
|
64
|
+
let warning = null;
|
|
65
|
+
if (freePercent < MIN_FREE_PERCENT) {
|
|
66
|
+
warning = `Disk space critically low (${freePercent.toFixed(1)}% free). CodeTree cache is using ${cacheMB}MB. Consider clearing the cache from the CodeTree dashboard.`;
|
|
67
|
+
}
|
|
68
|
+
else if (freePercent < MIN_FREE_PERCENT + 3) {
|
|
69
|
+
warning = `Disk space low (${freePercent.toFixed(1)}% free). CodeTree cache: ${cacheMB}MB.`;
|
|
70
|
+
}
|
|
71
|
+
else if (cacheMB > maxAllowedCacheMB) {
|
|
72
|
+
warning = `Cache (${cacheMB}MB) exceeds recommended limit (${maxAllowedCacheMB}MB). Consider clearing old sessions.`;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
totalBytes,
|
|
76
|
+
freeBytes,
|
|
77
|
+
freePercent,
|
|
78
|
+
cacheBytes,
|
|
79
|
+
cacheMB,
|
|
80
|
+
maxAllowedCacheMB,
|
|
81
|
+
warning,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
getCacheSize() {
|
|
85
|
+
try {
|
|
86
|
+
const files = this.db.getAllFiles();
|
|
87
|
+
let total = 0;
|
|
88
|
+
for (const f of files)
|
|
89
|
+
total += f.size;
|
|
90
|
+
return total;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
getDynamicMaxCacheMB() {
|
|
97
|
+
return this.getStats().maxAllowedCacheMB;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=disk-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disk-manager.js","sourceRoot":"","sources":["../../src/storage/disk-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED