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
@@ -0,0 +1,121 @@
1
+ import type { CodeTreeConfig } from "../../config.js";
2
+ import type { Database } from "../../storage/database.js";
3
+ export interface MemoryParams {
4
+ action: "get_context" | "save_insight" | "get_hot_files" | "get_session_history";
5
+ category?: string;
6
+ content?: string;
7
+ file_paths?: string[];
8
+ session_id?: string;
9
+ }
10
+ export declare function createMemoryTool(config: CodeTreeConfig, db: Database): {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: "object";
15
+ properties: {
16
+ action: {
17
+ type: string;
18
+ enum: string[];
19
+ description: string;
20
+ };
21
+ category: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ content: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ file_paths: {
30
+ type: string;
31
+ items: {
32
+ type: string;
33
+ };
34
+ description: string;
35
+ };
36
+ session_id: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ };
41
+ required: string[];
42
+ };
43
+ handler: (params: MemoryParams) => Promise<{
44
+ recentSessions: {
45
+ id: any;
46
+ started: string;
47
+ task: any;
48
+ summary: any;
49
+ filesRead: any;
50
+ filesModified: any;
51
+ symbolsSearched: any;
52
+ }[];
53
+ hotFiles: {
54
+ path: string;
55
+ reads: number;
56
+ sessions: number;
57
+ }[];
58
+ changedSinceLastSession: {
59
+ path: any;
60
+ language: any;
61
+ lines: any;
62
+ }[];
63
+ insights: {
64
+ category: any;
65
+ content: any;
66
+ files: any;
67
+ session: any;
68
+ }[];
69
+ saved?: undefined;
70
+ category?: undefined;
71
+ content?: undefined;
72
+ sessions?: undefined;
73
+ } | {
74
+ saved: boolean;
75
+ category: string | undefined;
76
+ content: string;
77
+ recentSessions?: undefined;
78
+ hotFiles?: undefined;
79
+ changedSinceLastSession?: undefined;
80
+ insights?: undefined;
81
+ sessions?: undefined;
82
+ } | {
83
+ hotFiles: {
84
+ path: string;
85
+ totalReads: number;
86
+ sessions: number;
87
+ }[];
88
+ recentSessions?: undefined;
89
+ changedSinceLastSession?: undefined;
90
+ insights?: undefined;
91
+ saved?: undefined;
92
+ category?: undefined;
93
+ content?: undefined;
94
+ sessions?: undefined;
95
+ } | {
96
+ sessions: {
97
+ id: any;
98
+ started: string;
99
+ ended: string | null;
100
+ task: any;
101
+ summary: any;
102
+ filesRead: {
103
+ path: any;
104
+ count: any;
105
+ }[];
106
+ filesModified: any;
107
+ insights: {
108
+ category: any;
109
+ content: any;
110
+ }[];
111
+ }[];
112
+ recentSessions?: undefined;
113
+ hotFiles?: undefined;
114
+ changedSinceLastSession?: undefined;
115
+ insights?: undefined;
116
+ saved?: undefined;
117
+ category?: undefined;
118
+ content?: undefined;
119
+ }>;
120
+ };
121
+ //# sourceMappingURL=codetree-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codetree-memory.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,qBAAqB,CAAC;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAsCzC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGvC"}
@@ -0,0 +1,129 @@
1
+ export function createMemoryTool(config, db) {
2
+ return {
3
+ name: "codetree_memory",
4
+ description: "Access and manage session memory across Claude Code conversations. " +
5
+ "Use 'get_context' at the start of a session to recall what you knew from prior sessions. " +
6
+ "Use 'save_insight' to persist important discoveries (architecture patterns, bug causes, key decisions) " +
7
+ "that should survive across sessions. " +
8
+ "Use 'get_hot_files' to see which files are most frequently accessed. " +
9
+ "Use 'get_session_history' to see what happened in recent sessions.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {
13
+ action: {
14
+ type: "string",
15
+ enum: ["get_context", "save_insight", "get_hot_files", "get_session_history"],
16
+ description: "What to do: get_context (recall prior knowledge), save_insight (persist a discovery), get_hot_files (frequent files), get_session_history (recent sessions)",
17
+ },
18
+ category: {
19
+ type: "string",
20
+ description: "For save_insight: category of the insight — architecture, bug, pattern, decision, dependency",
21
+ },
22
+ content: {
23
+ type: "string",
24
+ description: "For save_insight: the insight text to save",
25
+ },
26
+ file_paths: {
27
+ type: "array",
28
+ items: { type: "string" },
29
+ description: "For save_insight: related file paths",
30
+ },
31
+ session_id: {
32
+ type: "string",
33
+ description: "Current session ID (optional, auto-detected from most recent session)",
34
+ },
35
+ },
36
+ required: ["action"],
37
+ },
38
+ handler: async (params) => {
39
+ switch (params.action) {
40
+ case "get_context": {
41
+ // Expire old sessions
42
+ db.expireOldSessions(5);
43
+ const recentSessions = db.getRecentSessions(5);
44
+ const hotFiles = db.getHotFiles(5, 20);
45
+ const recentInsights = db.getAllRecentInsights(5);
46
+ let changedFiles = [];
47
+ if (recentSessions.length > 0) {
48
+ const lastEnd = recentSessions[0].ended_at || recentSessions[0].last_accessed;
49
+ changedFiles = db.getChangedFilesSince(lastEnd);
50
+ }
51
+ return {
52
+ recentSessions: recentSessions.map((s) => ({
53
+ id: s.id,
54
+ started: new Date(s.started_at).toISOString(),
55
+ task: s.task_description,
56
+ summary: s.summary,
57
+ filesRead: JSON.parse(s.files_read || "[]").length,
58
+ filesModified: JSON.parse(s.files_modified || "[]").length,
59
+ symbolsSearched: JSON.parse(s.symbols_searched || "[]"),
60
+ })),
61
+ hotFiles: hotFiles.map((f) => ({
62
+ path: f.file_path,
63
+ reads: f.total_reads,
64
+ sessions: f.sessions,
65
+ })),
66
+ changedSinceLastSession: changedFiles.map((f) => ({
67
+ path: f.path,
68
+ language: f.language,
69
+ lines: f.line_count,
70
+ })),
71
+ insights: recentInsights.map((i) => ({
72
+ category: i.category,
73
+ content: i.content,
74
+ files: i.file_paths ? JSON.parse(i.file_paths) : [],
75
+ session: i.task_description,
76
+ })),
77
+ };
78
+ }
79
+ case "save_insight": {
80
+ if (!params.content) {
81
+ throw new Error("content is required for save_insight");
82
+ }
83
+ const sessionId = params.session_id || getLatestSessionId(db);
84
+ if (!sessionId) {
85
+ throw new Error("No active session found");
86
+ }
87
+ db.addSessionInsight(sessionId, params.category || "general", params.content, params.file_paths);
88
+ return { saved: true, category: params.category, content: params.content };
89
+ }
90
+ case "get_hot_files": {
91
+ const hotFiles = db.getHotFiles(5, 30);
92
+ return {
93
+ hotFiles: hotFiles.map((f) => ({
94
+ path: f.file_path,
95
+ totalReads: f.total_reads,
96
+ sessions: f.sessions,
97
+ })),
98
+ };
99
+ }
100
+ case "get_session_history": {
101
+ const sessions = db.getRecentSessions(10);
102
+ return {
103
+ sessions: sessions.map((s) => {
104
+ const reads = db.getSessionReads(s.id);
105
+ const insights = db.getSessionInsights(s.id);
106
+ return {
107
+ id: s.id,
108
+ started: new Date(s.started_at).toISOString(),
109
+ ended: s.ended_at ? new Date(s.ended_at).toISOString() : null,
110
+ task: s.task_description,
111
+ summary: s.summary,
112
+ filesRead: reads.map((r) => ({ path: r.file_path, count: r.read_count })),
113
+ filesModified: JSON.parse(s.files_modified || "[]"),
114
+ insights: insights.map((i) => ({ category: i.category, content: i.content })),
115
+ };
116
+ }),
117
+ };
118
+ }
119
+ default:
120
+ throw new Error(`Unknown action: ${params.action}`);
121
+ }
122
+ },
123
+ };
124
+ }
125
+ function getLatestSessionId(db) {
126
+ const sessions = db.getRecentSessions(1);
127
+ return sessions.length > 0 ? sessions[0].id : null;
128
+ }
129
+ //# sourceMappingURL=codetree-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codetree-memory.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-memory.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Register CodeTree hook in Claude Code settings.
2
+ * Register all CodeTree hooks in Claude Code settings.
3
3
  */
4
4
  export declare function installHook(projectRoot: string, hookScriptPath: string): {
5
5
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"AAiCA;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8C9G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiCrH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiC3F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAYzD"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"AAiCA;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA6H9G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmCrH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiC3F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAYzD"}
@@ -4,9 +4,14 @@ import { fileURLToPath } from "node:url";
4
4
  const __filename = fileURLToPath(import.meta.url);
5
5
  const __dirname = dirname(__filename);
6
6
  /**
7
- * Register CodeTree hook in Claude Code settings.
7
+ * Register all CodeTree hooks in Claude Code settings.
8
8
  */
9
9
  export function installHook(projectRoot, hookScriptPath) {
10
+ // hookScriptPath points to pre-tool-use.js
11
+ // Derive other hook paths from the same directory
12
+ const hookDir = dirname(hookScriptPath);
13
+ const postToolUseScript = join(hookDir, "post-tool-use.js");
14
+ const sessionStartScript = join(hookDir, "session-start.js");
10
15
  // Find or create .claude/settings.json
11
16
  const claudeDir = join(projectRoot, ".claude");
12
17
  const settingsPath = join(claudeDir, "settings.json");
@@ -43,6 +48,72 @@ export function installHook(projectRoot, hookScriptPath) {
43
48
  },
44
49
  ],
45
50
  });
51
+ // Add PostToolUse hook for session capture
52
+ if (!settings.hooks.PostToolUse)
53
+ settings.hooks.PostToolUse = [];
54
+ const existingPostHook = settings.hooks.PostToolUse.find((h) => h.hooks?.some((hook) => hook.command?.includes("codetree")));
55
+ if (!existingPostHook) {
56
+ const normalizedPostPath = postToolUseScript.replace(/\\/g, "/");
57
+ settings.hooks.PostToolUse.push({
58
+ matcher: "Read|Grep|Glob|Edit|Write|codetree_read|codetree_search",
59
+ hooks: [
60
+ {
61
+ type: "command",
62
+ command: `node "${normalizedPostPath}"`,
63
+ },
64
+ ],
65
+ });
66
+ }
67
+ // Add SessionStart hook for context injection
68
+ if (!settings.hooks.SessionStart)
69
+ settings.hooks.SessionStart = [];
70
+ const existingSessionHook = settings.hooks.SessionStart.find((h) => h.hooks?.some((hook) => hook.command?.includes("codetree")));
71
+ if (!existingSessionHook) {
72
+ const normalizedSessionPath = sessionStartScript.replace(/\\/g, "/");
73
+ settings.hooks.SessionStart.push({
74
+ matcher: "",
75
+ hooks: [
76
+ {
77
+ type: "command",
78
+ command: `node "${normalizedSessionPath}"`,
79
+ },
80
+ ],
81
+ });
82
+ }
83
+ // Add PreCompact hook for saving context before compaction
84
+ const preCompactScript = join(hookDir, "pre-compact.js");
85
+ if (!settings.hooks.PreCompact)
86
+ settings.hooks.PreCompact = [];
87
+ const existingPreCompact = settings.hooks.PreCompact.find((h) => h.hooks?.some((hook) => hook.command?.includes("codetree")));
88
+ if (!existingPreCompact) {
89
+ const normalizedPreCompact = preCompactScript.replace(/\\/g, "/");
90
+ settings.hooks.PreCompact.push({
91
+ matcher: "",
92
+ hooks: [
93
+ {
94
+ type: "command",
95
+ command: `node "${normalizedPreCompact}"`,
96
+ },
97
+ ],
98
+ });
99
+ }
100
+ // Add PostCompact hook for restoring context after compaction
101
+ const postCompactScript = join(hookDir, "post-compact.js");
102
+ if (!settings.hooks.PostCompact)
103
+ settings.hooks.PostCompact = [];
104
+ const existingPostCompact = settings.hooks.PostCompact.find((h) => h.hooks?.some((hook) => hook.command?.includes("codetree")));
105
+ if (!existingPostCompact) {
106
+ const normalizedPostCompact = postCompactScript.replace(/\\/g, "/");
107
+ settings.hooks.PostCompact.push({
108
+ matcher: "",
109
+ hooks: [
110
+ {
111
+ type: "command",
112
+ command: `node "${normalizedPostCompact}"`,
113
+ },
114
+ ],
115
+ });
116
+ }
46
117
  writeFileSync(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
47
118
  return { success: true, message: `Hook registered in ${settingsPath}` };
48
119
  }
@@ -67,13 +138,15 @@ export function installMcpServer(projectRoot, serverScriptPath) {
67
138
  if (config.mcpServers.codetree) {
68
139
  return { success: true, message: "MCP server already registered" };
69
140
  }
141
+ // Normalize all paths to forward slashes for cross-platform compatibility
70
142
  const normalizedPath = serverScriptPath.replace(/\\/g, "/");
143
+ const normalizedRoot = projectRoot.replace(/\\/g, "/");
71
144
  config.mcpServers.codetree = {
72
145
  command: "node",
73
146
  args: [normalizedPath],
74
- cwd: projectRoot,
147
+ cwd: normalizedRoot,
75
148
  env: {
76
- CODETREE_PROJECT_ROOT: projectRoot,
149
+ CODETREE_PROJECT_ROOT: normalizedRoot,
77
150
  },
78
151
  };
79
152
  writeFileSync(mcpConfigPath, JSON.stringify(config, null, 2), "utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AA2BtC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,cAAsB;IACrE,2CAA2C;IAC3C,kDAAkD;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC7D,uCAAuC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEtD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,WAAW;IACX,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU;QAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;IAE/D,+BAA+B;IAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAC5D,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IAC/D,CAAC;IAED,sCAAsC;IACtC,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE1D,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7B,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,SAAS,cAAc,GAAG;aACpC;SACF;KACF,CAAC,CAAC;IAEH,2CAA2C;IAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW;QAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;IACjE,MAAM,gBAAgB,GAAI,QAAQ,CAAC,KAAK,CAAC,WAAqB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC7E,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChE,QAAQ,CAAC,KAAK,CAAC,WAAqB,CAAC,IAAI,CAAC;YACzC,OAAO,EAAE,yDAAyD;YAClE,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,SAAS,kBAAkB,GAAG;iBACxC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY;QAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;IACnE,MAAM,mBAAmB,GAAI,QAAQ,CAAC,KAAK,CAAC,YAAsB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CACjF,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACpE,QAAQ,CAAC,KAAK,CAAC,YAAsB,CAAC,IAAI,CAAC;YAC1C,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,SAAS,qBAAqB,GAAG;iBAC3C;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU;QAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;IAC/D,MAAM,kBAAkB,GAAI,QAAQ,CAAC,KAAK,CAAC,UAAoB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC9E,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjE,QAAQ,CAAC,KAAK,CAAC,UAAoB,CAAC,IAAI,CAAC;YACxC,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,SAAS,oBAAoB,GAAG;iBAC1C;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,8DAA8D;IAC9D,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW;QAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;IACjE,MAAM,mBAAmB,GAAI,QAAQ,CAAC,KAAK,CAAC,WAAqB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAChF,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,QAAQ,CAAC,KAAK,CAAC,WAAqB,CAAC,IAAI,CAAC;YACzC,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,SAAS,qBAAqB,GAAG;iBAC3C;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,YAAY,EAAE,EAAE,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,gBAAwB;IAC5E,yDAAyD;IACzD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAErD,IAAI,MAAM,GAAc,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IAE/C,8BAA8B;IAC9B,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACrE,CAAC;IAED,0EAA0E;IAC1E,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEvD,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG;QAC3B,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,cAAc,CAAC;QACtB,GAAG,EAAE,cAAc;QACnB,GAAG,EAAE;YACH,qBAAqB,EAAE,cAAc;SACtC;KACF,CAAC;IAEF,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,aAAa,EAAE,EAAE,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,0BAA0B,CAAC,CAAC;IAClF,IAAI,aAAqB,CAAC;IAE1B,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,aAAa,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,kBAAkB;QAClB,aAAa,GAAG,IAAI,CAAC,SAAS,CAC5B;YACE,WAAW,EAAE,GAAG;YAChB,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC;YAC/F,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,OAAO;YACpB,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,GAAG,EAAE;YACnF,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;YACnC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE;YAC5D,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;YACrH,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,sBAAsB,EAAE;SAChE,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,kCAAkC,CAAC;QAC9C,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -47,6 +47,65 @@ export declare class Database {
47
47
  getCachedContent(path: string): Buffer | null;
48
48
  evictContentCache(maxSizeMB: number): void;
49
49
  searchFiles(pattern: string): FileRecord[];
50
+ createSession(sessionId: string, taskDescription?: string): void;
51
+ updateSessionAccess(sessionId: string): void;
52
+ endSession(sessionId: string, summary?: string): void;
53
+ logSessionRead(sessionId: string, filePath: string, toolName: string, lineStart?: number, lineEnd?: number): void;
54
+ logSessionModified(sessionId: string, filePath: string): void;
55
+ logSessionSearch(sessionId: string, symbol: string): void;
56
+ addSessionInsight(sessionId: string, category: string, content: string, filePaths?: string[]): void;
57
+ getSession(sessionId: string): any | null;
58
+ getRecentSessions(limit?: number): any[];
59
+ getSessionReads(sessionId: string): any[];
60
+ getSessionInsights(sessionId: string): any[];
61
+ /**
62
+ * Get all insights across recent sessions — this is what gets injected into new sessions.
63
+ */
64
+ getAllRecentInsights(maxAgeDays?: number): any[];
65
+ /**
66
+ * Get frequently read files across all recent sessions.
67
+ * These are the "hot" files Claude keeps re-reading.
68
+ */
69
+ getHotFiles(maxAgeDays?: number, limit?: number): Array<{
70
+ file_path: string;
71
+ total_reads: number;
72
+ sessions: number;
73
+ }>;
74
+ /**
75
+ * Get files that changed since a given timestamp.
76
+ */
77
+ getChangedFilesSince(timestamp: number): FileRecord[];
78
+ /**
79
+ * Delete sessions older than maxAgeDays.
80
+ */
81
+ expireOldSessions(maxAgeDays?: number): number;
82
+ saveCompactionSnapshot(snapshot: {
83
+ sessionId: string;
84
+ taskSummary?: string;
85
+ architectureNotes?: any[];
86
+ fileSummaries?: Record<string, string>;
87
+ decisions?: string[];
88
+ openQuestions?: string[];
89
+ filesRead?: any[];
90
+ filesModified?: string[];
91
+ symbolsDiscovered?: string[];
92
+ grepPatterns?: string[];
93
+ userRequests?: string[];
94
+ currentPlan?: string;
95
+ }): number;
96
+ getLatestCompactionSnapshot(sessionId: string): any | null;
97
+ getAllCompactionSnapshots(sessionId: string): any[];
98
+ /**
99
+ * Build a compaction snapshot from session activity data.
100
+ * Pulls everything we know from session_reads, session_insights, and file index.
101
+ */
102
+ buildSnapshotFromSession(sessionId: string): {
103
+ filesRead: any[];
104
+ filesModified: string[];
105
+ symbolsDiscovered: string[];
106
+ grepPatterns: string[];
107
+ fileSummaries: Record<string, string>;
108
+ };
50
109
  close(): void;
51
110
  }
52
111
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAwBnD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAoDD,qBAAa,QAAQ;IAMP,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,KAAK,CAAS;gBAEF,MAAM,EAAE,cAAc;IAIpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,OAAO,CAAC,SAAS;IAOjB,aAAa,IAAI,IAAI;IAiBrB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAclC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAaxC,WAAW,IAAI,UAAU,EAAE;IAe3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,YAAY,IAAI,MAAM;IAQtB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;IAsB9D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,EAAE;IA+BvE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAyBnD,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAiBtE,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAsBtD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAUjD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAe7C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAgC1C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAgB1C,KAAK,IAAI,IAAI;CAWd"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}