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.
Files changed (40) hide show
  1. package/LICENSE +21 -0
  2. package/dist/hook/post-compact.d.ts +18 -0
  3. package/dist/hook/post-compact.d.ts.map +1 -0
  4. package/dist/hook/post-compact.js +192 -0
  5. package/dist/hook/post-compact.js.map +1 -0
  6. package/dist/hook/post-tool-use.d.ts +11 -0
  7. package/dist/hook/post-tool-use.d.ts.map +1 -0
  8. package/dist/hook/post-tool-use.js +85 -0
  9. package/dist/hook/post-tool-use.js.map +1 -0
  10. package/dist/hook/pre-compact.d.ts +18 -0
  11. package/dist/hook/pre-compact.d.ts.map +1 -0
  12. package/dist/hook/pre-compact.js +190 -0
  13. package/dist/hook/pre-compact.js.map +1 -0
  14. package/dist/hook/session-start.d.ts +14 -0
  15. package/dist/hook/session-start.d.ts.map +1 -0
  16. package/dist/hook/session-start.js +136 -0
  17. package/dist/hook/session-start.js.map +1 -0
  18. package/dist/server/ipc.d.ts +11 -0
  19. package/dist/server/ipc.d.ts.map +1 -1
  20. package/dist/server/ipc.js +233 -0
  21. package/dist/server/ipc.js.map +1 -1
  22. package/dist/server/mcp-server.js +3 -1
  23. package/dist/server/mcp-server.js.map +1 -1
  24. package/dist/server/tools/codetree-memory.d.ts +121 -0
  25. package/dist/server/tools/codetree-memory.d.ts.map +1 -0
  26. package/dist/server/tools/codetree-memory.js +129 -0
  27. package/dist/server/tools/codetree-memory.js.map +1 -0
  28. package/dist/setup/install.d.ts +1 -1
  29. package/dist/setup/install.d.ts.map +1 -1
  30. package/dist/setup/install.js +76 -3
  31. package/dist/setup/install.js.map +1 -1
  32. package/dist/storage/database.d.ts +59 -0
  33. package/dist/storage/database.d.ts.map +1 -1
  34. package/dist/storage/database.js +381 -0
  35. package/dist/storage/database.js.map +1 -1
  36. package/dist/storage/disk-manager.d.ts +26 -0
  37. package/dist/storage/disk-manager.d.ts.map +1 -0
  38. package/dist/storage/disk-manager.js +100 -0
  39. package/dist/storage/disk-manager.js.map +1 -0
  40. package/package.json +1 -1
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2HlB,CAAC;AAEF,MAAM,OAAO,QAAQ;IAMC;IALZ,EAAE,GAAyB,IAAI,CAAC;IAChC,MAAM,CAAS;IACf,SAAS,GAAyC,IAAI,CAAC;IACvD,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,4BAA4B;QAC5B,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QACnD,MAAM,GAAG,GAAgB,MAAM,SAAS,EAAE,CAAC;QAE3C,0BAA0B;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,uCAAuC;QACvC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEtC,gBAAgB;QAChB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAExB,qBAAqB;QACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,kEAAkE;IAElE,UAAU,CAAC,IAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;oCAC8B,CAC/B,CAAC;QACF,IAAI,CAAC,GAAG,CAAC;YACP,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ;YAC9C,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAA2B,CAAC;YACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAW;YACtB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAW;YACtB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAW;YACtB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAW;YAC1B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAkB;YACjC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAW;YAC5B,UAAU,EAAE,GAAG,CAAC,CAAC,CAAW;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,kEAAkE;IAElE,aAAa,CAAC,QAAgB,EAAE,OAAuB;QACrD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,mCAAmC;QACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yCAAyC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;oCAC8B,CAC/B,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC;gBACP,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACjC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS;gBAC3C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACrB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,IAAa,EAAE,KAAK,GAAG,EAAE;QACpD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,GAAG,GAAG,yCAAyC,CAAC;QACpD,MAAM,MAAM,GAAc,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,IAAI,eAAe,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,CAAC,EAAY;gBACpB,SAAS,EAAE,GAAG,CAAC,SAAmB;gBAClC,IAAI,EAAE,GAAG,CAAC,IAAc;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAc;gBACxB,UAAU,EAAE,GAAG,CAAC,UAA2B;gBAC3C,QAAQ,EAAE,GAAG,CAAC,QAAyB;gBACvC,SAAS,EAAE,GAAG,CAAC,SAA0B;gBACzC,QAAQ,EAAG,GAAG,CAAC,QAAmB,KAAK,CAAC;aACzC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,QAAgB;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEtB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,CAAC,EAAY;gBACpB,SAAS,EAAE,GAAG,CAAC,SAAmB;gBAClC,IAAI,EAAE,GAAG,CAAC,IAAc;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAc;gBACxB,UAAU,EAAE,GAAG,CAAC,UAA2B;gBAC3C,QAAQ,EAAE,GAAG,CAAC,QAAyB;gBACvC,SAAS,EAAE,GAAG,CAAC,SAA0B;gBACzC,QAAQ,EAAG,GAAG,CAAC,QAAmB,KAAK,CAAC;aACzC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kEAAkE;IAElE,kBAAkB,CAAC,UAAkB,EAAE,IAAwB;QAC7D,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gDAAgD,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAE5E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;wBACkB,CACnB,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,sDAAsD,CACvD,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAExB,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,WAAW,EAAE,GAAG,CAAC,WAAqB;gBACtC,WAAW,EAAE,GAAG,CAAC,WAAqB;gBACtC,eAAe,EAAE,GAAG,CAAC,eAAgC;aACtD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kEAAkE;IAElE,YAAY,CAAC,IAAY,EAAE,OAAe;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,oFAAoF,CACrF,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;QACjF,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,qBAAqB;YACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yDAAyD,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3F,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAe,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,SAAiB;QACjC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CACzB,yDAAyD,CAC1D,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,MAAM,UAAU,GAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,IAAI,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;QAEzC,IAAI,UAAU,IAAI,QAAQ;YAAE,OAAO;QAEnC,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;;KAYX,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,kEAAkE;IAElE,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QAE5B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAA2B,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+DAA+D;IAE/D,aAAa,CAAC,SAAiB,EAAE,eAAwB;QACvD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;mDAC6C,CAC9C,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,mBAAmB,CAAC,SAAiB;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oDAAoD,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,OAAgB;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,+EAA+E,EAC/E,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,SAAS,CAAC,CACrD,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAkB,EAAE,OAAgB;QACxG,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;iCAC2B,CAC5B,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,kDAAkD;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;gBACnE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iDAAiD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBACzG,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;QACpD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,aAAa,GAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;gBAC3E,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qDAAqD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBACjH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,SAAiB,EAAE,MAAc;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,GAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;gBACvE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,uDAAuD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,iBAAiB,CAAC,SAAiB,EAAE,QAAgB,EAAE,OAAe,EAAE,SAAoB;QAC1F,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;8BACwB,CACzB,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,KAAK,GAAG,EAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,4DAA4D,CAC7D,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnB,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,8LAA8L,CAC/L,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvB,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kBAAkB,CAAC,SAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,yEAAyE,CAC1E,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvB,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,UAAU,GAAG,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;;;;;iBAKW,CACZ,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpB,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;gCAMD,MAAM;;;cAGxB,KAAK;KACd,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAW;YAC3B,WAAW,EAAE,GAAG,CAAC,CAAC,CAAW;YAC7B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAW;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,SAAiB;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,+DAA+D,CAChE,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvB,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAA2B,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAAU,GAAG,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iGAAiG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACzH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oGAAoG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5H,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,8CAA8C,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,+DAA+D;IAE/D,sBAAsB,CAAC,QAatB;QACC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;;;;sDAIgD,CACjD,CAAC;QACF,IAAI,CAAC,GAAG,CAAC;YACP,QAAQ,CAAC,SAAS;YAClB,IAAI,CAAC,GAAG,EAAE;YACV,QAAQ,CAAC,WAAW,IAAI,IAAI;YAC5B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;YAC3C,QAAQ,CAAC,WAAW,IAAI,IAAI;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,+CAA+C;QAErE,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,2BAA2B,CAAC,SAAiB;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,0FAA0F,CAC3F,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAyB,CAAC,SAAiB;QACzC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,kFAAkF,CACnF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvB,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,SAAiB;QAOxC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE1D,2DAA2D;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE9C,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAa,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,MAAM,eAAe,GAAa,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9F,qDAAqD;QACrD,MAAM,aAAa,GAA2B,EAAE,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,yBAAyB;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CACtC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,EAAE,QAAQ,IAAI,SAAS,KAAK,UAAU,EAAE,UAAU,IAAI,GAAG,oBAAoB,OAAO,IAAI,MAAM,EAAE,CAAC;YAC1I,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,CAAC,QAAQ,IAAI,SAAS,KAAK,UAAU,CAAC,UAAU,QAAQ,CAAC;YAClG,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,CAAC,CAAC,SAAS;gBACjB,SAAS,EAAE,CAAC,CAAC,UAAU;aACxB,CAAC,CAAC;YACH,aAAa;YACb,iBAAiB,EAAE,eAAe;YAClC,YAAY,EAAE,eAAe,EAAE,8CAA8C;YAC7E,aAAa;SACd,CAAC;IACJ,CAAC;IAED,kEAAkE;IAElE,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codetree-claude",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Persistent codebase index and cache for Claude Code — reduces token usage by 60-70% by intercepting and caching file reads",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",